From 92f815ceebd21be408b169fe4d8f37d4252d4ec1 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 25 Jul 2023 14:30:22 -0400 Subject: [PATCH 001/171] bulk update to class names, async iterator paging, changelog --- CHANGELOG.md | 24 +++++ package.json | 2 +- packages/graph/attachments/types.ts | 6 +- packages/graph/behaviors/paged.ts | 55 +----------- packages/graph/behaviors/spfx.ts | 17 ++++ packages/graph/bookings/funcs.ts | 6 +- packages/graph/bookings/types.ts | 30 +++---- packages/graph/calendars/funcs.ts | 14 +-- packages/graph/calendars/types.ts | 10 +-- packages/graph/calendars/users.ts | 6 +- packages/graph/cloud-communications/types.ts | 6 +- packages/graph/columns/types.ts | 6 +- packages/graph/contacts/types.ts | 10 +-- packages/graph/content-types/types.ts | 6 +- packages/graph/conversations/types.ts | 18 ++-- packages/graph/directory-objects/types.ts | 6 +- packages/graph/graphqueryable.ts | 69 ++++++++++---- packages/graph/index.ts | 10 +-- packages/graph/insights/types.ts | 20 ++--- packages/graph/invitations/types.ts | 4 +- packages/graph/lists/types.ts | 6 +- packages/graph/members/types.ts | 6 +- packages/graph/messages/types.ts | 12 +-- packages/graph/onedrive/types.ts | 62 ++++++------- packages/graph/onenote/types.ts | 22 ++--- packages/graph/outlook/types.ts | 8 +- packages/graph/photos/types.ts | 4 +- packages/graph/planner/types.ts | 20 ++--- packages/graph/search/types.ts | 4 +- packages/graph/shares/types.ts | 6 +- packages/graph/sites/types.ts | 6 +- packages/graph/subscriptions/types.ts | 6 +- packages/graph/teams/types.ts | 24 ++--- packages/sp/behaviors/spfx.ts | 17 ++++ packages/sp/items/get-all.ts | 52 ----------- packages/sp/items/index.ts | 1 - packages/sp/items/types.ts | 94 +++++++++++--------- test/graph/paging.ts | 12 +-- 38 files changed, 344 insertions(+), 343 deletions(-) delete mode 100644 packages/sp/items/get-all.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index dc16dabe2..d4ab9740e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,30 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added +- graph + - explict error thrown if SPFx context is null or undefined when needed + +- sp + - explict error thrown if SPFx context is null or undefined when needed + ### Removed +- graph + - paged method removed from IGraphQueryableCollection + +- sp + - getPaged method removed from _Items/IItems + - PagedItemCollection removed from library + - removed /items/get-all import, unneeded, use async iterator patterns + ### Changed + +- graph + - IGraphQueryableCollection now supports async iterator pattern + - IGraphQueryableCollection count method now returns -1 if the collection does not support counting + - All GraphQueryable*, _GraphQueryable*, and IGraphQueryable* have been renamed to remove "Queryable" (ex: GraphQueryableCollection is now GraphCollection) + +- sp + - _Items and IItems now supports async iterator pattern + + diff --git a/package.json b/package.json index 78b95d438..3a9f5980e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@pnp/monorepo", "private": true, "type": "module", - "version": "3.16.0", + "version": "4.0.0-alpha0", "description": "A JavaScript library for SharePoint & Graph development.", "devDependencies": { "@azure/identity": "3.2.2", diff --git a/packages/graph/attachments/types.ts b/packages/graph/attachments/types.ts index 57b2d4c4d..5559242c9 100644 --- a/packages/graph/attachments/types.ts +++ b/packages/graph/attachments/types.ts @@ -1,6 +1,6 @@ import { Attachment as IAttachmentType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { graphPost } from "../operations.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; import { type } from "../utils/type.js"; @@ -8,7 +8,7 @@ import { type } from "../utils/type.js"; /** * Attachment */ -export class _Attachment extends _GraphQueryableInstance { } +export class _Attachment extends _GraphInstance { } export interface IAttachment extends _Attachment { } export const Attachment = graphInvokableFactory(_Attachment); @@ -17,7 +17,7 @@ export const Attachment = graphInvokableFactory(_Attachment); */ @defaultPath("attachments") @getById(Attachment) -export class _Attachments extends _GraphQueryableCollection { +export class _Attachments extends _GraphCollection { /** * Add attachment to this collection diff --git a/packages/graph/behaviors/paged.ts b/packages/graph/behaviors/paged.ts index 94f6a259b..b469a068a 100644 --- a/packages/graph/behaviors/paged.ts +++ b/packages/graph/behaviors/paged.ts @@ -1,6 +1,6 @@ -import { hOP, objectDefinedNotNull, stringIsNullOrEmpty, TimelinePipe } from "@pnp/core"; +import { hOP, stringIsNullOrEmpty, TimelinePipe } from "@pnp/core"; import { errorCheck, parseODataJSON } from "@pnp/queryable"; -import { GraphQueryableCollection, IGraphQueryable, IGraphQueryableCollection } from "../graphqueryable.js"; +import { GraphCollection, IGraphQueryable, IGraphCollection } from "../graphqueryable.js"; import { ConsistencyLevel } from "./consistency-level.js"; export interface IPagedResult { @@ -17,9 +17,9 @@ export interface IPagedResult { * @param col The collection to count * @returns number representing the count */ -export async function Count(col: IGraphQueryableCollection): Promise { +export async function Count(col: IGraphCollection): Promise { - const q = GraphQueryableCollection(col).using(Paged(), ConsistencyLevel()); + const q = GraphCollection(col).using(Paged(), ConsistencyLevel()); q.query.set("$count", "true"); q.top(1); @@ -27,53 +27,6 @@ export async function Count(col: IGraphQueryableCollection): Promise(col: IGraphQueryableCollection): AsyncIterable { - - const q = GraphQueryableCollection(col).using(Paged(), ConsistencyLevel()); - - const queryParams = ["$search", "$top", "$select", "$expand", "$filter", "$orderby"]; - - for (let i = 0; i < queryParams.length; i++) { - const param = col.query.get(queryParams[i]); - if (objectDefinedNotNull(param)) { - q.query.set(queryParams[i], param); - } - } - - return { - - [Symbol.asyncIterator]() { - return >{ - - _next: q, - - async next() { - - if (this._next === null) { - return { done: true, value: undefined }; - } - - const result: IPagedResult = await this._next(); - - if (result.hasNext) { - this._next = GraphQueryableCollection([this._next, result.nextLink]); - return { done: false, value: result.value }; - } else { - this._next = null; - return { done: false, value: result.value }; - } - }, - }; - }, - }; -} - /** * Behavior that converts results to pages when used with a collection (exposed through the paged method of GraphCollection) * diff --git a/packages/graph/behaviors/spfx.ts b/packages/graph/behaviors/spfx.ts index caf542dbf..cf3f97269 100644 --- a/packages/graph/behaviors/spfx.ts +++ b/packages/graph/behaviors/spfx.ts @@ -11,8 +11,23 @@ interface ISPFXContext { }; } +class SPFxTokenNullOrUndefinedError extends Error { + + constructor(behaviorName: string) { + super(`SPFx Context supplied to ${behaviorName} Behavior is null or undefined.`); + } + + public static check(behaviorName: string, context?: ISPFXContext): context is ISPFxContext | never { + if (typeof context === "undefined" || context === null) { + throw SPFxTokenNullOrUndefinedError(behaviorName); + } + } +} + export function SPFxToken(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFxToken"); + return (instance: Queryable) => { instance.on.auth.replace(async function (url: URL, init: RequestInit) { @@ -32,6 +47,8 @@ export function SPFxToken(context: ISPFXContext): TimelinePipe { export function SPFx(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFx"); + return (instance: Queryable) => { instance.using( diff --git a/packages/graph/bookings/funcs.ts b/packages/graph/bookings/funcs.ts index b45da518b..2f51e054f 100644 --- a/packages/graph/bookings/funcs.ts +++ b/packages/graph/bookings/funcs.ts @@ -1,5 +1,5 @@ -import { IGraphQueryable, GraphQueryableCollection, IGraphQueryableCollection } from "../graphqueryable.js"; +import { IGraphQueryable, GraphCollection, IGraphCollection } from "../graphqueryable.js"; import { BookingAppointment as IBookingAppointmentEntity } from "@microsoft/microsoft-graph-types"; /** @@ -9,9 +9,9 @@ import { BookingAppointment as IBookingAppointmentEntity } from "@microsoft/micr * @param start start time * @param end end time */ -export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphQueryableCollection { +export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphCollection { - const query = GraphQueryableCollection(this, "calendarView"); + const query = GraphCollection(this, "calendarView"); query.query.set("startDateTime", start); query.query.set("endDateTime", end); return query; diff --git a/packages/graph/bookings/types.ts b/packages/graph/bookings/types.ts index e8d167a6c..15386a817 100644 --- a/packages/graph/bookings/types.ts +++ b/packages/graph/bookings/types.ts @@ -7,7 +7,7 @@ import { BookingCurrency as IBookingCurrencyEntity, BookingCustomQuestion as IBookingCustomQuestionEntity, } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; @@ -17,7 +17,7 @@ import { calendarView } from "./funcs.js"; * Describes a Booking Currency entity * */ -export class _BookingCurrency extends _GraphQueryableInstance { } +export class _BookingCurrency extends _GraphInstance { } export interface IBookingCurrency extends _BookingCurrency { } export const BookingCurrency = graphInvokableFactory(_BookingCurrency); @@ -27,7 +27,7 @@ export const BookingCurrency = graphInvokableFactory(_BookingC */ @defaultPath("solutions/bookingCurrencies") @getById(BookingCurrency) -export class _BookingCurrencies extends _GraphQueryableCollection{ } +export class _BookingCurrencies extends _GraphCollection{ } export interface IBookingCurrencies extends _BookingCurrencies, IGetById { } export const BookingCurrencies = graphInvokableFactory(_BookingCurrencies); @@ -36,7 +36,7 @@ export const BookingCurrencies = graphInvokableFactory(_Book */ @deleteable() @updateable() -export class _BookingBusiness extends _GraphQueryableInstance { +export class _BookingBusiness extends _GraphInstance { /** * Get the calendar view for the booking business. */ @@ -99,7 +99,7 @@ export const BookingBusiness = graphInvokableFactory(_BookingB */ @defaultPath("solutions/bookingBusinesses") @getById(BookingBusiness) -export class _BookingBusinesses extends _GraphQueryableCollection{ +export class _BookingBusinesses extends _GraphCollection{ /** * Create a new booking business as specified in the request body. * @@ -130,7 +130,7 @@ export const BookingBusinesses = graphInvokableFactory(_Book */ @deleteable() @updateable() -export class _BookingApointment extends _GraphQueryableInstance { +export class _BookingApointment extends _GraphInstance { /** * Cancel the specified bookingAppointment in the specified bookingBusiness and send a message to the involved customer and staff members. */ @@ -148,7 +148,7 @@ export const BookingAppointment = graphInvokableFactory(_Bo */ @defaultPath("appointments") @getById(BookingAppointment) -export class _BookingAppointments extends _GraphQueryableCollection{ +export class _BookingAppointments extends _GraphCollection{ /** * Create a new booking appointment as specified in the request body. * @@ -172,7 +172,7 @@ export const BookingAppointments = graphInvokableFactory(_ */ @deleteable() @updateable() -export class _BookingCustomer extends _GraphQueryableInstance { } +export class _BookingCustomer extends _GraphInstance { } export interface IBookingCustomer extends _BookingCustomer, IDeleteable, IUpdateable { } export const BookingCustomer = graphInvokableFactory(_BookingCustomer); @@ -182,7 +182,7 @@ export const BookingCustomer = graphInvokableFactory(_BookingC */ @defaultPath("customers") @getById(BookingCustomer) -export class _BookingCustomers extends _GraphQueryableCollection{ +export class _BookingCustomers extends _GraphCollection{ /** * Create a new booking customer as specified in the request body. * @@ -206,7 +206,7 @@ export const BookingCustomers = graphInvokableFactory(_Bookin */ @deleteable() @updateable() -export class _BookingService extends _GraphQueryableInstance { } +export class _BookingService extends _GraphInstance { } export interface IBookingService extends _BookingService, IDeleteable, IUpdateable { } export const BookingService = graphInvokableFactory(_BookingService); @@ -216,7 +216,7 @@ export const BookingService = graphInvokableFactory(_BookingSer */ @defaultPath("services") @getById(BookingService) -export class _BookingServices extends _GraphQueryableCollection{ +export class _BookingServices extends _GraphCollection{ /** * Create a new booking service as specified in the request body. * @@ -240,7 +240,7 @@ export const BookingServices = graphInvokableFactory(_BookingS */ @deleteable() @updateable() -export class _BookingStaffMember extends _GraphQueryableInstance { } +export class _BookingStaffMember extends _GraphInstance { } export interface IBookingStaffMember extends _BookingStaffMember, IDeleteable, IUpdateable { } export const BookingStaffMember = graphInvokableFactory(_BookingStaffMember); @@ -250,7 +250,7 @@ export const BookingStaffMember = graphInvokableFactory(_Bo */ @defaultPath("staffMembers") @getById(BookingStaffMember) -export class _BookingStaffMembers extends _GraphQueryableCollection{ +export class _BookingStaffMembers extends _GraphCollection{ /** * Create a new booking staffmember as specified in the request body. * @@ -274,7 +274,7 @@ export const BookingStaffMembers = graphInvokableFactory(_ */ @deleteable() @updateable() -export class _BookingCustomQuestion extends _GraphQueryableInstance { } +export class _BookingCustomQuestion extends _GraphInstance { } export interface IBookingCustomQuestion extends _BookingCustomQuestion, IDeleteable, IUpdateable { } export const BookingCustomQuestion = graphInvokableFactory(_BookingCustomQuestion); @@ -284,7 +284,7 @@ export const BookingCustomQuestion = graphInvokableFactory{ +export class _BookingCustomQuestions extends _GraphCollection{ /** * Create a new booking customquestions as specified in the request body. * diff --git a/packages/graph/calendars/funcs.ts b/packages/graph/calendars/funcs.ts index 20d78a2e1..9e5480042 100644 --- a/packages/graph/calendars/funcs.ts +++ b/packages/graph/calendars/funcs.ts @@ -1,4 +1,4 @@ -import { IGraphQueryable, GraphQueryableCollection, IGraphQueryableCollection } from "../graphqueryable.js"; +import { IGraphQueryable, GraphCollection, IGraphCollection } from "../graphqueryable.js"; import { EmailAddress, Event as IEvent } from "@microsoft/microsoft-graph-types"; import { Endpoint } from "../behaviors/endpoint.js"; @@ -14,9 +14,9 @@ interface IEventWithTag extends IEvent { * @param start start time * @param end end time */ -export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphQueryableCollection { +export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphCollection { - const query = GraphQueryableCollection(this, "calendarView"); + const query = GraphCollection(this, "calendarView"); query.query.set("startDateTime", start); query.query.set("endDateTime", end); return query; @@ -31,8 +31,8 @@ export type ICalendarViewInfo = IEventWithTag; * @param this IGraphQueryable instance * @param roomList The SMTP address associated with the room list. */ -export function findRooms(this: IGraphQueryable, roomList?: string): IGraphQueryableCollection { - const query = GraphQueryableCollection(this, roomList ? "findRooms(RoomList=@roomList)" : "findRooms"); +export function findRooms(this: IGraphQueryable, roomList?: string): IGraphCollection { + const query = GraphCollection(this, roomList ? "findRooms(RoomList=@roomList)" : "findRooms"); query.using(Endpoint("beta")); if (roomList) { query.query.set("@roomList", `'${roomList}'`); @@ -48,8 +48,8 @@ export function findRooms(this: IGraphQueryable, roomList?: string): IGraphQuery * @param start start time * @param end end time */ -export function instances(this: IGraphQueryable, start: string, end: string): IGraphQueryableCollection { - const query = GraphQueryableCollection(this, "instances"); +export function instances(this: IGraphQueryable, start: string, end: string): IGraphCollection { + const query = GraphCollection(this, "instances"); query.query.set("startDateTime", start); query.query.set("endDateTime", end); return query; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index 009a969f9..5f3327999 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -1,6 +1,6 @@ import { body } from "@pnp/queryable"; import { Event as IEventType, Calendar as ICalendarType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; import { graphPost } from "../operations.js"; import { calendarView, instances } from "./funcs.js"; @@ -8,7 +8,7 @@ import { calendarView, instances } from "./funcs.js"; /** * Calendar */ -export class _Calendar extends _GraphQueryableInstance { +export class _Calendar extends _GraphInstance { public get events(): IEvents { return Events(this); @@ -24,7 +24,7 @@ export const Calendar = graphInvokableFactory(_Calendar); */ @defaultPath("calendars") @getById(Calendar) -export class _Calendars extends _GraphQueryableCollection { } +export class _Calendars extends _GraphCollection { } export interface ICalendars extends _Calendars, IGetById { } export const Calendars = graphInvokableFactory(_Calendars); @@ -33,7 +33,7 @@ export const Calendars = graphInvokableFactory(_Calendars); */ @deleteable() @updateable() -export class _Event extends _GraphQueryableInstance { +export class _Event extends _GraphInstance { public instances = instances; } export interface IEvent extends _Event, IDeleteable, IUpdateable { } @@ -44,7 +44,7 @@ export const Event = graphInvokableFactory(_Event); */ @defaultPath("events") @getById(Event) -export class _Events extends _GraphQueryableCollection { +export class _Events extends _GraphCollection { /** * Adds a new event to the collection diff --git a/packages/graph/calendars/users.ts b/packages/graph/calendars/users.ts index 88d00db0e..7eb87fc4f 100644 --- a/packages/graph/calendars/users.ts +++ b/packages/graph/calendars/users.ts @@ -2,7 +2,7 @@ import { addProp } from "@pnp/queryable"; import { _User } from "../users/types.js"; import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars } from "./types.js"; import { calendarView, ICalendarViewInfo } from "./funcs.js"; -import { IGraphQueryableCollection } from "../graphqueryable.js"; +import { IGraphCollection } from "../graphqueryable.js"; declare module "../users/types" { interface _User { @@ -10,14 +10,14 @@ declare module "../users/types" { readonly calendars: ICalendars; readonly attachmentFiles: ICalendar; readonly events: IEvents; - calendarView(start: string, end: string): IGraphQueryableCollection; + calendarView(start: string, end: string): IGraphCollection; } interface IUser { readonly calendar: ICalendar; readonly calendars: ICalendars; readonly attachmentFiles: ICalendar; readonly events: IEvents; - calendarView(start: string, end: string): IGraphQueryableCollection; + calendarView(start: string, end: string): IGraphCollection; } } diff --git a/packages/graph/cloud-communications/types.ts b/packages/graph/cloud-communications/types.ts index 59d5a8a23..330513d31 100644 --- a/packages/graph/cloud-communications/types.ts +++ b/packages/graph/cloud-communications/types.ts @@ -1,6 +1,6 @@ import { Presence as IUserPresence } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; @@ -10,12 +10,12 @@ import { body } from "@pnp/queryable"; */ @defaultPath("presence") -export class _Presence extends _GraphQueryableInstance { } +export class _Presence extends _GraphInstance { } export interface IPresence extends _Presence { } export const Presence = graphInvokableFactory(_Presence); @defaultPath("communications") -export class _Communications extends _GraphQueryableCollection { +export class _Communications extends _GraphCollection { /** * Retrieve presence information for a group of users. * diff --git a/packages/graph/columns/types.ts b/packages/graph/columns/types.ts index 72be18d08..f63a96169 100644 --- a/packages/graph/columns/types.ts +++ b/packages/graph/columns/types.ts @@ -1,7 +1,7 @@ import { ColumnDefinition as IColumnDefinition, } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, getById, IGetById, IUpdateable, updateable } from "../decorators.js"; /** @@ -9,7 +9,7 @@ import { defaultPath, deleteable, IDeleteable, getById, IGetById, IUpdateable, u */ @deleteable() @updateable() -export class _Column extends _GraphQueryableInstance {} +export class _Column extends _GraphInstance {} export interface IColumn extends _Column, IDeleteable, IUpdateable { } export const Column = graphInvokableFactory(_Column); @@ -18,7 +18,7 @@ export const Column = graphInvokableFactory(_Column); */ @defaultPath("columns") @getById(Column) -export class _Columns extends _GraphQueryableCollection{} +export class _Columns extends _GraphCollection{} export interface IColumns extends _Columns, IGetById { } export const Columns = graphInvokableFactory(_Columns); diff --git a/packages/graph/contacts/types.ts b/packages/graph/contacts/types.ts index a0c63f1b0..20df7a944 100644 --- a/packages/graph/contacts/types.ts +++ b/packages/graph/contacts/types.ts @@ -1,4 +1,4 @@ -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { Contact as IContactType, ContactFolder as IContactFolderType, EmailAddress as IEmailAddressType } from "@microsoft/microsoft-graph-types"; import { defaultPath, updateable, deleteable, IUpdateable, IDeleteable, getById, IGetById } from "../decorators.js"; import { graphPost } from "../operations.js"; @@ -9,7 +9,7 @@ import { body } from "@pnp/queryable"; */ @updateable() @deleteable() -export class _Contact extends _GraphQueryableInstance { } +export class _Contact extends _GraphInstance { } export interface IContact extends _Contact, IUpdateable, IDeleteable { } export const Contact = graphInvokableFactory(_Contact); @@ -18,7 +18,7 @@ export const Contact = graphInvokableFactory(_Contact); */ @defaultPath("contacts") @getById(Contact) -export class _Contacts extends _GraphQueryableCollection { +export class _Contacts extends _GraphCollection { /** * Create a new Contact for the user. @@ -60,7 +60,7 @@ export const Contacts = graphInvokableFactory(_Contacts); */ @deleteable() @updateable() -export class _ContactFolder extends _GraphQueryableInstance { +export class _ContactFolder extends _GraphInstance { /** * Gets the contacts in this contact folder */ @@ -83,7 +83,7 @@ export const ContactFolder = graphInvokableFactory(_ContactFolde */ @defaultPath("contactFolders") @getById(ContactFolder) -export class _ContactFolders extends _GraphQueryableCollection { +export class _ContactFolders extends _GraphCollection { /** * Create a new Contact Folder for the user. diff --git a/packages/graph/content-types/types.ts b/packages/graph/content-types/types.ts index f1ce91d46..81b40da20 100644 --- a/packages/graph/content-types/types.ts +++ b/packages/graph/content-types/types.ts @@ -2,7 +2,7 @@ import { ContentType as IContentTypeEntity, ItemReference as IItemReference, } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; import { graphGet, graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; @@ -13,7 +13,7 @@ import { JSONHeaderParse } from "@pnp/queryable"; */ @deleteable() @updateable() -export class _ContentType extends _GraphQueryableInstance { +export class _ContentType extends _GraphInstance { /** * Check the publishing status of a contentType in a content type hub site. @@ -74,7 +74,7 @@ export const ContentType = graphInvokableFactory(_ContentType); */ @defaultPath("contenttypes") @getById(ContentType) -export class _ContentTypes extends _GraphQueryableCollection{ +export class _ContentTypes extends _GraphCollection{ /** * Add or sync a copy of a published content type from the content type hub to a target site or a list. * diff --git a/packages/graph/conversations/types.ts b/packages/graph/conversations/types.ts index 09138372b..845080daa 100644 --- a/packages/graph/conversations/types.ts +++ b/packages/graph/conversations/types.ts @@ -7,8 +7,8 @@ import { User as IUserType, } from "@microsoft/microsoft-graph-types"; import { - _GraphQueryableCollection, - _GraphQueryableInstance, + _GraphCollection, + _GraphInstance, graphInvokableFactory, } from "../graphqueryable.js"; import { defaultPath, updateable, IUpdateable, deleteable, IDeleteable, addable, IAddable, getById, IGetById } from "../decorators.js"; @@ -19,7 +19,7 @@ import { graphPost, graphDelete } from "../operations.js"; */ @updateable() @deleteable() -export class _Conversation extends _GraphQueryableInstance { +export class _Conversation extends _GraphInstance { /** * Get all the threads in a group conversation. @@ -37,7 +37,7 @@ export const Conversation = graphInvokableFactory(_Conversation); @defaultPath("conversations") @addable() @getById(Conversation) -export class _Conversations extends _GraphQueryableCollection { } +export class _Conversations extends _GraphCollection { } export interface IConversations extends _Conversations, IGetById, IAddable { } export const Conversations = graphInvokableFactory(_Conversations); @@ -45,7 +45,7 @@ export const Conversations = graphInvokableFactory(_Conversation * Thread */ @deleteable() -export class _Thread extends _GraphQueryableInstance { +export class _Thread extends _GraphInstance { /** * Get all the threads in a group conversation. @@ -72,7 +72,7 @@ export const Thread = graphInvokableFactory(_Thread); @defaultPath("threads") @addable() @getById(Thread) -export class _Threads extends _GraphQueryableCollection { } +export class _Threads extends _GraphCollection { } export interface IThreads extends _Threads, IGetById, IAddable { } export const Threads = graphInvokableFactory(_Threads); @@ -81,7 +81,7 @@ export const Threads = graphInvokableFactory(_Threads); * Post */ @deleteable() -export class _Post extends _GraphQueryableInstance { +export class _Post extends _GraphInstance { /** * Forward a post to a recipient */ @@ -107,14 +107,14 @@ export const Post = graphInvokableFactory(_Post); @defaultPath("posts") @addable() @getById(Post) -export class _Posts extends _GraphQueryableCollection { } +export class _Posts extends _GraphCollection { } export interface IPosts extends _Posts, IGetById, IAddable { } export const Posts = graphInvokableFactory(_Posts); /** * Senders */ -export class _Senders extends _GraphQueryableCollection { +export class _Senders extends _GraphCollection { /** * Add a new user or group to this senders collection diff --git a/packages/graph/directory-objects/types.ts b/packages/graph/directory-objects/types.ts index c1e8b6c13..71b72c91d 100644 --- a/packages/graph/directory-objects/types.ts +++ b/packages/graph/directory-objects/types.ts @@ -1,4 +1,4 @@ -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { DirectoryObject as IDirectoryObjectType } from "@microsoft/microsoft-graph-types"; import { defaultPath, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; import { body } from "@pnp/queryable"; @@ -9,7 +9,7 @@ import { Count } from "../behaviors/paged.js"; * Represents a Directory Object entity */ @deleteable() -export class _DirectoryObject extends _GraphQueryableInstance { +export class _DirectoryObject extends _GraphInstance { /** * Returns all the groups and directory roles that the specified Directory Object is a member of. The check is transitive @@ -48,7 +48,7 @@ export const DirectoryObject = graphInvokableFactory(_Director */ @defaultPath("directoryObjects") @getById(DirectoryObject) -export class _DirectoryObjects extends _GraphQueryableCollection { +export class _DirectoryObjects extends _GraphCollection { /** * Returns the directory objects specified in a list of ids. NOTE: The directory objects returned are the full objects containing all their properties. * The $select query option is not available for this operation. diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index 77d029776..2f9ef4613 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -1,11 +1,11 @@ -import { isArray } from "@pnp/core"; +import { isArray, objectDefinedNotNull } from "@pnp/core"; import { IInvokable, Queryable, queryableFactory } from "@pnp/queryable"; import { ConsistencyLevel } from "./behaviors/consistency-level.js"; -import { AsAsyncIterable } from "./behaviors/paged.js"; +import { Paged } from "./behaviors/paged.js"; export type GraphInit = string | IGraphQueryable | [IGraphQueryable, string]; -export interface IGraphQueryableConstructor { +export interface IGraphConstructor { new(base: GraphInit, path?: string): T; } @@ -78,7 +78,7 @@ export class _GraphQueryable extends Queryable { * @param factory The contructor for the class to create */ protected getParent( - factory: IGraphQueryableConstructor, + factory: IGraphConstructor, base: GraphInit = this.parentUrl, path?: string): T { @@ -98,7 +98,7 @@ export const GraphQueryable = graphInvokableFactory(_GraphQuery * Represents a REST collection which can be filtered, paged, and selected * */ -export class _GraphQueryableCollection extends _GraphQueryable { +export class _GraphCollection extends _GraphQueryable { /** * @@ -171,23 +171,58 @@ export class _GraphQueryableCollection extends _GraphQueryable< return -1; } - /** - * Allows reading through a collection as pages of information whose size is determined by top or the api method's default - * - * @returns an object containing results, the ability to determine if there are more results, and request the next page of results - */ - public paged(): AsyncIterable { - return AsAsyncIterable(this); + public [Symbol.asyncIterator]() { + + const q = GraphCollection(this).using(Paged(), ConsistencyLevel()); + + const queryParams = ["$search", "$top", "$select", "$expand", "$filter", "$orderby"]; + + for (let i = 0; i < queryParams.length; i++) { + const param = this.query.get(queryParams[i]); + if (objectDefinedNotNull(param)) { + q.query.set(queryParams[i], param); + } + } + + return >{ + + _next: q, + + async next() { + + if (this._next === null) { + return { done: true, value: undefined }; + } + + const result: IPagedResult = await this._next(); + + if (result.hasNext) { + this._next = GraphCollection([this._next, result.nextLink]); + return { done: false, value: result.value }; + } else { + this._next = null; + return { done: false, value: result.value }; + } + }, + }; } } -export interface IGraphQueryableCollection extends _GraphQueryableCollection { } -export const GraphQueryableCollection = graphInvokableFactory(_GraphQueryableCollection); + +export interface IGraphCollection extends _GraphCollection { } +export const GraphCollection = graphInvokableFactory(_GraphCollection); /** * Represents an instance that can be selected * */ -export class _GraphQueryableInstance extends _GraphQueryable { } +export class _GraphInstance extends _GraphQueryable { } -export interface IGraphQueryableInstance extends IInvokable, IGraphQueryable { } -export const GraphQueryableInstance = graphInvokableFactory(_GraphQueryableInstance); +export interface IGraphInstance extends IInvokable, IGraphQueryable { } +export const GraphInstance = graphInvokableFactory(_GraphInstance); + +export interface IPagedResult { + count: number; + value: any | any[] | null; + hasNext: boolean; + nextLink: string; +} diff --git a/packages/graph/index.ts b/packages/graph/index.ts index 572141f33..a8fc86fcd 100644 --- a/packages/graph/index.ts +++ b/packages/graph/index.ts @@ -1,13 +1,13 @@ export { graphfi as graphfi, GraphFI as GraphFI } from "./fi.js"; export { - IGraphQueryableCollection, - IGraphQueryableInstance, + IGraphCollection, + IGraphInstance, GraphQueryable, IGraphQueryable, - GraphQueryableCollection, - GraphQueryableInstance, - IGraphQueryableConstructor, + GraphCollection, + GraphInstance, + IGraphConstructor, } from "./graphqueryable.js"; export * from "./operations.js"; diff --git a/packages/graph/insights/types.ts b/packages/graph/insights/types.ts index 9c2c050ef..1cd2b5e62 100644 --- a/packages/graph/insights/types.ts +++ b/packages/graph/insights/types.ts @@ -6,8 +6,8 @@ import { Entity as IEntityType, } from "@microsoft/microsoft-graph-types"; import { - _GraphQueryableInstance, - _GraphQueryableCollection, + _GraphInstance, + _GraphCollection, graphInvokableFactory, } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; @@ -16,7 +16,7 @@ import { defaultPath, getById, IGetById } from "../decorators.js"; * Represents a insights entity */ @defaultPath("insights") -export class _Insights extends _GraphQueryableInstance { +export class _Insights extends _GraphInstance { public get trending(): ITrendingInsights { return TrendingInsights(this); @@ -36,7 +36,7 @@ export const Insights = graphInvokableFactory(_Insights); /** * Describes a Trending Insight instance */ -export class _TrendingInsight extends _GraphQueryableInstance { +export class _TrendingInsight extends _GraphInstance { public get resource(): IResource { return Resource(this); } @@ -50,14 +50,14 @@ export const TrendingInsight = graphInvokableFactory(_Trending */ @defaultPath("trending") @getById(TrendingInsight) -export class _TrendingInsights extends _GraphQueryableCollection {} +export class _TrendingInsights extends _GraphCollection {} export interface ITrendingInsights extends _TrendingInsights, IGetById {} export const TrendingInsights = graphInvokableFactory(_TrendingInsights); /** * Describes a Used Insight instance */ -export class _UsedInsight extends _GraphQueryableInstance { +export class _UsedInsight extends _GraphInstance { public get resource(): IResource { return Resource(this); } @@ -71,14 +71,14 @@ export const UsedInsight = graphInvokableFactory(_UsedInsight); */ @defaultPath("used") @getById(UsedInsight) -export class _UsedInsights extends _GraphQueryableCollection {} +export class _UsedInsights extends _GraphCollection {} export interface IUsedInsights extends _UsedInsights, IGetById {} export const UsedInsights = graphInvokableFactory(_UsedInsights); /** * Describes a Shared Insight instance */ -export class _SharedInsight extends _GraphQueryableInstance { +export class _SharedInsight extends _GraphInstance { public get resource(): IResource { return Resource(this); } @@ -92,7 +92,7 @@ export const SharedInsight = graphInvokableFactory(_SharedInsigh */ @defaultPath("shared") @getById(SharedInsight) -export class _SharedInsights extends _GraphQueryableCollection {} +export class _SharedInsights extends _GraphCollection {} export interface ISharedInsights extends _SharedInsights, IGetById {} export const SharedInsights = graphInvokableFactory(_SharedInsights); @@ -100,6 +100,6 @@ export const SharedInsights = graphInvokableFactory(_SharedInsi * Describes a Resource Entity instance */ @defaultPath("resource") -export class _Resource extends _GraphQueryableInstance {} +export class _Resource extends _GraphInstance {} export interface IResource extends _Resource { } export const Resource = graphInvokableFactory(_Resource); diff --git a/packages/graph/invitations/types.ts b/packages/graph/invitations/types.ts index 036e94d7b..ba5d7c0e9 100644 --- a/packages/graph/invitations/types.ts +++ b/packages/graph/invitations/types.ts @@ -1,6 +1,6 @@ import { body } from "@pnp/queryable"; import { Invitation as IInvitationType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; import { graphPost } from "../operations.js"; @@ -8,7 +8,7 @@ import { graphPost } from "../operations.js"; * Invitations */ @defaultPath("invitations") -export class _Invitations extends _GraphQueryableCollection { +export class _Invitations extends _GraphCollection { /** * Create a new Invitation via invitation manager. diff --git a/packages/graph/lists/types.ts b/packages/graph/lists/types.ts index cd7558a2a..4bf1fd44c 100644 --- a/packages/graph/lists/types.ts +++ b/packages/graph/lists/types.ts @@ -1,5 +1,5 @@ import { List as IListEntity } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; @@ -9,7 +9,7 @@ import { body } from "@pnp/queryable"; */ @deleteable() @updateable() -export class _List extends _GraphQueryableInstance { } +export class _List extends _GraphInstance { } export interface IList extends _List, IDeleteable, IUpdateable { } export const List = graphInvokableFactory(_List); @@ -19,7 +19,7 @@ export const List = graphInvokableFactory(_List); */ @defaultPath("services") @getById(List) -export class _Lists extends _GraphQueryableCollection{ +export class _Lists extends _GraphCollection{ /** * Create a new booking service as specified in the request body. * diff --git a/packages/graph/members/types.ts b/packages/graph/members/types.ts index bae91f96a..b52949ef0 100644 --- a/packages/graph/members/types.ts +++ b/packages/graph/members/types.ts @@ -1,13 +1,13 @@ import { body } from "@pnp/queryable"; import { User as IMemberType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; import { graphDelete, graphPost } from "../operations.js"; /** * Member */ -export class _Member extends _GraphQueryableInstance { +export class _Member extends _GraphInstance { /** * Removes this Member */ @@ -23,7 +23,7 @@ export const Member = graphInvokableFactory(_Member); */ @defaultPath("members") @getById(Member) -export class _Members extends _GraphQueryableCollection { +export class _Members extends _GraphCollection { /** * Use this API to add a member to an Office 365 group, a security group or a mail-enabled security group through diff --git a/packages/graph/messages/types.ts b/packages/graph/messages/types.ts index 4dfb00683..342e544ce 100644 --- a/packages/graph/messages/types.ts +++ b/packages/graph/messages/types.ts @@ -1,11 +1,11 @@ import { Message as IMessageType, MailFolder as IMailFolderType, MailboxSettings as IMailboxSettingsType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable } from "../decorators.js"; /** * Message */ -export class _Message extends _GraphQueryableInstance { } +export class _Message extends _GraphInstance { } export interface IMessage extends _Message { } export const Message = graphInvokableFactory(_Message); @@ -15,14 +15,14 @@ export const Message = graphInvokableFactory(_Message); @defaultPath("messages") @getById(Message) @addable() -export class _Messages extends _GraphQueryableCollection { } +export class _Messages extends _GraphCollection { } export interface IMessages extends _Messages, IGetById, IAddable { } export const Messages = graphInvokableFactory(_Messages); /** * MailFolder */ -export class _MailFolder extends _GraphQueryableInstance { } +export class _MailFolder extends _GraphInstance { } export interface IMailFolder extends _MailFolder { } export const MailFolder = graphInvokableFactory(_MailFolder); @@ -32,7 +32,7 @@ export const MailFolder = graphInvokableFactory(_MailFolder); @defaultPath("mailFolders") @getById(MailFolder) @addable() -export class _MailFolders extends _GraphQueryableCollection { } +export class _MailFolders extends _GraphCollection { } export interface IMailFolders extends _MailFolders, IGetById, IAddable { } export const MailFolders = graphInvokableFactory(_MailFolders); @@ -41,6 +41,6 @@ export const MailFolders = graphInvokableFactory(_MailFolders); */ @defaultPath("mailboxSettings") @updateable() -export class _MailboxSettings extends _GraphQueryableInstance { } +export class _MailboxSettings extends _GraphInstance { } export interface IMailboxSettings extends _MailboxSettings, IUpdateable { } export const MailboxSettings = graphInvokableFactory(_MailboxSettings); diff --git a/packages/graph/onedrive/types.ts b/packages/graph/onedrive/types.ts index a0db35765..ba17891f4 100644 --- a/packages/graph/onedrive/types.ts +++ b/packages/graph/onedrive/types.ts @@ -1,10 +1,10 @@ import { - GraphQueryableInstance, - GraphQueryableCollection, - _GraphQueryableInstance, - IGraphQueryableInstance, - IGraphQueryableCollection, - _GraphQueryableCollection, + GraphInstance, + GraphCollection, + _GraphInstance, + IGraphInstance, + IGraphCollection, + _GraphCollection, graphInvokableFactory, GraphQueryable, } from "../graphqueryable.js"; @@ -20,7 +20,7 @@ import { driveItemUpload } from "./funcs.js"; * */ @defaultPath("drive") -export class _Drive extends _GraphQueryableInstance { +export class _Drive extends _GraphInstance { /** * Method for retrieving the root folder of a drive. @@ -34,8 +34,8 @@ export class _Drive extends _GraphQueryableInstance { * Method for retrieving the related list resource, for use with SharePoint drives. * @returns IGraphQueryableInstance */ - public get list(): IGraphQueryableInstance { - return GraphQueryableInstance(this, "list"); + public get list(): IGraphInstance { + return GraphInstance(this, "list"); } /** @@ -104,7 +104,7 @@ export const Drive = graphInvokableFactory(_Drive); */ @defaultPath("drives") @getById(Drive) -export class _Drives extends _GraphQueryableCollection { } +export class _Drives extends _GraphCollection { } export interface IDrives extends _Drives, IGetById { } export const Drives = graphInvokableFactory(_Drives); @@ -113,7 +113,7 @@ export const Drives = graphInvokableFactory(_Drives); * */ @defaultPath("root") -export class _Root extends _GraphQueryableInstance { +export class _Root extends _GraphInstance { /** * Method for retrieving children of a folder drive item. @@ -128,16 +128,16 @@ export class _Root extends _GraphQueryableInstance { * @param query string, search parameter * @returns IGraphQueryableCollection */ - public search(query: string): IGraphQueryableCollection { - return GraphQueryableCollection(this, `search(q='${query}')`); + public search(query: string): IGraphCollection { + return GraphCollection(this, `search(q='${query}')`); } /** * Method for retrieving thumbnails of the drive items. * @returns IGraphQueryableCollection */ - public get thumbnails(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "thumbnails"); + public get thumbnails(): IGraphCollection { + return GraphCollection(this, "thumbnails"); } /** @@ -146,10 +146,10 @@ export class _Root extends _GraphQueryableInstance { * change token * @returns IDeltaItems */ - public delta(token?: string): IGraphQueryableCollection { + public delta(token?: string): IGraphCollection { const path = `delta${(token) ? `(token=${token})` : ""}`; - const query: IGraphQueryableCollection = GraphQueryableCollection(this, path); + const query: IGraphCollection = GraphCollection(this, path); query.on.parse.replace(errorCheck); query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { @@ -159,8 +159,8 @@ export class _Root extends _GraphQueryableInstance { result = { // TODO:: update docs to show how to load next with async iterator - next: () => (nextLink ? GraphQueryableCollection([this, nextLink]) : null), - delta: () => (deltaLink ? GraphQueryableCollection([query, deltaLink])() : null), + next: () => (nextLink ? GraphCollection([this, nextLink]) : null), + delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), values: json.value, }; @@ -189,9 +189,9 @@ export class _Root extends _GraphQueryableInstance { * @param analyticsOptions - IAnalyticsOptions (Optional) * @returns IGraphQueryableCollection */ - public analytics(analyticsOptions?: IAnalyticsOptions): IGraphQueryableCollection { + public analytics(analyticsOptions?: IAnalyticsOptions): IGraphCollection { const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; - return >GraphQueryableCollection(this, query); + return >GraphCollection(this, query); } } export interface IRoot extends _Root { } @@ -203,7 +203,7 @@ export const Root = graphInvokableFactory(_Root); */ @deleteable() @updateable() -export class _DriveItem extends _GraphQueryableInstance { +export class _DriveItem extends _GraphInstance { /** * Method for retrieving children of a folder drive item. @@ -217,16 +217,16 @@ export class _DriveItem extends _GraphQueryableInstance { * Method for retrieving thumbnails of the drive items. * @returns IGraphQueryableCollection */ - public get thumbnails(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "thumbnails"); + public get thumbnails(): IGraphCollection { + return GraphCollection(this, "thumbnails"); } /** * Method for retrieving the versions of a drive item. * @returns IDriveItemVersionInfo */ - public get versions(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "versions"); + public get versions(): IGraphCollection { + return GraphCollection(this, "versions"); } /** @@ -360,9 +360,9 @@ export class _DriveItem extends _GraphQueryableInstance { * @param analyticsOptions - IAnalyticsOptions (Optional) * @returns IGraphQueryableCollection */ - public analytics(analyticsOptions?: IAnalyticsOptions): IGraphQueryableCollection { + public analytics(analyticsOptions?: IAnalyticsOptions): IGraphCollection { const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; - return >GraphQueryableCollection(this, query); + return >GraphCollection(this, query); } } export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } @@ -374,7 +374,7 @@ export const DriveItem = graphInvokableFactory(_DriveItem); * */ @getById(DriveItem) -export class _DriveItems extends _GraphQueryableCollection { +export class _DriveItems extends _GraphCollection { /** * Adds a file to this collection of drive items. * For more upload options please see the .upload method on DriveItem and Root. @@ -482,8 +482,8 @@ export interface IPreviewOptions { } export interface IDeltaItems { - next: IGraphQueryableCollection; - delta: IGraphQueryableCollection; + next: IGraphCollection; + delta: IGraphCollection; values: any[]; } diff --git a/packages/graph/onenote/types.ts b/packages/graph/onenote/types.ts index 05ba06b03..661ca8460 100644 --- a/packages/graph/onenote/types.ts +++ b/packages/graph/onenote/types.ts @@ -1,10 +1,10 @@ import { body } from "@pnp/queryable"; import { Notebook as INotebookType, Onenote as IOnenoteType, OnenoteSection as ISectionType, OnenotePage as IOnenotePageType } from "@microsoft/microsoft-graph-types"; import { - GraphQueryableCollection, - _GraphQueryableInstance, - _GraphQueryableCollection, - IGraphQueryableCollection, + GraphCollection, + _GraphInstance, + _GraphCollection, + IGraphCollection, graphInvokableFactory, } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; @@ -14,7 +14,7 @@ import { graphPost } from "../operations.js"; * Represents a onenote entity */ @defaultPath("onenote") -export class _OneNote extends _GraphQueryableInstance { +export class _OneNote extends _GraphInstance { public get notebooks(): INotebooks { return Notebooks(this); @@ -24,8 +24,8 @@ export class _OneNote extends _GraphQueryableInstance { return Sections(this); } - public get pages(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "pages"); + public get pages(): IGraphCollection { + return GraphCollection(this, "pages"); } } export interface IOneNote extends _OneNote {} @@ -36,7 +36,7 @@ export const OneNote = graphInvokableFactory(_OneNote); * Describes a notebook instance * */ -export class _Notebook extends _GraphQueryableInstance { +export class _Notebook extends _GraphInstance { public get sections(): ISections { return Sections(this); } @@ -50,7 +50,7 @@ export const Notebook = graphInvokableFactory(_Notebook); */ @defaultPath("notebooks") @getById(Notebook) -export class _Notebooks extends _GraphQueryableCollection { +export class _Notebooks extends _GraphCollection { /** * Create a new notebook as specified in the request body. * @@ -73,7 +73,7 @@ export const Notebooks = graphInvokableFactory(_Notebooks); /** * Describes a sections instance */ -export class _Section extends _GraphQueryableInstance { } +export class _Section extends _GraphInstance { } export interface ISection extends _Section { } export const Section = graphInvokableFactory(_Section); @@ -83,7 +83,7 @@ export const Section = graphInvokableFactory(_Section); */ @defaultPath("sections") @getById(Section) -export class _Sections extends _GraphQueryableCollection { +export class _Sections extends _GraphCollection { /** * Adds a new section * diff --git a/packages/graph/outlook/types.ts b/packages/graph/outlook/types.ts index 362502fd5..606524491 100644 --- a/packages/graph/outlook/types.ts +++ b/packages/graph/outlook/types.ts @@ -1,4 +1,4 @@ -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { OutlookUser as IOutlookType, OutlookCategory as IOutlookCategoryType } from "@microsoft/microsoft-graph-types"; import { defaultPath, deleteable, getById, IDeleteable, IGetById, IUpdateable, updateable } from "../decorators.js"; import { graphPost } from "@pnp/graph"; @@ -7,7 +7,7 @@ import { body } from "@pnp/queryable"; /** * Outlook */ -export class _Outlook extends _GraphQueryableInstance { +export class _Outlook extends _GraphInstance { public get masterCategories(): IMasterCategories { return MasterCategories(this); @@ -22,7 +22,7 @@ export const Outlook = graphInvokableFactory(_Outlook); */ @deleteable() @updateable() -export class _OutlookCategory extends _GraphQueryableInstance { } +export class _OutlookCategory extends _GraphInstance { } export interface IOutlookCategory extends _OutlookCategory, IUpdateable, IDeleteable { } export const OutlookCategory = graphInvokableFactory(_OutlookCategory); @@ -31,7 +31,7 @@ export const OutlookCategory = graphInvokableFactory(_OutlookC */ @defaultPath("masterCategories") @getById(OutlookCategory) -export class _MasterCategories extends _GraphQueryableCollection { +export class _MasterCategories extends _GraphCollection { /** * Adds a new event to the collection diff --git a/packages/graph/photos/types.ts b/packages/graph/photos/types.ts index f4586c719..7a2fb2be8 100644 --- a/packages/graph/photos/types.ts +++ b/packages/graph/photos/types.ts @@ -1,11 +1,11 @@ -import { _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { BlobParse, BufferParse } from "@pnp/queryable"; import { Photo as IPhotoType } from "@microsoft/microsoft-graph-types"; import { defaultPath } from "../decorators.js"; import { graphPatch } from "../operations.js"; @defaultPath("photo") -export class _Photo extends _GraphQueryableInstance { +export class _Photo extends _GraphInstance { /** * Gets the image bytes as a blob (browser) */ diff --git a/packages/graph/planner/types.ts b/packages/graph/planner/types.ts index c593c20e8..1f72c34c7 100644 --- a/packages/graph/planner/types.ts +++ b/packages/graph/planner/types.ts @@ -7,7 +7,7 @@ import { Planner as IPlannerType, } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; import { getById, IGetById, deleteableWithETag, IDeleteableWithETag, updateableWithETag, IUpdateableWithETag } from "../decorators.js"; import { graphPost } from "../operations.js"; import { defaultPath } from "../decorators.js"; @@ -16,7 +16,7 @@ import { defaultPath } from "../decorators.js"; * Planner */ @defaultPath("planner") -export class _Planner extends _GraphQueryableInstance { +export class _Planner extends _GraphInstance { // Should Only be able to get by id, or else error occur public get plans(): IPlans { @@ -41,7 +41,7 @@ export const Planner = graphInvokableFactory(_Planner); */ @defaultPath("details") @updateableWithETag() -export class _PlanDetails extends _GraphQueryableInstance { } +export class _PlanDetails extends _GraphInstance { } export interface IPlanDetails extends _PlanDetails, IUpdateableWithETag { } export const PlanDetails = graphInvokableFactory(_PlanDetails); @@ -50,7 +50,7 @@ export const PlanDetails = graphInvokableFactory(_PlanDetails); */ @updateableWithETag() @deleteableWithETag() -export class _Plan extends _GraphQueryableInstance { +export class _Plan extends _GraphInstance { public get tasks(): ITasks { return Tasks(this); @@ -69,7 +69,7 @@ export const Plan = graphInvokableFactory(_Plan); @defaultPath("plans") @getById(Plan) -export class _Plans extends _GraphQueryableCollection { +export class _Plans extends _GraphCollection { /** * Create a new Planner Plan. * @@ -94,7 +94,7 @@ export const Plans = graphInvokableFactory(_Plans); */ @defaultPath("details") @updateableWithETag() -export class _TaskDetails extends _GraphQueryableInstance { } +export class _TaskDetails extends _GraphInstance { } export interface ITaskDetails extends _TaskDetails, IUpdateableWithETag { } export const TaskDetails = graphInvokableFactory(_TaskDetails); @@ -103,7 +103,7 @@ export const TaskDetails = graphInvokableFactory(_TaskDetails); */ @updateableWithETag() @deleteableWithETag() -export class _Task extends _GraphQueryableInstance { +export class _Task extends _GraphInstance { public get details(): ITaskDetails { return TaskDetails(this); } @@ -116,7 +116,7 @@ export const Task = graphInvokableFactory(_Task); */ @defaultPath("tasks") @getById(Task) -export class _Tasks extends _GraphQueryableCollection { +export class _Tasks extends _GraphCollection { /** * Create a new Planner Task. * @@ -156,7 +156,7 @@ export const Tasks = graphInvokableFactory(_Tasks); */ @updateableWithETag() @deleteableWithETag() -export class _Bucket extends _GraphQueryableInstance { +export class _Bucket extends _GraphInstance { public get tasks(): ITasks { return Tasks(this); } @@ -170,7 +170,7 @@ export const Bucket = graphInvokableFactory(_Bucket); */ @defaultPath("buckets") @getById(Bucket) -export class _Buckets extends _GraphQueryableCollection { +export class _Buckets extends _GraphCollection { /** * Create a new Bucket. * diff --git a/packages/graph/search/types.ts b/packages/graph/search/types.ts index ece1ccf2f..e65b0c540 100644 --- a/packages/graph/search/types.ts +++ b/packages/graph/search/types.ts @@ -1,14 +1,14 @@ import { SearchRequest as ISearchRequestType, SearchResponse as ISearchResponseType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { GraphInit, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { GraphInit, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { graphPost } from "../operations.js"; /** * Search */ @defaultPath("search") -export class _Search extends _GraphQueryableInstance { +export class _Search extends _GraphInstance { public executeQuery(request: { requests: ISearchRequestType[] }): Promise { return graphPost(Search(this, "query"), body(request)); diff --git a/packages/graph/shares/types.ts b/packages/graph/shares/types.ts index ee8c7fa27..52554e2d5 100644 --- a/packages/graph/shares/types.ts +++ b/packages/graph/shares/types.ts @@ -1,5 +1,5 @@ import { defaultPath } from "../decorators.js"; -import { graphInvokableFactory, _GraphQueryableCollection, _GraphQueryableInstance } from "../graphqueryable.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; import { SharedDriveItem as ISharedDriveItem } from "@microsoft/microsoft-graph-types"; import { DriveItem, IDriveItem } from "../onedrive/types.js"; @@ -7,7 +7,7 @@ import { DriveItem, IDriveItem } from "../onedrive/types.js"; * Shares */ @defaultPath("shares") -export class _Shares extends _GraphQueryableCollection { +export class _Shares extends _GraphCollection { /** * Gets a share by share id or encoded url @@ -33,7 +33,7 @@ export const Shares = graphInvokableFactory(_Shares); /** * Share */ -export class _Share extends _GraphQueryableInstance { +export class _Share extends _GraphInstance { /** * Access the driveItem associated with this shared file diff --git a/packages/graph/sites/types.ts b/packages/graph/sites/types.ts index 0bdee042c..78f60dcab 100644 --- a/packages/graph/sites/types.ts +++ b/packages/graph/sites/types.ts @@ -1,12 +1,12 @@ import { defaultPath } from "../decorators.js"; -import { graphInvokableFactory, _GraphQueryableCollection, _GraphQueryableInstance } from "../graphqueryable.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; import { Site as ISiteType } from "@microsoft/microsoft-graph-types"; /** * Sites */ @defaultPath("sites") -export class _Sites extends _GraphQueryableCollection { +export class _Sites extends _GraphCollection { /** * Gets the team site for the group */ @@ -34,7 +34,7 @@ export const Sites = graphInvokableFactory(_Sites); /** * Site */ -export class _Site extends _GraphQueryableInstance { +export class _Site extends _GraphInstance { public get sites(): ISites { return Sites(this); diff --git a/packages/graph/subscriptions/types.ts b/packages/graph/subscriptions/types.ts index 417c6182f..42849fcc4 100644 --- a/packages/graph/subscriptions/types.ts +++ b/packages/graph/subscriptions/types.ts @@ -1,4 +1,4 @@ -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; import { body } from "@pnp/queryable"; import { Subscription as ISubscriptionType } from "@microsoft/microsoft-graph-types"; import { defaultPath, deleteable, IDeleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; @@ -9,7 +9,7 @@ import { graphPost } from "../operations.js"; */ @deleteable() @updateable() -export class _Subscription extends _GraphQueryableInstance { } +export class _Subscription extends _GraphInstance { } export interface ISubscription extends _Subscription, IDeleteable, IUpdateable { } export const Subscription = graphInvokableFactory(_Subscription); @@ -18,7 +18,7 @@ export const Subscription = graphInvokableFactory(_Subscription); */ @defaultPath("subscriptions") @getById(Subscription) -export class _Subscriptions extends _GraphQueryableCollection { +export class _Subscriptions extends _GraphCollection { /** * Create a new Subscription. * diff --git a/packages/graph/teams/types.ts b/packages/graph/teams/types.ts index 86196c8b7..c6c53acc5 100644 --- a/packages/graph/teams/types.ts +++ b/packages/graph/teams/types.ts @@ -1,4 +1,4 @@ -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory, GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, GraphInstance } from "../graphqueryable.js"; import { body, HeaderParse } from "@pnp/queryable"; import { updateable, IUpdateable, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; import { graphPost } from "../operations.js"; @@ -16,7 +16,7 @@ import { */ @defaultPath("team") @updateable() -export class _Team extends _GraphQueryableInstance { +export class _Team extends _GraphInstance { public get primaryChannel(): IChannel { return Channel(this, "primaryChannel"); @@ -95,7 +95,7 @@ export class _Team extends _GraphQueryableInstance { } public getOperationById(id: string): Promise { - return GraphQueryableInstance(this, `operations/${id}`)(); + return GraphInstance(this, `operations/${id}`)(); } } export interface ITeam extends _Team, IUpdateable { } @@ -106,7 +106,7 @@ export const Team = graphInvokableFactory(_Team); */ @defaultPath("teams") @getById(Team) -export class _Teams extends _GraphQueryableCollection { +export class _Teams extends _GraphCollection { public async create(team: ITeamType): Promise { const creator = Teams(this, null).using(HeaderParse()); @@ -130,7 +130,7 @@ export const Teams = graphInvokableFactory(_Teams); /** * Channel */ -export class _Channel extends _GraphQueryableInstance { +export class _Channel extends _GraphInstance { public get tabs(): ITabs { return Tabs(this); } @@ -147,7 +147,7 @@ export const Channel = graphInvokableFactory(_Channel); */ @defaultPath("channels") @getById(Channel) -export class _Channels extends _GraphQueryableCollection { +export class _Channels extends _GraphCollection { /** * Creates a new Channel in the Team @@ -176,7 +176,7 @@ export const Channels = graphInvokableFactory(_Channels); /** * Channel */ -export class _Message extends _GraphQueryableInstance { } +export class _Message extends _GraphInstance { } export interface IMessage extends _Message { } export const Message = graphInvokableFactory(_Message); @@ -185,7 +185,7 @@ export const Message = graphInvokableFactory(_Message); */ @defaultPath("messages") @getById(Message) -export class _Messages extends _GraphQueryableCollection { +export class _Messages extends _GraphCollection { /** * Creates a new Channel in the Team @@ -217,7 +217,7 @@ export const Messages = graphInvokableFactory(_Messages); @defaultPath("tab") @updateable() @deleteable() -export class _Tab extends _GraphQueryableInstance { } +export class _Tab extends _GraphInstance { } export interface ITab extends _Tab, IUpdateable, IDeleteable { } export const Tab = graphInvokableFactory(_Tab); @@ -226,7 +226,7 @@ export const Tab = graphInvokableFactory(_Tab); */ @defaultPath("tabs") @getById(Tab) -export class _Tabs extends _GraphQueryableCollection { +export class _Tabs extends _GraphCollection { /** * Adds a tab to the channel @@ -292,7 +292,7 @@ export interface ITeamCreateResult { * InstalledApp */ @deleteable() -export class _InstalledApp extends _GraphQueryableInstance { +export class _InstalledApp extends _GraphInstance { public upgrade(): Promise { return graphPost(InstalledApp(this, "upgrade")); } @@ -305,7 +305,7 @@ export const InstalledApp = graphInvokableFactory(_InstalledApp); */ @defaultPath("installedApps") @getById(InstalledApp) -export class _InstalledApps extends _GraphQueryableCollection { +export class _InstalledApps extends _GraphCollection { /** * Adds an installed app to the collection diff --git a/packages/sp/behaviors/spfx.ts b/packages/sp/behaviors/spfx.ts index d5e64aba6..a31e9198d 100644 --- a/packages/sp/behaviors/spfx.ts +++ b/packages/sp/behaviors/spfx.ts @@ -22,8 +22,23 @@ export interface ISPFXContext { }; } +class SPFxTokenNullOrUndefinedError extends Error { + + constructor(behaviorName: string) { + super(`SPFx Context supplied to ${behaviorName} Behavior is null or undefined.`); + } + + public static check(behaviorName: string, context?: ISPFXContext): context is ISPFxContext | never { + if (typeof context === "undefined" || context === null) { + throw SPFxTokenNullOrUndefinedError(behaviorName); + } + } +} + export function SPFxToken(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFxToken", context); + return (instance: Queryable) => { instance.on.auth.replace(async function (url: URL, init: RequestInit) { @@ -43,6 +58,8 @@ export function SPFxToken(context: ISPFXContext): TimelinePipe { export function SPFx(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFx", context); + return (instance: Queryable) => { instance.using( diff --git a/packages/sp/items/get-all.ts b/packages/sp/items/get-all.ts deleted file mode 100644 index 194e77fdf..000000000 --- a/packages/sp/items/get-all.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { InjectHeaders } from "@pnp/queryable"; -import { _Items, Items, PagedItemCollection } from "./types.js"; - -declare module "./types" { - interface _Items { - getAll(requestSize?: number, acceptHeader?: string): Promise; - } - /** - * Gets all the items in a list, regardless of count. Does not support batching or caching - * - * @param requestSize Number of items to return in each request (Default: 2000) - * @param acceptHeader Allows for setting the value of the Accept header for SP 2013 support - */ - interface IItems { - getAll(requestSize?: number, acceptHeader?: string): Promise; - } -} - -_Items.prototype.getAll = async function (this: _Items, requestSize = 2000, acceptHeader = "application/json;odata=nometadata"): Promise { - - // this will be used for the actual query - // and we set no metadata here to try and reduce traffic - const items = Items(this, "").top(requestSize).using(InjectHeaders({ - "Accept": acceptHeader, - })); - - // let's copy over the odata query params that can be applied - // $top - allow setting the page size this way (override what we did above) - // $select - allow picking the return fields (good behavior) - // $filter - allow setting a filter, though this may fail for large lists - // $expand - allow expanding fields for filter/select support - this.query.forEach((v: string, k: string) => { - if (/^\$select|filter|top|expand$/i.test(k)) { - items.query.set(k, v); - } - }); - - // this will eventually hold the items we return - const itemsCollector: T[] = []; - - // action that will gather up our results recursively - const gatherer = (last: PagedItemCollection) => { - - // collect that set of results - itemsCollector.push(...last.results); - - // if we have more, repeat - otherwise resolve with the collected items - return last.hasNext ? last.getNext().then(gatherer) : itemsCollector; - }; - - return items.getPaged().then(gatherer); -}; diff --git a/packages/sp/items/index.ts b/packages/sp/items/index.ts index fd9563fe2..d878c1601 100644 --- a/packages/sp/items/index.ts +++ b/packages/sp/items/index.ts @@ -12,7 +12,6 @@ export { IItemAddResult, IItemUpdateResult, IItemUpdateResultData, - PagedItemCollection, IItemDeleteParams, IItemParentInfos, } from "./types.js"; diff --git a/packages/sp/items/types.ts b/packages/sp/items/types.ts index af556e6a9..6eb4ef1b2 100644 --- a/packages/sp/items/types.ts +++ b/packages/sp/items/types.ts @@ -8,8 +8,9 @@ import { ISPQueryable, SPInstance, ISPInstance, + SPCollection, } from "../spqueryable.js"; -import { hOP } from "@pnp/core"; +import { hOP, objectDefinedNotNull } from "@pnp/core"; import { extractWebUrl } from "@pnp/sp"; import { IListItemFormUpdateValue, List } from "../lists/types.js"; import { body, headers, parseBinderWithErrorCheck, parseODataJSON } from "@pnp/queryable"; @@ -23,7 +24,7 @@ import { IResourcePath } from "../utils/to-resource-path.js"; * */ @defaultPath("items") -export class _Items extends _SPCollection { +export class _Items extends _SPCollection { /** * Gets an Item by id @@ -59,12 +60,50 @@ export class _Items extends _SPCollection { return this; } - /** - * Gets a collection designed to aid in paging through data - * - */ - public getPaged(): Promise> { - return this.using(PagedItemParser(this))(); + public [Symbol.asyncIterator]() { + + const q = SPCollection(this).using(parseBinderWithErrorCheck(async (r) => { + + const json = await r.json(); + const nextUrl = hOP(json, "d") && hOP(json.d, "__next") ? json.d.__next : json["odata.nextLink"]; + + return >{ + hasNext: typeof nextUrl === "string" && nextUrl.length > 0, + nextLink: nextUrl, + value: parseODataJSON(json), + }; + })); + + const queryParams = ["$top", "$select", "$expand", "$filter", "$orderby", "$skiptoken"]; + + for (let i = 0; i < queryParams.length; i++) { + const param = this.query.get(queryParams[i]); + if (objectDefinedNotNull(param)) { + q.query.set(queryParams[i], param); + } + } + + return >{ + + _next: q, + + async next() { + + if (this._next === null) { + return { done: true, value: undefined }; + } + + const result: IPagedResult = await this._next(); + + if (result.hasNext) { + this._next = SPCollection([this._next, result.nextLink]); + return { done: false, value: result.value }; + } else { + this._next = null; + return { done: false, value: result.value }; + } + }, + }; } /** @@ -311,41 +350,10 @@ export class _ItemVersion extends _SPInstance { export interface IItemVersion extends _ItemVersion, IDeleteableWithETag { } export const ItemVersion = spInvokableFactory(_ItemVersion); -/** - * Provides paging functionality for list items - */ -export class PagedItemCollection { - - constructor(private parent: _Items, private nextUrl: string, public results: T) { } - - /** - * If true there are more results available in the set, otherwise there are not - */ - public get hasNext(): boolean { - return typeof this.nextUrl === "string" && this.nextUrl.length > 0; - } - - /** - * Gets the next set of results, or resolves to null if no results are available - */ - public async getNext(): Promise | null> { - - if (this.hasNext) { - const items = Items([this.parent, this.nextUrl], ""); - return items.getPaged(); - } - - return null; - } -} - -function PagedItemParser(parent: _Items) { - - return parseBinderWithErrorCheck(async (r) => { - const json = await r.json(); - const nextUrl = hOP(json, "d") && hOP(json.d, "__next") ? json.d.__next : json["odata.nextLink"]; - return new PagedItemCollection(parent, nextUrl, parseODataJSON(json)); - }); +export interface IPagedResult { + value: T; + hasNext: boolean; + nextLink: string; } function ItemUpdatedParser() { diff --git a/test/graph/paging.ts b/test/graph/paging.ts index 844a56a3c..49b3b601b 100644 --- a/test/graph/paging.ts +++ b/test/graph/paging.ts @@ -5,12 +5,12 @@ import "@pnp/graph/sites"; import "@pnp/graph/lists"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; import { getRandomString } from "@pnp/core"; -import { graphPost, GraphQueryableCollection, IGraphQueryableCollection } from "@pnp/graph"; +import { graphPost, GraphCollection, IGraphCollection } from "@pnp/graph"; import { body } from "@pnp/queryable"; describe("Groups", function () { - let itemsCol: IGraphQueryableCollection; + let itemsCol: IGraphCollection; before(async function () { @@ -26,7 +26,7 @@ describe("Groups", function () { list: { "template": "genericList" }, }); - itemsCol = GraphQueryableCollection(site.lists.getById(listInfo.data.id), "items"); + itemsCol = GraphCollection(site.lists.getById(listInfo.data.id), "items"); for (let i = 0; i < 11; i++) { await graphPost(itemsCol, body({ @@ -41,7 +41,7 @@ describe("Groups", function () { const allUsers = []; - for await (const users of this.pnp.graph.users.top(20).select("displayName").paged()) { + for await (const users of this.pnp.graph.users.top(20).select("displayName")) { allUsers.push(...users); } @@ -56,7 +56,7 @@ describe("Groups", function () { const allGroups = []; - for await (const groups of this.pnp.graph.groups.top(20).select("displayName").paged()) { + for await (const groups of this.pnp.graph.groups.top(20).select("displayName")) { allGroups.push(...groups); } @@ -74,7 +74,7 @@ describe("Groups", function () { const allItems = []; - for await (const items of itemsCol.paged()) { + for await (const items of itemsCol) { allItems.push(...items); } From 5ae21e1e0df87913a07d9879f915a834eee89067 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 25 Jul 2023 20:09:43 -0400 Subject: [PATCH 002/171] fixing test bugs --- test/sp/items.ts | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/test/sp/items.ts b/test/sp/items.ts index 7a25217f0..36ac4c2d3 100644 --- a/test/sp/items.ts +++ b/test/sp/items.ts @@ -69,33 +69,17 @@ describe("Items", function () { return expect(list.items.getById(item.Id)()).to.eventually.be.fulfilled; }); - it("getPaged", async function () { - - let page = await list.items.top(2).getPaged(); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(page.hasNext).to.be.true; - expect(page.results.length).to.eql(2); - page = await page.getNext(); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(page.hasNext).to.be.true; - expect(page.results.length).to.eql(2); - }); - it("getAll", async function () { + const a = []; const itemCount = await list.select("ItemCount")().then(r => r.ItemCount); - const page = await list.items.getAll(); - return expect(page.length).to.eq(itemCount); + for await (const items of list.items) { + a.push(...items); + } + return expect(a.length).to.eq(itemCount); }); - it("getAll top(2)", async function () { - - const itemCount = await list.select("ItemCount")().then(r => r.ItemCount); - const page = await list.items.top(2).getAll(); - return expect(page.length).to.eq(itemCount); - }); - it("effectiveBasePermissions", async function () { const item = await list.items.top(1)().then(r => r[0]); From 2078dd9bb5c17b25c8f217a148008d516f42babf Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 26 Jul 2023 07:16:53 -0400 Subject: [PATCH 003/171] fixing test bugs --- test/sp/items.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/sp/items.ts b/test/sp/items.ts index 36ac4c2d3..42cb34e6e 100644 --- a/test/sp/items.ts +++ b/test/sp/items.ts @@ -2,7 +2,6 @@ import { getRandomString } from "@pnp/core"; import { expect } from "chai"; import "@pnp/sp/lists/web"; import "@pnp/sp/items/list"; -import "@pnp/sp/items/get-all"; import "@pnp/sp/batching"; import { IList } from "@pnp/sp/lists"; import testSPInvokables from "../test-invokable-props.js"; From f33d47ca5a00efb98886c460e234fd1efc9f0b28 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 26 Jul 2023 13:42:01 -0400 Subject: [PATCH 004/171] adding pnpTest WIP --- test/core/assumptions.ts | 9 ++- test/core/storage.ts | 29 +++---- test/core/timeline.ts | 25 +++--- test/core/util.ts | 138 +++++++++++++++++++-------------- test/graph/batch.ts | 26 ++++--- test/graph/calendars.ts | 2 + test/graph/columns.ts | 138 ++++++++++++++++++++++----------- test/graph/contacts.ts | 2 + test/graph/content-types.ts | 135 ++++++++++++++++++++++---------- test/graph/directoryobjects.ts | 87 ++++++++++++--------- test/graph/groups.ts | 84 +++++++++----------- test/graph/lists.ts | 42 ++++++---- test/pnp-test.ts | 10 +++ test/test-recording.ts | 3 + 14 files changed, 447 insertions(+), 283 deletions(-) diff --git a/test/core/assumptions.ts b/test/core/assumptions.ts index 780047807..38e17eafe 100644 --- a/test/core/assumptions.ts +++ b/test/core/assumptions.ts @@ -3,10 +3,11 @@ // our assumptions remain correct import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; describe("Assumptions", function () { - it("JS should merge objects how we expect", function () { + it("JS should merge objects how we expect", pnpTest("3576d9bf-aa31-4b3f-8400-104513956328", function () { const o = {}; @@ -58,9 +59,9 @@ describe("Assumptions", function () { expect(test5, "test 5").to.eql({}); - }); + })); - it("should destructure how we assume", function () { + it("should destructure how we assume", pnpTest("67a889c9-a45a-4978-a181-91d5d096edeb", function () { const props = { yes: false, @@ -95,5 +96,5 @@ describe("Assumptions", function () { expect(title).to.eq("hello"); expect(another).to.eq("something"); - }); + })); }); diff --git a/test/core/storage.ts b/test/core/storage.ts index 81953379e..e0017430f 100644 --- a/test/core/storage.ts +++ b/test/core/storage.ts @@ -1,5 +1,6 @@ import { expect } from "chai"; import { PnPClientStorage } from "@pnp/core"; +import { pnpTest } from "../pnp-test.js"; describe("Storage", function () { @@ -7,54 +8,54 @@ describe("Storage", function () { let storage: PnPClientStorage; - beforeEach(function () { + beforeEach(pnpTest("71bacb4d-2a28-4da3-a09b-7b8625345586", function () { storage = new PnPClientStorage(); - }); + })); - it("Add and Get a value (local)", function () { + it("Add and Get a value (local)", pnpTest("4986f3f6-3b31-4ac5-9746-62384a108ae1", function () { storage.local.put("test", "value"); const ret = storage.local.get("test"); expect(ret).to.eq("value"); - }); + })); - it("Add two values, remove one and still return the other (local)", function () { + it("Add two values, remove one and still return the other (local)", pnpTest("b370742a-0eb9-40f5-bb75-43b667f51181", function () { storage.local.put("test1", "value1"); storage.local.put("test2", "value2"); storage.local.delete("test1"); const ret = storage.local.get("test2"); expect(ret).to.eq("value2"); - }); + })); - it("Use getOrPut to add a value using a getter function and return it (local)", function () { + it("Use getOrPut to add a value using a getter function and return it (local)", pnpTest("6f8a3a57-6e1e-4e26-9c86-2bfb05085c5e", function () { storage.local.getOrPut("test", function () { return new Promise(() => "value"); }).then(function () { const ret = storage.local.get("test"); expect(ret).to.eq("value"); }); - }); + })); - it("Add and Get a value (session)", function () { + it("Add and Get a value (session)", pnpTest("71cc7886-18d7-4362-b232-07afd7d6b750", function () { storage.session.put("test", "value"); const ret = storage.session.get("test"); expect(ret).to.eq("value"); - }); + })); - it("Add two values, remove one and still return the other (session)", function () { + it("Add two values, remove one and still return the other (session)", pnpTest("8c570f93-d6aa-49f3-a740-d884f1832b59", function () { storage.session.put("test1", "value1"); storage.session.put("test2", "value2"); storage.session.delete("test1"); const ret = storage.session.get("test2"); expect(ret).to.eq("value2"); - }); + })); - it("Use getOrPut to add a value using a getter function and return it (session)", function () { + it("Use getOrPut to add a value using a getter function and return it (session)", pnpTest("0c25edf5-120e-48d3-b6cd-e2da49391d21", function () { storage.session.getOrPut("test", function () { return new Promise(() => "value"); }).then(function () { const ret = storage.session.get("test"); expect(ret).to.eq("value"); }); - }); + })); }); }); diff --git a/test/core/timeline.ts b/test/core/timeline.ts index a3ab8543e..3d509f362 100644 --- a/test/core/timeline.ts +++ b/test/core/timeline.ts @@ -1,5 +1,6 @@ import { Timeline, asyncReduce } from "@pnp/core"; import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; const TestingMoments = { first: asyncReduce<(a: number) => Promise<[number]>>(), @@ -62,7 +63,7 @@ describe("Timeline", function () { return expect(h).to.eq(2); }); - it("Should process moments 2", async function () { + it("Should process moments 2", pnpTest("8267d3af-554d-44d8-8b00-e33ce7d93f1d", async function () { const tl = new TestTimeline(); @@ -78,9 +79,9 @@ describe("Timeline", function () { const h = await tl.go(0); return expect(h).to.eq(7); - }); + })); - it("Prepend works as expected", function () { + it("Prepend works as expected", pnpTest("890664f0-0e7f-4aa5-bc73-55fa4b05b27b", function () { const tl = new TestTimeline(); @@ -97,9 +98,9 @@ describe("Timeline", function () { expect(observers[0]).to.eq(f3); expect(observers[1]).to.eq(f1); expect(observers[2]).to.eq(f2); - }); + })); - it("Clear works as expected", function () { + it("Clear works as expected", pnpTest("66b43d34-7e34-4506-abc9-4d12b8286937", function () { const tl = new TestTimeline(); @@ -120,9 +121,9 @@ describe("Timeline", function () { const observers2 = tl.on.first.toArray(); expect(observers2).length(0); - }); + })); - it("Replace works as expected", function () { + it("Replace works as expected", pnpTest("b162d48e-2ddd-4b36-8fee-fc3c9ef18838", function () { const tl = new TestTimeline(); @@ -144,9 +145,9 @@ describe("Timeline", function () { expect(observers2).length(1); expect(observers2[0]).to.eq(f1); - }); + })); - it("Logging works as expected", function () { + it("Logging works as expected", pnpTest("0506ad5a-7d00-4f0e-b436-46c90faadd9d", function () { const tl = new TestTimeline(); @@ -161,9 +162,9 @@ describe("Timeline", function () { tl.log("Test 2", 0); expect(messages.length).to.eq(2); - }); + })); - it("Lifecycle works as expected", async function () { + it("Lifecycle works as expected", pnpTest("a7dda9ad-cb00-4ad8-b717-4de294e02ad2", async function () { const tl = new TestTimeline(); @@ -201,5 +202,5 @@ describe("Timeline", function () { expect(tracker[1]).to.eq(2); expect(tracker[2]).to.eq(3); expect(tracker[3]).to.eq(4); - }); + })); }); diff --git a/test/core/util.ts b/test/core/util.ts index 8c953374e..4a032bfeb 100644 --- a/test/core/util.ts +++ b/test/core/util.ts @@ -13,111 +13,122 @@ import { hOP, getHashCode, } from "@pnp/core"; +import { pnpTest } from "../pnp-test.js"; // tslint:disable:no-unused-expression describe("dateAdd", function () { - it("Add 5 Minutes", function () { + + it("Add 5 Minutes", pnpTest("e5eeda9b-2378-430c-a9d9-ac952c0b4f8e", function () { const testDate = new Date(); const checkDate = new Date(testDate.toLocaleString()); checkDate.setMinutes(testDate.getMinutes() + 5); expect(dateAdd(testDate, "minute", 5).getMinutes()).to.eq(checkDate.getMinutes()); - }); + })); - it("Add 2 Years", function () { + it("Add 2 Years", pnpTest("2a25ffc5-4f96-4f59-9a57-26ea74d1a3b5", function () { const testDate = new Date(); const checkDate = new Date(testDate.toLocaleString()); checkDate.setFullYear(testDate.getFullYear() + 2); expect(dateAdd(testDate, "year", 2).getFullYear()).to.eq(checkDate.getFullYear()); - }); + })); + }); describe("combine", function () { - it("Path (1)", function () { + + it("Path (1)", pnpTest("e8cedd77-c58d-4277-9465-6afa2e73adae", function () { expect(combine("/path/", "path2", "path3", "/path4")).to.eq("path/path2/path3/path4"); - }); + })); - it("Path (2)", function () { + it("Path (2)", pnpTest("1b9f2dc6-5b17-4573-8a65-2ef651b8972c", function () { expect(combine("http://site/path/", "/path4/page.aspx")).to.eq("http://site/path/path4/page.aspx"); - }); + })); - it("Path (3)", function () { + it("Path (3)", pnpTest("df90d9c6-c841-42f4-88d0-fb4d1a0451a5", function () { expect(combine(null, "path2", undefined, null, "/path4")).to.eq("path2/path4"); - }); + })); - it("Path (4)", function () { + it("Path (4)", pnpTest("b8564799-f0cb-4183-81a9-564e1480eba4", function () { expect(combine(null, "path2", undefined, "", null, "/path4")).to.eq("path2/path4"); - }); + })); - it("No Path", function () { + it("No Path", pnpTest("502a081f-144e-45c8-8115-c1ad4bc75d72", function () { expect(combine()).to.eq(""); - }); + })); + }); describe("getRandomString", function () { - it("Length 5", function () { + + it("Length 5", pnpTest("6c726b85-720a-4793-b5f6-2d302d16eb5b", function () { const j = getRandomString(5); expect(j).to.be.a("string"); expect(j).to.have.length(5); - }); + })); - it("Length 28", function () { + it("Length 28", pnpTest("26afbb93-8d8d-4f2a-a1c0-b3a0fb78c6bb", function () { const j = getRandomString(28); expect(j).to.be.a("string"); expect(j).to.have.length(28); - }); + })); + }); describe("getGUID", function () { - it("Test Pattern", function () { + + it("Test Pattern", pnpTest("78cd5f6d-d30a-4c0c-b44f-f55e34e39b06", function () { expect(getGUID()).to.match(/[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}/i); - }); + })); + }); describe("isFunc", function () { - it("True", function () { + + it("True", pnpTest("ff0020e6-0e1b-4b12-a4a1-8a4b2fc8fcdb", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc(function () { return; })).to.be.true; - }); + })); - it("False", function () { + it("False", pnpTest("ff0020e6-0e1b-4b12-a4a1-8a4b2fc8fcdb", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc({ val: 0 })).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc(null)).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc(undefined)).to.be.false; - }); + })); }); describe("objectDefinedNotNull", function () { - it("defined", function () { + it("defined", pnpTest("71a58271-6205-4a7b-b651-9322a36398cc", function () { return expect(objectDefinedNotNull({})).to.be.true; - }); + })); - it("null", function () { + it("null", pnpTest("56af5be3-06e1-41b9-8183-2a9d7654052b", function () { return expect(objectDefinedNotNull(null)).to.be.false; - }); + })); - it("undefined", function () { + it("undefined", pnpTest("65dcfc1f-1c3b-488d-9bc5-3a5dd36e06a3", function () { return expect(objectDefinedNotNull(undefined)).to.be.false; - }); + })); }); describe("isArray", function () { - it("True", function () { + + it("True", pnpTest("3ad9a949-f147-47a7-868c-e1ae0fc9d65e", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isArray([1, 2, 3, 4])).to.be.true; - }); + })); - it("False", function () { + it("False", pnpTest("d2bb66ab-b7ed-4e3d-828a-2044d4a4ffed", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isArray(null)).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions @@ -128,78 +139,89 @@ describe("isArray", function () { expect(isArray({})).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isArray(undefined)).to.be.false; - }); + })); + }); describe("isUrlAbsolute", function () { - it("Yes (1)", function () { + + it("Yes (1)", pnpTest("edc77eae-ddd3-427c-aae8-863e79583c05", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("https://something.com")).to.be.true; - }); + })); - it("Yes (2)", function () { + it("Yes (2)", pnpTest("25999d21-cc28-4582-bdb5-31fa59af1191", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("//something.com")).to.be.true; - }); + })); - it("Yes (3)", function () { + it("Yes (3)", pnpTest("32547e58-299a-4979-a875-6d2dfdf324cc", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("http://something.com")).to.be.true; - }); + })); - it("No (1)", function () { + it("No (1)", pnpTest("2ee70c05-0f90-47ce-a6cf-801bf459cfca", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("/sites/dev")).to.be.false; - }); + })); - it("No (2)", function () { + it("No (2)", pnpTest("7b6b7504-fd43-4c4d-ad65-e944a11148e9", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("sites/dev")).to.be.false; - }); + })); - it("Empty", function () { + it("Empty", pnpTest("38c0cfa1-e518-47e9-a09a-7e941516dfb0", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("")).to.be.false; - }); + })); + }); describe("stringIsNullOrEmpty", function () { - it("Yes (1)", function () { + + it("Yes (1)", pnpTest("2c88a924-49d4-4468-b4ed-47dc59341499", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(stringIsNullOrEmpty(null)).to.be.true; - }); + })); - it("Yes (2)", function () { + it("Yes (2)", pnpTest("146cfe8e-3e74-420b-bde7-feec421fb3a8", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(stringIsNullOrEmpty("")).to.be.true; - }); + })); - it("No", function () { + it("No", pnpTest("e843faac-0423-44ee-8206-00468296ea61", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(stringIsNullOrEmpty("not empty")).to.be.false; - }); + })); + }); describe("jsS", function () { + it("Sucess", function () { expect(jsS({ test: true })).to.eq("{\"test\":true}"); }); + }); describe("hOP", function () { - it("Success", function () { + + it("Success", pnpTest("f1d3a279-c51e-4c1b-a3d3-3d8ef3c747f6", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(hOP({ test: true }, "test")).to.be.true; - }); - it("Fail", function () { + })); + + it("Fail", pnpTest("d65fb0d9-be6e-4a3d-9ba9-44e85e8d6288", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(hOP({ test: true }, "nope")).to.be.false; - }); + })); }); describe("getHashCode", function () { - it("Success", function () { + + it("Success", pnpTest("dcd0ccfc-b4ff-4d9f-bd37-8a1b14d2baea", function () { expect(getHashCode("test string value")).to.be.a("number"); expect(getHashCode("test string value !@#$%^&*()_+{}<>,.?/'\"")).to.be.a("number"); - }); + })); + }); diff --git a/test/graph/batch.ts b/test/graph/batch.ts index ab6602144..69016324e 100644 --- a/test/graph/batch.ts +++ b/test/graph/batch.ts @@ -3,6 +3,7 @@ import "@pnp/graph/groups"; import "@pnp/graph/sites"; import { createBatch } from "@pnp/graph/batching"; import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; describe("Batching", function () { @@ -13,7 +14,7 @@ describe("Batching", function () { } }); - it("Single Request", async function () { + it("Single Request", pnpTest("104a9d10-ef6f-485f-961e-45014147f52a", async function () { const order: number[] = []; const expected: number[] = [1, 2]; @@ -27,9 +28,9 @@ describe("Batching", function () { order.push(2); return expect(order.toString()).to.eql(expected.toString()); - }); + })); - it("Even # Requests", async function () { + it("Even # Requests", pnpTest("52bb031b-2a18-46e7-bb1b-8c0085812e0d", async function () { const order: number[] = []; const expected: number[] = [1, 2, 3]; @@ -48,9 +49,9 @@ describe("Batching", function () { order.push(3); return expect(order.toString()).to.eql(expected.toString()); - }); + })); - it("Odd # Requests", async function () { + it("Odd # Requests", pnpTest("0f5f9c29-7da8-483b-8c7d-4a6a9656bb92", async function () { const order: number[] = []; const expected: number[] = [1, 2, 3, 4]; @@ -72,9 +73,9 @@ describe("Batching", function () { order.push(4); return expect(order.toString()).to.eql(expected.toString()); - }); + })); - it("Should work with the same Queryable when properly cloned (Advanced)", async function () { + it("Should work with the same Queryable when properly cloned (Advanced)", pnpTest("76fbb5bf-dfc5-4230-a9df-ef1ecc2ee7a4", async function () { const users = this.pnp.graph.users; @@ -87,9 +88,9 @@ describe("Batching", function () { this.pnp.graph.users.using(batchedBehavior)(); return expect(execute()).to.eventually.be.fulfilled; - }); + })); - it("Should work with the same Queryable when properly cloned by factory (Advanced)", async function () { + it("Should work with the same Queryable when properly cloned by factory (Advanced)", pnpTest("d0ba8747-a776-4f4e-be09-6a6126dc1e06", async function () { const users = this.pnp.graph.users; @@ -101,9 +102,9 @@ describe("Batching", function () { Users(users).using(batchedBehavior)(); return expect(execute()).to.eventually.be.fulfilled; - }); + })); - it("Should fail with the same Queryable (Advanced)", async function () { + it("Should fail with the same Queryable (Advanced)", pnpTest("ca3ae3bb-1729-47d9-abea-e531cd7817dc", async function () { const users = this.pnp.graph.users; @@ -121,5 +122,6 @@ describe("Batching", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(p2).to.eventually.be.fulfilled; - }); + })); + }); diff --git a/test/graph/calendars.ts b/test/graph/calendars.ts index 68251730b..69bd1f0bc 100644 --- a/test/graph/calendars.ts +++ b/test/graph/calendars.ts @@ -5,6 +5,8 @@ import { HttpRequestError } from "@pnp/queryable"; import { stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; +// TODO:: test recording setup + describe("Calendar", function () { let testUserName = ""; diff --git a/test/graph/columns.ts b/test/graph/columns.ts index 161a9ab52..eaff39179 100644 --- a/test/graph/columns.ts +++ b/test/graph/columns.ts @@ -9,6 +9,7 @@ import { ISite } from "@pnp/graph/sites"; import { IContentType } from "@pnp/graph/content-types"; import { getRandomString } from "@pnp/core"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { pnpTest } from "../pnp-test.js"; describe("Columns", function () { @@ -31,12 +32,16 @@ describe("Columns", function () { }, }; - before(async function () { + before(pnpTest("7fa03413-981c-4d51-be83-8b1b9155985a", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); } + const props = await this.props({ + templateName: getRandomString(5) + "Columns", + }); + site = await getTestingGraphSPSite(this); const ctTemplate = JSON.parse(JSON.stringify({ @@ -50,7 +55,7 @@ describe("Columns", function () { id: "0x0100CDB27E23CEF44850904C80BD666FA645", })); - ctTemplate.name += getRandomString(5) + "Columns"; + ctTemplate.name += props.templateName; const addCT = await site.contentTypes.add(ctTemplate); contentType = addCT.contentType; @@ -61,7 +66,7 @@ describe("Columns", function () { }); list = addList.list; - }); + })); after(async function () { if (list != null) { @@ -73,15 +78,16 @@ describe("Columns", function () { }); describe("Site", function () { - it("columns", async function () { + + it("columns", pnpTest("052a70b6-953b-4267-800d-900b0bf1539d", async function () { const columns = await site.columns(); expect(columns).to.be.an("array"); if (columns.length > 0) { expect(columns[0]).to.haveOwnProperty("id"); } - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("e2ebde42-c5a9-4301-9fdc-92dd711d5414", async function () { let passed = true; const columns = await site.columns(); if (columns.length > 0) { @@ -89,33 +95,50 @@ describe("Columns", function () { passed = (column.id === columns[0].id); } return expect(passed).is.true; - }); + })); + + it("add", pnpTest("7880c343-29a8-4c44-9fb3-4b39f4309c36", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Add", + }); - it("add", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); columnTemplate.name += "Add"; - columnTemplate.displayName += getRandomString(5) + "Add"; + columnTemplate.displayName += props.displayName; const c = await site.columns.add(columnTemplate); await site.columns.getById(c.data.id).delete(); return expect((c.data.name === columnTemplate.name)).to.be.true; - }); + })); + + it("update", pnpTest("8ce610b0-3139-4e2b-9d90-47ad43247250", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Update", + displayName: getRandomString(5) + "Update", + }); - it("update", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Update"; - columnTemplate.displayName += getRandomString(5) + "Update"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const newColumnName = `${columnTemplate.displayName}-CHANGED`; const c = await site.columns.add(columnTemplate); await site.columns.getById(c.data.id).update({ displayName: newColumnName }); const updateColumn = await site.columns.getById(c.data.id)(); await site.columns.getById(c.data.id).delete(); return expect((updateColumn.displayName === newColumnName)).to.be.true; - }); + })); + + it("delete", pnpTest("bcb9bafc-4d9c-40d3-a335-b6ff9650e25c", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Update", + displayName: getRandomString(5) + "Update", + }); - it("delete", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Delete"; - columnTemplate.displayName += getRandomString(5) + "Delete"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const c = await site.columns.add(columnTemplate); await site.columns.getById(c.data.id).delete(); let deletedColumn: ColumnDefinition = null; @@ -125,24 +148,30 @@ describe("Columns", function () { // do nothing } return expect(deletedColumn).to.be.null; - }); + })); }); describe("Content-Type", function () { let siteColumn; - const columnTemplateName = sampleColumn.name + getRandomString(5) + "SiteColumn"; + let columnTemplateName; - before(async function () { + before(pnpTest("7b7c0559-06c7-4c7d-881e-bfc33d47c31a", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); } + const props = await this.props({ + columnTemplateName: sampleColumn.name + getRandomString(5) + "SiteColumn", + }); + + columnTemplateName = props.columnTemplateName; + const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); columnTemplate.name = columnTemplateName; columnTemplate.displayName = columnTemplateName; const addSiteCT = await site.columns.add(columnTemplate); siteColumn = addSiteCT.column; - }); + })); after(async function () { if (siteColumn != null) { @@ -150,12 +179,12 @@ describe("Columns", function () { } }); - it("columns", async function () { + it("columns", pnpTest("0312da75-4067-4d63-bb2c-e5f0d35f4b53", async function () { const columns = await contentType.columns(); return expect(columns).to.be.an("array") && expect(columns[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("d518e3f7-566d-4404-8e97-6cea48d5b1d1", async function () { let passed = true; const columns = await contentType.columns(); if (columns.length > 0) { @@ -163,23 +192,23 @@ describe("Columns", function () { passed = (column.id === columns[0].id); } return expect(passed).is.true; - }); + })); - it("addRef", async function () { + it("addRef", pnpTest("9dd8c09e-9e07-42e2-ac2d-5685966d2aa0", async function () { const c = await contentType.columns.addRef(siteColumn); await contentType.columns.getById(c.data.id).delete(); return expect((c.data.name === columnTemplateName)).to.be.true; - }); + })); // Site column properties cannot be updated in content type. - it.skip("update", async function () { + it.skip("update", pnpTest("c3afb14e-3f42-48e8-9ea6-43be8d231762", async function () { const c = await contentType.columns.addRef(siteColumn); const updateColumnResults = await contentType.columns.getById(c.data.id).update({ propagateChanges: true }); await contentType.columns.getById(c.data.id).delete(); return expect((updateColumnResults.propagateChanges)).to.be.true; - }); + })); - it("delete", async function () { + it("delete", pnpTest("4d6e18c1-abe7-4cd4-a90e-1c1715d5e1ce", async function () { const c = await contentType.columns.addRef(siteColumn); await contentType.columns.getById(c.data.id).delete(); let deletedColumn: ColumnDefinition = null; @@ -189,16 +218,16 @@ describe("Columns", function () { // do nothing } return expect(deletedColumn).to.be.null; - }); + })); }); describe("List", function () { - it("columns", async function () { + it("columns", pnpTest("2b7ff4ba-7b59-49ad-9d98-cda8bec9a012", async function () { const columns = await list.columns(); return expect(columns).to.be.an("array") && expect(columns[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("1560f120-d7da-491a-b27b-48c7b7d124ca", async function () { let passed = true; const columns = await list.columns(); if (columns.length > 0) { @@ -206,33 +235,50 @@ describe("Columns", function () { passed = (column.id === columns[0].id); } return expect(passed).is.true; - }); + })); + + it("add", pnpTest("387b5fb8-14b7-4c9a-8719-f62bc2289780", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Add", + }); - it("add", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); columnTemplate.name += "Add"; - columnTemplate.displayName += getRandomString(5) + "Add"; + columnTemplate.displayName += props.displayName; const c = await list.columns.add(columnTemplate); await list.columns.getById(c.data.id).delete(); return expect((c.data.name === columnTemplate.name)).to.be.true; - }); + })); + + it("update", pnpTest("3827a66a-2f8b-4cd7-addb-b49eac258f45", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Update", + displayName: getRandomString(5) + "Update", + }); - it("update", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Update"; - columnTemplate.displayName += getRandomString(5) + "Update"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const newColumnName = `${columnTemplate.displayName}-CHANGED`; const c = await list.columns.add(columnTemplate); await list.columns.getById(c.data.id).update({ displayName: newColumnName }); const updateColumn = await list.columns.getById(c.data.id)(); await list.columns.getById(c.data.id).delete(); return expect((updateColumn.displayName === newColumnName)).to.be.true; - }); + })); + + it("delete", pnpTest("16650b92-045a-4bfe-8f37-a8a8856385f2", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Delete", + displayName: getRandomString(5) + "Delete", + }); - it("delete", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Delete"; - columnTemplate.displayName += getRandomString(5) + "Delete"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const c = await list.columns.add(columnTemplate); await list.columns.getById(c.data.id).delete(); let deletedColumn: ColumnDefinition = null; @@ -242,6 +288,6 @@ describe("Columns", function () { // do nothing } return expect(deletedColumn).to.be.null; - }); + })); }); }); diff --git a/test/graph/contacts.ts b/test/graph/contacts.ts index 43ccd17c4..817f41f9e 100644 --- a/test/graph/contacts.ts +++ b/test/graph/contacts.ts @@ -4,6 +4,8 @@ import "@pnp/graph/contacts"; import { HttpRequestError } from "@pnp/queryable"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +// TODO:: make work with test recording + describe("Contacts", function () { let testUserName = ""; diff --git a/test/graph/content-types.ts b/test/graph/content-types.ts index 8e3cf65d4..0f04a3803 100644 --- a/test/graph/content-types.ts +++ b/test/graph/content-types.ts @@ -7,6 +7,7 @@ import { IList } from "@pnp/graph/lists"; import { ISite } from "@pnp/graph/sites"; import { getRandomString } from "@pnp/core"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { pnpTest } from "../pnp-test.js"; describe("ContentTypes", function () { let site: ISite; @@ -23,21 +24,25 @@ describe("ContentTypes", function () { id: "0x0100CDB27E23CEF44850904C80BD666FA645", }; - before(async function () { + before(pnpTest("558cdcaf-dfe4-47e1-a310-7b1c4c9e5d1d", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); } + const props = await this.props({ + displayName: `PnPGraphTestContentTypes_${getRandomString(8)}`, + }); + site = await getTestingGraphSPSite(this); const listTmp = await site.lists.add({ - displayName: `PnPGraphTestContentTypes_${getRandomString(8)}`, + displayName: props.displayName, list: { "template": "genericList" }, }); list = site.lists.getById(listTmp.data.id); - }); + })); after(async function () { if (list != null) { @@ -47,12 +52,12 @@ describe("ContentTypes", function () { describe("Site", function () { - it("content types", async function () { + it("content types", pnpTest("adc47d1e-6b59-4287-a7f6-1fa42a0862e2", async function () { const ct = await site.contentTypes(); return expect(ct).to.be.an("array") && expect(ct[0]).to.haveOwnProperty("id"); - }); + })); - it("getById", async function () { + it("getById", pnpTest("ab0e1dc6-6387-404f-8acc-b8025d5aa049", async function () { let passed = true; const cts = await site.contentTypes(); if (cts.length > 0) { @@ -60,20 +65,25 @@ describe("ContentTypes", function () { passed = (ct.id === cts[0].id); } return expect(passed).is.true; - }); + })); - it("getCompatibleFromHub", async function () { + it("getCompatibleFromHub", pnpTest("42b30d81-10bf-490e-aaee-e8a2c67c8006", async function () { const cts = await site.contentTypes.getCompatibleHubContentTypes(); return expect(cts).to.be.an("array"); - }); + })); + + it("add", pnpTest("3e939430-6d79-45e9-92cf-1a296a2e0911", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Add", + }); - it("add", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "Add"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await site.contentTypes.getById(ct.data.id).delete(); return expect((ct.data.name === ctTemplate.name)).to.be.true; - }); + })); // potential long running function - not approrpriate for automated tests it.skip("addFromHub"); @@ -82,52 +92,77 @@ describe("ContentTypes", function () { it.skip("associateWithHub"); // Errors with ~ Metadata hub feature is disabled on this site. - it.skip("isPublished", async function () { + it.skip("isPublished", pnpTest("4c3b75f9-d46e-4ae4-a1b7-8ce7bb43009c", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteIsPublished", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteIsPublished"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); const isPublished = await ct.contentType.isPublished(); await site.contentTypes.getById(ct.data.id).delete(); return expect(isPublished).to.be.false; - }); + })); // Errors with ~ Metadata hub feature is disabled on this site. - it.skip("publish", async function () { + it.skip("publish", pnpTest("664acec7-ff46-4bbf-9352-16d0718767de", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SitePublish", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SitePublish"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await ct.contentType.publish(); const isPublished = await ct.contentType.isPublished(); await site.contentTypes.getById(ct.data.id).delete(); return expect(isPublished).to.be.true; - }); + })); // Errors with ~ Metadata hub feature is disabled on this site. - it.skip("unpublish", async function () { + it.skip("unpublish", pnpTest("28cd50ea-5672-48fc-9fc1-842c9d69688b", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteUnPublish", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteUnPublish"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await ct.contentType.publish(); await ct.contentType.unpublish(); const isPublished = await ct.contentType.isPublished(); await site.contentTypes.getById(ct.data.id).delete(); return expect(isPublished).to.be.false; - }); + })); + + it("update", pnpTest("41d3c22d-8632-4890-9ecf-7d0a367d739c", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteUpdate", + }); - it("update", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteUpdate"; + ctTemplate.name += props.name; const newContentTypeName = `${ctTemplate.name}-CHANGED`; const ct = await site.contentTypes.add(ctTemplate); await site.contentTypes.getById(ct.data.id).update({ name: newContentTypeName }); const updateContentType = await site.contentTypes.getById(ct.data.id)(); await site.contentTypes.getById(ct.data.id).delete(); return expect((updateContentType.name === newContentTypeName)).to.be.true; - }); + })); + + it("delete", pnpTest("50a499b1-b6b9-47f7-b14e-567c03ac77a2", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteDelete", + }); - it("delete", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteDelete"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await site.contentTypes.getById(ct.data.id).delete(); let deletedContentType: ContentType = null; @@ -137,16 +172,17 @@ describe("ContentTypes", function () { // do nothing } return expect(deletedContentType).to.be.null; - }); + })); }); describe("List", function () { - it("content types", async function () { + + it("content types", pnpTest("3ee007d0-e331-4842-bc8e-8251726d9d39", async function () { const ct = await list.contentTypes(); return expect(ct).to.be.an("array") && expect(ct[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("ab0abf2f-4ffe-4d37-af4b-c8bdb8f2a257", async function () { let passed = true; const cts = await list.contentTypes(); if (cts.length > 0) { @@ -154,29 +190,39 @@ describe("ContentTypes", function () { passed = (ct.id === cts[0].id); } return expect(passed).is.true; - }); + })); - it("getCompatibleFromHub", async function () { + it("getCompatibleFromHub", pnpTest("c74f5186-5aff-4b18-b5b7-97edcd4bd6c5", async function () { const cts = await list.contentTypes.getCompatibleHubContentTypes(); return expect(cts).to.be.an("array"); - }); + })); // potential long running function - not approrpriate for automated tests it.skip("addFromHub"); - it("addCopy", async function () { + it("addCopy", pnpTest("ef5ebb3f-f8f1-4b57-a977-c3ad359365ca", async function () { + + const props = await this.props({ + name: getRandomString(5) + "ListAddCopy", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "ListAddCopy"; + ctTemplate.name += props.name; const siteCT = await site.contentTypes.add(ctTemplate); const listCT = await list.contentTypes.addCopy(siteCT.contentType); await list.contentTypes.getById(listCT.data.id).delete(); await site.contentTypes.getById(siteCT.data.id).delete(); return expect((siteCT.data.name === listCT.data.name)).to.be.true; - }); + })); + + it("update", pnpTest("3add8b28-47ea-45a9-9db3-aa370e088f67", async function () { + + const props = await this.props({ + name: getRandomString(5) + "ListUpdate", + }); - it("update", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "ListUpdate"; + ctTemplate.name += props.name; const newContentTypeName = `${ctTemplate.displayName}-CHANGED`; const siteCT = await site.contentTypes.add(ctTemplate); const listCT = await list.contentTypes.addCopy(siteCT.contentType); @@ -185,11 +231,16 @@ describe("ContentTypes", function () { await list.contentTypes.getById(listCT.data.id).delete(); await site.contentTypes.getById(siteCT.data.id).delete(); return expect((updateContentType.name === newContentTypeName)).to.be.true; - }); + })); + + it("delete", pnpTest("5d8dc8f0-5220-400b-b990-0bcdfcd08594", async function () { + + const props = await this.props({ + name: getRandomString(5) + "ListDelete", + }); - it("delete", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "ListDelete"; + ctTemplate.name += props.name; const siteCT = await site.contentTypes.add(ctTemplate); const listCT = await list.contentTypes.addCopy(siteCT.contentType); await list.contentTypes.getById(listCT.data.id).delete(); @@ -201,6 +252,6 @@ describe("ContentTypes", function () { // do nothing } return expect(deletedContentType).to.be.null; - }); + })); }); }); diff --git a/test/graph/directoryobjects.ts b/test/graph/directoryobjects.ts index 9ed55e2ec..edcbf600d 100644 --- a/test/graph/directoryobjects.ts +++ b/test/graph/directoryobjects.ts @@ -5,103 +5,118 @@ import "@pnp/graph/directory-objects"; import { GroupType } from "@pnp/graph/groups"; import { getRandomString, getGUID, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; +import { pnpTest } from "../pnp-test.js"; describe("Directory Objects", function () { let testUserName = ""; let testChildGroupID = ""; let testParentGroupID = ""; - const testGUID = getGUID(); - let userInfo = null; + let testGUID; + let userId = null; - before(async function () { + before(pnpTest("3adea3f7-de9b-4872-92c4-82f964a072a8", async function () { if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { this.skip(); } // Get a sample user - userInfo = await getValidUser.call(this); - testUserName = userInfo.userPrincipalName; + const userInfo = await getValidUser.call(this); + + const props = await this.props({ + groupName1: `TestGroup_${getRandomString(4)}`, + groupName2: `TestGroup_${getRandomString(4)}`, + userId: userInfo.id, + userName: userInfo.userPrincipalName, + testGuid: getGUID(), + }); + + testUserName = props.userName; + userId = props.userId; + testGUID = props.testGuid; // Create a test group to ensure we have a directory object - let groupName = `TestGroup_${getRandomString(4)}`; - let result = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Security, { + + let result = await this.pnp.graph.groups.add(props.groupName1, props.groupName1, GroupType.Security, { "members@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, ], "owners@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, ], }); testChildGroupID = result.data.id; - groupName = `TestGroup_${getRandomString(4)}`; - result = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Security, { + result = await this.pnp.graph.groups.add(props.groupName2, props.groupName2, GroupType.Security, { "members@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, "https://graph.microsoft.com/v1.0/groups/" + testChildGroupID, ], "owners@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, ], }); testParentGroupID = result.data.id; - }); + })); - it("delete", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const result = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Security, { + it("delete", pnpTest("e1d8a9b8-43c1-4c02-85b3-92ef980d0ee2", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); + + const result = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Security, { "members@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + userId, ], "owners@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + userId, ], }); const testDeleteGroupID = result.data.id; return expect(this.pnp.graph.groups.getById(testDeleteGroupID).delete()).eventually.be.fulfilled; - }); + })); - it("Get User Member Objects", async function () { + it("Get User Member Objects", pnpTest("ba2c72fb-d9f0-412d-988e-527d0ce9b7a6", async function () { const memberObjects = await this.pnp.graph.users.getById(testUserName).getMemberObjects(); return expect(memberObjects).contains(testChildGroupID); - }); + })); - it("Get Group Member Objects", async function () { + it("Get Group Member Objects", pnpTest("37fe45e5-5c9b-4b45-a8a5-bd8536ecb512", async function () { const memberObjects = await this.pnp.graph.groups.getById(testChildGroupID).getMemberObjects(true); return expect(memberObjects).contains(testParentGroupID); - }); + })); - it("Get User Member Groups", async function () { + it("Get User Member Groups", pnpTest("a66c2661-e9c1-4880-a5cf-f85c04c1fc09", async function () { const memberObjects = await this.pnp.graph.users.getById(testUserName).getMemberGroups(true); return expect(memberObjects).contains(testChildGroupID); - }); + })); - it("Get Group Member Objects", async function () { + it("Get Group Member Objects", pnpTest("a41f6893-7942-4584-a688-5cdef1304329", async function () { const memberObjects = await this.pnp.graph.groups.getById(testChildGroupID).getMemberGroups(); return expect(memberObjects).contains(testParentGroupID); - }); + })); - it("Check User Member Groups (1)", async function () { + it("Check User Member Groups (1)", pnpTest("fff79512-3b81-4b1f-8de2-c8c65ff3985e", async function () { const memberGroups = await this.pnp.graph.users.getById(testUserName).checkMemberGroups([testChildGroupID, testParentGroupID, testGUID]); return expect(memberGroups.length).is.equal(2); - }); + })); - it("Check User Member Groups (2)", async function () { + it("Check User Member Groups (2)", pnpTest("02172c11-b086-4fb8-a70b-216d24f17d3d", async function () { const memberGroups = await this.pnp.graph.groups.getById(testChildGroupID).checkMemberGroups([testChildGroupID, testParentGroupID, testGUID]); return expect(memberGroups.length).is.equal(1); - }); + })); - it("Get directory object by ID", async function () { + it("Get directory object by ID", pnpTest("501eef0b-1cb8-4b1e-b716-0876114f677c", async function () { const dirObj = await this.pnp.graph.directoryObjects.getById(testChildGroupID); return expect(dirObj).is.not.null; - }); + })); - it("Check MemberOf", async function () { + it("Check MemberOf", pnpTest("cfcd853b-8cba-4fea-8d1d-16afc35ba392", async function () { const memberObjects = await this.pnp.graph.users.getById(testUserName).memberOf(); return expect(memberObjects.length).greaterThan(0); - }); + })); // Remove the test data we created after(async function () { diff --git a/test/graph/groups.ts b/test/graph/groups.ts index b9704f59f..aefbba33a 100644 --- a/test/graph/groups.ts +++ b/test/graph/groups.ts @@ -2,6 +2,7 @@ import { getRandomString } from "@pnp/core"; import { expect } from "chai"; import { GroupType } from "@pnp/graph/groups"; import "@pnp/graph/sites/group"; +import { pnpTest } from "../pnp-test.js"; describe("Groups", function () { @@ -19,18 +20,26 @@ describe("Groups", function () { groupID = ""; }); - it("add", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + it("add", pnpTest("022e5336-56a1-4bd3-80a2-74139f386e40", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); + + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); const group = await groupAddResult.group(); groupID = groupAddResult.data.id; return expect(group.displayName).is.not.undefined; - }); + })); + + it("delete", pnpTest("c6d59c80-332b-4d6d-8dbd-54c111cdcf12", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); - it("delete", async function () { // Create a new group - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); // Delete the group // Potential Bug. Delete is only available off of getByID await this.pnp.graph.groups.getById(groupAddResult.data.id).delete(); @@ -44,21 +53,29 @@ describe("Groups", function () { } }); return expect(groupExists).is.not.true; - }); + })); + + it("getById", pnpTest("ea5ae8ab-570c-48fc-b01f-331f3e6ad366", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); - it("getById", async function () { // Create a new group - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); // Get the group by ID const group = await this.pnp.graph.groups.getById(groupAddResult.data.id); return expect(group).is.not.undefined; - }); + })); + + it("update", pnpTest("d1845967-2d71-4995-90e0-58e8967a249a", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); - it("update", async function () { // Create a new group - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); groupID = groupAddResult.data.id; // Update the display name of the group @@ -69,10 +86,10 @@ describe("Groups", function () { // Get the group to check and see if the names are different const group = await this.pnp.graph.groups.getById(groupID)(); - return expect(groupName === group.displayName).is.not.true; - }); + return expect(props.groupName === group.displayName).is.not.true; + })); - it("sites.root.sites", async function () { + it("sites.root.sites", pnpTest("ae59d162-bb17-40f0-b606-a9b5bab3ec6c", async function () { // Find an existing group // This has to be tested on existing groups. On a newly created group, this returns an error often // "Resource provisioning is in progress. Please try again.". This is expected as the team site provisioning takes a few seconds when creating a new group @@ -83,9 +100,9 @@ describe("Groups", function () { const sitesPromise = this.pnp.graph.groups.getById(grpID).sites.root.sites(); return expect(sitesPromise).to.eventually.be.fulfilled; - }); + })); - it("sites.root", async function () { + it("sites.root", pnpTest("b5fce16b-aa14-40e3-98c5-28a828050c04", async function () { // Find an existing group const groups = await this.pnp.graph.groups(); const grpID = groups[0].id; @@ -94,32 +111,7 @@ describe("Groups", function () { const root = await this.pnp.graph.groups.getById(grpID).sites.root(); return expect(root).is.not.null; - }); - - // it("addFavorite()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("removeFavorite()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("resetUnseenCount()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("subscribeByMail()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("unsubscribeByMail()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("getCalendarView(start: Date, end: Date)", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); + })); afterEach(async function () { if (groupID !== "") { diff --git a/test/graph/lists.ts b/test/graph/lists.ts index dec278374..fbfcfa71e 100644 --- a/test/graph/lists.ts +++ b/test/graph/lists.ts @@ -5,6 +5,7 @@ import { List } from "@microsoft/microsoft-graph-types"; import { ISite } from "@pnp/graph/sites"; import { getRandomString } from "@pnp/core"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { pnpTest } from "../pnp-test.js"; describe("Lists", function () { let site: ISite; @@ -22,12 +23,12 @@ describe("Lists", function () { site = await getTestingGraphSPSite(this); }); - it("lists", async function () { + it("lists", pnpTest("016307d3-a0e3-4c8c-94e8-4f1c8566ffbd", async function () { const lists = await site.lists(); return expect(lists).to.be.an("array") && expect(lists[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("657e7fc0-bf7d-40ed-b903-d75fe0b91d65", async function () { let passed = true; const lists = await site.lists(); if (lists.length > 0) { @@ -35,30 +36,45 @@ describe("Lists", function () { passed = (list.id === lists[0].id); } return expect(passed).is.true; - }); + })); + + it("add", pnpTest("a5b3a404-53bb-4895-815d-6681cc36fe7f", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Add", + }); - it("add", async function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); - listTemplate.displayName += getRandomString(5) + "Add"; + listTemplate.displayName += props.displayName; const list = await site.lists.add(listTemplate); await site.lists.getById(list.data.id).delete(); return expect((list.data.displayName === listTemplate.displayName)).to.be.true; - }); + })); + + it("update", pnpTest("a386a85a-03ce-4846-8ca8-2472075694f5", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Update", + }); - it("update", async function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); - listTemplate.displayName += getRandomString(5) + "Update"; + listTemplate.displayName += props.displayName; const newListName = `${listTemplate.displayName}-CHANGED`; const list = await site.lists.add(listTemplate); await site.lists.getById(list.data.id).update({ displayName: newListName }); const updateList = await site.lists.getById(list.data.id)(); await site.lists.getById(list.data.id).delete(); return expect((updateList.displayName === newListName)).to.be.true; - }); + })); + + it("delete", pnpTest("3d070839-0713-4a3e-a718-f89bb378cbe1", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Delete", + }); - it("delete", async function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); - listTemplate.displayName += getRandomString(5) + "Delete"; + listTemplate.displayName += props.displayName; const list = await site.lists.add(listTemplate); await site.lists.getById(list.data.id).delete(); let deletedList: List = null; @@ -68,5 +84,5 @@ describe("Lists", function () { // do nothing } return expect(deletedList).to.be.null; - }); + })); }); diff --git a/test/pnp-test.ts b/test/pnp-test.ts index 6fc4ba607..2fc338275 100644 --- a/test/pnp-test.ts +++ b/test/pnp-test.ts @@ -15,6 +15,10 @@ interface IPnPTestFunc { export const PnPTestHeaderName = "X-PnP-TestId"; +// we use this to identify tests with duplicate ids, which will cause problems +// really just a safety measure for us +const idDupeTracker = []; + /** * Behavior used to inject the correct test id into the headers for each request * @@ -46,6 +50,12 @@ function PnPTestIdHeader(id: () => string): TimelinePipe { */ export function pnpTest(id: string, testFunc: (this: IPnPTestFuncThis) => any): IPnPTestFunc { + if (idDupeTracker.indexOf(id.toLowerCase()) > -1) { + throw Error(`Test ${id} is already in use.`); + } + + idDupeTracker.push(id.toLowerCase()); + return async function (this: IPnPTestFuncThis, ...args: any[]) { this.pnpid = id; diff --git a/test/test-recording.ts b/test/test-recording.ts index 88916868d..688fa3813 100644 --- a/test/test-recording.ts +++ b/test/test-recording.ts @@ -9,6 +9,9 @@ import { default as nodeFetch } from "node-fetch"; // TODO:: a way to record tests from the browser -> console.log what we would save in a file along with the generated filename +// PS to create Guids and put them on the clip board +// "pnpTest(""$(([guid]::NewGuid() | select Guid -expandproperty Guid | Out-String).Trim())"", " | Set-Clipboard + export interface IRecordingOptions { resolvedRecordingPath: string; resolvedTestSettingsPath: string; From 6cca606b85dc0c49941f442b69bb3ec5aefc93f4 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Tue, 8 Aug 2023 22:07:17 +0000 Subject: [PATCH 005/171] WIP --- docs/graph/analytics.md | 58 ++++++++ docs/graph/{onedrive.md => drive.md} | 96 +++++-------- docs/graph/shares.md | 2 +- docs/graph/users.md | 2 +- packages/graph/analytics/driveItems.ts | 15 ++ packages/graph/analytics/index.ts | 7 + packages/graph/analytics/listItems.ts | 15 ++ packages/graph/analytics/sites.ts | 16 +++ packages/graph/analytics/types.ts | 12 ++ packages/graph/{onedrive => drive}/funcs.ts | 0 packages/graph/{onedrive => drive}/groups.ts | 0 packages/graph/{onedrive => drive}/index.ts | 1 - packages/graph/{onedrive => drive}/sites.ts | 0 packages/graph/{onedrive => drive}/types.ts | 16 +-- packages/graph/{onedrive => drive}/users.ts | 0 packages/graph/list-item/index.ts | 9 ++ packages/graph/list-item/list.ts | 14 ++ packages/graph/list-item/types.ts | 55 ++++++++ packages/graph/lists/drive.ts | 4 +- packages/graph/lists/types.ts | 10 +- packages/graph/mail/funcs.ts | 20 +++ packages/graph/mail/groups.ts | 0 packages/graph/mail/index.ts | 5 + packages/graph/mail/types.ts | 0 packages/graph/mail/users.ts | 20 +++ packages/graph/presets/all.ts | 4 +- packages/graph/shares/types.ts | 2 +- test/graph/analytics.ts | 137 +++++++++++++++++++ test/graph/{onedrive.ts => drive.ts} | 18 +-- test/graph/lists.ts | 2 +- test/graph/querable.ts | 2 +- 31 files changed, 437 insertions(+), 105 deletions(-) create mode 100644 docs/graph/analytics.md rename docs/graph/{onedrive.md => drive.md} (88%) create mode 100644 packages/graph/analytics/driveItems.ts create mode 100644 packages/graph/analytics/index.ts create mode 100644 packages/graph/analytics/listItems.ts create mode 100644 packages/graph/analytics/sites.ts create mode 100644 packages/graph/analytics/types.ts rename packages/graph/{onedrive => drive}/funcs.ts (100%) rename packages/graph/{onedrive => drive}/groups.ts (100%) rename packages/graph/{onedrive => drive}/index.ts (97%) rename packages/graph/{onedrive => drive}/sites.ts (100%) rename packages/graph/{onedrive => drive}/types.ts (95%) rename packages/graph/{onedrive => drive}/users.ts (100%) create mode 100644 packages/graph/list-item/index.ts create mode 100644 packages/graph/list-item/list.ts create mode 100644 packages/graph/list-item/types.ts create mode 100644 packages/graph/mail/funcs.ts create mode 100644 packages/graph/mail/groups.ts create mode 100644 packages/graph/mail/index.ts create mode 100644 packages/graph/mail/types.ts create mode 100644 packages/graph/mail/users.ts create mode 100644 test/graph/analytics.ts rename test/graph/{onedrive.ts => drive.ts} (94%) diff --git a/docs/graph/analytics.md b/docs/graph/analytics.md new file mode 100644 index 000000000..e6ed76af0 --- /dev/null +++ b/docs/graph/analytics.md @@ -0,0 +1,58 @@ +# @pnp/graph/analytics + +The ability to get analytics for OneDrive and SharePoint drive items, SharePoint sites, and SharePoint list items. + +## IInvitations + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get Drive Item Analytics + +Using analytics() you get the Item Analytics for a Drive Item + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/drive"; +import "@pnp/graph/analytics"; +import { IAnalyticsOptions } from "@pnp/graph/analytics"; + +const graph = graphfi(...); + +// Defaults to lastSevenDays +const analytics = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").analytics()(); + +const analytics = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics()(); + +// Get analytics for all time +const analyticOptions: IAnalyticsOptions = { + timeRange: "allTime" +}; + +const analyticsAllTime = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics(analyticOptions)(); +``` + +## Get Site Analytics + +Using analytics() you can get the analytics for a SharePoint site + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/analytics"; +import { IAnalyticsOptions } from "@pnp/graph/analytics"; + +const graph = graphfi(...); + +const site = this.pnp.graph.sites.getById(this.pnp.settings.graph.id); + +// Defaults to lastSevenDays +const analytics = await site.analytics(); + +// Get analytics for all time +const analyticOptions: IAnalyticsOptions = { + timeRange: "allTime" +}; + +const analyticsAllTime = await site.analytics(analyticOptions); +``` diff --git a/docs/graph/onedrive.md b/docs/graph/drive.md similarity index 88% rename from docs/graph/onedrive.md rename to docs/graph/drive.md index fb4f968ad..612d39ff0 100644 --- a/docs/graph/onedrive.md +++ b/docs/graph/drive.md @@ -1,7 +1,7 @@ -# @pnp/graph/onedrive +# @pnp/graph/drive -The ability to manage drives and drive items in Onedrive is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described -you can manage drives and drive items in Onedrive. +The ability to manage drives and drive items in OneDrive and SharePoint is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described +you can manage drives and drive items in OneDrive and SharePoint. ## IInvitations @@ -9,14 +9,14 @@ you can manage drives and drive items in Onedrive. ## Get the default drive -Using the drive you can get the users default drive from Onedrive, or the groups or sites default document library. +Using the drive you can get the users default drive from OneDrive, or the groups or sites default document library. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/groups"; import "@pnp/graph/sites"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -31,14 +31,14 @@ const siteDrive = await graph.sites.getById("{site identifier}").drive(); ## Get all of the drives -Using the drives() you can get the users available drives from Onedrive +Using the drives() you can get the users available drives from OneDrive ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/groups"; import "@pnp/graph/sites"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -59,7 +59,7 @@ Using the drives.getById() you can get one of the available drives in Outlook ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -78,7 +78,7 @@ Using the list() you get the associated list information ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -94,7 +94,7 @@ Form more infomration about acting on the IList object see [@pnpjs/graph/lists]( ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; import "@pnp/graph/lists"; const graph = graphfi(...); @@ -113,7 +113,7 @@ Using the recent() you get the recent files ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -130,7 +130,7 @@ Using the sharedWithMe() you get the files shared with the user ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -152,7 +152,7 @@ List the items that have been followed by the signed in user. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -169,7 +169,7 @@ import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/sites"; import "@pnp/graph/groups"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -194,7 +194,7 @@ Using the children() you get the children ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -215,7 +215,7 @@ Using the drive.getItemsByPath() you can get the contents of a particular folder ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -231,9 +231,9 @@ Using the add you can add an item, for more options please user the upload metho ```TypeScript import { graphfi } from "@pnp/graph"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; import "@pnp/graph/users"; -import {IDriveItemAddResult} from "@pnp/graph/onedrive"; +import {IDriveItemAddResult} from "@pnp/graph/drive"; const graph = graphfi(...); @@ -247,9 +247,9 @@ Using the .upload method you can add or update the content of an item. ```TypeScript import { graphfi } from "@pnp/graph"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; import "@pnp/graph/users"; -import {IFileOptions, IDriveItemAddResult} from "@pnp/graph/onedrive"; +import {IFileOptions, IDriveItemAddResult} from "@pnp/graph/drive"; const graph = graphfi(...); @@ -282,7 +282,7 @@ Using addFolder you can add a folder ```TypeScript import { graph } from "@pnp/graph"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; import "@pnp/graph/users" import {IDriveItemAddResult} from "@pnp/graph/ondrive"; @@ -300,7 +300,7 @@ Using the search() you can search for items, and optionally select properties ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -320,7 +320,7 @@ Using the items.getById() you can get a specific item from the current drive ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -337,7 +337,7 @@ Using the drive.getItemByPath() you can get a specific item from the current dri ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -354,7 +354,7 @@ Using the item.getContent() you can get the content of a file. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -385,7 +385,7 @@ Using the item.convertContent() you can get a PDF version of the file. See [offi ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -414,7 +414,7 @@ Using the thumbnails() you get the thumbnails ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -431,7 +431,7 @@ Using the delete() you delete the current item ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -448,7 +448,7 @@ Using the update() you update the current item ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -465,7 +465,7 @@ Using the move() you move the current item, and optionally update it ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -491,7 +491,7 @@ Using the copy() you can copy the current item to a new location, returns the pa ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; const graph = graphfi(...); @@ -517,8 +517,8 @@ Using the users default drive you can get special folders, including: Documents, ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; -import { SpecialFolder, IDriveItem } from "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; +import { SpecialFolder, IDriveItem } from "@pnp/graph/drive"; const graph = graphfi(...); @@ -540,8 +540,8 @@ If you want to obtain long-lived embeddable links, use the createLink API instea ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; -import { IPreviewOptions, IDriveItemPreviewInfo } from "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; +import { IPreviewOptions, IDriveItemPreviewInfo } from "@pnp/graph/drive"; import { ItemPreviewInfo } from "@microsoft/microsoft-graph-types" const graph = graphfi(...); @@ -566,7 +566,7 @@ Track changes in a driveItem and its children over time. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; import { IDeltaItems } from "@pnp/graph/ondrive"; const graph = graphfi(...); @@ -588,27 +588,3 @@ for await (const val of delta.next.top(20).paged()) { console.log(JSON.stringify(val, null, 2)); } ``` - -## Get Drive Item Analytics - -Using the analytics() you get the ItemAnalytics for a DriveItem - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; -import { IAnalyticsOptions } from "@pnp/graph/onedrive"; - -const graph = graphfi(...); - -// Defaults to lastSevenDays -const analytics = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").analytics()(); - -const analytics = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics()(); - -const analyticOptions: IAnalyticsOptions = { - timeRange: "allTime" -}; - -const analyticsAllTime = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics(analyticOptions)(); -``` diff --git a/docs/graph/shares.md b/docs/graph/shares.md index c2b13040a..c5fd39684 100644 --- a/docs/graph/shares.md +++ b/docs/graph/shares.md @@ -32,7 +32,7 @@ const shareInfo = await graph.shares.getById(shareLink)(); ## Access a Share's driveItem resource -You can also access the full functionality of the driveItem via a share. Find [more details on the capabilities of driveItem here](./onedrive.md). +You can also access the full functionality of the driveItem via a share. Find [more details on the capabilities of driveItem here](./drive.md). ```TS import { graphfi } from "@pnp/graph"; diff --git a/docs/graph/users.md b/docs/graph/users.md index 8b8a0aae2..fff64cc35 100644 --- a/docs/graph/users.md +++ b/docs/graph/users.md @@ -131,4 +131,4 @@ See [Messages](./messages.md) ## User OneDrive -See [OneDrive](./onedrive.md) +See [Drive](./drive.md) diff --git a/packages/graph/analytics/driveItems.ts b/packages/graph/analytics/driveItems.ts new file mode 100644 index 000000000..ca4ef9e6f --- /dev/null +++ b/packages/graph/analytics/driveItems.ts @@ -0,0 +1,15 @@ +import { _DriveItem } from "../drive/types.js"; +import { IAnalyticsOptions, analytics } from "./types.js"; +import { ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; + +declare module "../drive/types" { + interface _DriveItem { + analytics(analyticsOptions?: IAnalyticsOptions): Promise; + } + + interface DriveItem { + analytics(analyticsOptions?: IAnalyticsOptions): Promise; + } +} + +_DriveItem.prototype.analytics = analytics; diff --git a/packages/graph/analytics/index.ts b/packages/graph/analytics/index.ts new file mode 100644 index 000000000..6f00c89a7 --- /dev/null +++ b/packages/graph/analytics/index.ts @@ -0,0 +1,7 @@ +import "./driveItems.js"; +import "./listItems.js"; +import "./sites.js"; + +export { + IAnalyticsOptions, +} from "./types.js"; diff --git a/packages/graph/analytics/listItems.ts b/packages/graph/analytics/listItems.ts new file mode 100644 index 000000000..1b3f56ff9 --- /dev/null +++ b/packages/graph/analytics/listItems.ts @@ -0,0 +1,15 @@ +import { _ListItem } from "../list-item/types.js"; +import { IAnalyticsOptions, analytics } from "./types.js"; +import { ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; + +declare module "../list-item/types" { + interface _ListItem { + analytics(analyticsOptions?: IAnalyticsOptions): Promise; + } + + interface ListItem { + analytics(analyticsOptions?: IAnalyticsOptions): Promise; + } +} + +_ListItem.prototype.analytics = analytics; diff --git a/packages/graph/analytics/sites.ts b/packages/graph/analytics/sites.ts new file mode 100644 index 000000000..0b6346508 --- /dev/null +++ b/packages/graph/analytics/sites.ts @@ -0,0 +1,16 @@ +import { _Site } from "../sites/types.js"; +import { IAnalyticsOptions, analytics } from "./types.js"; +import { ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; + + +declare module "../sites/types" { + interface _Site { + analytics(analyticsOptions?: IAnalyticsOptions): Promise; + } + + interface ISite { + analytics(analyticsOptions?: IAnalyticsOptions): Promise; + } +} + +_Site.prototype.analytics = analytics; diff --git a/packages/graph/analytics/types.ts b/packages/graph/analytics/types.ts new file mode 100644 index 000000000..dc2cdffd7 --- /dev/null +++ b/packages/graph/analytics/types.ts @@ -0,0 +1,12 @@ +import { ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; +import { graphGet } from "../operations.js"; +import { GraphQueryable } from "../graphqueryable.js"; + +export interface IAnalyticsOptions { + timeRange: "allTime" | "lastSevenDays"; +} + +export function analytics(analyticsOptions?: IAnalyticsOptions): Promise { + const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; + return graphGet(GraphQueryable(this, query)); +} diff --git a/packages/graph/onedrive/funcs.ts b/packages/graph/drive/funcs.ts similarity index 100% rename from packages/graph/onedrive/funcs.ts rename to packages/graph/drive/funcs.ts diff --git a/packages/graph/onedrive/groups.ts b/packages/graph/drive/groups.ts similarity index 100% rename from packages/graph/onedrive/groups.ts rename to packages/graph/drive/groups.ts diff --git a/packages/graph/onedrive/index.ts b/packages/graph/drive/index.ts similarity index 97% rename from packages/graph/onedrive/index.ts rename to packages/graph/drive/index.ts index 7e46ed940..21157d418 100644 --- a/packages/graph/onedrive/index.ts +++ b/packages/graph/drive/index.ts @@ -30,7 +30,6 @@ export { IDeltaItems, IPreviewOptions, IFileOptions, - IAnalyticsOptions, } from "./types.js"; declare module "../fi" { diff --git a/packages/graph/onedrive/sites.ts b/packages/graph/drive/sites.ts similarity index 100% rename from packages/graph/onedrive/sites.ts rename to packages/graph/drive/sites.ts diff --git a/packages/graph/onedrive/types.ts b/packages/graph/drive/types.ts similarity index 95% rename from packages/graph/onedrive/types.ts rename to packages/graph/drive/types.ts index deb0e0b35..11abdf1d1 100644 --- a/packages/graph/onedrive/types.ts +++ b/packages/graph/drive/types.ts @@ -8,7 +8,7 @@ import { graphInvokableFactory, GraphQueryable, } from "../graphqueryable.js"; -import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo, ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; +import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo } from "@microsoft/microsoft-graph-types"; import { combine } from "@pnp/core"; import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable } from "../decorators.js"; import { body, BlobParse, CacheNever, errorCheck, InjectHeaders } from "@pnp/queryable"; @@ -344,16 +344,6 @@ export class _DriveItem extends _GraphQueryableInstance { public async preview(previewOptions?: IPreviewOptions): Promise { return graphPost(DriveItem(this, "preview"), body(previewOptions)); } - - /** - * Method for getting item analytics. Defaults to lastSevenDays. - * @param analyticsOptions - IAnalyticsOptions (Optional) - * @returns IGraphQueryableCollection - */ - public analytics(analyticsOptions?: IAnalyticsOptions): IGraphQueryableCollection { - const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; - return >GraphQueryableCollection(this, query); - } } export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } export const DriveItem = graphInvokableFactory(_DriveItem); @@ -476,7 +466,3 @@ export interface IDeltaItems { delta: IGraphQueryableCollection; values: any[]; } - -export interface IAnalyticsOptions { - timeRange: "allTime" | "lastSevenDays"; -} diff --git a/packages/graph/onedrive/users.ts b/packages/graph/drive/users.ts similarity index 100% rename from packages/graph/onedrive/users.ts rename to packages/graph/drive/users.ts diff --git a/packages/graph/list-item/index.ts b/packages/graph/list-item/index.ts new file mode 100644 index 000000000..86195c15b --- /dev/null +++ b/packages/graph/list-item/index.ts @@ -0,0 +1,9 @@ +import "./list.js"; + +export { + ListItems, + IListItems, + ListItem, + IListItem, + IListItemAddResult, +} from "./types.js"; diff --git a/packages/graph/list-item/list.ts b/packages/graph/list-item/list.ts new file mode 100644 index 000000000..3dd09dae7 --- /dev/null +++ b/packages/graph/list-item/list.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _List } from "../lists/types.js"; +import { ListItems, IListItems } from "./types.js"; + +declare module "../lists/types" { + interface _List { + readonly items: IListItems; + } + interface IList { + readonly items: IListItems; + } +} + +addProp(_List, "items", ListItems); diff --git a/packages/graph/list-item/types.ts b/packages/graph/list-item/types.ts new file mode 100644 index 000000000..a4c6866f9 --- /dev/null +++ b/packages/graph/list-item/types.ts @@ -0,0 +1,55 @@ +import { ListItem as IListItemEntity, ListItemVersion as IListItemVersion } from "@microsoft/microsoft-graph-types"; +import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance, IGraphQueryableCollection, GraphQueryableCollection } from "../graphqueryable.js"; +import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; +import { graphPost } from "../operations.js"; +import { body } from "@pnp/queryable"; + +/** + * Represents a list item entity + */ +@deleteable() +@updateable() +export class _ListItem extends _GraphQueryableInstance { + /** + * Method for retrieving the versions of a list item. + * @returns IListItemVersion + */ + public get versions(): IGraphQueryableCollection { + return GraphQueryableCollection(this, "versions"); + } +} +export interface IListItem extends _ListItem, IDeleteable, IUpdateable { } +export const ListItem = graphInvokableFactory(_ListItem); + +/** + * Describes a collection of list item objects + * + */ +@defaultPath("items") +@getById(ListItem) +export class _ListItems extends _GraphQueryableCollection{ + /** + * Create a new list item as specified in the request body. + * + * @param listItem a JSON representation of a List object. + */ + public async add(listItem: IListItemEntity): Promise { + const data = await graphPost(this, body(listItem)); + + return { + data, + list: (this).getById(data.id), + }; + } +} + +export interface IListItems extends _ListItems, IGetById { } +export const ListItems = graphInvokableFactory(_ListItems); + +/** + * IListAddResult + */ +export interface IListItemAddResult { + list: IListItem; + data: IListItemEntity; +} diff --git a/packages/graph/lists/drive.ts b/packages/graph/lists/drive.ts index 4ee478c90..76277fdbb 100644 --- a/packages/graph/lists/drive.ts +++ b/packages/graph/lists/drive.ts @@ -1,7 +1,7 @@ -import { _Drive } from "../onedrive/types.js"; +import { _Drive } from "../drive/types.js"; import { List, IList } from "./types.js"; -declare module "../onedrive/types" { +declare module "../drive/types" { interface _Drive { getList: () => Promise; } diff --git a/packages/graph/lists/types.ts b/packages/graph/lists/types.ts index cd7558a2a..1e3ea85a2 100644 --- a/packages/graph/lists/types.ts +++ b/packages/graph/lists/types.ts @@ -5,23 +5,23 @@ import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; /** - * Represents a booking service entity + * Represents a list entity */ @deleteable() @updateable() -export class _List extends _GraphQueryableInstance { } +export class _List extends _GraphQueryableInstance {} export interface IList extends _List, IDeleteable, IUpdateable { } export const List = graphInvokableFactory(_List); /** - * Describes a collection of booking service objects + * Describes a collection of list objects * */ -@defaultPath("services") +@defaultPath("lists") @getById(List) export class _Lists extends _GraphQueryableCollection{ /** - * Create a new booking service as specified in the request body. + * Create a new list as specified in the request body. * * @param list a JSON representation of a List object. */ diff --git a/packages/graph/mail/funcs.ts b/packages/graph/mail/funcs.ts new file mode 100644 index 000000000..6bf0906ee --- /dev/null +++ b/packages/graph/mail/funcs.ts @@ -0,0 +1,20 @@ +import { IGraphQueryable, GraphQueryableCollection, IGraphQueryableCollection } from "../graphqueryable.js"; +import { graphPost } from "../operations.js"; +import { body } from "@pnp/queryable"; +import { Message } from "@microsoft/microsoft-graph-types"; + +// export interface IMessage extends Message { +// attachments: +// } +/** + * Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, + * from the user's default calendar, or from some other calendar of the user's + * + * @param this IGraphQueryable instance + * @param message - should roughly match Message type in @microsoft/microsoft-graph-types. + * Am not typing the property because attaching a file require the property "@odata.type": "#microsoft.graph.fileAttachment" + * which is not included the typing and therefore will make the function unusable in that scenario. + */ +export function mailSend(this: IGraphQueryable, message: any): Promise { + return graphPost(GraphQueryableCollection(this, "mailSend"), body(message)); +} diff --git a/packages/graph/mail/groups.ts b/packages/graph/mail/groups.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/graph/mail/index.ts b/packages/graph/mail/index.ts new file mode 100644 index 000000000..b9f93edaa --- /dev/null +++ b/packages/graph/mail/index.ts @@ -0,0 +1,5 @@ +import "./users.js"; + +// export { + +// } from "./types.js"; diff --git a/packages/graph/mail/types.ts b/packages/graph/mail/types.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/graph/mail/users.ts b/packages/graph/mail/users.ts new file mode 100644 index 000000000..f8bc4cb35 --- /dev/null +++ b/packages/graph/mail/users.ts @@ -0,0 +1,20 @@ +// import { addProp } from "@pnp/queryable"; +import { _User } from "../users/types.js"; +// import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars } from "./types.js"; +import { mailSend } from "./funcs.js"; +// import { IGraphQueryableCollection } from "../graphqueryable.js"; + +declare module "../users/types" { + interface _User { + mailSend(message: any): void; + } + interface IUser { + mailSend(message: any): void; + } +} + +// addProp(_User, "calendar", Calendar); +// addProp(_User, "calendars", Calendars); +// addProp(_User, "events", Events); + +_User.prototype.mailSend = mailSend; diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index 4c37b799f..a53002f4a 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -9,7 +9,7 @@ import "../insights/index.js"; import "../invitations/index.js"; import "../members/index.js"; import "../messages/index.js"; -import "../onedrive/index.js"; +import "../drive/index.js"; import "../onenote/index.js"; import "../photos/index.js"; import "../planner/index.js"; @@ -30,7 +30,7 @@ export * from "../insights/index.js"; export * from "../invitations/index.js"; export * from "../members/index.js"; export * from "../messages/index.js"; -export * from "../onedrive/index.js"; +export * from "../drive/index.js"; export * from "../onenote/index.js"; export * from "../photos/index.js"; export * from "../planner/index.js"; diff --git a/packages/graph/shares/types.ts b/packages/graph/shares/types.ts index ee8c7fa27..aed1aa7ba 100644 --- a/packages/graph/shares/types.ts +++ b/packages/graph/shares/types.ts @@ -1,7 +1,7 @@ import { defaultPath } from "../decorators.js"; import { graphInvokableFactory, _GraphQueryableCollection, _GraphQueryableInstance } from "../graphqueryable.js"; import { SharedDriveItem as ISharedDriveItem } from "@microsoft/microsoft-graph-types"; -import { DriveItem, IDriveItem } from "../onedrive/types.js"; +import { DriveItem, IDriveItem } from "../drive/types.js"; /** * Shares diff --git a/test/graph/analytics.ts b/test/graph/analytics.ts new file mode 100644 index 000000000..b8d8de710 --- /dev/null +++ b/test/graph/analytics.ts @@ -0,0 +1,137 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/drive"; +import "@pnp/graph/sites"; +import "@pnp/graph/lists"; +import "@pnp/graph/list-item"; +import "@pnp/graph/analytics"; +import { List } from "@microsoft/microsoft-graph-types"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import { IAnalyticsOptions } from "@pnp/graph/analytics"; +import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; + +describe.only("Analytics", function () { + let testUserName = ""; + let site = null; + let driveId = null; + let listResultId = null; + let listItemId = null; + + const fileOptions = { + content: "This is some test content", + filePathName: "pnpTest.txt", + contentType: "text/plain;charset=utf-8", + }; + const sampleList: List = { + displayName: "PnPGraphTestListItemAnalytics", + list: { "template": "genericList" }, + }; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + // Create a sample list + try { + site = await getTestingGraphSPSite(this); + const listResult = await site.lists.add(sampleList); + listResultId = listResult.data.id; + const listItemProps: any = { + fields: { + title: "Test Item", + }, + }; + const listItem = await site.lists.getById(listResultId).items.add(listItemProps); + listItemId = listItem.data.id; + } catch (err) { + console.log("Could not create a sample list and item."); + } + // Get a sample user + try { + testUserName = this.pnp.settings.testUser.substring(this.pnp.settings.testUser.lastIndexOf("|") + 1); + const drives = await this.pnp.graph.users.getById(testUserName).drives(); + if (drives.length > 0) { + driveId = drives[0].id; + } + } catch (err) { + console.log("Could not retrieve user's drives"); + } + }); + + it("Get Drive Item Analytics - Last Seven Days", async function () { + if (stringIsNullOrEmpty(driveId)) { + this.skip(); + } + const testFileName = `TestFile_${getRandomString(4)}.txt`; + const fo = JSON.parse(JSON.stringify(fileOptions)); + fo.filePathName = testFileName; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); + const analytics = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id).analytics(); + return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); + }); + + it("Get List Item Analytics - Last Seven Days", async function () { + if (stringIsNullOrEmpty(listItemId)) { + this.skip(); + } + const analytics = await site.lists.getById(listResultId).items.getById(listItemId).analytics(); + return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); + }); + + it("Get Site Analytics - Last Seven Days", async function () { + if (stringIsNullOrEmpty(driveId)) { + this.skip(); + } + const site = this.pnp.graph.sites.getById(this.pnp.settings.graph.id); + const analytics = await site.analytics(); + return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); + }); + + it("Get Drive Item Analytics - All Time", async function () { + if (stringIsNullOrEmpty(driveId)) { + this.skip(); + } + const testFileName = `TestFile_${getRandomString(4)}.txt`; + const fo = JSON.parse(JSON.stringify(fileOptions)); + fo.filePathName = testFileName; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); + const options: IAnalyticsOptions = { timeRange: "allTime" }; + const analytics = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id).analytics(options); + return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); + }); + + it("Get List Item Analytics - All Time", async function () { + if (stringIsNullOrEmpty(listItemId)) { + this.skip(); + } + const options: IAnalyticsOptions = { timeRange: "allTime" }; + const analytics = await site.lists.getById(listResultId).items.getById(listItemId).analytics(options); + return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); + }); + + it("Get Site Analytics - All Time", async function () { + if (stringIsNullOrEmpty(driveId)) { + this.skip(); + } + const site = this.pnp.graph.sites.getById(this.pnp.settings.graph.id); + const options: IAnalyticsOptions = { timeRange: "allTime" }; + const analytics = await site.analytics(options); + return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); + }); + + // Remove the test contact we created + after(async function () { + + if (!stringIsNullOrEmpty(listResultId)) { + try { + await site.lists.getById(listResultId).delete(); + } catch (err) { + console.error(`Cannot clean up test contact: ${listResultId}`); + } + } + return; + }); +}); diff --git a/test/graph/onedrive.ts b/test/graph/drive.ts similarity index 94% rename from test/graph/onedrive.ts rename to test/graph/drive.ts index 54952b47c..300835d93 100644 --- a/test/graph/onedrive.ts +++ b/test/graph/drive.ts @@ -3,14 +3,14 @@ import * as path from "path"; import * as fs from "fs"; import findupSync from "findup-sync"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; -import { IAnalyticsOptions, IItemOptions } from "@pnp/graph/onedrive/types"; +import { IItemOptions } from "@pnp/graph/drive/types"; // give ourselves a single reference to the projectRoot const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); -describe("OneDrive", function () { +describe("Drive", function () { let testUserName = ""; let driveId = null; const fileOptions = { @@ -350,16 +350,4 @@ describe("OneDrive", function () { } return expect(previewDriveItem).to.haveOwnProperty("getUrl"); }); - - it("Get Drive Item Analytics - Last Seven Days", async function () { - if (stringIsNullOrEmpty(driveId)) { - this.skip(); - } - const testFileName = `TestFile_${getRandomString(4)}.txt`; - const fo = JSON.parse(JSON.stringify(fileOptions)); - fo.filePathName = testFileName; - const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); - const analytics = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id).analytics()(); - return expect(analytics).to.haveOwnProperty("@odata.context"); - }); }); diff --git a/test/graph/lists.ts b/test/graph/lists.ts index dec278374..7bd2a6700 100644 --- a/test/graph/lists.ts +++ b/test/graph/lists.ts @@ -6,7 +6,7 @@ import { ISite } from "@pnp/graph/sites"; import { getRandomString } from "@pnp/core"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; -describe("Lists", function () { +describe.only("Lists", function () { let site: ISite; const sampleList: List = { displayName: "PnPGraphTestList", diff --git a/test/graph/querable.ts b/test/graph/querable.ts index 012d2e8b1..faeefbbe5 100644 --- a/test/graph/querable.ts +++ b/test/graph/querable.ts @@ -1,7 +1,7 @@ import { expect } from "chai"; import "@pnp/graph/sites/group"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/drive"; import { Drive, Group } from "@microsoft/microsoft-graph-types"; import { hOP, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; From 7ea26338b541cd039a4b24b733695463ce2db3d4 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 10 Aug 2023 14:14:35 -0400 Subject: [PATCH 006/171] operations, site updates, file renames, rename onedrive to files --- CHANGELOG.md | 11 ++ debug/launch/graph.ts | 14 +- debug/launch/main.ts | 4 +- docs/graph/{onedrive.md => files.md} | 68 +++++----- docs/graph/operations.md | 22 +++ docs/graph/sites.md | 136 ++++++++++++++++++- mkdocs.yml | 3 +- packages/graph/attachments/types.ts | 2 +- packages/graph/batching.ts | 2 +- packages/graph/bookings/types.ts | 2 +- packages/graph/calendars/types.ts | 2 +- packages/graph/cloud-communications/types.ts | 2 +- packages/graph/columns/addColumns.ts | 2 +- packages/graph/columns/content-types.ts | 2 +- packages/graph/contacts/types.ts | 2 +- packages/graph/content-types/lists.ts | 2 +- packages/graph/content-types/sites.ts | 2 +- packages/graph/content-types/types.ts | 2 +- packages/graph/conversations/types.ts | 2 +- packages/graph/decorators.ts | 2 +- packages/graph/directory-objects/types.ts | 2 +- packages/graph/{onedrive => files}/funcs.ts | 6 +- packages/graph/{onedrive => files}/groups.ts | 0 packages/graph/{onedrive => files}/index.ts | 1 + packages/graph/{onedrive => files}/sites.ts | 0 packages/graph/{onedrive => files}/types.ts | 2 +- packages/graph/{onedrive => files}/users.ts | 2 +- packages/graph/groups/types.ts | 2 +- packages/graph/index.ts | 2 +- packages/graph/invitations/types.ts | 2 +- packages/graph/lists/drive.ts | 4 +- packages/graph/lists/types.ts | 2 +- packages/graph/members/types.ts | 2 +- packages/graph/messages/users.ts | 2 +- packages/graph/onenote/types.ts | 2 +- packages/graph/operations/index.ts | 7 + packages/graph/operations/list.ts | 14 ++ packages/graph/operations/site.ts | 14 ++ packages/graph/operations/types.ts | 11 ++ packages/graph/{operations.ts => ops.ts} | 0 packages/graph/photos/types.ts | 2 +- packages/graph/planner/types.ts | 2 +- packages/graph/presets/all.ts | 6 +- packages/graph/search/types.ts | 2 +- packages/graph/shares/types.ts | 2 +- packages/graph/sites/index.ts | 1 + packages/graph/sites/types.ts | 56 +++++++- packages/graph/sites/user.ts | 14 ++ packages/graph/subscriptions/types.ts | 2 +- packages/graph/teams/index.ts | 2 +- packages/graph/teams/types.ts | 2 +- packages/sp/appcatalog/types.ts | 2 +- packages/sp/attachments/types.ts | 2 +- packages/sp/batching.ts | 2 +- packages/sp/behaviors/request-digest.ts | 2 +- packages/sp/clientside-pages/types.ts | 2 +- packages/sp/clientside-pages/web.ts | 2 +- packages/sp/column-defaults/list.ts | 2 +- packages/sp/comments/clientside-page.ts | 2 +- packages/sp/comments/item.ts | 2 +- packages/sp/comments/types.ts | 2 +- packages/sp/content-types/types.ts | 2 +- packages/sp/context-info/index.ts | 2 +- packages/sp/favorites/types.ts | 2 +- packages/sp/features/types.ts | 2 +- packages/sp/fields/types.ts | 2 +- packages/sp/files/types.ts | 2 +- packages/sp/folders/types.ts | 2 +- packages/sp/hubsites/site.ts | 2 +- packages/sp/hubsites/web.ts | 2 +- packages/sp/index.ts | 2 +- packages/sp/items/types.ts | 2 +- packages/sp/lists/types.ts | 2 +- packages/sp/navigation/types.ts | 2 +- packages/sp/{operations.ts => ops.ts} | 0 packages/sp/profiles/types.ts | 2 +- packages/sp/recycle-bin/types.ts | 2 +- packages/sp/regional-settings/funcs.ts | 2 +- packages/sp/regional-settings/types.ts | 2 +- packages/sp/related-items/types.ts | 2 +- packages/sp/search/query.ts | 2 +- packages/sp/security/funcs.ts | 2 +- packages/sp/security/types.ts | 2 +- packages/sp/sharing/funcs.ts | 2 +- packages/sp/sharing/web.ts | 2 +- packages/sp/site-designs/types.ts | 2 +- packages/sp/site-groups/types.ts | 2 +- packages/sp/site-groups/web.ts | 2 +- packages/sp/site-scripts/types.ts | 2 +- packages/sp/site-users/types.ts | 2 +- packages/sp/site-users/web.ts | 2 +- packages/sp/sites/types.ts | 2 +- packages/sp/social/types.ts | 2 +- packages/sp/spqueryable.ts | 2 +- packages/sp/sputilities/types.ts | 2 +- packages/sp/subscriptions/types.ts | 2 +- packages/sp/taxonomy/types.ts | 2 +- packages/sp/user-custom-actions/types.ts | 2 +- packages/sp/views/types.ts | 2 +- packages/sp/webparts/types.ts | 2 +- packages/sp/webs/types.ts | 2 +- test/graph/onedrive.ts | 4 +- test/graph/querable.ts | 2 +- test/graph/sites.ts | 5 +- 104 files changed, 422 insertions(+), 139 deletions(-) rename docs/graph/{onedrive.md => files.md} (93%) create mode 100644 docs/graph/operations.md rename packages/graph/{onedrive => files}/funcs.ts (84%) rename packages/graph/{onedrive => files}/groups.ts (100%) rename packages/graph/{onedrive => files}/index.ts (97%) rename packages/graph/{onedrive => files}/sites.ts (100%) rename packages/graph/{onedrive => files}/types.ts (99%) rename packages/graph/{onedrive => files}/users.ts (97%) create mode 100644 packages/graph/operations/index.ts create mode 100644 packages/graph/operations/list.ts create mode 100644 packages/graph/operations/site.ts create mode 100644 packages/graph/operations/types.ts rename packages/graph/{operations.ts => ops.ts} (100%) create mode 100644 packages/graph/sites/user.ts rename packages/sp/{operations.ts => ops.ts} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4ab9740e..06b0901d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- graph + - limitation on chaining site operations from sites.getByUrl + ### Added - graph - explict error thrown if SPFx context is null or undefined when needed + - followed sites support for users + - ISite now supports `async rebase()` to ensure any ISite is represented by the url pattern /sites/{site id} regardless of how it was first loaded + - ISites.getAllSites() + - support for operations for ISite and IList - sp - explict error thrown if SPFx context is null or undefined when needed @@ -26,6 +33,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - getPaged method removed from _Items/IItems - PagedItemCollection removed from library - removed /items/get-all import, unneeded, use async iterator patterns + - operations.ts renamed to ops.ts ### Changed @@ -33,6 +41,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - IGraphQueryableCollection now supports async iterator pattern - IGraphQueryableCollection count method now returns -1 if the collection does not support counting - All GraphQueryable*, _GraphQueryable*, and IGraphQueryable* have been renamed to remove "Queryable" (ex: GraphQueryableCollection is now GraphCollection) + - @pnp/graph/onedrive renamed to @pnp/graph/files + - ISites.getByUrl is now async + - operations.ts renamed to ops.ts - sp - _Items and IItems now supports async iterator pattern diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index f2646a551..5aa4c6498 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,6 +1,9 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; +import "@pnp/graph/sites"; import "@pnp/graph/users"; +import "@pnp/graph/files"; +import "@pnp/graph/operations"; declare var process: { exit(code?: number): void }; @@ -8,13 +11,16 @@ export async function Example(settings: any) { const graph = graphSetup(settings); - const users = await graph.users(); - + const site = await graph.sites.getByUrl("318studios.sharepoint.com", "/sites/dev") + + const ops = await site.operations(); + + Logger.log({ - data: users, + data: ops, level: LogLevel.Info, message: "List of Users Data", }); process.exit(0); -} \ No newline at end of file +} diff --git a/debug/launch/main.ts b/debug/launch/main.ts index 2a4fdec1e..9c9922e07 100644 --- a/debug/launch/main.ts +++ b/debug/launch/main.ts @@ -8,8 +8,8 @@ import { ITestingSettings } from "../../test/load-settings.js"; // add your debugging imports here and prior to submitting a PR git checkout debug/debug.ts // will allow you to keep all your debugging files locally // comment out the example -import { Example } from "./sp.js"; -// import { Example } from "./graph.js"; +// import { Example } from "./sp.js"; +import { Example } from "./graph.js"; // setup the connection to SharePoint using the settings file, you can // override any of the values as you want here, just be sure not to commit diff --git a/docs/graph/onedrive.md b/docs/graph/files.md similarity index 93% rename from docs/graph/onedrive.md rename to docs/graph/files.md index fb4f968ad..d1e0896a8 100644 --- a/docs/graph/onedrive.md +++ b/docs/graph/files.md @@ -1,4 +1,4 @@ -# @pnp/graph/onedrive +# @pnp/graph/files The ability to manage drives and drive items in Onedrive is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described you can manage drives and drive items in Onedrive. @@ -16,7 +16,7 @@ import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/groups"; import "@pnp/graph/sites"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -38,7 +38,7 @@ import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/groups"; import "@pnp/graph/sites"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -59,7 +59,7 @@ Using the drives.getById() you can get one of the available drives in Outlook ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -78,7 +78,7 @@ Using the list() you get the associated list information ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -94,7 +94,7 @@ Form more infomration about acting on the IList object see [@pnpjs/graph/lists]( ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; import "@pnp/graph/lists"; const graph = graphfi(...); @@ -113,7 +113,7 @@ Using the recent() you get the recent files ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -130,7 +130,7 @@ Using the sharedWithMe() you get the files shared with the user ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -152,7 +152,7 @@ List the items that have been followed by the signed in user. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -169,7 +169,7 @@ import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/sites"; import "@pnp/graph/groups"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -194,7 +194,7 @@ Using the children() you get the children ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -215,7 +215,7 @@ Using the drive.getItemsByPath() you can get the contents of a particular folder ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -231,9 +231,9 @@ Using the add you can add an item, for more options please user the upload metho ```TypeScript import { graphfi } from "@pnp/graph"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; import "@pnp/graph/users"; -import {IDriveItemAddResult} from "@pnp/graph/onedrive"; +import {IDriveItemAddResult} from "@pnp/graph/files"; const graph = graphfi(...); @@ -247,9 +247,9 @@ Using the .upload method you can add or update the content of an item. ```TypeScript import { graphfi } from "@pnp/graph"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; import "@pnp/graph/users"; -import {IFileOptions, IDriveItemAddResult} from "@pnp/graph/onedrive"; +import {IFileOptions, IDriveItemAddResult} from "@pnp/graph/files"; const graph = graphfi(...); @@ -282,7 +282,7 @@ Using addFolder you can add a folder ```TypeScript import { graph } from "@pnp/graph"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; import "@pnp/graph/users" import {IDriveItemAddResult} from "@pnp/graph/ondrive"; @@ -300,7 +300,7 @@ Using the search() you can search for items, and optionally select properties ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -320,7 +320,7 @@ Using the items.getById() you can get a specific item from the current drive ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -337,7 +337,7 @@ Using the drive.getItemByPath() you can get a specific item from the current dri ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -354,7 +354,7 @@ Using the item.getContent() you can get the content of a file. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -385,7 +385,7 @@ Using the item.convertContent() you can get a PDF version of the file. See [offi ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -414,7 +414,7 @@ Using the thumbnails() you get the thumbnails ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -431,7 +431,7 @@ Using the delete() you delete the current item ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -448,7 +448,7 @@ Using the update() you update the current item ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -465,7 +465,7 @@ Using the move() you move the current item, and optionally update it ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -491,7 +491,7 @@ Using the copy() you can copy the current item to a new location, returns the pa ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -517,8 +517,8 @@ Using the users default drive you can get special folders, including: Documents, ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; -import { SpecialFolder, IDriveItem } from "@pnp/graph/onedrive"; +import "@pnp/graph/files"; +import { SpecialFolder, IDriveItem } from "@pnp/graph/files"; const graph = graphfi(...); @@ -540,8 +540,8 @@ If you want to obtain long-lived embeddable links, use the createLink API instea ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; -import { IPreviewOptions, IDriveItemPreviewInfo } from "@pnp/graph/onedrive"; +import "@pnp/graph/files"; +import { IPreviewOptions, IDriveItemPreviewInfo } from "@pnp/graph/files"; import { ItemPreviewInfo } from "@microsoft/microsoft-graph-types" const graph = graphfi(...); @@ -566,7 +566,7 @@ Track changes in a driveItem and its children over time. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; import { IDeltaItems } from "@pnp/graph/ondrive"; const graph = graphfi(...); @@ -596,8 +596,8 @@ Using the analytics() you get the ItemAnalytics for a DriveItem ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; -import { IAnalyticsOptions } from "@pnp/graph/onedrive"; +import "@pnp/graph/files"; +import { IAnalyticsOptions } from "@pnp/graph/files"; const graph = graphfi(...); diff --git a/docs/graph/operations.md b/docs/graph/operations.md new file mode 100644 index 000000000..d0d6f0afb --- /dev/null +++ b/docs/graph/operations.md @@ -0,0 +1,22 @@ +# @pnp/graph/operations + +Provides capabilities related to rich long-running operations. + +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## list site operations + +```TypeScript +import "@pnp/graph/sites"; +import "@pnp/graph/operations"; + +const graph = graphfi(...); + +// using getByUrl +const site = await graph.sites.getByUrl("tenant.sharepoint.com", "/sites/dev"); + +const ops = await site.operations(); + +// using site id +const ops2 = await graph.sites.getById("{site id}").operations(); +``` diff --git a/docs/graph/sites.md b/docs/graph/sites.md index 44070b32d..f03603f09 100644 --- a/docs/graph/sites.md +++ b/docs/graph/sites.md @@ -4,7 +4,9 @@ The search module allows you to access the Microsoft Graph Sites API. [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) -## Call graph.sites +## sites + +### list ```TypeScript import { graphfi } from "@pnp/graph"; @@ -15,7 +17,7 @@ const graph = graphfi(...); const sitesInfo = await graph.sites(); ``` -## Call graph.sites.getById +### getById ```TypeScript import { graphfi } from "@pnp/graph"; @@ -26,12 +28,10 @@ const graph = graphfi(...); const siteInfo = await graph.sites.getById("{site identifier}")(); ``` -## Call graph.sites.getByUrl +### getByUrl Using the sites.getByUrl() you can get a site using url instead of identifier -![Known Issue Banner](https://img.shields.io/badge/Known%20Issue-important.svg) If you get a site with this method, the graph does not support chaining a request further than .drive. We will review and try and create a work around for this issue. - ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/sites"; @@ -42,6 +42,128 @@ const serverRelativeUrl = "/sites/teamsite1"; const siteInfo = await graph.sites.getByUrl(sharepointHostName, serverRelativeUrl)(); ``` -## Make additional calls or recieve items from lists +### getAllSites + +List sites across geographies in an organization. This API can also be used to enumerate all sites in a non-multi-geo tenant. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; + +const graph = graphfi(...); + +const siteslist = []; + +// use async iterator pattern +for await (const sites of graph.sites.getAllSites()) { + siteslist.push(sites); +} + +// supports query params, here we get the sites in pages of 5 as an example +for await (const sites of graph.sites.getAllSites().top(5)) { + siteslist.push(sites); +} +``` + +## site + +### get + +Access sub-sites of the current site + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; + +const graph = graphfi(...); + +const siteInfo = await graph.sites.getById("{site id}")(); +``` + +### sites + +Access sub-sites of the current site + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; + +const graph = graphfi(...); + +const subsites = await graph.sites.getById("{site id}").sites(); +``` + +### rebase + +Ensures the underlying url used in queries for this site is of the pattern /sites/{site id} regardless of how the ISite instance was addressed. + +>> We internally rebase sites using this method so you probably don't need to call it directly, but it is available in case you do😀 + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; -We don't currently implement all of the available options in graph for sites, rather focusing on the sp library. While we do accept PRs to add functionality, you can [also make calls by path.](./items.md) +const graph = graphfi(...); + +const rebasedSite = await Site([graph.sites, "/sites/tenant.sharepoint.com:/sites/dev:"]).rebase(); + +const items = await rebasedSite.drive.root.children(); +``` + +## followedSites + +Provides access to the sites a user is following. + +### list + +>> At this time you can not list a user's followed sites using app-only permissions + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/users"; + +const graph = graphfi(...); + +const followedSites = await graph.me.followedSites(); +``` + +### add + +Adds a followed site to a user's collection + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/users"; + +const graph = graphfi(...); + +const followedSites = await graph.me.followedSites.add("{site id}"); + +// supports multiple ids in a single call +const followedSites2 = await graph.me.followedSites.add("{site id}", "{site id2}", "{site id3}", "{site id4}"); + +// callable for any user +const followedSites3 = await graph.users.getById("{user id}").followedSites.add("{site id}", "{site id2}", "{site id3}", "{site id4}"); +``` + +### remove + +Removes a followed site to a user's collection + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/users"; + +const graph = graphfi(...); + +await graph.me.followedSites.remove("{site id}"); + +// supports multiple ids in a single call +await graph.me.followedSites.remove("{site id}", "{site id2}", "{site id3}", "{site id4}"); + +// callable for any user +await graph.users.getById("{user id}").followedSites.remove("{site id}", "{site id2}", "{site id3}", "{site id4}"); +``` diff --git a/mkdocs.yml b/mkdocs.yml index d1592830d..a0d11c4da 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -49,12 +49,13 @@ nav: - 'cloud communications': 'graph/cloud-communications.md' - calendars: 'graph/calendars.md' - 'directory objects': 'graph/directoryobjects.md' + - files: 'graph/files.md' - invitations: 'graph/invitations.md' - items: 'graph/items.md' - lists: 'graph/lists.md' - messages: 'graph/messages.md' - - onedrive: 'graph/onedrive.md' - outlook: 'graph/outlook.md' + - operations: 'graph/operations.md' - photos: 'graph/photos.md' - planner: 'graph/planner.md' - search: 'graph/search.md' diff --git a/packages/graph/attachments/types.ts b/packages/graph/attachments/types.ts index 5559242c9..781377439 100644 --- a/packages/graph/attachments/types.ts +++ b/packages/graph/attachments/types.ts @@ -1,7 +1,7 @@ import { Attachment as IAttachmentType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; import { type } from "../utils/type.js"; diff --git a/packages/graph/batching.ts b/packages/graph/batching.ts index 5e306a203..6dd53cfa4 100644 --- a/packages/graph/batching.ts +++ b/packages/graph/batching.ts @@ -1,7 +1,7 @@ import { isUrlAbsolute, hOP, TimelinePipe, getGUID, CopyFrom, objectDefinedNotNull, isFunc, combine } from "@pnp/core"; import { parseBinderWithErrorCheck, Queryable, body, InjectHeaders } from "@pnp/queryable"; import { IGraphQueryable, _GraphQueryable } from "./graphqueryable.js"; -import { graphPost } from "./operations.js"; +import { graphPost } from "./ops.js"; import { GraphFI } from "./fi.js"; declare module "./fi" { diff --git a/packages/graph/bookings/types.ts b/packages/graph/bookings/types.ts index 15386a817..4563ed14c 100644 --- a/packages/graph/bookings/types.ts +++ b/packages/graph/bookings/types.ts @@ -9,7 +9,7 @@ import { } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { calendarView } from "./funcs.js"; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index 5f3327999..049eb417c 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -2,7 +2,7 @@ import { body } from "@pnp/queryable"; import { Event as IEventType, Calendar as ICalendarType } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { calendarView, instances } from "./funcs.js"; /** diff --git a/packages/graph/cloud-communications/types.ts b/packages/graph/cloud-communications/types.ts index 330513d31..c714db00f 100644 --- a/packages/graph/cloud-communications/types.ts +++ b/packages/graph/cloud-communications/types.ts @@ -2,7 +2,7 @@ import { Presence as IUserPresence } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; /** diff --git a/packages/graph/columns/addColumns.ts b/packages/graph/columns/addColumns.ts index 76c383e6c..924944d38 100644 --- a/packages/graph/columns/addColumns.ts +++ b/packages/graph/columns/addColumns.ts @@ -1,5 +1,5 @@ import { IColumn } from "./types"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { ColumnDefinition as IColumnDefinition, diff --git a/packages/graph/columns/content-types.ts b/packages/graph/columns/content-types.ts index 83f2e8c28..3c0e4c1cf 100644 --- a/packages/graph/columns/content-types.ts +++ b/packages/graph/columns/content-types.ts @@ -1,5 +1,5 @@ import { addProp, body } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { _ContentType } from "../content-types/types.js"; import { Columns, IColumns,IColumn, _Columns } from "./types.js"; import { IColumnAddResult } from "./addColumns.js"; diff --git a/packages/graph/contacts/types.ts b/packages/graph/contacts/types.ts index 20df7a944..a73e662f9 100644 --- a/packages/graph/contacts/types.ts +++ b/packages/graph/contacts/types.ts @@ -1,7 +1,7 @@ import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { Contact as IContactType, ContactFolder as IContactFolderType, EmailAddress as IEmailAddressType } from "@microsoft/microsoft-graph-types"; import { defaultPath, updateable, deleteable, IUpdateable, IDeleteable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; /** diff --git a/packages/graph/content-types/lists.ts b/packages/graph/content-types/lists.ts index e1dbb8a3b..5d8a5b026 100644 --- a/packages/graph/content-types/lists.ts +++ b/packages/graph/content-types/lists.ts @@ -1,5 +1,5 @@ import { addProp } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { _List } from "../lists/types.js"; import { ContentTypes, IContentType, IContentTypeAddResult, IContentTypes, _ContentTypes } from "./types.js"; import { body } from "@pnp/queryable"; diff --git a/packages/graph/content-types/sites.ts b/packages/graph/content-types/sites.ts index 2e6e4aadc..015b0f683 100644 --- a/packages/graph/content-types/sites.ts +++ b/packages/graph/content-types/sites.ts @@ -2,7 +2,7 @@ import { addProp } from "@pnp/queryable"; import { ContentType as IContentTypeEntity, } from "@microsoft/microsoft-graph-types"; -import { graphGet, graphPost } from "../operations.js"; +import { graphGet, graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { Site, _Site } from "../sites/types.js"; import { ContentTypes, IContentType, IContentTypeAddResult, IContentTypes, _ContentTypes } from "./types.js"; diff --git a/packages/graph/content-types/types.ts b/packages/graph/content-types/types.ts index 4c13cf885..1477519b7 100644 --- a/packages/graph/content-types/types.ts +++ b/packages/graph/content-types/types.ts @@ -4,7 +4,7 @@ import { } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphGet, graphPost } from "../operations.js"; +import { graphGet, graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { JSONHeaderParse } from "@pnp/queryable"; diff --git a/packages/graph/conversations/types.ts b/packages/graph/conversations/types.ts index 845080daa..2a808f50b 100644 --- a/packages/graph/conversations/types.ts +++ b/packages/graph/conversations/types.ts @@ -12,7 +12,7 @@ import { graphInvokableFactory, } from "../graphqueryable.js"; import { defaultPath, updateable, IUpdateable, deleteable, IDeleteable, addable, IAddable, getById, IGetById } from "../decorators.js"; -import { graphPost, graphDelete } from "../operations.js"; +import { graphPost, graphDelete } from "../ops.js"; /** * Conversation diff --git a/packages/graph/decorators.ts b/packages/graph/decorators.ts index 79a3a59f4..c56e8a951 100644 --- a/packages/graph/decorators.ts +++ b/packages/graph/decorators.ts @@ -1,5 +1,5 @@ import { IGraphQueryable } from "./graphqueryable.js"; -import { graphDelete, graphPatch, graphPost } from "./operations.js"; +import { graphDelete, graphPatch, graphPost } from "./ops.js"; import { body, headers } from "@pnp/queryable"; /** diff --git a/packages/graph/directory-objects/types.ts b/packages/graph/directory-objects/types.ts index 71b72c91d..e266c8dac 100644 --- a/packages/graph/directory-objects/types.ts +++ b/packages/graph/directory-objects/types.ts @@ -2,7 +2,7 @@ import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../grap import { DirectoryObject as IDirectoryObjectType } from "@microsoft/microsoft-graph-types"; import { defaultPath, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; import { body } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { Count } from "../behaviors/paged.js"; /** diff --git a/packages/graph/onedrive/funcs.ts b/packages/graph/files/funcs.ts similarity index 84% rename from packages/graph/onedrive/funcs.ts rename to packages/graph/files/funcs.ts index a0e20f5c6..0d5af81fa 100644 --- a/packages/graph/onedrive/funcs.ts +++ b/packages/graph/files/funcs.ts @@ -1,6 +1,6 @@ import { combine } from "@pnp/core"; import { body, InjectHeaders } from "@pnp/queryable"; -import { graphPost, graphPut } from "../operations.js"; +import { graphPost, graphPut } from "../ops.js"; import { DriveItem, IDriveItemAddResult, IFileOptions } from "./types.js"; export interface ICheckInOptions { @@ -16,6 +16,10 @@ export function checkOut(): Promise { return graphPost(DriveItem(this, "checkout")); } +export function encodeSharingUrl(url: string): string { + return "u!" + Buffer.from(url, "utf8").toString("base64").replace(/=$/i, "").replace("/", "_").replace("+", "-"); +} + export async function driveItemUpload(fileOptions: IFileOptions): Promise { let path = "/content"; if (fileOptions.filePathName) { diff --git a/packages/graph/onedrive/groups.ts b/packages/graph/files/groups.ts similarity index 100% rename from packages/graph/onedrive/groups.ts rename to packages/graph/files/groups.ts diff --git a/packages/graph/onedrive/index.ts b/packages/graph/files/index.ts similarity index 97% rename from packages/graph/onedrive/index.ts rename to packages/graph/files/index.ts index 7e46ed940..8e7bf5ef4 100644 --- a/packages/graph/onedrive/index.ts +++ b/packages/graph/files/index.ts @@ -10,6 +10,7 @@ export { export { ICheckInOptions, + encodeSharingUrl, } from "./funcs.js"; export { diff --git a/packages/graph/onedrive/sites.ts b/packages/graph/files/sites.ts similarity index 100% rename from packages/graph/onedrive/sites.ts rename to packages/graph/files/sites.ts diff --git a/packages/graph/onedrive/types.ts b/packages/graph/files/types.ts similarity index 99% rename from packages/graph/onedrive/types.ts rename to packages/graph/files/types.ts index 1f7b269be..e145006a9 100644 --- a/packages/graph/onedrive/types.ts +++ b/packages/graph/files/types.ts @@ -12,7 +12,7 @@ import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as ID import { combine } from "@pnp/core"; import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable } from "../decorators.js"; import { body, BlobParse, CacheNever, errorCheck, InjectHeaders } from "@pnp/queryable"; -import { graphPatch, graphPost, graphPut } from "../operations.js"; +import { graphPatch, graphPost, graphPut } from "../ops.js"; import { driveItemUpload } from "./funcs.js"; /** diff --git a/packages/graph/onedrive/users.ts b/packages/graph/files/users.ts similarity index 97% rename from packages/graph/onedrive/users.ts rename to packages/graph/files/users.ts index 0fbdebdeb..d144214a1 100644 --- a/packages/graph/onedrive/users.ts +++ b/packages/graph/files/users.ts @@ -1,5 +1,5 @@ import { addProp, body } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { _User } from "../users/types.js"; import { IDrive, Drive, IDrives, Drives, _Drive, DriveItem, IDriveItem, _DriveItem, IItemOptions } from "./types.js"; diff --git a/packages/graph/groups/types.ts b/packages/graph/groups/types.ts index 43fae39d1..8926cf71d 100644 --- a/packages/graph/groups/types.ts +++ b/packages/graph/groups/types.ts @@ -2,7 +2,7 @@ import { Event as IEventType, Group as IGroupType } from "@microsoft/microsoft-g import { body } from "@pnp/queryable"; import { graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { _DirectoryObject, _DirectoryObjects } from "../directory-objects/types.js"; export enum GroupType { diff --git a/packages/graph/index.ts b/packages/graph/index.ts index a8fc86fcd..50ee4be80 100644 --- a/packages/graph/index.ts +++ b/packages/graph/index.ts @@ -10,7 +10,7 @@ export { IGraphConstructor, } from "./graphqueryable.js"; -export * from "./operations.js"; +export * from "./ops.js"; export * from "./behaviors/consistency-level.js"; export * from "./behaviors/defaults.js"; diff --git a/packages/graph/invitations/types.ts b/packages/graph/invitations/types.ts index ba5d7c0e9..959fad8b0 100644 --- a/packages/graph/invitations/types.ts +++ b/packages/graph/invitations/types.ts @@ -2,7 +2,7 @@ import { body } from "@pnp/queryable"; import { Invitation as IInvitationType } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; /** * Invitations diff --git a/packages/graph/lists/drive.ts b/packages/graph/lists/drive.ts index 4ee478c90..84b2eb6f3 100644 --- a/packages/graph/lists/drive.ts +++ b/packages/graph/lists/drive.ts @@ -1,7 +1,7 @@ -import { _Drive } from "../onedrive/types.js"; +import { _Drive } from "../files/types.js"; import { List, IList } from "./types.js"; -declare module "../onedrive/types" { +declare module "../files/types" { interface _Drive { getList: () => Promise; } diff --git a/packages/graph/lists/types.ts b/packages/graph/lists/types.ts index 4bf1fd44c..209797538 100644 --- a/packages/graph/lists/types.ts +++ b/packages/graph/lists/types.ts @@ -1,7 +1,7 @@ import { List as IListEntity } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; /** diff --git a/packages/graph/members/types.ts b/packages/graph/members/types.ts index b52949ef0..e531aaa34 100644 --- a/packages/graph/members/types.ts +++ b/packages/graph/members/types.ts @@ -2,7 +2,7 @@ import { body } from "@pnp/queryable"; import { User as IMemberType } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; -import { graphDelete, graphPost } from "../operations.js"; +import { graphDelete, graphPost } from "../ops.js"; /** * Member diff --git a/packages/graph/messages/users.ts b/packages/graph/messages/users.ts index 0712770bd..44cd0f8a5 100644 --- a/packages/graph/messages/users.ts +++ b/packages/graph/messages/users.ts @@ -1,7 +1,7 @@ import { addProp, body } from "@pnp/queryable"; import { _User, User } from "../users/types.js"; import { IMessages, Messages, IMailboxSettings, MailboxSettings, IMailFolders, MailFolders, IMessage } from "./types.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; declare module "../users/types" { interface _User { diff --git a/packages/graph/onenote/types.ts b/packages/graph/onenote/types.ts index 661ca8460..03b501d6c 100644 --- a/packages/graph/onenote/types.ts +++ b/packages/graph/onenote/types.ts @@ -8,7 +8,7 @@ import { graphInvokableFactory, } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; /** * Represents a onenote entity diff --git a/packages/graph/operations/index.ts b/packages/graph/operations/index.ts new file mode 100644 index 000000000..0af3486dd --- /dev/null +++ b/packages/graph/operations/index.ts @@ -0,0 +1,7 @@ +import "./site.js"; +import "./list.js"; + +export { + IOperations, + Operations, +} from "./types.js"; diff --git a/packages/graph/operations/list.ts b/packages/graph/operations/list.ts new file mode 100644 index 000000000..69eccee9e --- /dev/null +++ b/packages/graph/operations/list.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _List } from "../lists/types.js"; +import { IOperations, Operations } from "./types.js"; + +declare module "../lists/types" { + interface _List { + readonly operations: IOperations; + } + interface IList { + readonly operations: IOperations; + } +} + +addProp(_List, "operations", Operations); diff --git a/packages/graph/operations/site.ts b/packages/graph/operations/site.ts new file mode 100644 index 000000000..dca398b4d --- /dev/null +++ b/packages/graph/operations/site.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _Site } from "../sites/types.js"; +import { IOperations, Operations } from "./types.js"; + +declare module "../sites/types" { + interface _Site { + readonly operations: IOperations; + } + interface ISite { + readonly operations: IOperations; + } +} + +addProp(_Site, "operations", Operations); diff --git a/packages/graph/operations/types.ts b/packages/graph/operations/types.ts new file mode 100644 index 000000000..7c12c4787 --- /dev/null +++ b/packages/graph/operations/types.ts @@ -0,0 +1,11 @@ +import { defaultPath } from "../decorators.js"; +import { graphInvokableFactory, _GraphCollection } from "../graphqueryable.js"; +import { Operation as IOperationType } from "@microsoft/microsoft-graph-types"; + +/** + * Operations + */ +@defaultPath("operations") +export class _Operations extends _GraphCollection {} +export interface IOperations extends _Operations { } +export const Operations = graphInvokableFactory(_Operations); diff --git a/packages/graph/operations.ts b/packages/graph/ops.ts similarity index 100% rename from packages/graph/operations.ts rename to packages/graph/ops.ts diff --git a/packages/graph/photos/types.ts b/packages/graph/photos/types.ts index 7a2fb2be8..f9e26ca50 100644 --- a/packages/graph/photos/types.ts +++ b/packages/graph/photos/types.ts @@ -2,7 +2,7 @@ import { _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { BlobParse, BufferParse } from "@pnp/queryable"; import { Photo as IPhotoType } from "@microsoft/microsoft-graph-types"; import { defaultPath } from "../decorators.js"; -import { graphPatch } from "../operations.js"; +import { graphPatch } from "../ops.js"; @defaultPath("photo") export class _Photo extends _GraphInstance { diff --git a/packages/graph/planner/types.ts b/packages/graph/planner/types.ts index 1f72c34c7..688b92528 100644 --- a/packages/graph/planner/types.ts +++ b/packages/graph/planner/types.ts @@ -9,7 +9,7 @@ import { import { body } from "@pnp/queryable"; import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; import { getById, IGetById, deleteableWithETag, IDeleteableWithETag, updateableWithETag, IUpdateableWithETag } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { defaultPath } from "../decorators.js"; /** diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index 4c37b799f..641972213 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -9,8 +9,9 @@ import "../insights/index.js"; import "../invitations/index.js"; import "../members/index.js"; import "../messages/index.js"; -import "../onedrive/index.js"; +import "../files/index.js"; import "../onenote/index.js"; +import "../operations/index.js"; import "../photos/index.js"; import "../planner/index.js"; import "../search/index.js"; @@ -30,8 +31,9 @@ export * from "../insights/index.js"; export * from "../invitations/index.js"; export * from "../members/index.js"; export * from "../messages/index.js"; -export * from "../onedrive/index.js"; +export * from "../files/index.js"; export * from "../onenote/index.js"; +export * from "../operations/index.js"; export * from "../photos/index.js"; export * from "../planner/index.js"; export * from "../search/index.js"; diff --git a/packages/graph/search/types.ts b/packages/graph/search/types.ts index e65b0c540..11755a119 100644 --- a/packages/graph/search/types.ts +++ b/packages/graph/search/types.ts @@ -2,7 +2,7 @@ import { SearchRequest as ISearchRequestType, SearchResponse as ISearchResponseT import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; import { GraphInit, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; /** * Search diff --git a/packages/graph/shares/types.ts b/packages/graph/shares/types.ts index 52554e2d5..10083be78 100644 --- a/packages/graph/shares/types.ts +++ b/packages/graph/shares/types.ts @@ -1,7 +1,7 @@ import { defaultPath } from "../decorators.js"; import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; import { SharedDriveItem as ISharedDriveItem } from "@microsoft/microsoft-graph-types"; -import { DriveItem, IDriveItem } from "../onedrive/types.js"; +import { DriveItem, IDriveItem } from "../files/types.js"; /** * Shares diff --git a/packages/graph/sites/index.ts b/packages/graph/sites/index.ts index a6298e0f2..7ef19395a 100644 --- a/packages/graph/sites/index.ts +++ b/packages/graph/sites/index.ts @@ -2,6 +2,7 @@ import { GraphFI } from "../fi.js"; import { Sites, ISites } from "./types.js"; import "./group.js"; +import "./user.js"; export { ISites, diff --git a/packages/graph/sites/types.ts b/packages/graph/sites/types.ts index 78f60dcab..c649f2c00 100644 --- a/packages/graph/sites/types.ts +++ b/packages/graph/sites/types.ts @@ -1,6 +1,9 @@ +import { combine } from "@pnp/core"; import { defaultPath } from "../decorators.js"; import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; import { Site as ISiteType } from "@microsoft/microsoft-graph-types"; +import { graphPost } from "../ops.js"; +import { body } from "@pnp/queryable"; /** * Sites @@ -24,8 +27,18 @@ export class _Sites extends _GraphCollection { * @param siteUrl: string, the server relative url of the site e.g. "/sites/teamsite1" * @returns ISite */ - public getByUrl(hostname: string, siteUrl: string): ISite { - return Site(this, `${hostname}:${siteUrl}:`); + public async getByUrl(hostname: string, siteUrl: string): Promise { + + return Site(this, `${hostname}:${combine("/", siteUrl)}:`).rebase(); + } + + /** + * List sites across geographies in an organization. This API can also be used to enumerate all sites in a non-multi-geo tenant. + * + * @returns A ISites collection which can be used with async iteration to page through the collection + */ + public getAllSites(): ISites { + return Sites(this, "getAllSites"); } } export interface ISites extends _Sites { } @@ -39,7 +52,46 @@ export class _Site extends _GraphInstance { public get sites(): ISites { return Sites(this); } + + /** + * Rebases this ISite instances to ensure it is of the pattern /sites/{site id} regardless of how it was first retrieved + */ + public async rebase(): Promise { + const siteInfo = await Site(this).select("id")(); + return Site([this, `sites/${siteInfo.id}`]); + } } export interface ISite extends _Site { } export const Site = graphInvokableFactory(_Site); +/** + * Followed Sites + * + * Note: At this time listing a user's followed sites is not supported with app-only permissions + */ +@defaultPath("followedsites") +export class _FollowedSites extends _GraphCollection { + + /** + * Adds site(s) to the user's collection of followed sites + * + * @param siteIds The collection of site ids to add + * @returns Site info for the newly followed sites + */ + public add(...siteIds: string[]): Promise { + + return graphPost(FollowedSites(this, "add"), body({ value: siteIds.map(id => ({ id })) })); + } + + /** + * REmoves site(s) to the user's collection of followed sites + * + * @param siteIds The collection of site ids to remove + */ + public remove(...siteIds: string[]): Promise { + + return graphPost(FollowedSites(this, "remove"), body({ value: siteIds.map(id => ({ id })) })); + } +} +export interface IFollowedSites extends _FollowedSites { } +export const FollowedSites = graphInvokableFactory(_FollowedSites); diff --git a/packages/graph/sites/user.ts b/packages/graph/sites/user.ts new file mode 100644 index 000000000..12b4e6426 --- /dev/null +++ b/packages/graph/sites/user.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _User } from "../users/types.js"; +import { IFollowedSites, FollowedSites } from "./types.js"; + +declare module "../users/types" { + interface _User { + followedSites: IFollowedSites; + } + interface IUser { + followedSites: IFollowedSites; + } +} + +addProp(_User, "followedSites", FollowedSites); diff --git a/packages/graph/subscriptions/types.ts b/packages/graph/subscriptions/types.ts index 42849fcc4..067a05a05 100644 --- a/packages/graph/subscriptions/types.ts +++ b/packages/graph/subscriptions/types.ts @@ -2,7 +2,7 @@ import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../grap import { body } from "@pnp/queryable"; import { Subscription as ISubscriptionType } from "@microsoft/microsoft-graph-types"; import { defaultPath, deleteable, IDeleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; /** * Subscription diff --git a/packages/graph/teams/index.ts b/packages/graph/teams/index.ts index 8bfb28420..0b92df464 100644 --- a/packages/graph/teams/index.ts +++ b/packages/graph/teams/index.ts @@ -3,7 +3,7 @@ import { GraphFI } from "../fi.js"; import { _Group, Group } from "../groups/types.js"; import { ITeamCreateResult, ITeam, Team, ITeams, Teams } from "./types.js"; import { Team as ITeamType } from "@microsoft/microsoft-graph-types"; -import { graphPut } from "../operations.js"; +import { graphPut } from "../ops.js"; import "./users.js"; diff --git a/packages/graph/teams/types.ts b/packages/graph/teams/types.ts index c6c53acc5..d42b2fb89 100644 --- a/packages/graph/teams/types.ts +++ b/packages/graph/teams/types.ts @@ -1,7 +1,7 @@ import { _GraphInstance, _GraphCollection, graphInvokableFactory, GraphInstance } from "../graphqueryable.js"; import { body, HeaderParse } from "@pnp/queryable"; import { updateable, IUpdateable, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../ops.js"; import { defaultPath } from "../decorators.js"; import { Team as ITeamType, diff --git a/packages/sp/appcatalog/types.ts b/packages/sp/appcatalog/types.ts index 4cb8386d1..ce5f34157 100644 --- a/packages/sp/appcatalog/types.ts +++ b/packages/sp/appcatalog/types.ts @@ -5,7 +5,7 @@ import { ISPQueryable, SPCollection, } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { File, IFile } from "../files/types.js"; diff --git a/packages/sp/attachments/types.ts b/packages/sp/attachments/types.ts index 048f6d051..46b48ab9a 100644 --- a/packages/sp/attachments/types.ts +++ b/packages/sp/attachments/types.ts @@ -1,7 +1,7 @@ import { headers } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; import { ReadableFile } from "../files/readable-file.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { encodePath } from "../utils/encode-path-str.js"; import { IDeleteableWithETag, diff --git a/packages/sp/batching.ts b/packages/sp/batching.ts index bad455769..172133abc 100644 --- a/packages/sp/batching.ts +++ b/packages/sp/batching.ts @@ -1,6 +1,6 @@ import { getGUID, isUrlAbsolute, combine, CopyFrom, TimelinePipe, isFunc, hOP } from "@pnp/core"; import { parseBinderWithErrorCheck, Queryable } from "@pnp/queryable"; -import { spPost } from "./operations.js"; +import { spPost } from "./ops.js"; import { ISPQueryable, _SPQueryable } from "./spqueryable.js"; import { spfi, SPFI } from "./fi.js"; import { Web, IWeb, _Web } from "./webs/types.js"; diff --git a/packages/sp/behaviors/request-digest.ts b/packages/sp/behaviors/request-digest.ts index 4bbf74d0e..0f5455984 100644 --- a/packages/sp/behaviors/request-digest.ts +++ b/packages/sp/behaviors/request-digest.ts @@ -2,7 +2,7 @@ import { combine, dateAdd, hOP, isFunc, objectDefinedNotNull, TimelinePipe } fro import { JSONParse, Queryable } from "@pnp/queryable"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { ISPQueryable, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { BatchNever } from "../batching.js"; interface IDigestInfo { diff --git a/packages/sp/clientside-pages/types.ts b/packages/sp/clientside-pages/types.ts index ae6bf4eaf..71880a408 100644 --- a/packages/sp/clientside-pages/types.ts +++ b/packages/sp/clientside-pages/types.ts @@ -8,7 +8,7 @@ import { odataUrlFrom } from "../utils/odata-url-from.js"; import { Web, IWeb } from "../webs/types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { Site } from "../sites/types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { getNextOrder, reindex } from "./funcs.js"; import "../files/web.js"; import "../comments/item.js"; diff --git a/packages/sp/clientside-pages/web.ts b/packages/sp/clientside-pages/web.ts index fe5502fe8..8487e65e9 100644 --- a/packages/sp/clientside-pages/web.ts +++ b/packages/sp/clientside-pages/web.ts @@ -10,7 +10,7 @@ import { ClientsideWebpart, } from "./types.js"; import { SPCollection, SPInstance } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { extractWebUrl } from "@pnp/sp"; diff --git a/packages/sp/column-defaults/list.ts b/packages/sp/column-defaults/list.ts index af4a283a7..6c60d6bbc 100644 --- a/packages/sp/column-defaults/list.ts +++ b/packages/sp/column-defaults/list.ts @@ -4,7 +4,7 @@ import { Folder } from "../folders/types.js"; import { IFieldDefault } from "./types.js"; import { IResourcePath } from "../utils/to-resource-path.js"; import { combine, isArray } from "@pnp/core"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { SPCollection } from "../presets/all.js"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/comments/clientside-page.ts b/packages/sp/comments/clientside-page.ts index c84504cdb..0d836eefc 100644 --- a/packages/sp/comments/clientside-page.ts +++ b/packages/sp/comments/clientside-page.ts @@ -1,7 +1,7 @@ import { _ClientsidePage } from "../clientside-pages/types.js"; import { ICommentInfo, IComment, ILikedByInformation } from "./types.js"; import { IItemUpdateResult, Item } from "../items/index.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { SPQueryable } from "../spqueryable.js"; declare module "../clientside-pages/types" { diff --git a/packages/sp/comments/item.ts b/packages/sp/comments/item.ts index 19ef3e253..b15f0bf2b 100644 --- a/packages/sp/comments/item.ts +++ b/packages/sp/comments/item.ts @@ -1,7 +1,7 @@ import { addProp } from "@pnp/queryable"; import { _Item, Item } from "../items/types.js"; import { Comments, IComments, ILikeData, ILikedByInformation, RatingValues } from "./types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine } from "@pnp/core"; import { SPQueryable } from "../spqueryable.js"; diff --git a/packages/sp/comments/types.ts b/packages/sp/comments/types.ts index b793c6305..2f518ffc6 100644 --- a/packages/sp/comments/types.ts +++ b/packages/sp/comments/types.ts @@ -6,7 +6,7 @@ import { } from "../spqueryable.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { body } from "@pnp/queryable"; -import { spDelete, spPost } from "../operations.js"; +import { spDelete, spPost } from "../ops.js"; @defaultPath("comments") export class _Comments extends _SPCollection { diff --git a/packages/sp/content-types/types.ts b/packages/sp/content-types/types.ts index 76ba1c689..79f7c1e0b 100644 --- a/packages/sp/content-types/types.ts +++ b/packages/sp/content-types/types.ts @@ -9,7 +9,7 @@ import { IDeleteable, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; @defaultPath("contenttypes") export class _ContentTypes extends _SPCollection { diff --git a/packages/sp/context-info/index.ts b/packages/sp/context-info/index.ts index 6b7194a50..5c3383381 100644 --- a/packages/sp/context-info/index.ts +++ b/packages/sp/context-info/index.ts @@ -1,5 +1,5 @@ import { hOP } from "@pnp/core"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { SPQueryable, _SPQueryable } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; diff --git a/packages/sp/favorites/types.ts b/packages/sp/favorites/types.ts index 74ef2507a..c223f8e51 100644 --- a/packages/sp/favorites/types.ts +++ b/packages/sp/favorites/types.ts @@ -1,7 +1,7 @@ import { defaultPath } from "../decorators.js"; import { _SPInstance, spInvokableFactory, _SPCollection, SPInit } from "../spqueryable.js"; import { hOP } from "@pnp/core"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { SharepointIds, ResourceVisualization } from "@microsoft/microsoft-graph-types"; diff --git a/packages/sp/features/types.ts b/packages/sp/features/types.ts index e98fb8abb..9b7cdc64f 100644 --- a/packages/sp/features/types.ts +++ b/packages/sp/features/types.ts @@ -5,7 +5,7 @@ import { spInvokableFactory, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; @defaultPath("features") export class _Features extends _SPCollection { diff --git a/packages/sp/fields/types.ts b/packages/sp/fields/types.ts index 3b801afb6..20476566e 100644 --- a/packages/sp/fields/types.ts +++ b/packages/sp/fields/types.ts @@ -7,7 +7,7 @@ import { IDeleteable, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { metadata } from "../utils/metadata.js"; @defaultPath("fields") diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index e5c9d8026..e94473039 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -14,7 +14,7 @@ import { import { Item, IItem } from "../items/index.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spGet } from "../operations.js"; +import { spPost, spGet } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { toResourcePath } from "../utils/to-resource-path.js"; import { ISiteUserProps } from "../site-users/types.js"; diff --git a/packages/sp/folders/types.ts b/packages/sp/folders/types.ts index 323375171..e54b43964 100644 --- a/packages/sp/folders/types.ts +++ b/packages/sp/folders/types.ts @@ -13,7 +13,7 @@ import { import { odataUrlFrom } from "../utils/odata-url-from.js"; import { IItem, Item } from "../items/types.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { toResourcePath, IResourcePath } from "../utils/to-resource-path.js"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/hubsites/site.ts b/packages/sp/hubsites/site.ts index 3cc4647cd..4adb0c379 100644 --- a/packages/sp/hubsites/site.ts +++ b/packages/sp/hubsites/site.ts @@ -1,5 +1,5 @@ import { _Site, Site } from "../sites/types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; declare module "../sites/types" { interface _Site { diff --git a/packages/sp/hubsites/web.ts b/packages/sp/hubsites/web.ts index 4383e0568..34bc7450e 100644 --- a/packages/sp/hubsites/web.ts +++ b/packages/sp/hubsites/web.ts @@ -1,6 +1,6 @@ import { _Web, Web } from "../webs/types.js"; import { IHubSiteWebData } from "./types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; declare module "../webs/types" { interface _Web { diff --git a/packages/sp/index.ts b/packages/sp/index.ts index 484493868..7a5e76e32 100644 --- a/packages/sp/index.ts +++ b/packages/sp/index.ts @@ -2,7 +2,7 @@ export * from "./spqueryable.js"; export * from "./decorators.js"; -export * from "./operations.js"; +export * from "./ops.js"; export { SPFI, diff --git a/packages/sp/items/types.ts b/packages/sp/items/types.ts index 6eb4ef1b2..b39ee2552 100644 --- a/packages/sp/items/types.ts +++ b/packages/sp/items/types.ts @@ -16,7 +16,7 @@ import { IListItemFormUpdateValue, List } from "../lists/types.js"; import { body, headers, parseBinderWithErrorCheck, parseODataJSON } from "@pnp/queryable"; import { IList } from "../lists/index.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { IResourcePath } from "../utils/to-resource-path.js"; /** diff --git a/packages/sp/lists/types.ts b/packages/sp/lists/types.ts index b99334e92..22f55fc06 100644 --- a/packages/sp/lists/types.ts +++ b/packages/sp/lists/types.ts @@ -14,7 +14,7 @@ import { import { IChangeQuery } from "../types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { IBasePermissions } from "../security/types.js"; import { IFieldInfo } from "../fields/types.js"; import { IFormInfo } from "../forms/types.js"; diff --git a/packages/sp/navigation/types.ts b/packages/sp/navigation/types.ts index 5e519b127..62c4e8167 100644 --- a/packages/sp/navigation/types.ts +++ b/packages/sp/navigation/types.ts @@ -9,7 +9,7 @@ import { } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { extractWebUrl } from "../index.js"; import { combine } from "@pnp/core"; diff --git a/packages/sp/operations.ts b/packages/sp/ops.ts similarity index 100% rename from packages/sp/operations.ts rename to packages/sp/ops.ts diff --git a/packages/sp/profiles/types.ts b/packages/sp/profiles/types.ts index faa0c18b5..7be913395 100644 --- a/packages/sp/profiles/types.ts +++ b/packages/sp/profiles/types.ts @@ -10,7 +10,7 @@ import { import { body } from "@pnp/queryable"; import { PrincipalType, PrincipalSource } from "../types.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { AssignFrom } from "@pnp/core"; export class _Profiles extends _SPInstance { diff --git a/packages/sp/recycle-bin/types.ts b/packages/sp/recycle-bin/types.ts index 632f0950b..29dd2e31d 100644 --- a/packages/sp/recycle-bin/types.ts +++ b/packages/sp/recycle-bin/types.ts @@ -5,7 +5,7 @@ import { _SPInstance, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; /** * Describes a recycle bin item diff --git a/packages/sp/regional-settings/funcs.ts b/packages/sp/regional-settings/funcs.ts index 817a5badb..21fd2799b 100644 --- a/packages/sp/regional-settings/funcs.ts +++ b/packages/sp/regional-settings/funcs.ts @@ -1,5 +1,5 @@ import { _SPQueryable, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { body } from "@pnp/queryable"; export function getValueForUICultureBinder(propName: string): (this: _SPQueryable, cultureName: string) => Promise { diff --git a/packages/sp/regional-settings/types.ts b/packages/sp/regional-settings/types.ts index b753d65c0..f976e8dbc 100644 --- a/packages/sp/regional-settings/types.ts +++ b/packages/sp/regional-settings/types.ts @@ -6,7 +6,7 @@ import { _SPCollection, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; @defaultPath("regionalsettings") export class _RegionalSettings extends _SPInstance { diff --git a/packages/sp/related-items/types.ts b/packages/sp/related-items/types.ts index 22a6150dd..d89c02a9b 100644 --- a/packages/sp/related-items/types.ts +++ b/packages/sp/related-items/types.ts @@ -1,7 +1,7 @@ import { _SPQueryable, ISPQueryable } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { body } from "@pnp/queryable"; @defaultPath("_api/SP.RelatedItemManager") diff --git a/packages/sp/search/query.ts b/packages/sp/search/query.ts index 3519faa82..760b1d931 100644 --- a/packages/sp/search/query.ts +++ b/packages/sp/search/query.ts @@ -2,7 +2,7 @@ import { _SPInstance, spInvokableFactory, SPInit } from "../spqueryable.js"; import { getHashCode, hOP, isArray } from "@pnp/core"; import { body, CacheAlways, CacheKey, invokable } from "@pnp/queryable"; import { ISearchQuery, ISearchResponse, ISearchResult, ISearchBuilder, SearchQueryInit } from "./types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { defaultPath } from "../decorators.js"; const funcs = new Map([ diff --git a/packages/sp/security/funcs.ts b/packages/sp/security/funcs.ts index e4c59f546..7268df72d 100644 --- a/packages/sp/security/funcs.ts +++ b/packages/sp/security/funcs.ts @@ -1,6 +1,6 @@ import { SecurableQueryable, IBasePermissions, PermissionKind } from "./types.js"; import { SPInstance, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; /** * Gets the effective permissions for the user supplied diff --git a/packages/sp/security/types.ts b/packages/sp/security/types.ts index b6d35accb..5e0b62a49 100644 --- a/packages/sp/security/types.ts +++ b/packages/sp/security/types.ts @@ -11,7 +11,7 @@ import { } from "../spqueryable.js"; import { SiteGroups, ISiteGroups } from "../site-groups/types.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; export type SecurableQueryable = _SPInstance & ISecurableMethods; diff --git a/packages/sp/sharing/funcs.ts b/packages/sp/sharing/funcs.ts index c5ee45949..52ad032a5 100644 --- a/packages/sp/sharing/funcs.ts +++ b/packages/sp/sharing/funcs.ts @@ -18,7 +18,7 @@ import { ISharingEmailData, RoleType, } from "./types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { RoleDefinitions } from "../security/types.js"; import { emptyGuid } from "../types.js"; diff --git a/packages/sp/sharing/web.ts b/packages/sp/sharing/web.ts index c7720efd9..3d691d4a4 100644 --- a/packages/sp/sharing/web.ts +++ b/packages/sp/sharing/web.ts @@ -4,7 +4,7 @@ import { RoleType } from "./types.js"; import { shareObject } from "./funcs.js"; import { combine } from "@pnp/core"; import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; /** * Extend _Web diff --git a/packages/sp/site-designs/types.ts b/packages/sp/site-designs/types.ts index b38a958cd..609957a9e 100644 --- a/packages/sp/site-designs/types.ts +++ b/packages/sp/site-designs/types.ts @@ -1,7 +1,7 @@ import { ISPQueryable, _SPQueryable } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { headers, body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { combine, hOP } from "@pnp/core"; diff --git a/packages/sp/site-groups/types.ts b/packages/sp/site-groups/types.ts index ded40e4b2..63000403f 100644 --- a/packages/sp/site-groups/types.ts +++ b/packages/sp/site-groups/types.ts @@ -6,7 +6,7 @@ import { import { SiteUsers, ISiteUsers } from "../site-users/types.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; @defaultPath("sitegroups") export class _SiteGroups extends _SPCollection { diff --git a/packages/sp/site-groups/web.ts b/packages/sp/site-groups/web.ts index ac3c950cb..5b6f8ad04 100644 --- a/packages/sp/site-groups/web.ts +++ b/packages/sp/site-groups/web.ts @@ -1,5 +1,5 @@ import { addProp } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { Web, _Web } from "../webs/types.js"; import { ISiteGroups, SiteGroups, ISiteGroup, SiteGroup } from "./types.js"; import "../security/web.js"; diff --git a/packages/sp/site-scripts/types.ts b/packages/sp/site-scripts/types.ts index f2a199390..a652e178d 100644 --- a/packages/sp/site-scripts/types.ts +++ b/packages/sp/site-scripts/types.ts @@ -1,5 +1,5 @@ import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { ISPQueryable, _SPQueryable } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine } from "@pnp/core"; diff --git a/packages/sp/site-users/types.ts b/packages/sp/site-users/types.ts index 607174e70..ce173197b 100644 --- a/packages/sp/site-users/types.ts +++ b/packages/sp/site-users/types.ts @@ -8,7 +8,7 @@ import { import { SiteGroups, ISiteGroups } from "../site-groups/types.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { PrincipalType } from "../types.js"; @defaultPath("siteusers") diff --git a/packages/sp/site-users/web.ts b/packages/sp/site-users/web.ts index 5273cfce2..8bb0cd0e9 100644 --- a/packages/sp/site-users/web.ts +++ b/packages/sp/site-users/web.ts @@ -2,7 +2,7 @@ import { addProp, body } from "@pnp/queryable"; import { _Web, Web } from "../webs/types.js"; import { ISiteUsers, SiteUsers, ISiteUser, SiteUser, IWebEnsureUserResult } from "./types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; declare module "../webs/types" { interface _Web { diff --git a/packages/sp/sites/types.ts b/packages/sp/sites/types.ts index fa62e3c3b..a7c7997c4 100644 --- a/packages/sp/sites/types.ts +++ b/packages/sp/sites/types.ts @@ -4,7 +4,7 @@ import { Web, IWeb } from "../webs/types.js"; import { combine, hOP, isArray } from "@pnp/core"; import { body, TextParse } from "@pnp/queryable"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPatch, spPost } from "../operations.js"; +import { spPatch, spPost } from "../ops.js"; import { IChangeQuery } from "../types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { emptyGuid } from "../types.js"; diff --git a/packages/sp/social/types.ts b/packages/sp/social/types.ts index 2b04e72db..dcac9231c 100644 --- a/packages/sp/social/types.ts +++ b/packages/sp/social/types.ts @@ -6,7 +6,7 @@ import { import { defaultPath } from "../decorators.js"; import { hOP } from "@pnp/core"; import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; @defaultPath("_api/social.following") export class _Social extends _SPInstance implements ISocial { diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index e246c3d35..c377f83ed 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -1,6 +1,6 @@ import { combine, isUrlAbsolute, isArray, objectDefinedNotNull, stringIsNullOrEmpty } from "@pnp/core"; import { IInvokable, Queryable, queryableFactory } from "@pnp/queryable"; -import { spPostDelete, spPostDeleteETag } from "./operations.js"; +import { spPostDelete, spPostDeleteETag } from "./ops.js"; export type SPInit = string | ISPQueryable | [ISPQueryable, string]; diff --git a/packages/sp/sputilities/types.ts b/packages/sp/sputilities/types.ts index a524d75da..db1e8c653 100644 --- a/packages/sp/sputilities/types.ts +++ b/packages/sp/sputilities/types.ts @@ -2,7 +2,7 @@ import { body } from "@pnp/queryable"; import { _SPQueryable, spInvokableFactory, ISPQueryable, SPInit } from "../spqueryable.js"; import { IPrincipalInfo, PrincipalType, PrincipalSource } from "../types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; import { combine } from "@pnp/core"; export class _Utilities extends _SPQueryable implements IUtilities { diff --git a/packages/sp/subscriptions/types.ts b/packages/sp/subscriptions/types.ts index 9f2c121c7..4406c30ed 100644 --- a/packages/sp/subscriptions/types.ts +++ b/packages/sp/subscriptions/types.ts @@ -5,7 +5,7 @@ import { } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPatch, spDelete } from "../operations.js"; +import { spPost, spPatch, spDelete } from "../ops.js"; @defaultPath("subscriptions") export class _Subscriptions extends _SPCollection { diff --git a/packages/sp/taxonomy/types.ts b/packages/sp/taxonomy/types.ts index 36b7a3975..ccf2b5024 100644 --- a/packages/sp/taxonomy/types.ts +++ b/packages/sp/taxonomy/types.ts @@ -1,7 +1,7 @@ import { isArray } from "@pnp/core"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spDelete, spPatch, spPost } from "../operations.js"; +import { spDelete, spPatch, spPost } from "../ops.js"; import { _SPInstance, spInvokableFactory, _SPCollection } from "../spqueryable.js"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/user-custom-actions/types.ts b/packages/sp/user-custom-actions/types.ts index e39db3d58..be1f28be7 100644 --- a/packages/sp/user-custom-actions/types.ts +++ b/packages/sp/user-custom-actions/types.ts @@ -7,7 +7,7 @@ import { } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { IBasePermissions } from "../security/index.js"; @defaultPath("usercustomactions") diff --git a/packages/sp/views/types.ts b/packages/sp/views/types.ts index f80665a9f..2ec295a36 100644 --- a/packages/sp/views/types.ts +++ b/packages/sp/views/types.ts @@ -7,7 +7,7 @@ import { IDeleteable, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { encodePath } from "../utils/encode-path-str.js"; @defaultPath("views") diff --git a/packages/sp/webparts/types.ts b/packages/sp/webparts/types.ts index 7c2c54ce7..ac80a2939 100644 --- a/packages/sp/webparts/types.ts +++ b/packages/sp/webparts/types.ts @@ -9,7 +9,7 @@ import { ISPInstance, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../ops.js"; export class _LimitedWebPartManager extends _SPQueryable implements ILimitedWebPartManager { diff --git a/packages/sp/webs/types.ts b/packages/sp/webs/types.ts index 3767b35f1..077cb9f6b 100644 --- a/packages/sp/webs/types.ts +++ b/packages/sp/webs/types.ts @@ -15,7 +15,7 @@ import { import { defaultPath } from "../decorators.js"; import { IChangeQuery } from "../types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPost, spPostMerge } from "../operations.js"; +import { spPost, spPostMerge } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine, isArray } from "@pnp/core"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/test/graph/onedrive.ts b/test/graph/onedrive.ts index ec232d2c2..0f6dac4c1 100644 --- a/test/graph/onedrive.ts +++ b/test/graph/onedrive.ts @@ -3,9 +3,9 @@ import * as path from "path"; import * as fs from "fs"; import findupSync from "findup-sync"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; -import { IItemOptions } from "@pnp/graph/onedrive/types"; +import { IItemOptions } from "@pnp/graph/files/types"; // give ourselves a single reference to the projectRoot const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); diff --git a/test/graph/querable.ts b/test/graph/querable.ts index 012d2e8b1..5c1e79bba 100644 --- a/test/graph/querable.ts +++ b/test/graph/querable.ts @@ -1,7 +1,7 @@ import { expect } from "chai"; import "@pnp/graph/sites/group"; import "@pnp/graph/users"; -import "@pnp/graph/onedrive"; +import "@pnp/graph/files"; import { Drive, Group } from "@microsoft/microsoft-graph-types"; import { hOP, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; diff --git a/test/graph/sites.ts b/test/graph/sites.ts index 1cb20258f..b250f0424 100644 --- a/test/graph/sites.ts +++ b/test/graph/sites.ts @@ -30,8 +30,9 @@ describe("Sites", function () { site = await getTestingGraphSPSite(this); const tetssite = await site(); const url = new URL(tetssite.webUrl); - const siteByUrl = await this.pnp.graph.sites.getByUrl(url.hostname, url.pathname)(); - passed = (siteByUrl.webUrl.toLowerCase() === tetssite.webUrl.toLowerCase()); + const siteByUrl = await this.pnp.graph.sites.getByUrl(url.hostname, url.pathname); + const siteInfo = await siteByUrl(); + passed = (siteInfo.webUrl.toLowerCase() === tetssite.webUrl.toLowerCase()); return expect(passed).is.true; }); From d9a50e961aa8f3ceb580ae9b862a6ce5c77a6af9 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 10 Aug 2023 14:19:43 -0400 Subject: [PATCH 007/171] fixing reused test ids --- test/core/util.ts | 2 +- test/pnp-test.ts | 2 +- test/sp/batch.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/core/util.ts b/test/core/util.ts index 4a032bfeb..33485f83f 100644 --- a/test/core/util.ts +++ b/test/core/util.ts @@ -92,7 +92,7 @@ describe("isFunc", function () { })).to.be.true; })); - it("False", pnpTest("ff0020e6-0e1b-4b12-a4a1-8a4b2fc8fcdb", function () { + it("False", pnpTest("2a147d36-64ad-4888-a425-e4d18ead4448", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc({ val: 0 })).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions diff --git a/test/pnp-test.ts b/test/pnp-test.ts index 2fc338275..09ec4f191 100644 --- a/test/pnp-test.ts +++ b/test/pnp-test.ts @@ -51,7 +51,7 @@ function PnPTestIdHeader(id: () => string): TimelinePipe { export function pnpTest(id: string, testFunc: (this: IPnPTestFuncThis) => any): IPnPTestFunc { if (idDupeTracker.indexOf(id.toLowerCase()) > -1) { - throw Error(`Test ${id} is already in use.`); + throw Error(`Test id ${id} is already in use.`); } idDupeTracker.push(id.toLowerCase()); diff --git a/test/sp/batch.ts b/test/sp/batch.ts index f4d2f3e23..9e9c7e636 100644 --- a/test/sp/batch.ts +++ b/test/sp/batch.ts @@ -288,7 +288,7 @@ describe("Batching", function () { expect(p2).to.eventually.be.fulfilled; })); - it("Should rebase objects to allow queries on returned objects", pnpTest("d9535bc2-c59a-49ba-8666-b3d80510aca5", async function () { + it("Should rebase objects to allow queries on returned objects", pnpTest("5e17585b-ce83-4fd0-8392-1132069b5503", async function () { const props = await this.props({ listName: "BatchTestRebase", From 0410436742b7c67140a2ad1658c62e00eee0e032 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 10 Aug 2023 15:33:53 -0400 Subject: [PATCH 008/171] permissions, some docs fixes --- debug/launch/graph.ts | 22 +++----- debug/launch/main.ts | 4 +- docs/graph/permissions.md | 79 +++++++++++++++++++++++++++++ docs/graph/shares.md | 2 +- docs/graph/users.md | 2 +- mkdocs.yml | 3 +- packages/graph/permissions/index.ts | 8 +++ packages/graph/permissions/site.ts | 14 +++++ packages/graph/permissions/types.ts | 29 +++++++++++ 9 files changed, 144 insertions(+), 19 deletions(-) create mode 100644 docs/graph/permissions.md create mode 100644 packages/graph/permissions/index.ts create mode 100644 packages/graph/permissions/site.ts create mode 100644 packages/graph/permissions/types.ts diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index 5aa4c6498..9fe04eec9 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,26 +1,20 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; -import "@pnp/graph/sites"; import "@pnp/graph/users"; -import "@pnp/graph/files"; -import "@pnp/graph/operations"; declare var process: { exit(code?: number): void }; export async function Example(settings: any) { - const graph = graphSetup(settings); + const graph = graphSetup(settings); - const site = await graph.sites.getByUrl("318studios.sharepoint.com", "/sites/dev") + const users = await graph.users(); - const ops = await site.operations(); - + Logger.log({ + data: users, + level: LogLevel.Info, + message: "List of Users Data", + }); - Logger.log({ - data: ops, - level: LogLevel.Info, - message: "List of Users Data", - }); - - process.exit(0); + process.exit(0); } diff --git a/debug/launch/main.ts b/debug/launch/main.ts index 9c9922e07..2a4fdec1e 100644 --- a/debug/launch/main.ts +++ b/debug/launch/main.ts @@ -8,8 +8,8 @@ import { ITestingSettings } from "../../test/load-settings.js"; // add your debugging imports here and prior to submitting a PR git checkout debug/debug.ts // will allow you to keep all your debugging files locally // comment out the example -// import { Example } from "./sp.js"; -import { Example } from "./graph.js"; +import { Example } from "./sp.js"; +// import { Example } from "./graph.js"; // setup the connection to SharePoint using the settings file, you can // override any of the values as you want here, just be sure not to commit diff --git a/docs/graph/permissions.md b/docs/graph/permissions.md new file mode 100644 index 000000000..ade06dc57 --- /dev/null +++ b/docs/graph/permissions.md @@ -0,0 +1,79 @@ +# @pnp/graph/permissions + +Allows you to manipulate the permissions of various entities. + +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## site permissions + +[![Official Docs](https://img.shields.io/badge/Official_Graph_Docs-social.svg)](https://learn.microsoft.com/en-us/graph/api/resources/permission?view=graph-rest-1.0) + +Allows you to manage application permissions for sites. + +### list site permissions + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions(); +``` + +### get a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.getById("{permission id}")(); +``` + +### add a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.add({ + roles: ["fullcontrol"], + grantedToIdentities: [{ + id: "89ea5c94-7736-4e25-95ad-3fa95f62b66e", + displayName: "Contoso Time Manager App", + }], +}); +``` + +### update a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.getById("{permission id}").update({ + roles: ["read"], +}); +``` + +### delete a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.getById("{permission id}").delete(); +``` diff --git a/docs/graph/shares.md b/docs/graph/shares.md index c2b13040a..fd3bc2060 100644 --- a/docs/graph/shares.md +++ b/docs/graph/shares.md @@ -32,7 +32,7 @@ const shareInfo = await graph.shares.getById(shareLink)(); ## Access a Share's driveItem resource -You can also access the full functionality of the driveItem via a share. Find [more details on the capabilities of driveItem here](./onedrive.md). +You can also access the full functionality of the driveItem via a share. Find [more details on the capabilities of driveItem here](./files.md). ```TS import { graphfi } from "@pnp/graph"; diff --git a/docs/graph/users.md b/docs/graph/users.md index 8b8a0aae2..f863a0c90 100644 --- a/docs/graph/users.md +++ b/docs/graph/users.md @@ -131,4 +131,4 @@ See [Messages](./messages.md) ## User OneDrive -See [OneDrive](./onedrive.md) +See [Files](./files.md) diff --git a/mkdocs.yml b/mkdocs.yml index a0d11c4da..9b00f5691 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,7 +17,7 @@ nav: - 'In NodeJS': 'concepts/auth-nodejs.md' - 'Batching': 'concepts/batching.md' - 'Batching & Caching': 'concepts/batching-caching.md' - - 'Calling Other Endpoints': 'concepts/calling-other-endpoints' + - 'Calling Other Endpoints': 'concepts/calling-other-endpoints.md' - 'Custom Bundling': 'concepts/custom-bundle.md' - 'Error-Handling': 'concepts/error-handling.md' - 'Project Config/Services Setup': 'concepts/project-preset.md' @@ -56,6 +56,7 @@ nav: - messages: 'graph/messages.md' - outlook: 'graph/outlook.md' - operations: 'graph/operations.md' + - permissions: 'graph/permissions.md' - photos: 'graph/photos.md' - planner: 'graph/planner.md' - search: 'graph/search.md' diff --git a/packages/graph/permissions/index.ts b/packages/graph/permissions/index.ts new file mode 100644 index 000000000..44f0a05ee --- /dev/null +++ b/packages/graph/permissions/index.ts @@ -0,0 +1,8 @@ +import "./site.js"; + +export { + IPermission, + IPermissions, + Permission, + Permissions, +} from "./types.js"; diff --git a/packages/graph/permissions/site.ts b/packages/graph/permissions/site.ts new file mode 100644 index 000000000..a293c6e24 --- /dev/null +++ b/packages/graph/permissions/site.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _Site } from "../sites/types.js"; +import { IPermissions, Permissions } from "./types.js"; + +declare module "../sites/types" { + interface _Site { + readonly permissions: IPermissions; + } + interface ISite { + readonly permissions: IPermissions; + } +} + +addProp(_Site, "permissions", Permissions); diff --git a/packages/graph/permissions/types.ts b/packages/graph/permissions/types.ts new file mode 100644 index 000000000..518236bf4 --- /dev/null +++ b/packages/graph/permissions/types.ts @@ -0,0 +1,29 @@ +import { body } from "@pnp/queryable"; +import { IDeleteable, IGetById, IUpdateable, defaultPath, deleteable, getById, updateable } from "../decorators.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; +import { Permission as IPermissionType } from "@microsoft/microsoft-graph-types"; +import { graphPost } from "../ops.js"; + +/** + * Permission + */ +@deleteable() +@updateable() +export class _Permission extends _GraphInstance {} +export interface IPermission extends _Permission, IUpdateable>, IDeleteable { } +export const Permission = graphInvokableFactory(_Permission); + +/** + * Permissions + */ +@defaultPath("permissions") +@getById(Permission) +export class _Permissions extends _GraphCollection { + + public add(permissions: Pick): Promise { + + return graphPost(this, body(permissions)); + } +} +export interface IPermissions extends _Permissions, IGetById { } +export const Permissions = graphInvokableFactory(_Permissions); From b6cf032e89f0513ac266169b35ceee11817e9c28 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 10 Aug 2023 20:53:41 -0400 Subject: [PATCH 009/171] moving operations.ts in sp & graph into respective *queryable files --- CHANGELOG.md | 4 +-- packages/graph/attachments/types.ts | 3 +- packages/graph/batching.ts | 3 +- packages/graph/bookings/types.ts | 3 +- packages/graph/calendars/types.ts | 3 +- packages/graph/cloud-communications/types.ts | 3 +- packages/graph/columns/addColumns.ts | 4 +-- packages/graph/columns/content-types.ts | 2 +- packages/graph/contacts/types.ts | 3 +- packages/graph/content-types/lists.ts | 5 ++- packages/graph/content-types/sites.ts | 5 ++- packages/graph/content-types/types.ts | 3 +- packages/graph/conversations/types.ts | 3 +- packages/graph/decorators.ts | 3 +- packages/graph/directory-objects/types.ts | 3 +- packages/graph/files/funcs.ts | 2 +- packages/graph/files/types.ts | 4 ++- packages/graph/files/users.ts | 2 +- packages/graph/graphqueryable.ts | 30 ++++++++++++----- packages/graph/groups/types.ts | 3 +- packages/graph/index.ts | 12 +------ packages/graph/invitations/types.ts | 3 +- packages/graph/lists/types.ts | 3 +- packages/graph/members/types.ts | 3 +- packages/graph/messages/users.ts | 2 +- packages/graph/onenote/types.ts | 2 +- packages/graph/ops.ts | 22 ------------- packages/graph/permissions/types.ts | 3 +- packages/graph/photos/types.ts | 3 +- packages/graph/planner/types.ts | 3 +- packages/graph/search/types.ts | 3 +- packages/graph/sites/types.ts | 3 +- packages/graph/subscriptions/types.ts | 3 +- packages/graph/teams/index.ts | 2 +- packages/graph/teams/types.ts | 3 +- packages/sp/appcatalog/types.ts | 2 +- packages/sp/attachments/types.ts | 2 +- packages/sp/batching.ts | 3 +- packages/sp/behaviors/request-digest.ts | 3 +- packages/sp/clientside-pages/types.ts | 3 +- packages/sp/clientside-pages/web.ts | 3 +- packages/sp/column-defaults/list.ts | 2 +- packages/sp/comments/clientside-page.ts | 3 +- packages/sp/comments/item.ts | 3 +- packages/sp/comments/types.ts | 3 +- packages/sp/content-types/types.ts | 3 +- packages/sp/context-info/index.ts | 3 +- packages/sp/favorites/types.ts | 3 +- packages/sp/features/types.ts | 2 +- packages/sp/fields/types.ts | 3 +- packages/sp/files/types.ts | 3 +- packages/sp/folders/types.ts | 3 +- packages/sp/groupsitemanager/types.ts | 3 +- packages/sp/hubsites/site.ts | 2 +- packages/sp/hubsites/web.ts | 2 +- packages/sp/index.ts | 2 -- packages/sp/items/types.ts | 2 +- packages/sp/lists/types.ts | 3 +- packages/sp/navigation/types.ts | 3 +- packages/sp/ops.ts | 33 ------------------- packages/sp/profiles/types.ts | 2 +- packages/sp/recycle-bin/types.ts | 2 +- packages/sp/regional-settings/funcs.ts | 3 +- packages/sp/regional-settings/types.ts | 2 +- packages/sp/related-items/types.ts | 3 +- packages/sp/search/query.ts | 3 +- packages/sp/security/funcs.ts | 3 +- packages/sp/security/types.ts | 3 +- packages/sp/sharing/funcs.ts | 3 +- packages/sp/sharing/web.ts | 2 +- packages/sp/site-designs/types.ts | 4 +-- packages/sp/site-groups/types.ts | 3 +- packages/sp/site-groups/web.ts | 2 +- packages/sp/site-scripts/types.ts | 3 +- packages/sp/site-users/types.ts | 3 +- packages/sp/site-users/web.ts | 2 +- packages/sp/sites/types.ts | 3 +- packages/sp/social/types.ts | 2 +- packages/sp/spqueryable.ts | 34 ++++++++++++++++++-- packages/sp/sputilities/types.ts | 3 +- packages/sp/subscriptions/types.ts | 4 ++- packages/sp/taxonomy/types.ts | 3 +- packages/sp/user-custom-actions/types.ts | 3 +- packages/sp/views/types.ts | 3 +- packages/sp/webparts/types.ts | 2 +- packages/sp/webs/types.ts | 3 +- 86 files changed, 158 insertions(+), 203 deletions(-) delete mode 100644 packages/graph/ops.ts delete mode 100644 packages/sp/ops.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 06b0901d7..49c69bd16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,12 +28,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - graph - paged method removed from IGraphQueryableCollection + - ./operations.ts methods moved to ./graphqueryable.ts - sp - getPaged method removed from _Items/IItems - PagedItemCollection removed from library - removed /items/get-all import, unneeded, use async iterator patterns - - operations.ts renamed to ops.ts + - ./operations.ts methods moved to ./spqueryable.ts ### Changed @@ -43,7 +44,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - All GraphQueryable*, _GraphQueryable*, and IGraphQueryable* have been renamed to remove "Queryable" (ex: GraphQueryableCollection is now GraphCollection) - @pnp/graph/onedrive renamed to @pnp/graph/files - ISites.getByUrl is now async - - operations.ts renamed to ops.ts - sp - _Items and IItems now supports async iterator pattern diff --git a/packages/graph/attachments/types.ts b/packages/graph/attachments/types.ts index 781377439..2818fd31f 100644 --- a/packages/graph/attachments/types.ts +++ b/packages/graph/attachments/types.ts @@ -1,7 +1,6 @@ import { Attachment as IAttachmentType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; -import { graphPost } from "../ops.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; import { type } from "../utils/type.js"; diff --git a/packages/graph/batching.ts b/packages/graph/batching.ts index 6dd53cfa4..dcfa6fb7a 100644 --- a/packages/graph/batching.ts +++ b/packages/graph/batching.ts @@ -1,7 +1,6 @@ import { isUrlAbsolute, hOP, TimelinePipe, getGUID, CopyFrom, objectDefinedNotNull, isFunc, combine } from "@pnp/core"; import { parseBinderWithErrorCheck, Queryable, body, InjectHeaders } from "@pnp/queryable"; -import { IGraphQueryable, _GraphQueryable } from "./graphqueryable.js"; -import { graphPost } from "./ops.js"; +import { IGraphQueryable, _GraphQueryable, graphPost } from "./graphqueryable.js"; import { GraphFI } from "./fi.js"; declare module "./fi" { diff --git a/packages/graph/bookings/types.ts b/packages/graph/bookings/types.ts index 4563ed14c..bcb323e94 100644 --- a/packages/graph/bookings/types.ts +++ b/packages/graph/bookings/types.ts @@ -7,9 +7,8 @@ import { BookingCurrency as IBookingCurrencyEntity, BookingCustomQuestion as IBookingCustomQuestionEntity, } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { calendarView } from "./funcs.js"; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index 049eb417c..9dd39a608 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -1,8 +1,7 @@ import { body } from "@pnp/queryable"; import { Event as IEventType, Calendar as ICalendarType } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { calendarView, instances } from "./funcs.js"; /** diff --git a/packages/graph/cloud-communications/types.ts b/packages/graph/cloud-communications/types.ts index c714db00f..19684f18a 100644 --- a/packages/graph/cloud-communications/types.ts +++ b/packages/graph/cloud-communications/types.ts @@ -1,8 +1,7 @@ import { Presence as IUserPresence } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; /** diff --git a/packages/graph/columns/addColumns.ts b/packages/graph/columns/addColumns.ts index 924944d38..8edb6a224 100644 --- a/packages/graph/columns/addColumns.ts +++ b/packages/graph/columns/addColumns.ts @@ -1,5 +1,5 @@ -import { IColumn } from "./types"; -import { graphPost } from "../ops.js"; +import { IColumn } from "./types.js"; +import { graphPost } from "../graphqueryable.js"; import { body } from "@pnp/queryable"; import { ColumnDefinition as IColumnDefinition, diff --git a/packages/graph/columns/content-types.ts b/packages/graph/columns/content-types.ts index 3c0e4c1cf..b6d094ed9 100644 --- a/packages/graph/columns/content-types.ts +++ b/packages/graph/columns/content-types.ts @@ -1,5 +1,5 @@ import { addProp, body } from "@pnp/queryable"; -import { graphPost } from "../ops.js"; +import { graphPost } from "../graphqueryable.js"; import { _ContentType } from "../content-types/types.js"; import { Columns, IColumns,IColumn, _Columns } from "./types.js"; import { IColumnAddResult } from "./addColumns.js"; diff --git a/packages/graph/contacts/types.ts b/packages/graph/contacts/types.ts index a73e662f9..b8d14e20b 100644 --- a/packages/graph/contacts/types.ts +++ b/packages/graph/contacts/types.ts @@ -1,7 +1,6 @@ -import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { Contact as IContactType, ContactFolder as IContactFolderType, EmailAddress as IEmailAddressType } from "@microsoft/microsoft-graph-types"; import { defaultPath, updateable, deleteable, IUpdateable, IDeleteable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; /** diff --git a/packages/graph/content-types/lists.ts b/packages/graph/content-types/lists.ts index 5d8a5b026..ff924d19a 100644 --- a/packages/graph/content-types/lists.ts +++ b/packages/graph/content-types/lists.ts @@ -1,8 +1,7 @@ -import { addProp } from "@pnp/queryable"; -import { graphPost } from "../ops.js"; +import { addProp, body} from "@pnp/queryable"; +import { graphPost } from "../graphqueryable.js"; import { _List } from "../lists/types.js"; import { ContentTypes, IContentType, IContentTypeAddResult, IContentTypes, _ContentTypes } from "./types.js"; -import { body } from "@pnp/queryable"; declare module "../lists/types" { interface _List { diff --git a/packages/graph/content-types/sites.ts b/packages/graph/content-types/sites.ts index 015b0f683..2da9d9378 100644 --- a/packages/graph/content-types/sites.ts +++ b/packages/graph/content-types/sites.ts @@ -1,9 +1,8 @@ -import { addProp } from "@pnp/queryable"; +import { addProp, body } from "@pnp/queryable"; import { ContentType as IContentTypeEntity, } from "@microsoft/microsoft-graph-types"; -import { graphGet, graphPost } from "../ops.js"; -import { body } from "@pnp/queryable"; +import { graphGet, graphPost } from "../graphqueryable.js"; import { Site, _Site } from "../sites/types.js"; import { ContentTypes, IContentType, IContentTypeAddResult, IContentTypes, _ContentTypes } from "./types.js"; diff --git a/packages/graph/content-types/types.ts b/packages/graph/content-types/types.ts index 1477519b7..d0e524b37 100644 --- a/packages/graph/content-types/types.ts +++ b/packages/graph/content-types/types.ts @@ -2,9 +2,8 @@ import { ContentType as IContentTypeEntity, ItemReference as IItemReference, } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphGet, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphGet, graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { JSONHeaderParse } from "@pnp/queryable"; diff --git a/packages/graph/conversations/types.ts b/packages/graph/conversations/types.ts index 2a808f50b..e536fa8b8 100644 --- a/packages/graph/conversations/types.ts +++ b/packages/graph/conversations/types.ts @@ -10,9 +10,10 @@ import { _GraphCollection, _GraphInstance, graphInvokableFactory, + graphPost, + graphDelete, } from "../graphqueryable.js"; import { defaultPath, updateable, IUpdateable, deleteable, IDeleteable, addable, IAddable, getById, IGetById } from "../decorators.js"; -import { graphPost, graphDelete } from "../ops.js"; /** * Conversation diff --git a/packages/graph/decorators.ts b/packages/graph/decorators.ts index c56e8a951..f1b42a861 100644 --- a/packages/graph/decorators.ts +++ b/packages/graph/decorators.ts @@ -1,5 +1,4 @@ -import { IGraphQueryable } from "./graphqueryable.js"; -import { graphDelete, graphPatch, graphPost } from "./ops.js"; +import { IGraphQueryable, graphDelete, graphPatch, graphPost } from "./graphqueryable.js"; import { body, headers } from "@pnp/queryable"; /** diff --git a/packages/graph/directory-objects/types.ts b/packages/graph/directory-objects/types.ts index e266c8dac..bd8270102 100644 --- a/packages/graph/directory-objects/types.ts +++ b/packages/graph/directory-objects/types.ts @@ -1,8 +1,7 @@ -import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { DirectoryObject as IDirectoryObjectType } from "@microsoft/microsoft-graph-types"; import { defaultPath, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; import { body } from "@pnp/queryable"; -import { graphPost } from "../ops.js"; import { Count } from "../behaviors/paged.js"; /** diff --git a/packages/graph/files/funcs.ts b/packages/graph/files/funcs.ts index 0d5af81fa..34c46f260 100644 --- a/packages/graph/files/funcs.ts +++ b/packages/graph/files/funcs.ts @@ -1,6 +1,6 @@ import { combine } from "@pnp/core"; import { body, InjectHeaders } from "@pnp/queryable"; -import { graphPost, graphPut } from "../ops.js"; +import { graphPost, graphPut } from "../graphqueryable.js"; import { DriveItem, IDriveItemAddResult, IFileOptions } from "./types.js"; export interface ICheckInOptions { diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index e145006a9..bea36b02f 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -7,12 +7,14 @@ import { _GraphCollection, graphInvokableFactory, GraphQueryable, + graphPatch, + graphPost, + graphPut, } from "../graphqueryable.js"; import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo, ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; import { combine } from "@pnp/core"; import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable } from "../decorators.js"; import { body, BlobParse, CacheNever, errorCheck, InjectHeaders } from "@pnp/queryable"; -import { graphPatch, graphPost, graphPut } from "../ops.js"; import { driveItemUpload } from "./funcs.js"; /** diff --git a/packages/graph/files/users.ts b/packages/graph/files/users.ts index d144214a1..bbb4fd651 100644 --- a/packages/graph/files/users.ts +++ b/packages/graph/files/users.ts @@ -1,5 +1,5 @@ import { addProp, body } from "@pnp/queryable"; -import { graphPost } from "../ops.js"; +import { graphPost } from "../graphqueryable.js"; import { _User } from "../users/types.js"; import { IDrive, Drive, IDrives, Drives, _Drive, DriveItem, IDriveItem, _DriveItem, IItemOptions } from "./types.js"; diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index 2f9ef4613..f2e221d42 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -1,7 +1,7 @@ import { isArray, objectDefinedNotNull } from "@pnp/core"; -import { IInvokable, Queryable, queryableFactory } from "@pnp/queryable"; +import { IInvokable, Queryable, queryableFactory, op, get, post, patch, del, put } from "@pnp/queryable"; import { ConsistencyLevel } from "./behaviors/consistency-level.js"; -import { Paged } from "./behaviors/paged.js"; +import { IPagedResult, Paged } from "./behaviors/paged.js"; export type GraphInit = string | IGraphQueryable | [IGraphQueryable, string]; @@ -220,9 +220,23 @@ export class _GraphInstance extends _GraphQueryable { } export interface IGraphInstance extends IInvokable, IGraphQueryable { } export const GraphInstance = graphInvokableFactory(_GraphInstance); -export interface IPagedResult { - count: number; - value: any | any[] | null; - hasNext: boolean; - nextLink: string; -} +export const graphGet = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, get, init); +}; + +export const graphPost = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, post, init); +}; + +export const graphDelete = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, del, init); +}; + +export const graphPatch = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, patch, init); +}; + +export const graphPut = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, put, init); +}; + diff --git a/packages/graph/groups/types.ts b/packages/graph/groups/types.ts index 8926cf71d..f8d7810af 100644 --- a/packages/graph/groups/types.ts +++ b/packages/graph/groups/types.ts @@ -1,8 +1,7 @@ import { Event as IEventType, Group as IGroupType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { graphInvokableFactory } from "../graphqueryable.js"; +import { graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { _DirectoryObject, _DirectoryObjects } from "../directory-objects/types.js"; export enum GroupType { diff --git a/packages/graph/index.ts b/packages/graph/index.ts index 50ee4be80..61ea18fd6 100644 --- a/packages/graph/index.ts +++ b/packages/graph/index.ts @@ -1,16 +1,6 @@ export { graphfi as graphfi, GraphFI as GraphFI } from "./fi.js"; -export { - IGraphCollection, - IGraphInstance, - GraphQueryable, - IGraphQueryable, - GraphCollection, - GraphInstance, - IGraphConstructor, -} from "./graphqueryable.js"; - -export * from "./ops.js"; +export * from "./graphqueryable.js"; export * from "./behaviors/consistency-level.js"; export * from "./behaviors/defaults.js"; diff --git a/packages/graph/invitations/types.ts b/packages/graph/invitations/types.ts index 959fad8b0..7907733f5 100644 --- a/packages/graph/invitations/types.ts +++ b/packages/graph/invitations/types.ts @@ -1,8 +1,7 @@ import { body } from "@pnp/queryable"; import { Invitation as IInvitationType } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; -import { graphPost } from "../ops.js"; /** * Invitations diff --git a/packages/graph/lists/types.ts b/packages/graph/lists/types.ts index 209797538..4f623dd2c 100644 --- a/packages/graph/lists/types.ts +++ b/packages/graph/lists/types.ts @@ -1,7 +1,6 @@ import { List as IListEntity } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; /** diff --git a/packages/graph/members/types.ts b/packages/graph/members/types.ts index e531aaa34..19a56d72d 100644 --- a/packages/graph/members/types.ts +++ b/packages/graph/members/types.ts @@ -1,8 +1,7 @@ import { body } from "@pnp/queryable"; import { User as IMemberType } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphDelete, graphPost } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; -import { graphDelete, graphPost } from "../ops.js"; /** * Member diff --git a/packages/graph/messages/users.ts b/packages/graph/messages/users.ts index 44cd0f8a5..281280c35 100644 --- a/packages/graph/messages/users.ts +++ b/packages/graph/messages/users.ts @@ -1,7 +1,7 @@ import { addProp, body } from "@pnp/queryable"; import { _User, User } from "../users/types.js"; import { IMessages, Messages, IMailboxSettings, MailboxSettings, IMailFolders, MailFolders, IMessage } from "./types.js"; -import { graphPost } from "../ops.js"; +import { graphPost } from "../graphqueryable.js"; declare module "../users/types" { interface _User { diff --git a/packages/graph/onenote/types.ts b/packages/graph/onenote/types.ts index 03b501d6c..491041a7c 100644 --- a/packages/graph/onenote/types.ts +++ b/packages/graph/onenote/types.ts @@ -6,9 +6,9 @@ import { _GraphCollection, IGraphCollection, graphInvokableFactory, + graphPost, } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../ops.js"; /** * Represents a onenote entity diff --git a/packages/graph/ops.ts b/packages/graph/ops.ts deleted file mode 100644 index d7c19f307..000000000 --- a/packages/graph/ops.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { op, get, post, patch, del, put } from "@pnp/queryable"; -import { IGraphQueryable } from "./graphqueryable.js"; - -export const graphGet = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, get, init); -}; - -export const graphPost = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, post, init); -}; - -export const graphDelete = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, del, init); -}; - -export const graphPatch = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, patch, init); -}; - -export const graphPut = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, put, init); -}; diff --git a/packages/graph/permissions/types.ts b/packages/graph/permissions/types.ts index 518236bf4..ca5cddb95 100644 --- a/packages/graph/permissions/types.ts +++ b/packages/graph/permissions/types.ts @@ -1,8 +1,7 @@ import { body } from "@pnp/queryable"; import { IDeleteable, IGetById, IUpdateable, defaultPath, deleteable, getById, updateable } from "../decorators.js"; -import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance, graphPost } from "../graphqueryable.js"; import { Permission as IPermissionType } from "@microsoft/microsoft-graph-types"; -import { graphPost } from "../ops.js"; /** * Permission diff --git a/packages/graph/photos/types.ts b/packages/graph/photos/types.ts index f9e26ca50..0fddcc423 100644 --- a/packages/graph/photos/types.ts +++ b/packages/graph/photos/types.ts @@ -1,8 +1,7 @@ -import { _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, graphInvokableFactory, graphPatch } from "../graphqueryable.js"; import { BlobParse, BufferParse } from "@pnp/queryable"; import { Photo as IPhotoType } from "@microsoft/microsoft-graph-types"; import { defaultPath } from "../decorators.js"; -import { graphPatch } from "../ops.js"; @defaultPath("photo") export class _Photo extends _GraphInstance { diff --git a/packages/graph/planner/types.ts b/packages/graph/planner/types.ts index 688b92528..daf3f34c1 100644 --- a/packages/graph/planner/types.ts +++ b/packages/graph/planner/types.ts @@ -7,9 +7,8 @@ import { Planner as IPlannerType, } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { getById, IGetById, deleteableWithETag, IDeleteableWithETag, updateableWithETag, IUpdateableWithETag } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { defaultPath } from "../decorators.js"; /** diff --git a/packages/graph/search/types.ts b/packages/graph/search/types.ts index 11755a119..7e629311e 100644 --- a/packages/graph/search/types.ts +++ b/packages/graph/search/types.ts @@ -1,8 +1,7 @@ import { SearchRequest as ISearchRequestType, SearchResponse as ISearchResponseType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { GraphInit, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; -import { graphPost } from "../ops.js"; +import { GraphInit, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; /** * Search diff --git a/packages/graph/sites/types.ts b/packages/graph/sites/types.ts index c649f2c00..9fc136f15 100644 --- a/packages/graph/sites/types.ts +++ b/packages/graph/sites/types.ts @@ -1,8 +1,7 @@ import { combine } from "@pnp/core"; import { defaultPath } from "../decorators.js"; -import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance, graphPost } from "../graphqueryable.js"; import { Site as ISiteType } from "@microsoft/microsoft-graph-types"; -import { graphPost } from "../ops.js"; import { body } from "@pnp/queryable"; /** diff --git a/packages/graph/subscriptions/types.ts b/packages/graph/subscriptions/types.ts index 067a05a05..a69abb873 100644 --- a/packages/graph/subscriptions/types.ts +++ b/packages/graph/subscriptions/types.ts @@ -1,8 +1,7 @@ -import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { body } from "@pnp/queryable"; import { Subscription as ISubscriptionType } from "@microsoft/microsoft-graph-types"; import { defaultPath, deleteable, IDeleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../ops.js"; /** * Subscription diff --git a/packages/graph/teams/index.ts b/packages/graph/teams/index.ts index 0b92df464..dbc29897a 100644 --- a/packages/graph/teams/index.ts +++ b/packages/graph/teams/index.ts @@ -3,7 +3,7 @@ import { GraphFI } from "../fi.js"; import { _Group, Group } from "../groups/types.js"; import { ITeamCreateResult, ITeam, Team, ITeams, Teams } from "./types.js"; import { Team as ITeamType } from "@microsoft/microsoft-graph-types"; -import { graphPut } from "../ops.js"; +import { graphPut } from "../graphqueryable.js"; import "./users.js"; diff --git a/packages/graph/teams/types.ts b/packages/graph/teams/types.ts index d42b2fb89..7ac7c401c 100644 --- a/packages/graph/teams/types.ts +++ b/packages/graph/teams/types.ts @@ -1,7 +1,6 @@ -import { _GraphInstance, _GraphCollection, graphInvokableFactory, GraphInstance } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, GraphInstance, graphPost } from "../graphqueryable.js"; import { body, HeaderParse } from "@pnp/queryable"; import { updateable, IUpdateable, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; -import { graphPost } from "../ops.js"; import { defaultPath } from "../decorators.js"; import { Team as ITeamType, diff --git a/packages/sp/appcatalog/types.ts b/packages/sp/appcatalog/types.ts index ce5f34157..d40a27443 100644 --- a/packages/sp/appcatalog/types.ts +++ b/packages/sp/appcatalog/types.ts @@ -4,8 +4,8 @@ import { _SPInstance, ISPQueryable, SPCollection, + spPost, } from "../spqueryable.js"; -import { spPost } from "../ops.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { File, IFile } from "../files/types.js"; diff --git a/packages/sp/attachments/types.ts b/packages/sp/attachments/types.ts index 46b48ab9a..e53157108 100644 --- a/packages/sp/attachments/types.ts +++ b/packages/sp/attachments/types.ts @@ -1,13 +1,13 @@ import { headers } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; import { ReadableFile } from "../files/readable-file.js"; -import { spPost } from "../ops.js"; import { encodePath } from "../utils/encode-path-str.js"; import { IDeleteableWithETag, _SPCollection, spInvokableFactory, deleteableWithETag, + spPost, } from "../spqueryable.js"; @defaultPath("AttachmentFiles") diff --git a/packages/sp/batching.ts b/packages/sp/batching.ts index 172133abc..5b3d4f025 100644 --- a/packages/sp/batching.ts +++ b/packages/sp/batching.ts @@ -1,7 +1,6 @@ import { getGUID, isUrlAbsolute, combine, CopyFrom, TimelinePipe, isFunc, hOP } from "@pnp/core"; import { parseBinderWithErrorCheck, Queryable } from "@pnp/queryable"; -import { spPost } from "./ops.js"; -import { ISPQueryable, _SPQueryable } from "./spqueryable.js"; +import { ISPQueryable, _SPQueryable, spPost } from "./spqueryable.js"; import { spfi, SPFI } from "./fi.js"; import { Web, IWeb, _Web } from "./webs/types.js"; diff --git a/packages/sp/behaviors/request-digest.ts b/packages/sp/behaviors/request-digest.ts index 0f5455984..f90a70fa2 100644 --- a/packages/sp/behaviors/request-digest.ts +++ b/packages/sp/behaviors/request-digest.ts @@ -1,8 +1,7 @@ import { combine, dateAdd, hOP, isFunc, objectDefinedNotNull, TimelinePipe } from "@pnp/core"; import { JSONParse, Queryable } from "@pnp/queryable"; import { extractWebUrl } from "../utils/extract-web-url.js"; -import { ISPQueryable, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../ops.js"; +import { ISPQueryable, SPQueryable, spPost } from "../spqueryable.js"; import { BatchNever } from "../batching.js"; interface IDigestInfo { diff --git a/packages/sp/clientside-pages/types.ts b/packages/sp/clientside-pages/types.ts index 71880a408..e90613520 100644 --- a/packages/sp/clientside-pages/types.ts +++ b/packages/sp/clientside-pages/types.ts @@ -2,13 +2,12 @@ import { body, headers } from "@pnp/queryable"; import { getGUID, hOP, stringIsNullOrEmpty, objectDefinedNotNull, combine, isUrlAbsolute, isArray } from "@pnp/core"; import { IFile, IFileInfo } from "../files/types.js"; import { Item, IItem } from "../items/types.js"; -import { _SPQueryable, SPQueryable, SPCollection, SPInit } from "../spqueryable.js"; +import { _SPQueryable, SPQueryable, SPCollection, SPInit, spPost } from "../spqueryable.js"; import { List } from "../lists/types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { Web, IWeb } from "../webs/types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { Site } from "../sites/types.js"; -import { spPost } from "../ops.js"; import { getNextOrder, reindex } from "./funcs.js"; import "../files/web.js"; import "../comments/item.js"; diff --git a/packages/sp/clientside-pages/web.ts b/packages/sp/clientside-pages/web.ts index 8487e65e9..b0b4bd325 100644 --- a/packages/sp/clientside-pages/web.ts +++ b/packages/sp/clientside-pages/web.ts @@ -9,8 +9,7 @@ import { IRepostPage, ClientsideWebpart, } from "./types.js"; -import { SPCollection, SPInstance } from "../spqueryable.js"; -import { spPost } from "../ops.js"; +import { SPCollection, SPInstance, spPost } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { extractWebUrl } from "@pnp/sp"; diff --git a/packages/sp/column-defaults/list.ts b/packages/sp/column-defaults/list.ts index 6c60d6bbc..44a3ec998 100644 --- a/packages/sp/column-defaults/list.ts +++ b/packages/sp/column-defaults/list.ts @@ -4,7 +4,7 @@ import { Folder } from "../folders/types.js"; import { IFieldDefault } from "./types.js"; import { IResourcePath } from "../utils/to-resource-path.js"; import { combine, isArray } from "@pnp/core"; -import { spPost } from "../ops.js"; +import { spPost } from "../spqueryable.js"; import { SPCollection } from "../presets/all.js"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/comments/clientside-page.ts b/packages/sp/comments/clientside-page.ts index 0d836eefc..b2db9d5e7 100644 --- a/packages/sp/comments/clientside-page.ts +++ b/packages/sp/comments/clientside-page.ts @@ -1,8 +1,7 @@ import { _ClientsidePage } from "../clientside-pages/types.js"; import { ICommentInfo, IComment, ILikedByInformation } from "./types.js"; import { IItemUpdateResult, Item } from "../items/index.js"; -import { spPost } from "../ops.js"; -import { SPQueryable } from "../spqueryable.js"; +import { SPQueryable, spPost } from "../spqueryable.js"; declare module "../clientside-pages/types" { interface _ClientsidePage { diff --git a/packages/sp/comments/item.ts b/packages/sp/comments/item.ts index b15f0bf2b..f81109471 100644 --- a/packages/sp/comments/item.ts +++ b/packages/sp/comments/item.ts @@ -1,10 +1,9 @@ import { addProp } from "@pnp/queryable"; import { _Item, Item } from "../items/types.js"; import { Comments, IComments, ILikeData, ILikedByInformation, RatingValues } from "./types.js"; -import { spPost } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine } from "@pnp/core"; -import { SPQueryable } from "../spqueryable.js"; +import { SPQueryable, spPost } from "../spqueryable.js"; declare module "../items/types" { interface _Item { diff --git a/packages/sp/comments/types.ts b/packages/sp/comments/types.ts index 2f518ffc6..e9c859ea6 100644 --- a/packages/sp/comments/types.ts +++ b/packages/sp/comments/types.ts @@ -3,10 +3,11 @@ import { _SPCollection, spInvokableFactory, _SPInstance, + spDelete, + spPost, } from "../spqueryable.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { body } from "@pnp/queryable"; -import { spDelete, spPost } from "../ops.js"; @defaultPath("comments") export class _Comments extends _SPCollection { diff --git a/packages/sp/content-types/types.ts b/packages/sp/content-types/types.ts index 79f7c1e0b..6b029e6e1 100644 --- a/packages/sp/content-types/types.ts +++ b/packages/sp/content-types/types.ts @@ -7,9 +7,10 @@ import { ISPCollection, deleteable, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; @defaultPath("contenttypes") export class _ContentTypes extends _SPCollection { diff --git a/packages/sp/context-info/index.ts b/packages/sp/context-info/index.ts index 5c3383381..ac06cfd01 100644 --- a/packages/sp/context-info/index.ts +++ b/packages/sp/context-info/index.ts @@ -1,6 +1,5 @@ import { hOP } from "@pnp/core"; -import { spPost } from "../ops.js"; -import { SPQueryable, _SPQueryable } from "../spqueryable.js"; +import { SPQueryable, _SPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; declare module "../spqueryable" { diff --git a/packages/sp/favorites/types.ts b/packages/sp/favorites/types.ts index c223f8e51..b8e21106e 100644 --- a/packages/sp/favorites/types.ts +++ b/packages/sp/favorites/types.ts @@ -1,7 +1,6 @@ import { defaultPath } from "../decorators.js"; -import { _SPInstance, spInvokableFactory, _SPCollection, SPInit } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, _SPCollection, SPInit, spPost } from "../spqueryable.js"; import { hOP } from "@pnp/core"; -import { spPost } from "../ops.js"; import { body } from "@pnp/queryable"; import { SharepointIds, ResourceVisualization } from "@microsoft/microsoft-graph-types"; diff --git a/packages/sp/features/types.ts b/packages/sp/features/types.ts index 9b7cdc64f..661249f5c 100644 --- a/packages/sp/features/types.ts +++ b/packages/sp/features/types.ts @@ -3,9 +3,9 @@ import { _SPInstance, _SPCollection, spInvokableFactory, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../ops.js"; @defaultPath("features") export class _Features extends _SPCollection { diff --git a/packages/sp/fields/types.ts b/packages/sp/fields/types.ts index 20476566e..2479af899 100644 --- a/packages/sp/fields/types.ts +++ b/packages/sp/fields/types.ts @@ -5,9 +5,10 @@ import { deleteable, spInvokableFactory, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; import { metadata } from "../utils/metadata.js"; @defaultPath("fields") diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index e94473039..13b978315 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -10,11 +10,12 @@ import { ISPQueryable, deleteable, IDeleteable, + spPost, + spGet, } from "../spqueryable.js"; import { Item, IItem } from "../items/index.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spGet } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { toResourcePath } from "../utils/to-resource-path.js"; import { ISiteUserProps } from "../site-users/types.js"; diff --git a/packages/sp/folders/types.ts b/packages/sp/folders/types.ts index e54b43964..abb637cb1 100644 --- a/packages/sp/folders/types.ts +++ b/packages/sp/folders/types.ts @@ -9,11 +9,12 @@ import { ISPInstance, IDeleteableWithETag, ISPQueryable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { IItem, Item } from "../items/types.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { toResourcePath, IResourcePath } from "../utils/to-resource-path.js"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/groupsitemanager/types.ts b/packages/sp/groupsitemanager/types.ts index f3a2a35f9..e6f205aed 100644 --- a/packages/sp/groupsitemanager/types.ts +++ b/packages/sp/groupsitemanager/types.ts @@ -1,5 +1,6 @@ import { body, BufferParse } from "@pnp/queryable"; -import { _SPInstance, defaultPath, spPost, spInvokableFactory, ISPQueryable, spGet } from "@pnp/sp"; +import { _SPInstance, spPost, spInvokableFactory, ISPQueryable, spGet } from "../spqueryable.js"; +import { defaultPath } from "../decorators.js"; @defaultPath("_api/groupsitemanager") class _GroupSiteManager extends _SPInstance> { diff --git a/packages/sp/hubsites/site.ts b/packages/sp/hubsites/site.ts index 4adb0c379..5be378797 100644 --- a/packages/sp/hubsites/site.ts +++ b/packages/sp/hubsites/site.ts @@ -1,5 +1,5 @@ import { _Site, Site } from "../sites/types.js"; -import { spPost } from "../ops.js"; +import { spPost } from "../spqueryable.js"; declare module "../sites/types" { interface _Site { diff --git a/packages/sp/hubsites/web.ts b/packages/sp/hubsites/web.ts index 34bc7450e..7d409aebc 100644 --- a/packages/sp/hubsites/web.ts +++ b/packages/sp/hubsites/web.ts @@ -1,6 +1,6 @@ import { _Web, Web } from "../webs/types.js"; import { IHubSiteWebData } from "./types.js"; -import { spPost } from "../ops.js"; +import { spPost } from "../spqueryable.js"; declare module "../webs/types" { interface _Web { diff --git a/packages/sp/index.ts b/packages/sp/index.ts index 7a5e76e32..188a5bd3d 100644 --- a/packages/sp/index.ts +++ b/packages/sp/index.ts @@ -2,8 +2,6 @@ export * from "./spqueryable.js"; export * from "./decorators.js"; -export * from "./ops.js"; - export { SPFI, spfi, diff --git a/packages/sp/items/types.ts b/packages/sp/items/types.ts index b39ee2552..a1c33fa35 100644 --- a/packages/sp/items/types.ts +++ b/packages/sp/items/types.ts @@ -9,6 +9,7 @@ import { SPInstance, ISPInstance, SPCollection, + spPost, } from "../spqueryable.js"; import { hOP, objectDefinedNotNull } from "@pnp/core"; import { extractWebUrl } from "@pnp/sp"; @@ -16,7 +17,6 @@ import { IListItemFormUpdateValue, List } from "../lists/types.js"; import { body, headers, parseBinderWithErrorCheck, parseODataJSON } from "@pnp/queryable"; import { IList } from "../lists/index.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../ops.js"; import { IResourcePath } from "../utils/to-resource-path.js"; /** diff --git a/packages/sp/lists/types.ts b/packages/sp/lists/types.ts index 22f55fc06..17625d6aa 100644 --- a/packages/sp/lists/types.ts +++ b/packages/sp/lists/types.ts @@ -10,11 +10,12 @@ import { ISPCollection, SPCollection, IDeleteableWithETag, + spPost, + spPostMerge, } from "../spqueryable.js"; import { IChangeQuery } from "../types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; import { IBasePermissions } from "../security/types.js"; import { IFieldInfo } from "../fields/types.js"; import { IFormInfo } from "../forms/types.js"; diff --git a/packages/sp/navigation/types.ts b/packages/sp/navigation/types.ts index 62c4e8167..d6355eb5d 100644 --- a/packages/sp/navigation/types.ts +++ b/packages/sp/navigation/types.ts @@ -6,10 +6,11 @@ import { _SPQueryable, IDeleteable, ISPQueryable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; import { extractWebUrl } from "../index.js"; import { combine } from "@pnp/core"; diff --git a/packages/sp/ops.ts b/packages/sp/ops.ts deleted file mode 100644 index a83491bb8..000000000 --- a/packages/sp/ops.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { op, get, post, patch, del } from "@pnp/queryable"; -import { ISPQueryable } from "./spqueryable.js"; - -export const spGet = (o: ISPQueryable, init?: RequestInit): Promise => { - return op(o, get, init); -}; - -export const spPost = (o: ISPQueryable, init?: RequestInit): Promise => op(o, post, init); - -export const spPostMerge = (o: ISPQueryable, init?: RequestInit): Promise => { - init = init || {}; - init.headers = { ...init.headers, "X-HTTP-Method": "MERGE" }; - - return spPost(o, init); -}; - -export const spPostDelete = (o: ISPQueryable, init?: RequestInit): Promise => { - init = init || {}; - init.headers = { ...init.headers || {}, "X-HTTP-Method": "DELETE" }; - - return spPost(o, init); -}; - -export const spPostDeleteETag = (o: ISPQueryable, init?: RequestInit, eTag = "*"): Promise => { - init = init || {}; - init.headers = { ...init.headers || {}, "IF-Match": eTag }; - - return spPostDelete(o, init); -}; - -export const spDelete = (o: ISPQueryable, init?: RequestInit): Promise => op(o, del, init); - -export const spPatch = (o: ISPQueryable, init?: RequestInit): Promise => op(o, patch, init); diff --git a/packages/sp/profiles/types.ts b/packages/sp/profiles/types.ts index 7be913395..4bc5461fb 100644 --- a/packages/sp/profiles/types.ts +++ b/packages/sp/profiles/types.ts @@ -6,11 +6,11 @@ import { ISPInstance, spInvokableFactory, _SPQueryable, + spPost, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { PrincipalType, PrincipalSource } from "../types.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../ops.js"; import { AssignFrom } from "@pnp/core"; export class _Profiles extends _SPInstance { diff --git a/packages/sp/recycle-bin/types.ts b/packages/sp/recycle-bin/types.ts index 29dd2e31d..4b0fdb1bf 100644 --- a/packages/sp/recycle-bin/types.ts +++ b/packages/sp/recycle-bin/types.ts @@ -3,9 +3,9 @@ import { spInvokableFactory, SPQueryable, _SPInstance, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../ops.js"; /** * Describes a recycle bin item diff --git a/packages/sp/regional-settings/funcs.ts b/packages/sp/regional-settings/funcs.ts index 21fd2799b..09878c65f 100644 --- a/packages/sp/regional-settings/funcs.ts +++ b/packages/sp/regional-settings/funcs.ts @@ -1,5 +1,4 @@ -import { _SPQueryable, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../ops.js"; +import { _SPQueryable, SPQueryable, spPost } from "../spqueryable.js"; import { body } from "@pnp/queryable"; export function getValueForUICultureBinder(propName: string): (this: _SPQueryable, cultureName: string) => Promise { diff --git a/packages/sp/regional-settings/types.ts b/packages/sp/regional-settings/types.ts index f976e8dbc..eb28e478a 100644 --- a/packages/sp/regional-settings/types.ts +++ b/packages/sp/regional-settings/types.ts @@ -4,9 +4,9 @@ import { SPCollection, spInvokableFactory, _SPCollection, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../ops.js"; @defaultPath("regionalsettings") export class _RegionalSettings extends _SPInstance { diff --git a/packages/sp/related-items/types.ts b/packages/sp/related-items/types.ts index d89c02a9b..4fe3e0b72 100644 --- a/packages/sp/related-items/types.ts +++ b/packages/sp/related-items/types.ts @@ -1,7 +1,6 @@ -import { _SPQueryable, ISPQueryable } from "../spqueryable.js"; +import { _SPQueryable, ISPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../ops.js"; import { body } from "@pnp/queryable"; @defaultPath("_api/SP.RelatedItemManager") diff --git a/packages/sp/search/query.ts b/packages/sp/search/query.ts index 760b1d931..e1b12c564 100644 --- a/packages/sp/search/query.ts +++ b/packages/sp/search/query.ts @@ -1,8 +1,7 @@ -import { _SPInstance, spInvokableFactory, SPInit } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, SPInit, spPost } from "../spqueryable.js"; import { getHashCode, hOP, isArray } from "@pnp/core"; import { body, CacheAlways, CacheKey, invokable } from "@pnp/queryable"; import { ISearchQuery, ISearchResponse, ISearchResult, ISearchBuilder, SearchQueryInit } from "./types.js"; -import { spPost } from "../ops.js"; import { defaultPath } from "../decorators.js"; const funcs = new Map([ diff --git a/packages/sp/security/funcs.ts b/packages/sp/security/funcs.ts index 7268df72d..48b6b9cbd 100644 --- a/packages/sp/security/funcs.ts +++ b/packages/sp/security/funcs.ts @@ -1,6 +1,5 @@ import { SecurableQueryable, IBasePermissions, PermissionKind } from "./types.js"; -import { SPInstance, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../ops.js"; +import { SPInstance, SPQueryable, spPost } from "../spqueryable.js"; /** * Gets the effective permissions for the user supplied diff --git a/packages/sp/security/types.ts b/packages/sp/security/types.ts index 5e0b62a49..5e084303d 100644 --- a/packages/sp/security/types.ts +++ b/packages/sp/security/types.ts @@ -8,10 +8,11 @@ import { SPCollection, ISPCollection, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { SiteGroups, ISiteGroups } from "../site-groups/types.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; export type SecurableQueryable = _SPInstance & ISecurableMethods; diff --git a/packages/sp/sharing/funcs.ts b/packages/sp/sharing/funcs.ts index 52ad032a5..9849c2809 100644 --- a/packages/sp/sharing/funcs.ts +++ b/packages/sp/sharing/funcs.ts @@ -1,6 +1,6 @@ import { body } from "@pnp/queryable"; import { isArray, jsS } from "@pnp/core"; -import { SPCollection, SPInstance } from "../spqueryable.js"; +import { SPCollection, SPInstance, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { Web } from "../webs/types.js"; import { @@ -18,7 +18,6 @@ import { ISharingEmailData, RoleType, } from "./types.js"; -import { spPost } from "../ops.js"; import { RoleDefinitions } from "../security/types.js"; import { emptyGuid } from "../types.js"; diff --git a/packages/sp/sharing/web.ts b/packages/sp/sharing/web.ts index 3d691d4a4..9ce75f2a6 100644 --- a/packages/sp/sharing/web.ts +++ b/packages/sp/sharing/web.ts @@ -4,7 +4,7 @@ import { RoleType } from "./types.js"; import { shareObject } from "./funcs.js"; import { combine } from "@pnp/core"; import { body } from "@pnp/queryable"; -import { spPost } from "../ops.js"; +import { spPost } from "../spqueryable.js"; /** * Extend _Web diff --git a/packages/sp/site-designs/types.ts b/packages/sp/site-designs/types.ts index 609957a9e..5b90d120a 100644 --- a/packages/sp/site-designs/types.ts +++ b/packages/sp/site-designs/types.ts @@ -1,10 +1,8 @@ -import { ISPQueryable, _SPQueryable } from "../spqueryable.js"; +import { ISPQueryable, _SPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { headers, body } from "@pnp/queryable"; -import { spPost } from "../ops.js"; import { combine, hOP } from "@pnp/core"; - export class _SiteDesigns extends _SPQueryable { constructor(base: string | ISPQueryable, methodName = "") { diff --git a/packages/sp/site-groups/types.ts b/packages/sp/site-groups/types.ts index 63000403f..a3ed9f964 100644 --- a/packages/sp/site-groups/types.ts +++ b/packages/sp/site-groups/types.ts @@ -2,11 +2,12 @@ import { _SPCollection, spInvokableFactory, _SPInstance, + spPost, + spPostMerge, } from "../spqueryable.js"; import { SiteUsers, ISiteUsers } from "../site-users/types.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; @defaultPath("sitegroups") export class _SiteGroups extends _SPCollection { diff --git a/packages/sp/site-groups/web.ts b/packages/sp/site-groups/web.ts index 5b6f8ad04..b49d17cba 100644 --- a/packages/sp/site-groups/web.ts +++ b/packages/sp/site-groups/web.ts @@ -1,5 +1,5 @@ import { addProp } from "@pnp/queryable"; -import { spPost } from "../ops.js"; +import { spPost } from "../spqueryable.js"; import { Web, _Web } from "../webs/types.js"; import { ISiteGroups, SiteGroups, ISiteGroup, SiteGroup } from "./types.js"; import "../security/web.js"; diff --git a/packages/sp/site-scripts/types.ts b/packages/sp/site-scripts/types.ts index a652e178d..0cc38aff9 100644 --- a/packages/sp/site-scripts/types.ts +++ b/packages/sp/site-scripts/types.ts @@ -1,6 +1,5 @@ import { body } from "@pnp/queryable"; -import { spPost } from "../ops.js"; -import { ISPQueryable, _SPQueryable } from "../spqueryable.js"; +import { ISPQueryable, _SPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine } from "@pnp/core"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/site-users/types.ts b/packages/sp/site-users/types.ts index ce173197b..a30e3f451 100644 --- a/packages/sp/site-users/types.ts +++ b/packages/sp/site-users/types.ts @@ -4,11 +4,12 @@ import { _SPInstance, IDeleteable, deleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { SiteGroups, ISiteGroups } from "../site-groups/types.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; import { PrincipalType } from "../types.js"; @defaultPath("siteusers") diff --git a/packages/sp/site-users/web.ts b/packages/sp/site-users/web.ts index 8bb0cd0e9..97be709ca 100644 --- a/packages/sp/site-users/web.ts +++ b/packages/sp/site-users/web.ts @@ -2,7 +2,7 @@ import { addProp, body } from "@pnp/queryable"; import { _Web, Web } from "../webs/types.js"; import { ISiteUsers, SiteUsers, ISiteUser, SiteUser, IWebEnsureUserResult } from "./types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPost } from "../ops.js"; +import { spPost } from "../spqueryable.js"; declare module "../webs/types" { interface _Web { diff --git a/packages/sp/sites/types.ts b/packages/sp/sites/types.ts index a7c7997c4..a1de6f33f 100644 --- a/packages/sp/sites/types.ts +++ b/packages/sp/sites/types.ts @@ -1,10 +1,9 @@ -import { _SPInstance, spInvokableFactory, SPInit, SPQueryable } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, SPInit, SPQueryable, spPatch, spPost } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; import { Web, IWeb } from "../webs/types.js"; import { combine, hOP, isArray } from "@pnp/core"; import { body, TextParse } from "@pnp/queryable"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPatch, spPost } from "../ops.js"; import { IChangeQuery } from "../types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { emptyGuid } from "../types.js"; diff --git a/packages/sp/social/types.ts b/packages/sp/social/types.ts index dcac9231c..dd1e1501b 100644 --- a/packages/sp/social/types.ts +++ b/packages/sp/social/types.ts @@ -2,11 +2,11 @@ import { _SPInstance, ISPQueryable, SPInit, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; import { hOP } from "@pnp/core"; import { body } from "@pnp/queryable"; -import { spPost } from "../ops.js"; @defaultPath("_api/social.following") export class _Social extends _SPInstance implements ISocial { diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index c377f83ed..775e2db6b 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -1,6 +1,5 @@ import { combine, isUrlAbsolute, isArray, objectDefinedNotNull, stringIsNullOrEmpty } from "@pnp/core"; -import { IInvokable, Queryable, queryableFactory } from "@pnp/queryable"; -import { spPostDelete, spPostDeleteETag } from "./ops.js"; +import { IInvokable, Queryable, queryableFactory, op, get, post, patch, del } from "@pnp/queryable"; export type SPInit = string | ISPQueryable | [ISPQueryable, string]; @@ -242,3 +241,34 @@ export interface IDeleteableWithETag { */ delete(eTag?: string): Promise; } + +export const spGet = (o: ISPQueryable, init?: RequestInit): Promise => { + return op(o, get, init); +}; + +export const spPost = (o: ISPQueryable, init?: RequestInit): Promise => op(o, post, init); + +export const spPostMerge = (o: ISPQueryable, init?: RequestInit): Promise => { + init = init || {}; + init.headers = { ...init.headers, "X-HTTP-Method": "MERGE" }; + + return spPost(o, init); +}; + +export const spPostDelete = (o: ISPQueryable, init?: RequestInit): Promise => { + init = init || {}; + init.headers = { ...init.headers || {}, "X-HTTP-Method": "DELETE" }; + + return spPost(o, init); +}; + +export const spPostDeleteETag = (o: ISPQueryable, init?: RequestInit, eTag = "*"): Promise => { + init = init || {}; + init.headers = { ...init.headers || {}, "IF-Match": eTag }; + + return spPostDelete(o, init); +}; + +export const spDelete = (o: ISPQueryable, init?: RequestInit): Promise => op(o, del, init); + +export const spPatch = (o: ISPQueryable, init?: RequestInit): Promise => op(o, patch, init); diff --git a/packages/sp/sputilities/types.ts b/packages/sp/sputilities/types.ts index db1e8c653..ce49ca528 100644 --- a/packages/sp/sputilities/types.ts +++ b/packages/sp/sputilities/types.ts @@ -1,8 +1,7 @@ import { body } from "@pnp/queryable"; -import { _SPQueryable, spInvokableFactory, ISPQueryable, SPInit } from "../spqueryable.js"; +import { _SPQueryable, spInvokableFactory, ISPQueryable, SPInit, spPost } from "../spqueryable.js"; import { IPrincipalInfo, PrincipalType, PrincipalSource } from "../types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; -import { spPost } from "../ops.js"; import { combine } from "@pnp/core"; export class _Utilities extends _SPQueryable implements IUtilities { diff --git a/packages/sp/subscriptions/types.ts b/packages/sp/subscriptions/types.ts index 4406c30ed..066265368 100644 --- a/packages/sp/subscriptions/types.ts +++ b/packages/sp/subscriptions/types.ts @@ -2,10 +2,12 @@ import { _SPCollection, spInvokableFactory, _SPInstance, + spPost, + spPatch, + spDelete, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPatch, spDelete } from "../ops.js"; @defaultPath("subscriptions") export class _Subscriptions extends _SPCollection { diff --git a/packages/sp/taxonomy/types.ts b/packages/sp/taxonomy/types.ts index ccf2b5024..5f3957d02 100644 --- a/packages/sp/taxonomy/types.ts +++ b/packages/sp/taxonomy/types.ts @@ -1,8 +1,7 @@ import { isArray } from "@pnp/core"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spDelete, spPatch, spPost } from "../ops.js"; -import { _SPInstance, spInvokableFactory, _SPCollection } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, _SPCollection, spDelete, spPatch, spPost } from "../spqueryable.js"; import { encodePath } from "../utils/encode-path-str.js"; /** diff --git a/packages/sp/user-custom-actions/types.ts b/packages/sp/user-custom-actions/types.ts index be1f28be7..d3d98136d 100644 --- a/packages/sp/user-custom-actions/types.ts +++ b/packages/sp/user-custom-actions/types.ts @@ -4,10 +4,11 @@ import { deleteable, _SPInstance, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; import { IBasePermissions } from "../security/index.js"; @defaultPath("usercustomactions") diff --git a/packages/sp/views/types.ts b/packages/sp/views/types.ts index 2ec295a36..e240cdfbd 100644 --- a/packages/sp/views/types.ts +++ b/packages/sp/views/types.ts @@ -5,9 +5,10 @@ import { _SPInstance, deleteable, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../ops.js"; import { encodePath } from "../utils/encode-path-str.js"; @defaultPath("views") diff --git a/packages/sp/webparts/types.ts b/packages/sp/webparts/types.ts index ac80a2939..87edec000 100644 --- a/packages/sp/webparts/types.ts +++ b/packages/sp/webparts/types.ts @@ -7,9 +7,9 @@ import { spInvokableFactory, SPInstance, ISPInstance, + spPost, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; -import { spPost } from "../ops.js"; export class _LimitedWebPartManager extends _SPQueryable implements ILimitedWebPartManager { diff --git a/packages/sp/webs/types.ts b/packages/sp/webs/types.ts index 077cb9f6b..afce2af61 100644 --- a/packages/sp/webs/types.ts +++ b/packages/sp/webs/types.ts @@ -11,11 +11,12 @@ import { deleteable, SPInit, ISPQueryable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; import { IChangeQuery } from "../types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPost, spPostMerge } from "../ops.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine, isArray } from "@pnp/core"; import { encodePath } from "../utils/encode-path-str.js"; From 75d6fbd2eaea6c969902ebf1a75ff522e1efec6f Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 13:44:20 +0000 Subject: [PATCH 010/171] Merge conflict fix --- CHANGELOG.md | 35 +++++ debug/launch/graph.ts | 22 +-- docs/graph/{drive.md => files.md} | 96 ++++++++----- docs/graph/onedrive.md | 0 docs/graph/operations.md | 22 +++ docs/graph/permissions.md | 79 +++++++++++ docs/graph/shares.md | 2 +- docs/graph/sites.md | 136 +++++++++++++++++- docs/graph/users.md | 2 +- mkdocs.yml | 6 +- package.json | 2 +- packages/graph/attachments/types.ts | 7 +- packages/graph/batching.ts | 3 +- packages/graph/behaviors/paged.ts | 55 +------- packages/graph/behaviors/spfx.ts | 17 +++ packages/graph/bookings/funcs.ts | 6 +- packages/graph/bookings/types.ts | 31 ++--- packages/graph/calendars/funcs.ts | 14 +- packages/graph/calendars/types.ts | 11 +- packages/graph/calendars/users.ts | 6 +- packages/graph/cloud-communications/types.ts | 7 +- packages/graph/columns/addColumns.ts | 4 +- packages/graph/columns/content-types.ts | 2 +- packages/graph/columns/types.ts | 6 +- packages/graph/contacts/types.ts | 11 +- packages/graph/content-types/lists.ts | 5 +- packages/graph/content-types/sites.ts | 5 +- packages/graph/content-types/types.ts | 7 +- packages/graph/conversations/types.ts | 21 +-- packages/graph/decorators.ts | 3 +- packages/graph/directory-objects/types.ts | 7 +- packages/graph/{drive => files}/funcs.ts | 6 +- packages/graph/{drive => files}/groups.ts | 0 packages/graph/{drive => files}/index.ts | 2 + packages/graph/{drive => files}/sites.ts | 0 packages/graph/{drive => files}/types.ts | 74 ++++++---- packages/graph/{drive => files}/users.ts | 2 +- packages/graph/graphqueryable.ts | 85 +++++++++--- packages/graph/groups/types.ts | 3 +- packages/graph/index.ts | 12 +- packages/graph/insights/types.ts | 20 +-- packages/graph/invitations/types.ts | 5 +- packages/graph/lists/drive.ts | 4 +- packages/graph/lists/types.ts | 7 +- packages/graph/members/types.ts | 7 +- packages/graph/messages/types.ts | 12 +- packages/graph/messages/users.ts | 2 +- packages/graph/onenote/types.ts | 24 ++-- packages/graph/operations.ts | 22 --- packages/graph/operations/index.ts | 7 + packages/graph/operations/list.ts | 14 ++ packages/graph/operations/site.ts | 14 ++ packages/graph/operations/types.ts | 11 ++ packages/graph/outlook/types.ts | 8 +- packages/graph/permissions/index.ts | 8 ++ packages/graph/permissions/site.ts | 14 ++ packages/graph/permissions/types.ts | 28 ++++ packages/graph/photos/types.ts | 5 +- packages/graph/planner/types.ts | 21 ++- packages/graph/presets/all.ts | 6 +- packages/graph/search/types.ts | 5 +- packages/graph/shares/types.ts | 8 +- packages/graph/sites/index.ts | 1 + packages/graph/sites/types.ts | 61 +++++++- packages/graph/sites/user.ts | 14 ++ packages/graph/subscriptions/types.ts | 7 +- packages/graph/teams/index.ts | 2 +- packages/graph/teams/types.ts | 25 ++-- packages/sp/appcatalog/types.ts | 2 +- packages/sp/attachments/types.ts | 2 +- packages/sp/batching.ts | 3 +- packages/sp/behaviors/request-digest.ts | 3 +- packages/sp/behaviors/spfx.ts | 17 +++ packages/sp/clientside-pages/types.ts | 3 +- packages/sp/clientside-pages/web.ts | 3 +- packages/sp/column-defaults/list.ts | 2 +- packages/sp/comments/clientside-page.ts | 3 +- packages/sp/comments/item.ts | 3 +- packages/sp/comments/types.ts | 3 +- packages/sp/content-types/types.ts | 3 +- packages/sp/context-info/index.ts | 3 +- packages/sp/favorites/types.ts | 3 +- packages/sp/features/types.ts | 2 +- packages/sp/fields/types.ts | 3 +- packages/sp/files/types.ts | 3 +- packages/sp/folders/types.ts | 3 +- packages/sp/groupsitemanager/types.ts | 3 +- packages/sp/hubsites/site.ts | 2 +- packages/sp/hubsites/web.ts | 2 +- packages/sp/index.ts | 2 - packages/sp/items/get-all.ts | 52 ------- packages/sp/items/index.ts | 1 - packages/sp/items/types.ts | 96 +++++++------ packages/sp/lists/types.ts | 3 +- packages/sp/navigation/types.ts | 3 +- packages/sp/operations.ts | 33 ----- packages/sp/profiles/types.ts | 2 +- packages/sp/recycle-bin/types.ts | 2 +- packages/sp/regional-settings/funcs.ts | 3 +- packages/sp/regional-settings/types.ts | 2 +- packages/sp/related-items/types.ts | 3 +- packages/sp/search/query.ts | 3 +- packages/sp/security/funcs.ts | 3 +- packages/sp/security/types.ts | 3 +- packages/sp/sharing/funcs.ts | 3 +- packages/sp/sharing/web.ts | 2 +- packages/sp/site-designs/types.ts | 4 +- packages/sp/site-groups/types.ts | 3 +- packages/sp/site-groups/web.ts | 2 +- packages/sp/site-scripts/types.ts | 3 +- packages/sp/site-users/types.ts | 3 +- packages/sp/site-users/web.ts | 2 +- packages/sp/sites/types.ts | 3 +- packages/sp/social/types.ts | 2 +- packages/sp/spqueryable.ts | 34 ++++- packages/sp/sputilities/types.ts | 3 +- packages/sp/subscriptions/types.ts | 4 +- packages/sp/taxonomy/types.ts | 3 +- packages/sp/user-custom-actions/types.ts | 3 +- packages/sp/views/types.ts | 3 +- packages/sp/webparts/types.ts | 2 +- packages/sp/webs/types.ts | 3 +- test/core/assumptions.ts | 9 +- test/core/storage.ts | 29 ++-- test/core/timeline.ts | 25 ++-- test/core/util.ts | 138 +++++++++++-------- test/graph/batch.ts | 26 ++-- test/graph/calendars.ts | 2 + test/graph/columns.ts | 138 ++++++++++++------- test/graph/contacts.ts | 2 + test/graph/content-types.ts | 135 ++++++++++++------ test/graph/directoryobjects.ts | 87 +++++++----- test/graph/{drive.ts => files.ts} | 4 +- test/graph/groups.ts | 84 +++++------ test/graph/lists.ts | 42 ++++-- test/graph/paging.ts | 12 +- test/graph/querable.ts | 2 +- test/graph/sites.ts | 5 +- test/pnp-test.ts | 10 ++ test/sp/batch.ts | 2 +- test/sp/items.ts | 27 +--- test/test-recording.ts | 3 + 142 files changed, 1436 insertions(+), 886 deletions(-) rename docs/graph/{drive.md => files.md} (89%) create mode 100644 docs/graph/onedrive.md create mode 100644 docs/graph/operations.md create mode 100644 docs/graph/permissions.md rename packages/graph/{drive => files}/funcs.ts (84%) rename packages/graph/{drive => files}/groups.ts (100%) rename packages/graph/{drive => files}/index.ts (95%) rename packages/graph/{drive => files}/sites.ts (100%) rename packages/graph/{drive => files}/types.ts (86%) rename packages/graph/{drive => files}/users.ts (97%) delete mode 100644 packages/graph/operations.ts create mode 100644 packages/graph/operations/index.ts create mode 100644 packages/graph/operations/list.ts create mode 100644 packages/graph/operations/site.ts create mode 100644 packages/graph/operations/types.ts create mode 100644 packages/graph/permissions/index.ts create mode 100644 packages/graph/permissions/site.ts create mode 100644 packages/graph/permissions/types.ts create mode 100644 packages/graph/sites/user.ts delete mode 100644 packages/sp/items/get-all.ts delete mode 100644 packages/sp/operations.ts rename test/graph/{drive.ts => files.ts} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc16dabe2..49c69bd16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,43 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- graph + - limitation on chaining site operations from sites.getByUrl + ### Added +- graph + - explict error thrown if SPFx context is null or undefined when needed + - followed sites support for users + - ISite now supports `async rebase()` to ensure any ISite is represented by the url pattern /sites/{site id} regardless of how it was first loaded + - ISites.getAllSites() + - support for operations for ISite and IList + +- sp + - explict error thrown if SPFx context is null or undefined when needed + ### Removed +- graph + - paged method removed from IGraphQueryableCollection + - ./operations.ts methods moved to ./graphqueryable.ts + +- sp + - getPaged method removed from _Items/IItems + - PagedItemCollection removed from library + - removed /items/get-all import, unneeded, use async iterator patterns + - ./operations.ts methods moved to ./spqueryable.ts + ### Changed + +- graph + - IGraphQueryableCollection now supports async iterator pattern + - IGraphQueryableCollection count method now returns -1 if the collection does not support counting + - All GraphQueryable*, _GraphQueryable*, and IGraphQueryable* have been renamed to remove "Queryable" (ex: GraphQueryableCollection is now GraphCollection) + - @pnp/graph/onedrive renamed to @pnp/graph/files + - ISites.getByUrl is now async + +- sp + - _Items and IItems now supports async iterator pattern + + diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index f2646a551..9fe04eec9 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -6,15 +6,15 @@ declare var process: { exit(code?: number): void }; export async function Example(settings: any) { - const graph = graphSetup(settings); + const graph = graphSetup(settings); - const users = await graph.users(); - - Logger.log({ - data: users, - level: LogLevel.Info, - message: "List of Users Data", - }); - - process.exit(0); -} \ No newline at end of file + const users = await graph.users(); + + Logger.log({ + data: users, + level: LogLevel.Info, + message: "List of Users Data", + }); + + process.exit(0); +} diff --git a/docs/graph/drive.md b/docs/graph/files.md similarity index 89% rename from docs/graph/drive.md rename to docs/graph/files.md index 612d39ff0..d1e0896a8 100644 --- a/docs/graph/drive.md +++ b/docs/graph/files.md @@ -1,7 +1,7 @@ -# @pnp/graph/drive +# @pnp/graph/files -The ability to manage drives and drive items in OneDrive and SharePoint is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described -you can manage drives and drive items in OneDrive and SharePoint. +The ability to manage drives and drive items in Onedrive is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described +you can manage drives and drive items in Onedrive. ## IInvitations @@ -9,14 +9,14 @@ you can manage drives and drive items in OneDrive and SharePoint. ## Get the default drive -Using the drive you can get the users default drive from OneDrive, or the groups or sites default document library. +Using the drive you can get the users default drive from Onedrive, or the groups or sites default document library. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/groups"; import "@pnp/graph/sites"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -31,14 +31,14 @@ const siteDrive = await graph.sites.getById("{site identifier}").drive(); ## Get all of the drives -Using the drives() you can get the users available drives from OneDrive +Using the drives() you can get the users available drives from Onedrive ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/groups"; import "@pnp/graph/sites"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -59,7 +59,7 @@ Using the drives.getById() you can get one of the available drives in Outlook ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -78,7 +78,7 @@ Using the list() you get the associated list information ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -94,7 +94,7 @@ Form more infomration about acting on the IList object see [@pnpjs/graph/lists]( ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import "@pnp/graph/lists"; const graph = graphfi(...); @@ -113,7 +113,7 @@ Using the recent() you get the recent files ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -130,7 +130,7 @@ Using the sharedWithMe() you get the files shared with the user ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -152,7 +152,7 @@ List the items that have been followed by the signed in user. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -169,7 +169,7 @@ import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/sites"; import "@pnp/graph/groups"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -194,7 +194,7 @@ Using the children() you get the children ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -215,7 +215,7 @@ Using the drive.getItemsByPath() you can get the contents of a particular folder ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -231,9 +231,9 @@ Using the add you can add an item, for more options please user the upload metho ```TypeScript import { graphfi } from "@pnp/graph"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import "@pnp/graph/users"; -import {IDriveItemAddResult} from "@pnp/graph/drive"; +import {IDriveItemAddResult} from "@pnp/graph/files"; const graph = graphfi(...); @@ -247,9 +247,9 @@ Using the .upload method you can add or update the content of an item. ```TypeScript import { graphfi } from "@pnp/graph"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import "@pnp/graph/users"; -import {IFileOptions, IDriveItemAddResult} from "@pnp/graph/drive"; +import {IFileOptions, IDriveItemAddResult} from "@pnp/graph/files"; const graph = graphfi(...); @@ -282,7 +282,7 @@ Using addFolder you can add a folder ```TypeScript import { graph } from "@pnp/graph"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import "@pnp/graph/users" import {IDriveItemAddResult} from "@pnp/graph/ondrive"; @@ -300,7 +300,7 @@ Using the search() you can search for items, and optionally select properties ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -320,7 +320,7 @@ Using the items.getById() you can get a specific item from the current drive ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -337,7 +337,7 @@ Using the drive.getItemByPath() you can get a specific item from the current dri ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -354,7 +354,7 @@ Using the item.getContent() you can get the content of a file. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -385,7 +385,7 @@ Using the item.convertContent() you can get a PDF version of the file. See [offi ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -414,7 +414,7 @@ Using the thumbnails() you get the thumbnails ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -431,7 +431,7 @@ Using the delete() you delete the current item ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -448,7 +448,7 @@ Using the update() you update the current item ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -465,7 +465,7 @@ Using the move() you move the current item, and optionally update it ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -491,7 +491,7 @@ Using the copy() you can copy the current item to a new location, returns the pa ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; const graph = graphfi(...); @@ -517,8 +517,8 @@ Using the users default drive you can get special folders, including: Documents, ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; -import { SpecialFolder, IDriveItem } from "@pnp/graph/drive"; +import "@pnp/graph/files"; +import { SpecialFolder, IDriveItem } from "@pnp/graph/files"; const graph = graphfi(...); @@ -540,8 +540,8 @@ If you want to obtain long-lived embeddable links, use the createLink API instea ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; -import { IPreviewOptions, IDriveItemPreviewInfo } from "@pnp/graph/drive"; +import "@pnp/graph/files"; +import { IPreviewOptions, IDriveItemPreviewInfo } from "@pnp/graph/files"; import { ItemPreviewInfo } from "@microsoft/microsoft-graph-types" const graph = graphfi(...); @@ -566,7 +566,7 @@ Track changes in a driveItem and its children over time. ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import { IDeltaItems } from "@pnp/graph/ondrive"; const graph = graphfi(...); @@ -588,3 +588,27 @@ for await (const val of delta.next.top(20).paged()) { console.log(JSON.stringify(val, null, 2)); } ``` + +## Get Drive Item Analytics + +Using the analytics() you get the ItemAnalytics for a DriveItem + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/files"; +import { IAnalyticsOptions } from "@pnp/graph/files"; + +const graph = graphfi(...); + +// Defaults to lastSevenDays +const analytics = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").analytics()(); + +const analytics = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics()(); + +const analyticOptions: IAnalyticsOptions = { + timeRange: "allTime" +}; + +const analyticsAllTime = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics(analyticOptions)(); +``` diff --git a/docs/graph/onedrive.md b/docs/graph/onedrive.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/graph/operations.md b/docs/graph/operations.md new file mode 100644 index 000000000..d0d6f0afb --- /dev/null +++ b/docs/graph/operations.md @@ -0,0 +1,22 @@ +# @pnp/graph/operations + +Provides capabilities related to rich long-running operations. + +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## list site operations + +```TypeScript +import "@pnp/graph/sites"; +import "@pnp/graph/operations"; + +const graph = graphfi(...); + +// using getByUrl +const site = await graph.sites.getByUrl("tenant.sharepoint.com", "/sites/dev"); + +const ops = await site.operations(); + +// using site id +const ops2 = await graph.sites.getById("{site id}").operations(); +``` diff --git a/docs/graph/permissions.md b/docs/graph/permissions.md new file mode 100644 index 000000000..ade06dc57 --- /dev/null +++ b/docs/graph/permissions.md @@ -0,0 +1,79 @@ +# @pnp/graph/permissions + +Allows you to manipulate the permissions of various entities. + +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## site permissions + +[![Official Docs](https://img.shields.io/badge/Official_Graph_Docs-social.svg)](https://learn.microsoft.com/en-us/graph/api/resources/permission?view=graph-rest-1.0) + +Allows you to manage application permissions for sites. + +### list site permissions + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions(); +``` + +### get a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.getById("{permission id}")(); +``` + +### add a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.add({ + roles: ["fullcontrol"], + grantedToIdentities: [{ + id: "89ea5c94-7736-4e25-95ad-3fa95f62b66e", + displayName: "Contoso Time Manager App", + }], +}); +``` + +### update a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.getById("{permission id}").update({ + roles: ["read"], +}); +``` + +### delete a site permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/permissions"; + +const graph = graphfi(...); + +const permissions = await graph.sites.getById("{site id}").permissions.getById("{permission id}").delete(); +``` diff --git a/docs/graph/shares.md b/docs/graph/shares.md index c5fd39684..fd3bc2060 100644 --- a/docs/graph/shares.md +++ b/docs/graph/shares.md @@ -32,7 +32,7 @@ const shareInfo = await graph.shares.getById(shareLink)(); ## Access a Share's driveItem resource -You can also access the full functionality of the driveItem via a share. Find [more details on the capabilities of driveItem here](./drive.md). +You can also access the full functionality of the driveItem via a share. Find [more details on the capabilities of driveItem here](./files.md). ```TS import { graphfi } from "@pnp/graph"; diff --git a/docs/graph/sites.md b/docs/graph/sites.md index 44070b32d..f03603f09 100644 --- a/docs/graph/sites.md +++ b/docs/graph/sites.md @@ -4,7 +4,9 @@ The search module allows you to access the Microsoft Graph Sites API. [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) -## Call graph.sites +## sites + +### list ```TypeScript import { graphfi } from "@pnp/graph"; @@ -15,7 +17,7 @@ const graph = graphfi(...); const sitesInfo = await graph.sites(); ``` -## Call graph.sites.getById +### getById ```TypeScript import { graphfi } from "@pnp/graph"; @@ -26,12 +28,10 @@ const graph = graphfi(...); const siteInfo = await graph.sites.getById("{site identifier}")(); ``` -## Call graph.sites.getByUrl +### getByUrl Using the sites.getByUrl() you can get a site using url instead of identifier -![Known Issue Banner](https://img.shields.io/badge/Known%20Issue-important.svg) If you get a site with this method, the graph does not support chaining a request further than .drive. We will review and try and create a work around for this issue. - ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/sites"; @@ -42,6 +42,128 @@ const serverRelativeUrl = "/sites/teamsite1"; const siteInfo = await graph.sites.getByUrl(sharepointHostName, serverRelativeUrl)(); ``` -## Make additional calls or recieve items from lists +### getAllSites + +List sites across geographies in an organization. This API can also be used to enumerate all sites in a non-multi-geo tenant. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; + +const graph = graphfi(...); + +const siteslist = []; + +// use async iterator pattern +for await (const sites of graph.sites.getAllSites()) { + siteslist.push(sites); +} + +// supports query params, here we get the sites in pages of 5 as an example +for await (const sites of graph.sites.getAllSites().top(5)) { + siteslist.push(sites); +} +``` + +## site + +### get + +Access sub-sites of the current site + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; + +const graph = graphfi(...); + +const siteInfo = await graph.sites.getById("{site id}")(); +``` + +### sites + +Access sub-sites of the current site + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; + +const graph = graphfi(...); + +const subsites = await graph.sites.getById("{site id}").sites(); +``` + +### rebase + +Ensures the underlying url used in queries for this site is of the pattern /sites/{site id} regardless of how the ISite instance was addressed. + +>> We internally rebase sites using this method so you probably don't need to call it directly, but it is available in case you do😀 + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; -We don't currently implement all of the available options in graph for sites, rather focusing on the sp library. While we do accept PRs to add functionality, you can [also make calls by path.](./items.md) +const graph = graphfi(...); + +const rebasedSite = await Site([graph.sites, "/sites/tenant.sharepoint.com:/sites/dev:"]).rebase(); + +const items = await rebasedSite.drive.root.children(); +``` + +## followedSites + +Provides access to the sites a user is following. + +### list + +>> At this time you can not list a user's followed sites using app-only permissions + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/users"; + +const graph = graphfi(...); + +const followedSites = await graph.me.followedSites(); +``` + +### add + +Adds a followed site to a user's collection + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/users"; + +const graph = graphfi(...); + +const followedSites = await graph.me.followedSites.add("{site id}"); + +// supports multiple ids in a single call +const followedSites2 = await graph.me.followedSites.add("{site id}", "{site id2}", "{site id3}", "{site id4}"); + +// callable for any user +const followedSites3 = await graph.users.getById("{user id}").followedSites.add("{site id}", "{site id2}", "{site id3}", "{site id4}"); +``` + +### remove + +Removes a followed site to a user's collection + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/users"; + +const graph = graphfi(...); + +await graph.me.followedSites.remove("{site id}"); + +// supports multiple ids in a single call +await graph.me.followedSites.remove("{site id}", "{site id2}", "{site id3}", "{site id4}"); + +// callable for any user +await graph.users.getById("{user id}").followedSites.remove("{site id}", "{site id2}", "{site id3}", "{site id4}"); +``` diff --git a/docs/graph/users.md b/docs/graph/users.md index fff64cc35..f863a0c90 100644 --- a/docs/graph/users.md +++ b/docs/graph/users.md @@ -131,4 +131,4 @@ See [Messages](./messages.md) ## User OneDrive -See [Drive](./drive.md) +See [Files](./files.md) diff --git a/mkdocs.yml b/mkdocs.yml index d1592830d..9b00f5691 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,7 +17,7 @@ nav: - 'In NodeJS': 'concepts/auth-nodejs.md' - 'Batching': 'concepts/batching.md' - 'Batching & Caching': 'concepts/batching-caching.md' - - 'Calling Other Endpoints': 'concepts/calling-other-endpoints' + - 'Calling Other Endpoints': 'concepts/calling-other-endpoints.md' - 'Custom Bundling': 'concepts/custom-bundle.md' - 'Error-Handling': 'concepts/error-handling.md' - 'Project Config/Services Setup': 'concepts/project-preset.md' @@ -49,12 +49,14 @@ nav: - 'cloud communications': 'graph/cloud-communications.md' - calendars: 'graph/calendars.md' - 'directory objects': 'graph/directoryobjects.md' + - files: 'graph/files.md' - invitations: 'graph/invitations.md' - items: 'graph/items.md' - lists: 'graph/lists.md' - messages: 'graph/messages.md' - - onedrive: 'graph/onedrive.md' - outlook: 'graph/outlook.md' + - operations: 'graph/operations.md' + - permissions: 'graph/permissions.md' - photos: 'graph/photos.md' - planner: 'graph/planner.md' - search: 'graph/search.md' diff --git a/package.json b/package.json index 412dc4ee8..c2ff3b2bc 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@pnp/monorepo", "private": true, "type": "module", - "version": "3.17.0", + "version": "4.0.0-alpha0", "description": "A JavaScript library for SharePoint & Graph development.", "devDependencies": { "@azure/identity": "3.2.4", diff --git a/packages/graph/attachments/types.ts b/packages/graph/attachments/types.ts index 57b2d4c4d..2818fd31f 100644 --- a/packages/graph/attachments/types.ts +++ b/packages/graph/attachments/types.ts @@ -1,14 +1,13 @@ import { Attachment as IAttachmentType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; -import { graphPost } from "../operations.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; import { type } from "../utils/type.js"; /** * Attachment */ -export class _Attachment extends _GraphQueryableInstance { } +export class _Attachment extends _GraphInstance { } export interface IAttachment extends _Attachment { } export const Attachment = graphInvokableFactory(_Attachment); @@ -17,7 +16,7 @@ export const Attachment = graphInvokableFactory(_Attachment); */ @defaultPath("attachments") @getById(Attachment) -export class _Attachments extends _GraphQueryableCollection { +export class _Attachments extends _GraphCollection { /** * Add attachment to this collection diff --git a/packages/graph/batching.ts b/packages/graph/batching.ts index 5e306a203..dcfa6fb7a 100644 --- a/packages/graph/batching.ts +++ b/packages/graph/batching.ts @@ -1,7 +1,6 @@ import { isUrlAbsolute, hOP, TimelinePipe, getGUID, CopyFrom, objectDefinedNotNull, isFunc, combine } from "@pnp/core"; import { parseBinderWithErrorCheck, Queryable, body, InjectHeaders } from "@pnp/queryable"; -import { IGraphQueryable, _GraphQueryable } from "./graphqueryable.js"; -import { graphPost } from "./operations.js"; +import { IGraphQueryable, _GraphQueryable, graphPost } from "./graphqueryable.js"; import { GraphFI } from "./fi.js"; declare module "./fi" { diff --git a/packages/graph/behaviors/paged.ts b/packages/graph/behaviors/paged.ts index 94f6a259b..b469a068a 100644 --- a/packages/graph/behaviors/paged.ts +++ b/packages/graph/behaviors/paged.ts @@ -1,6 +1,6 @@ -import { hOP, objectDefinedNotNull, stringIsNullOrEmpty, TimelinePipe } from "@pnp/core"; +import { hOP, stringIsNullOrEmpty, TimelinePipe } from "@pnp/core"; import { errorCheck, parseODataJSON } from "@pnp/queryable"; -import { GraphQueryableCollection, IGraphQueryable, IGraphQueryableCollection } from "../graphqueryable.js"; +import { GraphCollection, IGraphQueryable, IGraphCollection } from "../graphqueryable.js"; import { ConsistencyLevel } from "./consistency-level.js"; export interface IPagedResult { @@ -17,9 +17,9 @@ export interface IPagedResult { * @param col The collection to count * @returns number representing the count */ -export async function Count(col: IGraphQueryableCollection): Promise { +export async function Count(col: IGraphCollection): Promise { - const q = GraphQueryableCollection(col).using(Paged(), ConsistencyLevel()); + const q = GraphCollection(col).using(Paged(), ConsistencyLevel()); q.query.set("$count", "true"); q.top(1); @@ -27,53 +27,6 @@ export async function Count(col: IGraphQueryableCollection): Promise(col: IGraphQueryableCollection): AsyncIterable { - - const q = GraphQueryableCollection(col).using(Paged(), ConsistencyLevel()); - - const queryParams = ["$search", "$top", "$select", "$expand", "$filter", "$orderby"]; - - for (let i = 0; i < queryParams.length; i++) { - const param = col.query.get(queryParams[i]); - if (objectDefinedNotNull(param)) { - q.query.set(queryParams[i], param); - } - } - - return { - - [Symbol.asyncIterator]() { - return >{ - - _next: q, - - async next() { - - if (this._next === null) { - return { done: true, value: undefined }; - } - - const result: IPagedResult = await this._next(); - - if (result.hasNext) { - this._next = GraphQueryableCollection([this._next, result.nextLink]); - return { done: false, value: result.value }; - } else { - this._next = null; - return { done: false, value: result.value }; - } - }, - }; - }, - }; -} - /** * Behavior that converts results to pages when used with a collection (exposed through the paged method of GraphCollection) * diff --git a/packages/graph/behaviors/spfx.ts b/packages/graph/behaviors/spfx.ts index caf542dbf..5c96698d7 100644 --- a/packages/graph/behaviors/spfx.ts +++ b/packages/graph/behaviors/spfx.ts @@ -11,8 +11,23 @@ interface ISPFXContext { }; } +class SPFxTokenNullOrUndefinedError extends Error { + + constructor(behaviorName: string) { + super(`SPFx Context supplied to ${behaviorName} Behavior is null or undefined.`); + } + + public static check(behaviorName: string, context?: ISPFXContext): void { + if (typeof context === "undefined" || context === null) { + throw new SPFxTokenNullOrUndefinedError(behaviorName); + } + } +} + export function SPFxToken(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFxToken"); + return (instance: Queryable) => { instance.on.auth.replace(async function (url: URL, init: RequestInit) { @@ -32,6 +47,8 @@ export function SPFxToken(context: ISPFXContext): TimelinePipe { export function SPFx(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFx"); + return (instance: Queryable) => { instance.using( diff --git a/packages/graph/bookings/funcs.ts b/packages/graph/bookings/funcs.ts index b45da518b..2f51e054f 100644 --- a/packages/graph/bookings/funcs.ts +++ b/packages/graph/bookings/funcs.ts @@ -1,5 +1,5 @@ -import { IGraphQueryable, GraphQueryableCollection, IGraphQueryableCollection } from "../graphqueryable.js"; +import { IGraphQueryable, GraphCollection, IGraphCollection } from "../graphqueryable.js"; import { BookingAppointment as IBookingAppointmentEntity } from "@microsoft/microsoft-graph-types"; /** @@ -9,9 +9,9 @@ import { BookingAppointment as IBookingAppointmentEntity } from "@microsoft/micr * @param start start time * @param end end time */ -export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphQueryableCollection { +export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphCollection { - const query = GraphQueryableCollection(this, "calendarView"); + const query = GraphCollection(this, "calendarView"); query.query.set("startDateTime", start); query.query.set("endDateTime", end); return query; diff --git a/packages/graph/bookings/types.ts b/packages/graph/bookings/types.ts index e8d167a6c..bcb323e94 100644 --- a/packages/graph/bookings/types.ts +++ b/packages/graph/bookings/types.ts @@ -7,9 +7,8 @@ import { BookingCurrency as IBookingCurrencyEntity, BookingCustomQuestion as IBookingCustomQuestionEntity, } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; import { calendarView } from "./funcs.js"; @@ -17,7 +16,7 @@ import { calendarView } from "./funcs.js"; * Describes a Booking Currency entity * */ -export class _BookingCurrency extends _GraphQueryableInstance { } +export class _BookingCurrency extends _GraphInstance { } export interface IBookingCurrency extends _BookingCurrency { } export const BookingCurrency = graphInvokableFactory(_BookingCurrency); @@ -27,7 +26,7 @@ export const BookingCurrency = graphInvokableFactory(_BookingC */ @defaultPath("solutions/bookingCurrencies") @getById(BookingCurrency) -export class _BookingCurrencies extends _GraphQueryableCollection{ } +export class _BookingCurrencies extends _GraphCollection{ } export interface IBookingCurrencies extends _BookingCurrencies, IGetById { } export const BookingCurrencies = graphInvokableFactory(_BookingCurrencies); @@ -36,7 +35,7 @@ export const BookingCurrencies = graphInvokableFactory(_Book */ @deleteable() @updateable() -export class _BookingBusiness extends _GraphQueryableInstance { +export class _BookingBusiness extends _GraphInstance { /** * Get the calendar view for the booking business. */ @@ -99,7 +98,7 @@ export const BookingBusiness = graphInvokableFactory(_BookingB */ @defaultPath("solutions/bookingBusinesses") @getById(BookingBusiness) -export class _BookingBusinesses extends _GraphQueryableCollection{ +export class _BookingBusinesses extends _GraphCollection{ /** * Create a new booking business as specified in the request body. * @@ -130,7 +129,7 @@ export const BookingBusinesses = graphInvokableFactory(_Book */ @deleteable() @updateable() -export class _BookingApointment extends _GraphQueryableInstance { +export class _BookingApointment extends _GraphInstance { /** * Cancel the specified bookingAppointment in the specified bookingBusiness and send a message to the involved customer and staff members. */ @@ -148,7 +147,7 @@ export const BookingAppointment = graphInvokableFactory(_Bo */ @defaultPath("appointments") @getById(BookingAppointment) -export class _BookingAppointments extends _GraphQueryableCollection{ +export class _BookingAppointments extends _GraphCollection{ /** * Create a new booking appointment as specified in the request body. * @@ -172,7 +171,7 @@ export const BookingAppointments = graphInvokableFactory(_ */ @deleteable() @updateable() -export class _BookingCustomer extends _GraphQueryableInstance { } +export class _BookingCustomer extends _GraphInstance { } export interface IBookingCustomer extends _BookingCustomer, IDeleteable, IUpdateable { } export const BookingCustomer = graphInvokableFactory(_BookingCustomer); @@ -182,7 +181,7 @@ export const BookingCustomer = graphInvokableFactory(_BookingC */ @defaultPath("customers") @getById(BookingCustomer) -export class _BookingCustomers extends _GraphQueryableCollection{ +export class _BookingCustomers extends _GraphCollection{ /** * Create a new booking customer as specified in the request body. * @@ -206,7 +205,7 @@ export const BookingCustomers = graphInvokableFactory(_Bookin */ @deleteable() @updateable() -export class _BookingService extends _GraphQueryableInstance { } +export class _BookingService extends _GraphInstance { } export interface IBookingService extends _BookingService, IDeleteable, IUpdateable { } export const BookingService = graphInvokableFactory(_BookingService); @@ -216,7 +215,7 @@ export const BookingService = graphInvokableFactory(_BookingSer */ @defaultPath("services") @getById(BookingService) -export class _BookingServices extends _GraphQueryableCollection{ +export class _BookingServices extends _GraphCollection{ /** * Create a new booking service as specified in the request body. * @@ -240,7 +239,7 @@ export const BookingServices = graphInvokableFactory(_BookingS */ @deleteable() @updateable() -export class _BookingStaffMember extends _GraphQueryableInstance { } +export class _BookingStaffMember extends _GraphInstance { } export interface IBookingStaffMember extends _BookingStaffMember, IDeleteable, IUpdateable { } export const BookingStaffMember = graphInvokableFactory(_BookingStaffMember); @@ -250,7 +249,7 @@ export const BookingStaffMember = graphInvokableFactory(_Bo */ @defaultPath("staffMembers") @getById(BookingStaffMember) -export class _BookingStaffMembers extends _GraphQueryableCollection{ +export class _BookingStaffMembers extends _GraphCollection{ /** * Create a new booking staffmember as specified in the request body. * @@ -274,7 +273,7 @@ export const BookingStaffMembers = graphInvokableFactory(_ */ @deleteable() @updateable() -export class _BookingCustomQuestion extends _GraphQueryableInstance { } +export class _BookingCustomQuestion extends _GraphInstance { } export interface IBookingCustomQuestion extends _BookingCustomQuestion, IDeleteable, IUpdateable { } export const BookingCustomQuestion = graphInvokableFactory(_BookingCustomQuestion); @@ -284,7 +283,7 @@ export const BookingCustomQuestion = graphInvokableFactory{ +export class _BookingCustomQuestions extends _GraphCollection{ /** * Create a new booking customquestions as specified in the request body. * diff --git a/packages/graph/calendars/funcs.ts b/packages/graph/calendars/funcs.ts index 20d78a2e1..9e5480042 100644 --- a/packages/graph/calendars/funcs.ts +++ b/packages/graph/calendars/funcs.ts @@ -1,4 +1,4 @@ -import { IGraphQueryable, GraphQueryableCollection, IGraphQueryableCollection } from "../graphqueryable.js"; +import { IGraphQueryable, GraphCollection, IGraphCollection } from "../graphqueryable.js"; import { EmailAddress, Event as IEvent } from "@microsoft/microsoft-graph-types"; import { Endpoint } from "../behaviors/endpoint.js"; @@ -14,9 +14,9 @@ interface IEventWithTag extends IEvent { * @param start start time * @param end end time */ -export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphQueryableCollection { +export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphCollection { - const query = GraphQueryableCollection(this, "calendarView"); + const query = GraphCollection(this, "calendarView"); query.query.set("startDateTime", start); query.query.set("endDateTime", end); return query; @@ -31,8 +31,8 @@ export type ICalendarViewInfo = IEventWithTag; * @param this IGraphQueryable instance * @param roomList The SMTP address associated with the room list. */ -export function findRooms(this: IGraphQueryable, roomList?: string): IGraphQueryableCollection { - const query = GraphQueryableCollection(this, roomList ? "findRooms(RoomList=@roomList)" : "findRooms"); +export function findRooms(this: IGraphQueryable, roomList?: string): IGraphCollection { + const query = GraphCollection(this, roomList ? "findRooms(RoomList=@roomList)" : "findRooms"); query.using(Endpoint("beta")); if (roomList) { query.query.set("@roomList", `'${roomList}'`); @@ -48,8 +48,8 @@ export function findRooms(this: IGraphQueryable, roomList?: string): IGraphQuery * @param start start time * @param end end time */ -export function instances(this: IGraphQueryable, start: string, end: string): IGraphQueryableCollection { - const query = GraphQueryableCollection(this, "instances"); +export function instances(this: IGraphQueryable, start: string, end: string): IGraphCollection { + const query = GraphCollection(this, "instances"); query.query.set("startDateTime", start); query.query.set("endDateTime", end); return query; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index 009a969f9..9dd39a608 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -1,14 +1,13 @@ import { body } from "@pnp/queryable"; import { Event as IEventType, Calendar as ICalendarType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { calendarView, instances } from "./funcs.js"; /** * Calendar */ -export class _Calendar extends _GraphQueryableInstance { +export class _Calendar extends _GraphInstance { public get events(): IEvents { return Events(this); @@ -24,7 +23,7 @@ export const Calendar = graphInvokableFactory(_Calendar); */ @defaultPath("calendars") @getById(Calendar) -export class _Calendars extends _GraphQueryableCollection { } +export class _Calendars extends _GraphCollection { } export interface ICalendars extends _Calendars, IGetById { } export const Calendars = graphInvokableFactory(_Calendars); @@ -33,7 +32,7 @@ export const Calendars = graphInvokableFactory(_Calendars); */ @deleteable() @updateable() -export class _Event extends _GraphQueryableInstance { +export class _Event extends _GraphInstance { public instances = instances; } export interface IEvent extends _Event, IDeleteable, IUpdateable { } @@ -44,7 +43,7 @@ export const Event = graphInvokableFactory(_Event); */ @defaultPath("events") @getById(Event) -export class _Events extends _GraphQueryableCollection { +export class _Events extends _GraphCollection { /** * Adds a new event to the collection diff --git a/packages/graph/calendars/users.ts b/packages/graph/calendars/users.ts index 88d00db0e..7eb87fc4f 100644 --- a/packages/graph/calendars/users.ts +++ b/packages/graph/calendars/users.ts @@ -2,7 +2,7 @@ import { addProp } from "@pnp/queryable"; import { _User } from "../users/types.js"; import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars } from "./types.js"; import { calendarView, ICalendarViewInfo } from "./funcs.js"; -import { IGraphQueryableCollection } from "../graphqueryable.js"; +import { IGraphCollection } from "../graphqueryable.js"; declare module "../users/types" { interface _User { @@ -10,14 +10,14 @@ declare module "../users/types" { readonly calendars: ICalendars; readonly attachmentFiles: ICalendar; readonly events: IEvents; - calendarView(start: string, end: string): IGraphQueryableCollection; + calendarView(start: string, end: string): IGraphCollection; } interface IUser { readonly calendar: ICalendar; readonly calendars: ICalendars; readonly attachmentFiles: ICalendar; readonly events: IEvents; - calendarView(start: string, end: string): IGraphQueryableCollection; + calendarView(start: string, end: string): IGraphCollection; } } diff --git a/packages/graph/cloud-communications/types.ts b/packages/graph/cloud-communications/types.ts index 59d5a8a23..19684f18a 100644 --- a/packages/graph/cloud-communications/types.ts +++ b/packages/graph/cloud-communications/types.ts @@ -1,8 +1,7 @@ import { Presence as IUserPresence } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; /** @@ -10,12 +9,12 @@ import { body } from "@pnp/queryable"; */ @defaultPath("presence") -export class _Presence extends _GraphQueryableInstance { } +export class _Presence extends _GraphInstance { } export interface IPresence extends _Presence { } export const Presence = graphInvokableFactory(_Presence); @defaultPath("communications") -export class _Communications extends _GraphQueryableCollection { +export class _Communications extends _GraphCollection { /** * Retrieve presence information for a group of users. * diff --git a/packages/graph/columns/addColumns.ts b/packages/graph/columns/addColumns.ts index 76c383e6c..8edb6a224 100644 --- a/packages/graph/columns/addColumns.ts +++ b/packages/graph/columns/addColumns.ts @@ -1,5 +1,5 @@ -import { IColumn } from "./types"; -import { graphPost } from "../operations.js"; +import { IColumn } from "./types.js"; +import { graphPost } from "../graphqueryable.js"; import { body } from "@pnp/queryable"; import { ColumnDefinition as IColumnDefinition, diff --git a/packages/graph/columns/content-types.ts b/packages/graph/columns/content-types.ts index 83f2e8c28..b6d094ed9 100644 --- a/packages/graph/columns/content-types.ts +++ b/packages/graph/columns/content-types.ts @@ -1,5 +1,5 @@ import { addProp, body } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../graphqueryable.js"; import { _ContentType } from "../content-types/types.js"; import { Columns, IColumns,IColumn, _Columns } from "./types.js"; import { IColumnAddResult } from "./addColumns.js"; diff --git a/packages/graph/columns/types.ts b/packages/graph/columns/types.ts index 72be18d08..f63a96169 100644 --- a/packages/graph/columns/types.ts +++ b/packages/graph/columns/types.ts @@ -1,7 +1,7 @@ import { ColumnDefinition as IColumnDefinition, } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, getById, IGetById, IUpdateable, updateable } from "../decorators.js"; /** @@ -9,7 +9,7 @@ import { defaultPath, deleteable, IDeleteable, getById, IGetById, IUpdateable, u */ @deleteable() @updateable() -export class _Column extends _GraphQueryableInstance {} +export class _Column extends _GraphInstance {} export interface IColumn extends _Column, IDeleteable, IUpdateable { } export const Column = graphInvokableFactory(_Column); @@ -18,7 +18,7 @@ export const Column = graphInvokableFactory(_Column); */ @defaultPath("columns") @getById(Column) -export class _Columns extends _GraphQueryableCollection{} +export class _Columns extends _GraphCollection{} export interface IColumns extends _Columns, IGetById { } export const Columns = graphInvokableFactory(_Columns); diff --git a/packages/graph/contacts/types.ts b/packages/graph/contacts/types.ts index a0c63f1b0..b8d14e20b 100644 --- a/packages/graph/contacts/types.ts +++ b/packages/graph/contacts/types.ts @@ -1,7 +1,6 @@ -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { Contact as IContactType, ContactFolder as IContactFolderType, EmailAddress as IEmailAddressType } from "@microsoft/microsoft-graph-types"; import { defaultPath, updateable, deleteable, IUpdateable, IDeleteable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; /** @@ -9,7 +8,7 @@ import { body } from "@pnp/queryable"; */ @updateable() @deleteable() -export class _Contact extends _GraphQueryableInstance { } +export class _Contact extends _GraphInstance { } export interface IContact extends _Contact, IUpdateable, IDeleteable { } export const Contact = graphInvokableFactory(_Contact); @@ -18,7 +17,7 @@ export const Contact = graphInvokableFactory(_Contact); */ @defaultPath("contacts") @getById(Contact) -export class _Contacts extends _GraphQueryableCollection { +export class _Contacts extends _GraphCollection { /** * Create a new Contact for the user. @@ -60,7 +59,7 @@ export const Contacts = graphInvokableFactory(_Contacts); */ @deleteable() @updateable() -export class _ContactFolder extends _GraphQueryableInstance { +export class _ContactFolder extends _GraphInstance { /** * Gets the contacts in this contact folder */ @@ -83,7 +82,7 @@ export const ContactFolder = graphInvokableFactory(_ContactFolde */ @defaultPath("contactFolders") @getById(ContactFolder) -export class _ContactFolders extends _GraphQueryableCollection { +export class _ContactFolders extends _GraphCollection { /** * Create a new Contact Folder for the user. diff --git a/packages/graph/content-types/lists.ts b/packages/graph/content-types/lists.ts index e1dbb8a3b..ff924d19a 100644 --- a/packages/graph/content-types/lists.ts +++ b/packages/graph/content-types/lists.ts @@ -1,8 +1,7 @@ -import { addProp } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; +import { addProp, body} from "@pnp/queryable"; +import { graphPost } from "../graphqueryable.js"; import { _List } from "../lists/types.js"; import { ContentTypes, IContentType, IContentTypeAddResult, IContentTypes, _ContentTypes } from "./types.js"; -import { body } from "@pnp/queryable"; declare module "../lists/types" { interface _List { diff --git a/packages/graph/content-types/sites.ts b/packages/graph/content-types/sites.ts index 2e6e4aadc..2da9d9378 100644 --- a/packages/graph/content-types/sites.ts +++ b/packages/graph/content-types/sites.ts @@ -1,9 +1,8 @@ -import { addProp } from "@pnp/queryable"; +import { addProp, body } from "@pnp/queryable"; import { ContentType as IContentTypeEntity, } from "@microsoft/microsoft-graph-types"; -import { graphGet, graphPost } from "../operations.js"; -import { body } from "@pnp/queryable"; +import { graphGet, graphPost } from "../graphqueryable.js"; import { Site, _Site } from "../sites/types.js"; import { ContentTypes, IContentType, IContentTypeAddResult, IContentTypes, _ContentTypes } from "./types.js"; diff --git a/packages/graph/content-types/types.ts b/packages/graph/content-types/types.ts index 5dd4cce29..d0e524b37 100644 --- a/packages/graph/content-types/types.ts +++ b/packages/graph/content-types/types.ts @@ -2,9 +2,8 @@ import { ContentType as IContentTypeEntity, ItemReference as IItemReference, } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphGet, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphGet, graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; import { JSONHeaderParse } from "@pnp/queryable"; @@ -13,7 +12,7 @@ import { JSONHeaderParse } from "@pnp/queryable"; */ @deleteable() @updateable() -export class _ContentType extends _GraphQueryableInstance { +export class _ContentType extends _GraphInstance { /** * Check the publishing status of a contentType in a content type hub site. @@ -74,7 +73,7 @@ export const ContentType = graphInvokableFactory(_ContentType); */ @defaultPath("contenttypes") @getById(ContentType) -export class _ContentTypes extends _GraphQueryableCollection{ +export class _ContentTypes extends _GraphCollection{ /** * Add or sync a copy of a published content type from the content type hub to a target site or a list. * diff --git a/packages/graph/conversations/types.ts b/packages/graph/conversations/types.ts index 09138372b..e536fa8b8 100644 --- a/packages/graph/conversations/types.ts +++ b/packages/graph/conversations/types.ts @@ -7,19 +7,20 @@ import { User as IUserType, } from "@microsoft/microsoft-graph-types"; import { - _GraphQueryableCollection, - _GraphQueryableInstance, + _GraphCollection, + _GraphInstance, graphInvokableFactory, + graphPost, + graphDelete, } from "../graphqueryable.js"; import { defaultPath, updateable, IUpdateable, deleteable, IDeleteable, addable, IAddable, getById, IGetById } from "../decorators.js"; -import { graphPost, graphDelete } from "../operations.js"; /** * Conversation */ @updateable() @deleteable() -export class _Conversation extends _GraphQueryableInstance { +export class _Conversation extends _GraphInstance { /** * Get all the threads in a group conversation. @@ -37,7 +38,7 @@ export const Conversation = graphInvokableFactory(_Conversation); @defaultPath("conversations") @addable() @getById(Conversation) -export class _Conversations extends _GraphQueryableCollection { } +export class _Conversations extends _GraphCollection { } export interface IConversations extends _Conversations, IGetById, IAddable { } export const Conversations = graphInvokableFactory(_Conversations); @@ -45,7 +46,7 @@ export const Conversations = graphInvokableFactory(_Conversation * Thread */ @deleteable() -export class _Thread extends _GraphQueryableInstance { +export class _Thread extends _GraphInstance { /** * Get all the threads in a group conversation. @@ -72,7 +73,7 @@ export const Thread = graphInvokableFactory(_Thread); @defaultPath("threads") @addable() @getById(Thread) -export class _Threads extends _GraphQueryableCollection { } +export class _Threads extends _GraphCollection { } export interface IThreads extends _Threads, IGetById, IAddable { } export const Threads = graphInvokableFactory(_Threads); @@ -81,7 +82,7 @@ export const Threads = graphInvokableFactory(_Threads); * Post */ @deleteable() -export class _Post extends _GraphQueryableInstance { +export class _Post extends _GraphInstance { /** * Forward a post to a recipient */ @@ -107,14 +108,14 @@ export const Post = graphInvokableFactory(_Post); @defaultPath("posts") @addable() @getById(Post) -export class _Posts extends _GraphQueryableCollection { } +export class _Posts extends _GraphCollection { } export interface IPosts extends _Posts, IGetById, IAddable { } export const Posts = graphInvokableFactory(_Posts); /** * Senders */ -export class _Senders extends _GraphQueryableCollection { +export class _Senders extends _GraphCollection { /** * Add a new user or group to this senders collection diff --git a/packages/graph/decorators.ts b/packages/graph/decorators.ts index 79a3a59f4..f1b42a861 100644 --- a/packages/graph/decorators.ts +++ b/packages/graph/decorators.ts @@ -1,5 +1,4 @@ -import { IGraphQueryable } from "./graphqueryable.js"; -import { graphDelete, graphPatch, graphPost } from "./operations.js"; +import { IGraphQueryable, graphDelete, graphPatch, graphPost } from "./graphqueryable.js"; import { body, headers } from "@pnp/queryable"; /** diff --git a/packages/graph/directory-objects/types.ts b/packages/graph/directory-objects/types.ts index c1e8b6c13..bd8270102 100644 --- a/packages/graph/directory-objects/types.ts +++ b/packages/graph/directory-objects/types.ts @@ -1,15 +1,14 @@ -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { DirectoryObject as IDirectoryObjectType } from "@microsoft/microsoft-graph-types"; import { defaultPath, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; import { body } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; import { Count } from "../behaviors/paged.js"; /** * Represents a Directory Object entity */ @deleteable() -export class _DirectoryObject extends _GraphQueryableInstance { +export class _DirectoryObject extends _GraphInstance { /** * Returns all the groups and directory roles that the specified Directory Object is a member of. The check is transitive @@ -48,7 +47,7 @@ export const DirectoryObject = graphInvokableFactory(_Director */ @defaultPath("directoryObjects") @getById(DirectoryObject) -export class _DirectoryObjects extends _GraphQueryableCollection { +export class _DirectoryObjects extends _GraphCollection { /** * Returns the directory objects specified in a list of ids. NOTE: The directory objects returned are the full objects containing all their properties. * The $select query option is not available for this operation. diff --git a/packages/graph/drive/funcs.ts b/packages/graph/files/funcs.ts similarity index 84% rename from packages/graph/drive/funcs.ts rename to packages/graph/files/funcs.ts index a0e20f5c6..34c46f260 100644 --- a/packages/graph/drive/funcs.ts +++ b/packages/graph/files/funcs.ts @@ -1,6 +1,6 @@ import { combine } from "@pnp/core"; import { body, InjectHeaders } from "@pnp/queryable"; -import { graphPost, graphPut } from "../operations.js"; +import { graphPost, graphPut } from "../graphqueryable.js"; import { DriveItem, IDriveItemAddResult, IFileOptions } from "./types.js"; export interface ICheckInOptions { @@ -16,6 +16,10 @@ export function checkOut(): Promise { return graphPost(DriveItem(this, "checkout")); } +export function encodeSharingUrl(url: string): string { + return "u!" + Buffer.from(url, "utf8").toString("base64").replace(/=$/i, "").replace("/", "_").replace("+", "-"); +} + export async function driveItemUpload(fileOptions: IFileOptions): Promise { let path = "/content"; if (fileOptions.filePathName) { diff --git a/packages/graph/drive/groups.ts b/packages/graph/files/groups.ts similarity index 100% rename from packages/graph/drive/groups.ts rename to packages/graph/files/groups.ts diff --git a/packages/graph/drive/index.ts b/packages/graph/files/index.ts similarity index 95% rename from packages/graph/drive/index.ts rename to packages/graph/files/index.ts index 21157d418..8e7bf5ef4 100644 --- a/packages/graph/drive/index.ts +++ b/packages/graph/files/index.ts @@ -10,6 +10,7 @@ export { export { ICheckInOptions, + encodeSharingUrl, } from "./funcs.js"; export { @@ -30,6 +31,7 @@ export { IDeltaItems, IPreviewOptions, IFileOptions, + IAnalyticsOptions, } from "./types.js"; declare module "../fi" { diff --git a/packages/graph/drive/sites.ts b/packages/graph/files/sites.ts similarity index 100% rename from packages/graph/drive/sites.ts rename to packages/graph/files/sites.ts diff --git a/packages/graph/drive/types.ts b/packages/graph/files/types.ts similarity index 86% rename from packages/graph/drive/types.ts rename to packages/graph/files/types.ts index 11abdf1d1..bea36b02f 100644 --- a/packages/graph/drive/types.ts +++ b/packages/graph/files/types.ts @@ -1,18 +1,20 @@ import { - GraphQueryableInstance, - GraphQueryableCollection, - _GraphQueryableInstance, - IGraphQueryableInstance, - IGraphQueryableCollection, - _GraphQueryableCollection, + GraphInstance, + GraphCollection, + _GraphInstance, + IGraphInstance, + IGraphCollection, + _GraphCollection, graphInvokableFactory, GraphQueryable, + graphPatch, + graphPost, + graphPut, } from "../graphqueryable.js"; -import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo } from "@microsoft/microsoft-graph-types"; +import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo, ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; import { combine } from "@pnp/core"; import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable } from "../decorators.js"; import { body, BlobParse, CacheNever, errorCheck, InjectHeaders } from "@pnp/queryable"; -import { graphPatch, graphPost, graphPut } from "../operations.js"; import { driveItemUpload } from "./funcs.js"; /** @@ -20,7 +22,7 @@ import { driveItemUpload } from "./funcs.js"; * */ @defaultPath("drive") -export class _Drive extends _GraphQueryableInstance { +export class _Drive extends _GraphInstance { /** * Method for retrieving the root folder of a drive. @@ -34,8 +36,8 @@ export class _Drive extends _GraphQueryableInstance { * Method for retrieving the related list resource, for use with SharePoint drives. * @returns IGraphQueryableInstance */ - public get list(): IGraphQueryableInstance { - return GraphQueryableInstance(this, "list"); + public get list(): IGraphInstance { + return GraphInstance(this, "list"); } /** @@ -104,7 +106,7 @@ export const Drive = graphInvokableFactory(_Drive); */ @defaultPath("drives") @getById(Drive) -export class _Drives extends _GraphQueryableCollection { } +export class _Drives extends _GraphCollection { } export interface IDrives extends _Drives, IGetById { } export const Drives = graphInvokableFactory(_Drives); @@ -113,7 +115,7 @@ export const Drives = graphInvokableFactory(_Drives); * */ @defaultPath("root") -export class _Root extends _GraphQueryableInstance { +export class _Root extends _GraphInstance { /** * Method for retrieving children of a folder drive item. @@ -128,16 +130,16 @@ export class _Root extends _GraphQueryableInstance { * @param query string, search parameter * @returns IGraphQueryableCollection */ - public search(query: string): IGraphQueryableCollection { - return GraphQueryableCollection(this, `search(q='${query}')`); + public search(query: string): IGraphCollection { + return GraphCollection(this, `search(q='${query}')`); } /** * Method for retrieving thumbnails of the drive items. * @returns IGraphQueryableCollection */ - public get thumbnails(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "thumbnails"); + public get thumbnails(): IGraphCollection { + return GraphCollection(this, "thumbnails"); } /** @@ -146,10 +148,10 @@ export class _Root extends _GraphQueryableInstance { * change token * @returns IDeltaItems */ - public delta(token?: string): IGraphQueryableCollection { + public delta(token?: string): IGraphCollection { const path = `delta${(token) ? `(token=${token})` : ""}`; - const query: IGraphQueryableCollection = GraphQueryableCollection(this, path); + const query: IGraphCollection = GraphCollection(this, path); query.on.parse.replace(errorCheck); query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { @@ -159,8 +161,8 @@ export class _Root extends _GraphQueryableInstance { result = { // TODO:: update docs to show how to load next with async iterator - next: () => (nextLink ? GraphQueryableCollection([this, nextLink]) : null), - delta: () => (deltaLink ? GraphQueryableCollection([query, deltaLink])() : null), + next: () => (nextLink ? GraphCollection([this, nextLink]) : null), + delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), values: json.value, }; @@ -193,7 +195,7 @@ export const Root = graphInvokableFactory(_Root); */ @deleteable() @updateable() -export class _DriveItem extends _GraphQueryableInstance { +export class _DriveItem extends _GraphInstance { /** * Method for retrieving children of a folder drive item. @@ -207,16 +209,16 @@ export class _DriveItem extends _GraphQueryableInstance { * Method for retrieving thumbnails of the drive items. * @returns IGraphQueryableCollection */ - public get thumbnails(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "thumbnails"); + public get thumbnails(): IGraphCollection { + return GraphCollection(this, "thumbnails"); } /** * Method for retrieving the versions of a drive item. * @returns IDriveItemVersionInfo */ - public get versions(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "versions"); + public get versions(): IGraphCollection { + return GraphCollection(this, "versions"); } /** @@ -344,6 +346,16 @@ export class _DriveItem extends _GraphQueryableInstance { public async preview(previewOptions?: IPreviewOptions): Promise { return graphPost(DriveItem(this, "preview"), body(previewOptions)); } + + /** + * Method for getting item analytics. Defaults to lastSevenDays. + * @param analyticsOptions - IAnalyticsOptions (Optional) + * @returns IGraphQueryableCollection + */ + public analytics(analyticsOptions?: IAnalyticsOptions): IGraphCollection { + const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; + return >GraphCollection(this, query); + } } export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } export const DriveItem = graphInvokableFactory(_DriveItem); @@ -354,7 +366,7 @@ export const DriveItem = graphInvokableFactory(_DriveItem); * */ @getById(DriveItem) -export class _DriveItems extends _GraphQueryableCollection { +export class _DriveItems extends _GraphCollection { /** * Adds a file to this collection of drive items. * For more upload options please see the .upload method on DriveItem and Root. @@ -462,7 +474,11 @@ export interface IPreviewOptions { } export interface IDeltaItems { - next: IGraphQueryableCollection; - delta: IGraphQueryableCollection; + next: IGraphCollection; + delta: IGraphCollection; values: any[]; } + +export interface IAnalyticsOptions { + timeRange: "allTime" | "lastSevenDays"; +} diff --git a/packages/graph/drive/users.ts b/packages/graph/files/users.ts similarity index 97% rename from packages/graph/drive/users.ts rename to packages/graph/files/users.ts index 0fbdebdeb..bbb4fd651 100644 --- a/packages/graph/drive/users.ts +++ b/packages/graph/files/users.ts @@ -1,5 +1,5 @@ import { addProp, body } from "@pnp/queryable"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../graphqueryable.js"; import { _User } from "../users/types.js"; import { IDrive, Drive, IDrives, Drives, _Drive, DriveItem, IDriveItem, _DriveItem, IItemOptions } from "./types.js"; diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index 77d029776..f2e221d42 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -1,11 +1,11 @@ -import { isArray } from "@pnp/core"; -import { IInvokable, Queryable, queryableFactory } from "@pnp/queryable"; +import { isArray, objectDefinedNotNull } from "@pnp/core"; +import { IInvokable, Queryable, queryableFactory, op, get, post, patch, del, put } from "@pnp/queryable"; import { ConsistencyLevel } from "./behaviors/consistency-level.js"; -import { AsAsyncIterable } from "./behaviors/paged.js"; +import { IPagedResult, Paged } from "./behaviors/paged.js"; export type GraphInit = string | IGraphQueryable | [IGraphQueryable, string]; -export interface IGraphQueryableConstructor { +export interface IGraphConstructor { new(base: GraphInit, path?: string): T; } @@ -78,7 +78,7 @@ export class _GraphQueryable extends Queryable { * @param factory The contructor for the class to create */ protected getParent( - factory: IGraphQueryableConstructor, + factory: IGraphConstructor, base: GraphInit = this.parentUrl, path?: string): T { @@ -98,7 +98,7 @@ export const GraphQueryable = graphInvokableFactory(_GraphQuery * Represents a REST collection which can be filtered, paged, and selected * */ -export class _GraphQueryableCollection extends _GraphQueryable { +export class _GraphCollection extends _GraphQueryable { /** * @@ -171,23 +171,72 @@ export class _GraphQueryableCollection extends _GraphQueryable< return -1; } - /** - * Allows reading through a collection as pages of information whose size is determined by top or the api method's default - * - * @returns an object containing results, the ability to determine if there are more results, and request the next page of results - */ - public paged(): AsyncIterable { - return AsAsyncIterable(this); + public [Symbol.asyncIterator]() { + + const q = GraphCollection(this).using(Paged(), ConsistencyLevel()); + + const queryParams = ["$search", "$top", "$select", "$expand", "$filter", "$orderby"]; + + for (let i = 0; i < queryParams.length; i++) { + const param = this.query.get(queryParams[i]); + if (objectDefinedNotNull(param)) { + q.query.set(queryParams[i], param); + } + } + + return >{ + + _next: q, + + async next() { + + if (this._next === null) { + return { done: true, value: undefined }; + } + + const result: IPagedResult = await this._next(); + + if (result.hasNext) { + this._next = GraphCollection([this._next, result.nextLink]); + return { done: false, value: result.value }; + } else { + this._next = null; + return { done: false, value: result.value }; + } + }, + }; } } -export interface IGraphQueryableCollection extends _GraphQueryableCollection { } -export const GraphQueryableCollection = graphInvokableFactory(_GraphQueryableCollection); + +export interface IGraphCollection extends _GraphCollection { } +export const GraphCollection = graphInvokableFactory(_GraphCollection); /** * Represents an instance that can be selected * */ -export class _GraphQueryableInstance extends _GraphQueryable { } +export class _GraphInstance extends _GraphQueryable { } + +export interface IGraphInstance extends IInvokable, IGraphQueryable { } +export const GraphInstance = graphInvokableFactory(_GraphInstance); + +export const graphGet = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, get, init); +}; + +export const graphPost = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, post, init); +}; + +export const graphDelete = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, del, init); +}; + +export const graphPatch = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, patch, init); +}; + +export const graphPut = (o: IGraphQueryable, init?: RequestInit): Promise => { + return op(o, put, init); +}; -export interface IGraphQueryableInstance extends IInvokable, IGraphQueryable { } -export const GraphQueryableInstance = graphInvokableFactory(_GraphQueryableInstance); diff --git a/packages/graph/groups/types.ts b/packages/graph/groups/types.ts index 43fae39d1..f8d7810af 100644 --- a/packages/graph/groups/types.ts +++ b/packages/graph/groups/types.ts @@ -1,8 +1,7 @@ import { Event as IEventType, Group as IGroupType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { graphInvokableFactory } from "../graphqueryable.js"; +import { graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { _DirectoryObject, _DirectoryObjects } from "../directory-objects/types.js"; export enum GroupType { diff --git a/packages/graph/index.ts b/packages/graph/index.ts index 572141f33..61ea18fd6 100644 --- a/packages/graph/index.ts +++ b/packages/graph/index.ts @@ -1,16 +1,6 @@ export { graphfi as graphfi, GraphFI as GraphFI } from "./fi.js"; -export { - IGraphQueryableCollection, - IGraphQueryableInstance, - GraphQueryable, - IGraphQueryable, - GraphQueryableCollection, - GraphQueryableInstance, - IGraphQueryableConstructor, -} from "./graphqueryable.js"; - -export * from "./operations.js"; +export * from "./graphqueryable.js"; export * from "./behaviors/consistency-level.js"; export * from "./behaviors/defaults.js"; diff --git a/packages/graph/insights/types.ts b/packages/graph/insights/types.ts index 9c2c050ef..1cd2b5e62 100644 --- a/packages/graph/insights/types.ts +++ b/packages/graph/insights/types.ts @@ -6,8 +6,8 @@ import { Entity as IEntityType, } from "@microsoft/microsoft-graph-types"; import { - _GraphQueryableInstance, - _GraphQueryableCollection, + _GraphInstance, + _GraphCollection, graphInvokableFactory, } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; @@ -16,7 +16,7 @@ import { defaultPath, getById, IGetById } from "../decorators.js"; * Represents a insights entity */ @defaultPath("insights") -export class _Insights extends _GraphQueryableInstance { +export class _Insights extends _GraphInstance { public get trending(): ITrendingInsights { return TrendingInsights(this); @@ -36,7 +36,7 @@ export const Insights = graphInvokableFactory(_Insights); /** * Describes a Trending Insight instance */ -export class _TrendingInsight extends _GraphQueryableInstance { +export class _TrendingInsight extends _GraphInstance { public get resource(): IResource { return Resource(this); } @@ -50,14 +50,14 @@ export const TrendingInsight = graphInvokableFactory(_Trending */ @defaultPath("trending") @getById(TrendingInsight) -export class _TrendingInsights extends _GraphQueryableCollection {} +export class _TrendingInsights extends _GraphCollection {} export interface ITrendingInsights extends _TrendingInsights, IGetById {} export const TrendingInsights = graphInvokableFactory(_TrendingInsights); /** * Describes a Used Insight instance */ -export class _UsedInsight extends _GraphQueryableInstance { +export class _UsedInsight extends _GraphInstance { public get resource(): IResource { return Resource(this); } @@ -71,14 +71,14 @@ export const UsedInsight = graphInvokableFactory(_UsedInsight); */ @defaultPath("used") @getById(UsedInsight) -export class _UsedInsights extends _GraphQueryableCollection {} +export class _UsedInsights extends _GraphCollection {} export interface IUsedInsights extends _UsedInsights, IGetById {} export const UsedInsights = graphInvokableFactory(_UsedInsights); /** * Describes a Shared Insight instance */ -export class _SharedInsight extends _GraphQueryableInstance { +export class _SharedInsight extends _GraphInstance { public get resource(): IResource { return Resource(this); } @@ -92,7 +92,7 @@ export const SharedInsight = graphInvokableFactory(_SharedInsigh */ @defaultPath("shared") @getById(SharedInsight) -export class _SharedInsights extends _GraphQueryableCollection {} +export class _SharedInsights extends _GraphCollection {} export interface ISharedInsights extends _SharedInsights, IGetById {} export const SharedInsights = graphInvokableFactory(_SharedInsights); @@ -100,6 +100,6 @@ export const SharedInsights = graphInvokableFactory(_SharedInsi * Describes a Resource Entity instance */ @defaultPath("resource") -export class _Resource extends _GraphQueryableInstance {} +export class _Resource extends _GraphInstance {} export interface IResource extends _Resource { } export const Resource = graphInvokableFactory(_Resource); diff --git a/packages/graph/invitations/types.ts b/packages/graph/invitations/types.ts index 036e94d7b..7907733f5 100644 --- a/packages/graph/invitations/types.ts +++ b/packages/graph/invitations/types.ts @@ -1,14 +1,13 @@ import { body } from "@pnp/queryable"; import { Invitation as IInvitationType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; -import { graphPost } from "../operations.js"; /** * Invitations */ @defaultPath("invitations") -export class _Invitations extends _GraphQueryableCollection { +export class _Invitations extends _GraphCollection { /** * Create a new Invitation via invitation manager. diff --git a/packages/graph/lists/drive.ts b/packages/graph/lists/drive.ts index 76277fdbb..84b2eb6f3 100644 --- a/packages/graph/lists/drive.ts +++ b/packages/graph/lists/drive.ts @@ -1,7 +1,7 @@ -import { _Drive } from "../drive/types.js"; +import { _Drive } from "../files/types.js"; import { List, IList } from "./types.js"; -declare module "../drive/types" { +declare module "../files/types" { interface _Drive { getList: () => Promise; } diff --git a/packages/graph/lists/types.ts b/packages/graph/lists/types.ts index 1e3ea85a2..48b5cb1fd 100644 --- a/packages/graph/lists/types.ts +++ b/packages/graph/lists/types.ts @@ -1,7 +1,6 @@ import { List as IListEntity } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; /** @@ -9,7 +8,7 @@ import { body } from "@pnp/queryable"; */ @deleteable() @updateable() -export class _List extends _GraphQueryableInstance {} +export class _List extends _GraphInstance { } export interface IList extends _List, IDeleteable, IUpdateable { } export const List = graphInvokableFactory(_List); @@ -19,7 +18,7 @@ export const List = graphInvokableFactory(_List); */ @defaultPath("lists") @getById(List) -export class _Lists extends _GraphQueryableCollection{ +export class _Lists extends _GraphCollection{ /** * Create a new list as specified in the request body. * diff --git a/packages/graph/members/types.ts b/packages/graph/members/types.ts index bae91f96a..19a56d72d 100644 --- a/packages/graph/members/types.ts +++ b/packages/graph/members/types.ts @@ -1,13 +1,12 @@ import { body } from "@pnp/queryable"; import { User as IMemberType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphDelete, graphPost } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; -import { graphDelete, graphPost } from "../operations.js"; /** * Member */ -export class _Member extends _GraphQueryableInstance { +export class _Member extends _GraphInstance { /** * Removes this Member */ @@ -23,7 +22,7 @@ export const Member = graphInvokableFactory(_Member); */ @defaultPath("members") @getById(Member) -export class _Members extends _GraphQueryableCollection { +export class _Members extends _GraphCollection { /** * Use this API to add a member to an Office 365 group, a security group or a mail-enabled security group through diff --git a/packages/graph/messages/types.ts b/packages/graph/messages/types.ts index 4dfb00683..342e544ce 100644 --- a/packages/graph/messages/types.ts +++ b/packages/graph/messages/types.ts @@ -1,11 +1,11 @@ import { Message as IMessageType, MailFolder as IMailFolderType, MailboxSettings as IMailboxSettingsType } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable } from "../decorators.js"; /** * Message */ -export class _Message extends _GraphQueryableInstance { } +export class _Message extends _GraphInstance { } export interface IMessage extends _Message { } export const Message = graphInvokableFactory(_Message); @@ -15,14 +15,14 @@ export const Message = graphInvokableFactory(_Message); @defaultPath("messages") @getById(Message) @addable() -export class _Messages extends _GraphQueryableCollection { } +export class _Messages extends _GraphCollection { } export interface IMessages extends _Messages, IGetById, IAddable { } export const Messages = graphInvokableFactory(_Messages); /** * MailFolder */ -export class _MailFolder extends _GraphQueryableInstance { } +export class _MailFolder extends _GraphInstance { } export interface IMailFolder extends _MailFolder { } export const MailFolder = graphInvokableFactory(_MailFolder); @@ -32,7 +32,7 @@ export const MailFolder = graphInvokableFactory(_MailFolder); @defaultPath("mailFolders") @getById(MailFolder) @addable() -export class _MailFolders extends _GraphQueryableCollection { } +export class _MailFolders extends _GraphCollection { } export interface IMailFolders extends _MailFolders, IGetById, IAddable { } export const MailFolders = graphInvokableFactory(_MailFolders); @@ -41,6 +41,6 @@ export const MailFolders = graphInvokableFactory(_MailFolders); */ @defaultPath("mailboxSettings") @updateable() -export class _MailboxSettings extends _GraphQueryableInstance { } +export class _MailboxSettings extends _GraphInstance { } export interface IMailboxSettings extends _MailboxSettings, IUpdateable { } export const MailboxSettings = graphInvokableFactory(_MailboxSettings); diff --git a/packages/graph/messages/users.ts b/packages/graph/messages/users.ts index 0712770bd..281280c35 100644 --- a/packages/graph/messages/users.ts +++ b/packages/graph/messages/users.ts @@ -1,7 +1,7 @@ import { addProp, body } from "@pnp/queryable"; import { _User, User } from "../users/types.js"; import { IMessages, Messages, IMailboxSettings, MailboxSettings, IMailFolders, MailFolders, IMessage } from "./types.js"; -import { graphPost } from "../operations.js"; +import { graphPost } from "../graphqueryable.js"; declare module "../users/types" { interface _User { diff --git a/packages/graph/onenote/types.ts b/packages/graph/onenote/types.ts index 05ba06b03..491041a7c 100644 --- a/packages/graph/onenote/types.ts +++ b/packages/graph/onenote/types.ts @@ -1,20 +1,20 @@ import { body } from "@pnp/queryable"; import { Notebook as INotebookType, Onenote as IOnenoteType, OnenoteSection as ISectionType, OnenotePage as IOnenotePageType } from "@microsoft/microsoft-graph-types"; import { - GraphQueryableCollection, - _GraphQueryableInstance, - _GraphQueryableCollection, - IGraphQueryableCollection, + GraphCollection, + _GraphInstance, + _GraphCollection, + IGraphCollection, graphInvokableFactory, + graphPost, } from "../graphqueryable.js"; import { defaultPath, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; /** * Represents a onenote entity */ @defaultPath("onenote") -export class _OneNote extends _GraphQueryableInstance { +export class _OneNote extends _GraphInstance { public get notebooks(): INotebooks { return Notebooks(this); @@ -24,8 +24,8 @@ export class _OneNote extends _GraphQueryableInstance { return Sections(this); } - public get pages(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "pages"); + public get pages(): IGraphCollection { + return GraphCollection(this, "pages"); } } export interface IOneNote extends _OneNote {} @@ -36,7 +36,7 @@ export const OneNote = graphInvokableFactory(_OneNote); * Describes a notebook instance * */ -export class _Notebook extends _GraphQueryableInstance { +export class _Notebook extends _GraphInstance { public get sections(): ISections { return Sections(this); } @@ -50,7 +50,7 @@ export const Notebook = graphInvokableFactory(_Notebook); */ @defaultPath("notebooks") @getById(Notebook) -export class _Notebooks extends _GraphQueryableCollection { +export class _Notebooks extends _GraphCollection { /** * Create a new notebook as specified in the request body. * @@ -73,7 +73,7 @@ export const Notebooks = graphInvokableFactory(_Notebooks); /** * Describes a sections instance */ -export class _Section extends _GraphQueryableInstance { } +export class _Section extends _GraphInstance { } export interface ISection extends _Section { } export const Section = graphInvokableFactory(_Section); @@ -83,7 +83,7 @@ export const Section = graphInvokableFactory(_Section); */ @defaultPath("sections") @getById(Section) -export class _Sections extends _GraphQueryableCollection { +export class _Sections extends _GraphCollection { /** * Adds a new section * diff --git a/packages/graph/operations.ts b/packages/graph/operations.ts deleted file mode 100644 index d7c19f307..000000000 --- a/packages/graph/operations.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { op, get, post, patch, del, put } from "@pnp/queryable"; -import { IGraphQueryable } from "./graphqueryable.js"; - -export const graphGet = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, get, init); -}; - -export const graphPost = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, post, init); -}; - -export const graphDelete = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, del, init); -}; - -export const graphPatch = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, patch, init); -}; - -export const graphPut = (o: IGraphQueryable, init?: RequestInit): Promise => { - return op(o, put, init); -}; diff --git a/packages/graph/operations/index.ts b/packages/graph/operations/index.ts new file mode 100644 index 000000000..0af3486dd --- /dev/null +++ b/packages/graph/operations/index.ts @@ -0,0 +1,7 @@ +import "./site.js"; +import "./list.js"; + +export { + IOperations, + Operations, +} from "./types.js"; diff --git a/packages/graph/operations/list.ts b/packages/graph/operations/list.ts new file mode 100644 index 000000000..69eccee9e --- /dev/null +++ b/packages/graph/operations/list.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _List } from "../lists/types.js"; +import { IOperations, Operations } from "./types.js"; + +declare module "../lists/types" { + interface _List { + readonly operations: IOperations; + } + interface IList { + readonly operations: IOperations; + } +} + +addProp(_List, "operations", Operations); diff --git a/packages/graph/operations/site.ts b/packages/graph/operations/site.ts new file mode 100644 index 000000000..dca398b4d --- /dev/null +++ b/packages/graph/operations/site.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _Site } from "../sites/types.js"; +import { IOperations, Operations } from "./types.js"; + +declare module "../sites/types" { + interface _Site { + readonly operations: IOperations; + } + interface ISite { + readonly operations: IOperations; + } +} + +addProp(_Site, "operations", Operations); diff --git a/packages/graph/operations/types.ts b/packages/graph/operations/types.ts new file mode 100644 index 000000000..7c12c4787 --- /dev/null +++ b/packages/graph/operations/types.ts @@ -0,0 +1,11 @@ +import { defaultPath } from "../decorators.js"; +import { graphInvokableFactory, _GraphCollection } from "../graphqueryable.js"; +import { Operation as IOperationType } from "@microsoft/microsoft-graph-types"; + +/** + * Operations + */ +@defaultPath("operations") +export class _Operations extends _GraphCollection {} +export interface IOperations extends _Operations { } +export const Operations = graphInvokableFactory(_Operations); diff --git a/packages/graph/outlook/types.ts b/packages/graph/outlook/types.ts index 362502fd5..606524491 100644 --- a/packages/graph/outlook/types.ts +++ b/packages/graph/outlook/types.ts @@ -1,4 +1,4 @@ -import { _GraphQueryableCollection, _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { OutlookUser as IOutlookType, OutlookCategory as IOutlookCategoryType } from "@microsoft/microsoft-graph-types"; import { defaultPath, deleteable, getById, IDeleteable, IGetById, IUpdateable, updateable } from "../decorators.js"; import { graphPost } from "@pnp/graph"; @@ -7,7 +7,7 @@ import { body } from "@pnp/queryable"; /** * Outlook */ -export class _Outlook extends _GraphQueryableInstance { +export class _Outlook extends _GraphInstance { public get masterCategories(): IMasterCategories { return MasterCategories(this); @@ -22,7 +22,7 @@ export const Outlook = graphInvokableFactory(_Outlook); */ @deleteable() @updateable() -export class _OutlookCategory extends _GraphQueryableInstance { } +export class _OutlookCategory extends _GraphInstance { } export interface IOutlookCategory extends _OutlookCategory, IUpdateable, IDeleteable { } export const OutlookCategory = graphInvokableFactory(_OutlookCategory); @@ -31,7 +31,7 @@ export const OutlookCategory = graphInvokableFactory(_OutlookC */ @defaultPath("masterCategories") @getById(OutlookCategory) -export class _MasterCategories extends _GraphQueryableCollection { +export class _MasterCategories extends _GraphCollection { /** * Adds a new event to the collection diff --git a/packages/graph/permissions/index.ts b/packages/graph/permissions/index.ts new file mode 100644 index 000000000..44f0a05ee --- /dev/null +++ b/packages/graph/permissions/index.ts @@ -0,0 +1,8 @@ +import "./site.js"; + +export { + IPermission, + IPermissions, + Permission, + Permissions, +} from "./types.js"; diff --git a/packages/graph/permissions/site.ts b/packages/graph/permissions/site.ts new file mode 100644 index 000000000..a293c6e24 --- /dev/null +++ b/packages/graph/permissions/site.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _Site } from "../sites/types.js"; +import { IPermissions, Permissions } from "./types.js"; + +declare module "../sites/types" { + interface _Site { + readonly permissions: IPermissions; + } + interface ISite { + readonly permissions: IPermissions; + } +} + +addProp(_Site, "permissions", Permissions); diff --git a/packages/graph/permissions/types.ts b/packages/graph/permissions/types.ts new file mode 100644 index 000000000..ca5cddb95 --- /dev/null +++ b/packages/graph/permissions/types.ts @@ -0,0 +1,28 @@ +import { body } from "@pnp/queryable"; +import { IDeleteable, IGetById, IUpdateable, defaultPath, deleteable, getById, updateable } from "../decorators.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance, graphPost } from "../graphqueryable.js"; +import { Permission as IPermissionType } from "@microsoft/microsoft-graph-types"; + +/** + * Permission + */ +@deleteable() +@updateable() +export class _Permission extends _GraphInstance {} +export interface IPermission extends _Permission, IUpdateable>, IDeleteable { } +export const Permission = graphInvokableFactory(_Permission); + +/** + * Permissions + */ +@defaultPath("permissions") +@getById(Permission) +export class _Permissions extends _GraphCollection { + + public add(permissions: Pick): Promise { + + return graphPost(this, body(permissions)); + } +} +export interface IPermissions extends _Permissions, IGetById { } +export const Permissions = graphInvokableFactory(_Permissions); diff --git a/packages/graph/photos/types.ts b/packages/graph/photos/types.ts index f4586c719..0fddcc423 100644 --- a/packages/graph/photos/types.ts +++ b/packages/graph/photos/types.ts @@ -1,11 +1,10 @@ -import { _GraphQueryableInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, graphInvokableFactory, graphPatch } from "../graphqueryable.js"; import { BlobParse, BufferParse } from "@pnp/queryable"; import { Photo as IPhotoType } from "@microsoft/microsoft-graph-types"; import { defaultPath } from "../decorators.js"; -import { graphPatch } from "../operations.js"; @defaultPath("photo") -export class _Photo extends _GraphQueryableInstance { +export class _Photo extends _GraphInstance { /** * Gets the image bytes as a blob (browser) */ diff --git a/packages/graph/planner/types.ts b/packages/graph/planner/types.ts index c593c20e8..daf3f34c1 100644 --- a/packages/graph/planner/types.ts +++ b/packages/graph/planner/types.ts @@ -7,16 +7,15 @@ import { Planner as IPlannerType, } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { getById, IGetById, deleteableWithETag, IDeleteableWithETag, updateableWithETag, IUpdateableWithETag } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { defaultPath } from "../decorators.js"; /** * Planner */ @defaultPath("planner") -export class _Planner extends _GraphQueryableInstance { +export class _Planner extends _GraphInstance { // Should Only be able to get by id, or else error occur public get plans(): IPlans { @@ -41,7 +40,7 @@ export const Planner = graphInvokableFactory(_Planner); */ @defaultPath("details") @updateableWithETag() -export class _PlanDetails extends _GraphQueryableInstance { } +export class _PlanDetails extends _GraphInstance { } export interface IPlanDetails extends _PlanDetails, IUpdateableWithETag { } export const PlanDetails = graphInvokableFactory(_PlanDetails); @@ -50,7 +49,7 @@ export const PlanDetails = graphInvokableFactory(_PlanDetails); */ @updateableWithETag() @deleteableWithETag() -export class _Plan extends _GraphQueryableInstance { +export class _Plan extends _GraphInstance { public get tasks(): ITasks { return Tasks(this); @@ -69,7 +68,7 @@ export const Plan = graphInvokableFactory(_Plan); @defaultPath("plans") @getById(Plan) -export class _Plans extends _GraphQueryableCollection { +export class _Plans extends _GraphCollection { /** * Create a new Planner Plan. * @@ -94,7 +93,7 @@ export const Plans = graphInvokableFactory(_Plans); */ @defaultPath("details") @updateableWithETag() -export class _TaskDetails extends _GraphQueryableInstance { } +export class _TaskDetails extends _GraphInstance { } export interface ITaskDetails extends _TaskDetails, IUpdateableWithETag { } export const TaskDetails = graphInvokableFactory(_TaskDetails); @@ -103,7 +102,7 @@ export const TaskDetails = graphInvokableFactory(_TaskDetails); */ @updateableWithETag() @deleteableWithETag() -export class _Task extends _GraphQueryableInstance { +export class _Task extends _GraphInstance { public get details(): ITaskDetails { return TaskDetails(this); } @@ -116,7 +115,7 @@ export const Task = graphInvokableFactory(_Task); */ @defaultPath("tasks") @getById(Task) -export class _Tasks extends _GraphQueryableCollection { +export class _Tasks extends _GraphCollection { /** * Create a new Planner Task. * @@ -156,7 +155,7 @@ export const Tasks = graphInvokableFactory(_Tasks); */ @updateableWithETag() @deleteableWithETag() -export class _Bucket extends _GraphQueryableInstance { +export class _Bucket extends _GraphInstance { public get tasks(): ITasks { return Tasks(this); } @@ -170,7 +169,7 @@ export const Bucket = graphInvokableFactory(_Bucket); */ @defaultPath("buckets") @getById(Bucket) -export class _Buckets extends _GraphQueryableCollection { +export class _Buckets extends _GraphCollection { /** * Create a new Bucket. * diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index a53002f4a..641972213 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -9,8 +9,9 @@ import "../insights/index.js"; import "../invitations/index.js"; import "../members/index.js"; import "../messages/index.js"; -import "../drive/index.js"; +import "../files/index.js"; import "../onenote/index.js"; +import "../operations/index.js"; import "../photos/index.js"; import "../planner/index.js"; import "../search/index.js"; @@ -30,8 +31,9 @@ export * from "../insights/index.js"; export * from "../invitations/index.js"; export * from "../members/index.js"; export * from "../messages/index.js"; -export * from "../drive/index.js"; +export * from "../files/index.js"; export * from "../onenote/index.js"; +export * from "../operations/index.js"; export * from "../photos/index.js"; export * from "../planner/index.js"; export * from "../search/index.js"; diff --git a/packages/graph/search/types.ts b/packages/graph/search/types.ts index ece1ccf2f..7e629311e 100644 --- a/packages/graph/search/types.ts +++ b/packages/graph/search/types.ts @@ -1,14 +1,13 @@ import { SearchRequest as ISearchRequestType, SearchResponse as ISearchResponseType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { GraphInit, graphInvokableFactory, _GraphQueryableInstance } from "../graphqueryable.js"; -import { graphPost } from "../operations.js"; +import { GraphInit, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; /** * Search */ @defaultPath("search") -export class _Search extends _GraphQueryableInstance { +export class _Search extends _GraphInstance { public executeQuery(request: { requests: ISearchRequestType[] }): Promise { return graphPost(Search(this, "query"), body(request)); diff --git a/packages/graph/shares/types.ts b/packages/graph/shares/types.ts index aed1aa7ba..10083be78 100644 --- a/packages/graph/shares/types.ts +++ b/packages/graph/shares/types.ts @@ -1,13 +1,13 @@ import { defaultPath } from "../decorators.js"; -import { graphInvokableFactory, _GraphQueryableCollection, _GraphQueryableInstance } from "../graphqueryable.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; import { SharedDriveItem as ISharedDriveItem } from "@microsoft/microsoft-graph-types"; -import { DriveItem, IDriveItem } from "../drive/types.js"; +import { DriveItem, IDriveItem } from "../files/types.js"; /** * Shares */ @defaultPath("shares") -export class _Shares extends _GraphQueryableCollection { +export class _Shares extends _GraphCollection { /** * Gets a share by share id or encoded url @@ -33,7 +33,7 @@ export const Shares = graphInvokableFactory(_Shares); /** * Share */ -export class _Share extends _GraphQueryableInstance { +export class _Share extends _GraphInstance { /** * Access the driveItem associated with this shared file diff --git a/packages/graph/sites/index.ts b/packages/graph/sites/index.ts index a6298e0f2..7ef19395a 100644 --- a/packages/graph/sites/index.ts +++ b/packages/graph/sites/index.ts @@ -2,6 +2,7 @@ import { GraphFI } from "../fi.js"; import { Sites, ISites } from "./types.js"; import "./group.js"; +import "./user.js"; export { ISites, diff --git a/packages/graph/sites/types.ts b/packages/graph/sites/types.ts index 0bdee042c..9fc136f15 100644 --- a/packages/graph/sites/types.ts +++ b/packages/graph/sites/types.ts @@ -1,12 +1,14 @@ +import { combine } from "@pnp/core"; import { defaultPath } from "../decorators.js"; -import { graphInvokableFactory, _GraphQueryableCollection, _GraphQueryableInstance } from "../graphqueryable.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance, graphPost } from "../graphqueryable.js"; import { Site as ISiteType } from "@microsoft/microsoft-graph-types"; +import { body } from "@pnp/queryable"; /** * Sites */ @defaultPath("sites") -export class _Sites extends _GraphQueryableCollection { +export class _Sites extends _GraphCollection { /** * Gets the team site for the group */ @@ -24,8 +26,18 @@ export class _Sites extends _GraphQueryableCollection { * @param siteUrl: string, the server relative url of the site e.g. "/sites/teamsite1" * @returns ISite */ - public getByUrl(hostname: string, siteUrl: string): ISite { - return Site(this, `${hostname}:${siteUrl}:`); + public async getByUrl(hostname: string, siteUrl: string): Promise { + + return Site(this, `${hostname}:${combine("/", siteUrl)}:`).rebase(); + } + + /** + * List sites across geographies in an organization. This API can also be used to enumerate all sites in a non-multi-geo tenant. + * + * @returns A ISites collection which can be used with async iteration to page through the collection + */ + public getAllSites(): ISites { + return Sites(this, "getAllSites"); } } export interface ISites extends _Sites { } @@ -34,12 +46,51 @@ export const Sites = graphInvokableFactory(_Sites); /** * Site */ -export class _Site extends _GraphQueryableInstance { +export class _Site extends _GraphInstance { public get sites(): ISites { return Sites(this); } + + /** + * Rebases this ISite instances to ensure it is of the pattern /sites/{site id} regardless of how it was first retrieved + */ + public async rebase(): Promise { + const siteInfo = await Site(this).select("id")(); + return Site([this, `sites/${siteInfo.id}`]); + } } export interface ISite extends _Site { } export const Site = graphInvokableFactory(_Site); +/** + * Followed Sites + * + * Note: At this time listing a user's followed sites is not supported with app-only permissions + */ +@defaultPath("followedsites") +export class _FollowedSites extends _GraphCollection { + + /** + * Adds site(s) to the user's collection of followed sites + * + * @param siteIds The collection of site ids to add + * @returns Site info for the newly followed sites + */ + public add(...siteIds: string[]): Promise { + + return graphPost(FollowedSites(this, "add"), body({ value: siteIds.map(id => ({ id })) })); + } + + /** + * REmoves site(s) to the user's collection of followed sites + * + * @param siteIds The collection of site ids to remove + */ + public remove(...siteIds: string[]): Promise { + + return graphPost(FollowedSites(this, "remove"), body({ value: siteIds.map(id => ({ id })) })); + } +} +export interface IFollowedSites extends _FollowedSites { } +export const FollowedSites = graphInvokableFactory(_FollowedSites); diff --git a/packages/graph/sites/user.ts b/packages/graph/sites/user.ts new file mode 100644 index 000000000..12b4e6426 --- /dev/null +++ b/packages/graph/sites/user.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _User } from "../users/types.js"; +import { IFollowedSites, FollowedSites } from "./types.js"; + +declare module "../users/types" { + interface _User { + followedSites: IFollowedSites; + } + interface IUser { + followedSites: IFollowedSites; + } +} + +addProp(_User, "followedSites", FollowedSites); diff --git a/packages/graph/subscriptions/types.ts b/packages/graph/subscriptions/types.ts index 417c6182f..a69abb873 100644 --- a/packages/graph/subscriptions/types.ts +++ b/packages/graph/subscriptions/types.ts @@ -1,15 +1,14 @@ -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { body } from "@pnp/queryable"; import { Subscription as ISubscriptionType } from "@microsoft/microsoft-graph-types"; import { defaultPath, deleteable, IDeleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; /** * Subscription */ @deleteable() @updateable() -export class _Subscription extends _GraphQueryableInstance { } +export class _Subscription extends _GraphInstance { } export interface ISubscription extends _Subscription, IDeleteable, IUpdateable { } export const Subscription = graphInvokableFactory(_Subscription); @@ -18,7 +17,7 @@ export const Subscription = graphInvokableFactory(_Subscription); */ @defaultPath("subscriptions") @getById(Subscription) -export class _Subscriptions extends _GraphQueryableCollection { +export class _Subscriptions extends _GraphCollection { /** * Create a new Subscription. * diff --git a/packages/graph/teams/index.ts b/packages/graph/teams/index.ts index 8bfb28420..dbc29897a 100644 --- a/packages/graph/teams/index.ts +++ b/packages/graph/teams/index.ts @@ -3,7 +3,7 @@ import { GraphFI } from "../fi.js"; import { _Group, Group } from "../groups/types.js"; import { ITeamCreateResult, ITeam, Team, ITeams, Teams } from "./types.js"; import { Team as ITeamType } from "@microsoft/microsoft-graph-types"; -import { graphPut } from "../operations.js"; +import { graphPut } from "../graphqueryable.js"; import "./users.js"; diff --git a/packages/graph/teams/types.ts b/packages/graph/teams/types.ts index 86196c8b7..7ac7c401c 100644 --- a/packages/graph/teams/types.ts +++ b/packages/graph/teams/types.ts @@ -1,7 +1,6 @@ -import { _GraphQueryableInstance, _GraphQueryableCollection, graphInvokableFactory, GraphQueryableInstance } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, GraphInstance, graphPost } from "../graphqueryable.js"; import { body, HeaderParse } from "@pnp/queryable"; import { updateable, IUpdateable, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { defaultPath } from "../decorators.js"; import { Team as ITeamType, @@ -16,7 +15,7 @@ import { */ @defaultPath("team") @updateable() -export class _Team extends _GraphQueryableInstance { +export class _Team extends _GraphInstance { public get primaryChannel(): IChannel { return Channel(this, "primaryChannel"); @@ -95,7 +94,7 @@ export class _Team extends _GraphQueryableInstance { } public getOperationById(id: string): Promise { - return GraphQueryableInstance(this, `operations/${id}`)(); + return GraphInstance(this, `operations/${id}`)(); } } export interface ITeam extends _Team, IUpdateable { } @@ -106,7 +105,7 @@ export const Team = graphInvokableFactory(_Team); */ @defaultPath("teams") @getById(Team) -export class _Teams extends _GraphQueryableCollection { +export class _Teams extends _GraphCollection { public async create(team: ITeamType): Promise { const creator = Teams(this, null).using(HeaderParse()); @@ -130,7 +129,7 @@ export const Teams = graphInvokableFactory(_Teams); /** * Channel */ -export class _Channel extends _GraphQueryableInstance { +export class _Channel extends _GraphInstance { public get tabs(): ITabs { return Tabs(this); } @@ -147,7 +146,7 @@ export const Channel = graphInvokableFactory(_Channel); */ @defaultPath("channels") @getById(Channel) -export class _Channels extends _GraphQueryableCollection { +export class _Channels extends _GraphCollection { /** * Creates a new Channel in the Team @@ -176,7 +175,7 @@ export const Channels = graphInvokableFactory(_Channels); /** * Channel */ -export class _Message extends _GraphQueryableInstance { } +export class _Message extends _GraphInstance { } export interface IMessage extends _Message { } export const Message = graphInvokableFactory(_Message); @@ -185,7 +184,7 @@ export const Message = graphInvokableFactory(_Message); */ @defaultPath("messages") @getById(Message) -export class _Messages extends _GraphQueryableCollection { +export class _Messages extends _GraphCollection { /** * Creates a new Channel in the Team @@ -217,7 +216,7 @@ export const Messages = graphInvokableFactory(_Messages); @defaultPath("tab") @updateable() @deleteable() -export class _Tab extends _GraphQueryableInstance { } +export class _Tab extends _GraphInstance { } export interface ITab extends _Tab, IUpdateable, IDeleteable { } export const Tab = graphInvokableFactory(_Tab); @@ -226,7 +225,7 @@ export const Tab = graphInvokableFactory(_Tab); */ @defaultPath("tabs") @getById(Tab) -export class _Tabs extends _GraphQueryableCollection { +export class _Tabs extends _GraphCollection { /** * Adds a tab to the channel @@ -292,7 +291,7 @@ export interface ITeamCreateResult { * InstalledApp */ @deleteable() -export class _InstalledApp extends _GraphQueryableInstance { +export class _InstalledApp extends _GraphInstance { public upgrade(): Promise { return graphPost(InstalledApp(this, "upgrade")); } @@ -305,7 +304,7 @@ export const InstalledApp = graphInvokableFactory(_InstalledApp); */ @defaultPath("installedApps") @getById(InstalledApp) -export class _InstalledApps extends _GraphQueryableCollection { +export class _InstalledApps extends _GraphCollection { /** * Adds an installed app to the collection diff --git a/packages/sp/appcatalog/types.ts b/packages/sp/appcatalog/types.ts index 4cb8386d1..d40a27443 100644 --- a/packages/sp/appcatalog/types.ts +++ b/packages/sp/appcatalog/types.ts @@ -4,8 +4,8 @@ import { _SPInstance, ISPQueryable, SPCollection, + spPost, } from "../spqueryable.js"; -import { spPost } from "../operations.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { File, IFile } from "../files/types.js"; diff --git a/packages/sp/attachments/types.ts b/packages/sp/attachments/types.ts index 048f6d051..e53157108 100644 --- a/packages/sp/attachments/types.ts +++ b/packages/sp/attachments/types.ts @@ -1,13 +1,13 @@ import { headers } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; import { ReadableFile } from "../files/readable-file.js"; -import { spPost } from "../operations.js"; import { encodePath } from "../utils/encode-path-str.js"; import { IDeleteableWithETag, _SPCollection, spInvokableFactory, deleteableWithETag, + spPost, } from "../spqueryable.js"; @defaultPath("AttachmentFiles") diff --git a/packages/sp/batching.ts b/packages/sp/batching.ts index bad455769..5b3d4f025 100644 --- a/packages/sp/batching.ts +++ b/packages/sp/batching.ts @@ -1,7 +1,6 @@ import { getGUID, isUrlAbsolute, combine, CopyFrom, TimelinePipe, isFunc, hOP } from "@pnp/core"; import { parseBinderWithErrorCheck, Queryable } from "@pnp/queryable"; -import { spPost } from "./operations.js"; -import { ISPQueryable, _SPQueryable } from "./spqueryable.js"; +import { ISPQueryable, _SPQueryable, spPost } from "./spqueryable.js"; import { spfi, SPFI } from "./fi.js"; import { Web, IWeb, _Web } from "./webs/types.js"; diff --git a/packages/sp/behaviors/request-digest.ts b/packages/sp/behaviors/request-digest.ts index 4bbf74d0e..f90a70fa2 100644 --- a/packages/sp/behaviors/request-digest.ts +++ b/packages/sp/behaviors/request-digest.ts @@ -1,8 +1,7 @@ import { combine, dateAdd, hOP, isFunc, objectDefinedNotNull, TimelinePipe } from "@pnp/core"; import { JSONParse, Queryable } from "@pnp/queryable"; import { extractWebUrl } from "../utils/extract-web-url.js"; -import { ISPQueryable, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { ISPQueryable, SPQueryable, spPost } from "../spqueryable.js"; import { BatchNever } from "../batching.js"; interface IDigestInfo { diff --git a/packages/sp/behaviors/spfx.ts b/packages/sp/behaviors/spfx.ts index d5e64aba6..b680bacb1 100644 --- a/packages/sp/behaviors/spfx.ts +++ b/packages/sp/behaviors/spfx.ts @@ -22,8 +22,23 @@ export interface ISPFXContext { }; } +class SPFxTokenNullOrUndefinedError extends Error { + + constructor(behaviorName: string) { + super(`SPFx Context supplied to ${behaviorName} Behavior is null or undefined.`); + } + + public static check(behaviorName: string, context?: ISPFXContext): void { + if (typeof context === "undefined" || context === null) { + throw new SPFxTokenNullOrUndefinedError(behaviorName); + } + } +} + export function SPFxToken(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFxToken", context); + return (instance: Queryable) => { instance.on.auth.replace(async function (url: URL, init: RequestInit) { @@ -43,6 +58,8 @@ export function SPFxToken(context: ISPFXContext): TimelinePipe { export function SPFx(context: ISPFXContext): TimelinePipe { + SPFxTokenNullOrUndefinedError.check("SPFx", context); + return (instance: Queryable) => { instance.using( diff --git a/packages/sp/clientside-pages/types.ts b/packages/sp/clientside-pages/types.ts index ae6bf4eaf..e90613520 100644 --- a/packages/sp/clientside-pages/types.ts +++ b/packages/sp/clientside-pages/types.ts @@ -2,13 +2,12 @@ import { body, headers } from "@pnp/queryable"; import { getGUID, hOP, stringIsNullOrEmpty, objectDefinedNotNull, combine, isUrlAbsolute, isArray } from "@pnp/core"; import { IFile, IFileInfo } from "../files/types.js"; import { Item, IItem } from "../items/types.js"; -import { _SPQueryable, SPQueryable, SPCollection, SPInit } from "../spqueryable.js"; +import { _SPQueryable, SPQueryable, SPCollection, SPInit, spPost } from "../spqueryable.js"; import { List } from "../lists/types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { Web, IWeb } from "../webs/types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { Site } from "../sites/types.js"; -import { spPost } from "../operations.js"; import { getNextOrder, reindex } from "./funcs.js"; import "../files/web.js"; import "../comments/item.js"; diff --git a/packages/sp/clientside-pages/web.ts b/packages/sp/clientside-pages/web.ts index fe5502fe8..b0b4bd325 100644 --- a/packages/sp/clientside-pages/web.ts +++ b/packages/sp/clientside-pages/web.ts @@ -9,8 +9,7 @@ import { IRepostPage, ClientsideWebpart, } from "./types.js"; -import { SPCollection, SPInstance } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { SPCollection, SPInstance, spPost } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { extractWebUrl } from "@pnp/sp"; diff --git a/packages/sp/column-defaults/list.ts b/packages/sp/column-defaults/list.ts index af4a283a7..44a3ec998 100644 --- a/packages/sp/column-defaults/list.ts +++ b/packages/sp/column-defaults/list.ts @@ -4,7 +4,7 @@ import { Folder } from "../folders/types.js"; import { IFieldDefault } from "./types.js"; import { IResourcePath } from "../utils/to-resource-path.js"; import { combine, isArray } from "@pnp/core"; -import { spPost } from "../operations.js"; +import { spPost } from "../spqueryable.js"; import { SPCollection } from "../presets/all.js"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/comments/clientside-page.ts b/packages/sp/comments/clientside-page.ts index c84504cdb..b2db9d5e7 100644 --- a/packages/sp/comments/clientside-page.ts +++ b/packages/sp/comments/clientside-page.ts @@ -1,8 +1,7 @@ import { _ClientsidePage } from "../clientside-pages/types.js"; import { ICommentInfo, IComment, ILikedByInformation } from "./types.js"; import { IItemUpdateResult, Item } from "../items/index.js"; -import { spPost } from "../operations.js"; -import { SPQueryable } from "../spqueryable.js"; +import { SPQueryable, spPost } from "../spqueryable.js"; declare module "../clientside-pages/types" { interface _ClientsidePage { diff --git a/packages/sp/comments/item.ts b/packages/sp/comments/item.ts index 19ef3e253..f81109471 100644 --- a/packages/sp/comments/item.ts +++ b/packages/sp/comments/item.ts @@ -1,10 +1,9 @@ import { addProp } from "@pnp/queryable"; import { _Item, Item } from "../items/types.js"; import { Comments, IComments, ILikeData, ILikedByInformation, RatingValues } from "./types.js"; -import { spPost } from "../operations.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine } from "@pnp/core"; -import { SPQueryable } from "../spqueryable.js"; +import { SPQueryable, spPost } from "../spqueryable.js"; declare module "../items/types" { interface _Item { diff --git a/packages/sp/comments/types.ts b/packages/sp/comments/types.ts index b793c6305..e9c859ea6 100644 --- a/packages/sp/comments/types.ts +++ b/packages/sp/comments/types.ts @@ -3,10 +3,11 @@ import { _SPCollection, spInvokableFactory, _SPInstance, + spDelete, + spPost, } from "../spqueryable.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { body } from "@pnp/queryable"; -import { spDelete, spPost } from "../operations.js"; @defaultPath("comments") export class _Comments extends _SPCollection { diff --git a/packages/sp/content-types/types.ts b/packages/sp/content-types/types.ts index 76ba1c689..6b029e6e1 100644 --- a/packages/sp/content-types/types.ts +++ b/packages/sp/content-types/types.ts @@ -7,9 +7,10 @@ import { ISPCollection, deleteable, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; @defaultPath("contenttypes") export class _ContentTypes extends _SPCollection { diff --git a/packages/sp/context-info/index.ts b/packages/sp/context-info/index.ts index 6b7194a50..ac06cfd01 100644 --- a/packages/sp/context-info/index.ts +++ b/packages/sp/context-info/index.ts @@ -1,6 +1,5 @@ import { hOP } from "@pnp/core"; -import { spPost } from "../operations.js"; -import { SPQueryable, _SPQueryable } from "../spqueryable.js"; +import { SPQueryable, _SPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; declare module "../spqueryable" { diff --git a/packages/sp/favorites/types.ts b/packages/sp/favorites/types.ts index 74ef2507a..b8e21106e 100644 --- a/packages/sp/favorites/types.ts +++ b/packages/sp/favorites/types.ts @@ -1,7 +1,6 @@ import { defaultPath } from "../decorators.js"; -import { _SPInstance, spInvokableFactory, _SPCollection, SPInit } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, _SPCollection, SPInit, spPost } from "../spqueryable.js"; import { hOP } from "@pnp/core"; -import { spPost } from "../operations.js"; import { body } from "@pnp/queryable"; import { SharepointIds, ResourceVisualization } from "@microsoft/microsoft-graph-types"; diff --git a/packages/sp/features/types.ts b/packages/sp/features/types.ts index e98fb8abb..661249f5c 100644 --- a/packages/sp/features/types.ts +++ b/packages/sp/features/types.ts @@ -3,9 +3,9 @@ import { _SPInstance, _SPCollection, spInvokableFactory, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; @defaultPath("features") export class _Features extends _SPCollection { diff --git a/packages/sp/fields/types.ts b/packages/sp/fields/types.ts index 3b801afb6..2479af899 100644 --- a/packages/sp/fields/types.ts +++ b/packages/sp/fields/types.ts @@ -5,9 +5,10 @@ import { deleteable, spInvokableFactory, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; import { metadata } from "../utils/metadata.js"; @defaultPath("fields") diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index e5c9d8026..13b978315 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -10,11 +10,12 @@ import { ISPQueryable, deleteable, IDeleteable, + spPost, + spGet, } from "../spqueryable.js"; import { Item, IItem } from "../items/index.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spGet } from "../operations.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { toResourcePath } from "../utils/to-resource-path.js"; import { ISiteUserProps } from "../site-users/types.js"; diff --git a/packages/sp/folders/types.ts b/packages/sp/folders/types.ts index 323375171..abb637cb1 100644 --- a/packages/sp/folders/types.ts +++ b/packages/sp/folders/types.ts @@ -9,11 +9,12 @@ import { ISPInstance, IDeleteableWithETag, ISPQueryable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { IItem, Item } from "../items/types.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { toResourcePath, IResourcePath } from "../utils/to-resource-path.js"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/groupsitemanager/types.ts b/packages/sp/groupsitemanager/types.ts index f3a2a35f9..e6f205aed 100644 --- a/packages/sp/groupsitemanager/types.ts +++ b/packages/sp/groupsitemanager/types.ts @@ -1,5 +1,6 @@ import { body, BufferParse } from "@pnp/queryable"; -import { _SPInstance, defaultPath, spPost, spInvokableFactory, ISPQueryable, spGet } from "@pnp/sp"; +import { _SPInstance, spPost, spInvokableFactory, ISPQueryable, spGet } from "../spqueryable.js"; +import { defaultPath } from "../decorators.js"; @defaultPath("_api/groupsitemanager") class _GroupSiteManager extends _SPInstance> { diff --git a/packages/sp/hubsites/site.ts b/packages/sp/hubsites/site.ts index 3cc4647cd..5be378797 100644 --- a/packages/sp/hubsites/site.ts +++ b/packages/sp/hubsites/site.ts @@ -1,5 +1,5 @@ import { _Site, Site } from "../sites/types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../spqueryable.js"; declare module "../sites/types" { interface _Site { diff --git a/packages/sp/hubsites/web.ts b/packages/sp/hubsites/web.ts index 4383e0568..7d409aebc 100644 --- a/packages/sp/hubsites/web.ts +++ b/packages/sp/hubsites/web.ts @@ -1,6 +1,6 @@ import { _Web, Web } from "../webs/types.js"; import { IHubSiteWebData } from "./types.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../spqueryable.js"; declare module "../webs/types" { interface _Web { diff --git a/packages/sp/index.ts b/packages/sp/index.ts index 484493868..188a5bd3d 100644 --- a/packages/sp/index.ts +++ b/packages/sp/index.ts @@ -2,8 +2,6 @@ export * from "./spqueryable.js"; export * from "./decorators.js"; -export * from "./operations.js"; - export { SPFI, spfi, diff --git a/packages/sp/items/get-all.ts b/packages/sp/items/get-all.ts deleted file mode 100644 index 194e77fdf..000000000 --- a/packages/sp/items/get-all.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { InjectHeaders } from "@pnp/queryable"; -import { _Items, Items, PagedItemCollection } from "./types.js"; - -declare module "./types" { - interface _Items { - getAll(requestSize?: number, acceptHeader?: string): Promise; - } - /** - * Gets all the items in a list, regardless of count. Does not support batching or caching - * - * @param requestSize Number of items to return in each request (Default: 2000) - * @param acceptHeader Allows for setting the value of the Accept header for SP 2013 support - */ - interface IItems { - getAll(requestSize?: number, acceptHeader?: string): Promise; - } -} - -_Items.prototype.getAll = async function (this: _Items, requestSize = 2000, acceptHeader = "application/json;odata=nometadata"): Promise { - - // this will be used for the actual query - // and we set no metadata here to try and reduce traffic - const items = Items(this, "").top(requestSize).using(InjectHeaders({ - "Accept": acceptHeader, - })); - - // let's copy over the odata query params that can be applied - // $top - allow setting the page size this way (override what we did above) - // $select - allow picking the return fields (good behavior) - // $filter - allow setting a filter, though this may fail for large lists - // $expand - allow expanding fields for filter/select support - this.query.forEach((v: string, k: string) => { - if (/^\$select|filter|top|expand$/i.test(k)) { - items.query.set(k, v); - } - }); - - // this will eventually hold the items we return - const itemsCollector: T[] = []; - - // action that will gather up our results recursively - const gatherer = (last: PagedItemCollection) => { - - // collect that set of results - itemsCollector.push(...last.results); - - // if we have more, repeat - otherwise resolve with the collected items - return last.hasNext ? last.getNext().then(gatherer) : itemsCollector; - }; - - return items.getPaged().then(gatherer); -}; diff --git a/packages/sp/items/index.ts b/packages/sp/items/index.ts index fd9563fe2..d878c1601 100644 --- a/packages/sp/items/index.ts +++ b/packages/sp/items/index.ts @@ -12,7 +12,6 @@ export { IItemAddResult, IItemUpdateResult, IItemUpdateResultData, - PagedItemCollection, IItemDeleteParams, IItemParentInfos, } from "./types.js"; diff --git a/packages/sp/items/types.ts b/packages/sp/items/types.ts index af556e6a9..a1c33fa35 100644 --- a/packages/sp/items/types.ts +++ b/packages/sp/items/types.ts @@ -8,14 +8,15 @@ import { ISPQueryable, SPInstance, ISPInstance, + SPCollection, + spPost, } from "../spqueryable.js"; -import { hOP } from "@pnp/core"; +import { hOP, objectDefinedNotNull } from "@pnp/core"; import { extractWebUrl } from "@pnp/sp"; import { IListItemFormUpdateValue, List } from "../lists/types.js"; import { body, headers, parseBinderWithErrorCheck, parseODataJSON } from "@pnp/queryable"; import { IList } from "../lists/index.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; import { IResourcePath } from "../utils/to-resource-path.js"; /** @@ -23,7 +24,7 @@ import { IResourcePath } from "../utils/to-resource-path.js"; * */ @defaultPath("items") -export class _Items extends _SPCollection { +export class _Items extends _SPCollection { /** * Gets an Item by id @@ -59,12 +60,50 @@ export class _Items extends _SPCollection { return this; } - /** - * Gets a collection designed to aid in paging through data - * - */ - public getPaged(): Promise> { - return this.using(PagedItemParser(this))(); + public [Symbol.asyncIterator]() { + + const q = SPCollection(this).using(parseBinderWithErrorCheck(async (r) => { + + const json = await r.json(); + const nextUrl = hOP(json, "d") && hOP(json.d, "__next") ? json.d.__next : json["odata.nextLink"]; + + return >{ + hasNext: typeof nextUrl === "string" && nextUrl.length > 0, + nextLink: nextUrl, + value: parseODataJSON(json), + }; + })); + + const queryParams = ["$top", "$select", "$expand", "$filter", "$orderby", "$skiptoken"]; + + for (let i = 0; i < queryParams.length; i++) { + const param = this.query.get(queryParams[i]); + if (objectDefinedNotNull(param)) { + q.query.set(queryParams[i], param); + } + } + + return >{ + + _next: q, + + async next() { + + if (this._next === null) { + return { done: true, value: undefined }; + } + + const result: IPagedResult = await this._next(); + + if (result.hasNext) { + this._next = SPCollection([this._next, result.nextLink]); + return { done: false, value: result.value }; + } else { + this._next = null; + return { done: false, value: result.value }; + } + }, + }; } /** @@ -311,41 +350,10 @@ export class _ItemVersion extends _SPInstance { export interface IItemVersion extends _ItemVersion, IDeleteableWithETag { } export const ItemVersion = spInvokableFactory(_ItemVersion); -/** - * Provides paging functionality for list items - */ -export class PagedItemCollection { - - constructor(private parent: _Items, private nextUrl: string, public results: T) { } - - /** - * If true there are more results available in the set, otherwise there are not - */ - public get hasNext(): boolean { - return typeof this.nextUrl === "string" && this.nextUrl.length > 0; - } - - /** - * Gets the next set of results, or resolves to null if no results are available - */ - public async getNext(): Promise | null> { - - if (this.hasNext) { - const items = Items([this.parent, this.nextUrl], ""); - return items.getPaged(); - } - - return null; - } -} - -function PagedItemParser(parent: _Items) { - - return parseBinderWithErrorCheck(async (r) => { - const json = await r.json(); - const nextUrl = hOP(json, "d") && hOP(json.d, "__next") ? json.d.__next : json["odata.nextLink"]; - return new PagedItemCollection(parent, nextUrl, parseODataJSON(json)); - }); +export interface IPagedResult { + value: T; + hasNext: boolean; + nextLink: string; } function ItemUpdatedParser() { diff --git a/packages/sp/lists/types.ts b/packages/sp/lists/types.ts index b99334e92..17625d6aa 100644 --- a/packages/sp/lists/types.ts +++ b/packages/sp/lists/types.ts @@ -10,11 +10,12 @@ import { ISPCollection, SPCollection, IDeleteableWithETag, + spPost, + spPostMerge, } from "../spqueryable.js"; import { IChangeQuery } from "../types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; import { IBasePermissions } from "../security/types.js"; import { IFieldInfo } from "../fields/types.js"; import { IFormInfo } from "../forms/types.js"; diff --git a/packages/sp/navigation/types.ts b/packages/sp/navigation/types.ts index 5e519b127..d6355eb5d 100644 --- a/packages/sp/navigation/types.ts +++ b/packages/sp/navigation/types.ts @@ -6,10 +6,11 @@ import { _SPQueryable, IDeleteable, ISPQueryable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; import { extractWebUrl } from "../index.js"; import { combine } from "@pnp/core"; diff --git a/packages/sp/operations.ts b/packages/sp/operations.ts deleted file mode 100644 index a83491bb8..000000000 --- a/packages/sp/operations.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { op, get, post, patch, del } from "@pnp/queryable"; -import { ISPQueryable } from "./spqueryable.js"; - -export const spGet = (o: ISPQueryable, init?: RequestInit): Promise => { - return op(o, get, init); -}; - -export const spPost = (o: ISPQueryable, init?: RequestInit): Promise => op(o, post, init); - -export const spPostMerge = (o: ISPQueryable, init?: RequestInit): Promise => { - init = init || {}; - init.headers = { ...init.headers, "X-HTTP-Method": "MERGE" }; - - return spPost(o, init); -}; - -export const spPostDelete = (o: ISPQueryable, init?: RequestInit): Promise => { - init = init || {}; - init.headers = { ...init.headers || {}, "X-HTTP-Method": "DELETE" }; - - return spPost(o, init); -}; - -export const spPostDeleteETag = (o: ISPQueryable, init?: RequestInit, eTag = "*"): Promise => { - init = init || {}; - init.headers = { ...init.headers || {}, "IF-Match": eTag }; - - return spPostDelete(o, init); -}; - -export const spDelete = (o: ISPQueryable, init?: RequestInit): Promise => op(o, del, init); - -export const spPatch = (o: ISPQueryable, init?: RequestInit): Promise => op(o, patch, init); diff --git a/packages/sp/profiles/types.ts b/packages/sp/profiles/types.ts index faa0c18b5..4bc5461fb 100644 --- a/packages/sp/profiles/types.ts +++ b/packages/sp/profiles/types.ts @@ -6,11 +6,11 @@ import { ISPInstance, spInvokableFactory, _SPQueryable, + spPost, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { PrincipalType, PrincipalSource } from "../types.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; import { AssignFrom } from "@pnp/core"; export class _Profiles extends _SPInstance { diff --git a/packages/sp/recycle-bin/types.ts b/packages/sp/recycle-bin/types.ts index 632f0950b..4b0fdb1bf 100644 --- a/packages/sp/recycle-bin/types.ts +++ b/packages/sp/recycle-bin/types.ts @@ -3,9 +3,9 @@ import { spInvokableFactory, SPQueryable, _SPInstance, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; /** * Describes a recycle bin item diff --git a/packages/sp/regional-settings/funcs.ts b/packages/sp/regional-settings/funcs.ts index 817a5badb..09878c65f 100644 --- a/packages/sp/regional-settings/funcs.ts +++ b/packages/sp/regional-settings/funcs.ts @@ -1,5 +1,4 @@ -import { _SPQueryable, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { _SPQueryable, SPQueryable, spPost } from "../spqueryable.js"; import { body } from "@pnp/queryable"; export function getValueForUICultureBinder(propName: string): (this: _SPQueryable, cultureName: string) => Promise { diff --git a/packages/sp/regional-settings/types.ts b/packages/sp/regional-settings/types.ts index b753d65c0..eb28e478a 100644 --- a/packages/sp/regional-settings/types.ts +++ b/packages/sp/regional-settings/types.ts @@ -4,9 +4,9 @@ import { SPCollection, spInvokableFactory, _SPCollection, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; @defaultPath("regionalsettings") export class _RegionalSettings extends _SPInstance { diff --git a/packages/sp/related-items/types.ts b/packages/sp/related-items/types.ts index 22a6150dd..4fe3e0b72 100644 --- a/packages/sp/related-items/types.ts +++ b/packages/sp/related-items/types.ts @@ -1,7 +1,6 @@ -import { _SPQueryable, ISPQueryable } from "../spqueryable.js"; +import { _SPQueryable, ISPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { defaultPath } from "../decorators.js"; -import { spPost } from "../operations.js"; import { body } from "@pnp/queryable"; @defaultPath("_api/SP.RelatedItemManager") diff --git a/packages/sp/search/query.ts b/packages/sp/search/query.ts index 3519faa82..e1b12c564 100644 --- a/packages/sp/search/query.ts +++ b/packages/sp/search/query.ts @@ -1,8 +1,7 @@ -import { _SPInstance, spInvokableFactory, SPInit } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, SPInit, spPost } from "../spqueryable.js"; import { getHashCode, hOP, isArray } from "@pnp/core"; import { body, CacheAlways, CacheKey, invokable } from "@pnp/queryable"; import { ISearchQuery, ISearchResponse, ISearchResult, ISearchBuilder, SearchQueryInit } from "./types.js"; -import { spPost } from "../operations.js"; import { defaultPath } from "../decorators.js"; const funcs = new Map([ diff --git a/packages/sp/security/funcs.ts b/packages/sp/security/funcs.ts index e4c59f546..48b6b9cbd 100644 --- a/packages/sp/security/funcs.ts +++ b/packages/sp/security/funcs.ts @@ -1,6 +1,5 @@ import { SecurableQueryable, IBasePermissions, PermissionKind } from "./types.js"; -import { SPInstance, SPQueryable } from "../spqueryable.js"; -import { spPost } from "../operations.js"; +import { SPInstance, SPQueryable, spPost } from "../spqueryable.js"; /** * Gets the effective permissions for the user supplied diff --git a/packages/sp/security/types.ts b/packages/sp/security/types.ts index b6d35accb..5e084303d 100644 --- a/packages/sp/security/types.ts +++ b/packages/sp/security/types.ts @@ -8,10 +8,11 @@ import { SPCollection, ISPCollection, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { SiteGroups, ISiteGroups } from "../site-groups/types.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; export type SecurableQueryable = _SPInstance & ISecurableMethods; diff --git a/packages/sp/sharing/funcs.ts b/packages/sp/sharing/funcs.ts index c5ee45949..9849c2809 100644 --- a/packages/sp/sharing/funcs.ts +++ b/packages/sp/sharing/funcs.ts @@ -1,6 +1,6 @@ import { body } from "@pnp/queryable"; import { isArray, jsS } from "@pnp/core"; -import { SPCollection, SPInstance } from "../spqueryable.js"; +import { SPCollection, SPInstance, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { Web } from "../webs/types.js"; import { @@ -18,7 +18,6 @@ import { ISharingEmailData, RoleType, } from "./types.js"; -import { spPost } from "../operations.js"; import { RoleDefinitions } from "../security/types.js"; import { emptyGuid } from "../types.js"; diff --git a/packages/sp/sharing/web.ts b/packages/sp/sharing/web.ts index c7720efd9..9ce75f2a6 100644 --- a/packages/sp/sharing/web.ts +++ b/packages/sp/sharing/web.ts @@ -4,7 +4,7 @@ import { RoleType } from "./types.js"; import { shareObject } from "./funcs.js"; import { combine } from "@pnp/core"; import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../spqueryable.js"; /** * Extend _Web diff --git a/packages/sp/site-designs/types.ts b/packages/sp/site-designs/types.ts index b38a958cd..5b90d120a 100644 --- a/packages/sp/site-designs/types.ts +++ b/packages/sp/site-designs/types.ts @@ -1,10 +1,8 @@ -import { ISPQueryable, _SPQueryable } from "../spqueryable.js"; +import { ISPQueryable, _SPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { headers, body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; import { combine, hOP } from "@pnp/core"; - export class _SiteDesigns extends _SPQueryable { constructor(base: string | ISPQueryable, methodName = "") { diff --git a/packages/sp/site-groups/types.ts b/packages/sp/site-groups/types.ts index ded40e4b2..a3ed9f964 100644 --- a/packages/sp/site-groups/types.ts +++ b/packages/sp/site-groups/types.ts @@ -2,11 +2,12 @@ import { _SPCollection, spInvokableFactory, _SPInstance, + spPost, + spPostMerge, } from "../spqueryable.js"; import { SiteUsers, ISiteUsers } from "../site-users/types.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; @defaultPath("sitegroups") export class _SiteGroups extends _SPCollection { diff --git a/packages/sp/site-groups/web.ts b/packages/sp/site-groups/web.ts index ac3c950cb..b49d17cba 100644 --- a/packages/sp/site-groups/web.ts +++ b/packages/sp/site-groups/web.ts @@ -1,5 +1,5 @@ import { addProp } from "@pnp/queryable"; -import { spPost } from "../operations.js"; +import { spPost } from "../spqueryable.js"; import { Web, _Web } from "../webs/types.js"; import { ISiteGroups, SiteGroups, ISiteGroup, SiteGroup } from "./types.js"; import "../security/web.js"; diff --git a/packages/sp/site-scripts/types.ts b/packages/sp/site-scripts/types.ts index f2a199390..0cc38aff9 100644 --- a/packages/sp/site-scripts/types.ts +++ b/packages/sp/site-scripts/types.ts @@ -1,6 +1,5 @@ import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; -import { ISPQueryable, _SPQueryable } from "../spqueryable.js"; +import { ISPQueryable, _SPQueryable, spPost } from "../spqueryable.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine } from "@pnp/core"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/packages/sp/site-users/types.ts b/packages/sp/site-users/types.ts index 607174e70..a30e3f451 100644 --- a/packages/sp/site-users/types.ts +++ b/packages/sp/site-users/types.ts @@ -4,11 +4,12 @@ import { _SPInstance, IDeleteable, deleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { SiteGroups, ISiteGroups } from "../site-groups/types.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; import { PrincipalType } from "../types.js"; @defaultPath("siteusers") diff --git a/packages/sp/site-users/web.ts b/packages/sp/site-users/web.ts index 5273cfce2..97be709ca 100644 --- a/packages/sp/site-users/web.ts +++ b/packages/sp/site-users/web.ts @@ -2,7 +2,7 @@ import { addProp, body } from "@pnp/queryable"; import { _Web, Web } from "../webs/types.js"; import { ISiteUsers, SiteUsers, ISiteUser, SiteUser, IWebEnsureUserResult } from "./types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPost } from "../operations.js"; +import { spPost } from "../spqueryable.js"; declare module "../webs/types" { interface _Web { diff --git a/packages/sp/sites/types.ts b/packages/sp/sites/types.ts index fa62e3c3b..a1de6f33f 100644 --- a/packages/sp/sites/types.ts +++ b/packages/sp/sites/types.ts @@ -1,10 +1,9 @@ -import { _SPInstance, spInvokableFactory, SPInit, SPQueryable } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, SPInit, SPQueryable, spPatch, spPost } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; import { Web, IWeb } from "../webs/types.js"; import { combine, hOP, isArray } from "@pnp/core"; import { body, TextParse } from "@pnp/queryable"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPatch, spPost } from "../operations.js"; import { IChangeQuery } from "../types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { emptyGuid } from "../types.js"; diff --git a/packages/sp/social/types.ts b/packages/sp/social/types.ts index 2b04e72db..dd1e1501b 100644 --- a/packages/sp/social/types.ts +++ b/packages/sp/social/types.ts @@ -2,11 +2,11 @@ import { _SPInstance, ISPQueryable, SPInit, + spPost, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; import { hOP } from "@pnp/core"; import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; @defaultPath("_api/social.following") export class _Social extends _SPInstance implements ISocial { diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index e246c3d35..775e2db6b 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -1,6 +1,5 @@ import { combine, isUrlAbsolute, isArray, objectDefinedNotNull, stringIsNullOrEmpty } from "@pnp/core"; -import { IInvokable, Queryable, queryableFactory } from "@pnp/queryable"; -import { spPostDelete, spPostDeleteETag } from "./operations.js"; +import { IInvokable, Queryable, queryableFactory, op, get, post, patch, del } from "@pnp/queryable"; export type SPInit = string | ISPQueryable | [ISPQueryable, string]; @@ -242,3 +241,34 @@ export interface IDeleteableWithETag { */ delete(eTag?: string): Promise; } + +export const spGet = (o: ISPQueryable, init?: RequestInit): Promise => { + return op(o, get, init); +}; + +export const spPost = (o: ISPQueryable, init?: RequestInit): Promise => op(o, post, init); + +export const spPostMerge = (o: ISPQueryable, init?: RequestInit): Promise => { + init = init || {}; + init.headers = { ...init.headers, "X-HTTP-Method": "MERGE" }; + + return spPost(o, init); +}; + +export const spPostDelete = (o: ISPQueryable, init?: RequestInit): Promise => { + init = init || {}; + init.headers = { ...init.headers || {}, "X-HTTP-Method": "DELETE" }; + + return spPost(o, init); +}; + +export const spPostDeleteETag = (o: ISPQueryable, init?: RequestInit, eTag = "*"): Promise => { + init = init || {}; + init.headers = { ...init.headers || {}, "IF-Match": eTag }; + + return spPostDelete(o, init); +}; + +export const spDelete = (o: ISPQueryable, init?: RequestInit): Promise => op(o, del, init); + +export const spPatch = (o: ISPQueryable, init?: RequestInit): Promise => op(o, patch, init); diff --git a/packages/sp/sputilities/types.ts b/packages/sp/sputilities/types.ts index a524d75da..ce49ca528 100644 --- a/packages/sp/sputilities/types.ts +++ b/packages/sp/sputilities/types.ts @@ -1,8 +1,7 @@ import { body } from "@pnp/queryable"; -import { _SPQueryable, spInvokableFactory, ISPQueryable, SPInit } from "../spqueryable.js"; +import { _SPQueryable, spInvokableFactory, ISPQueryable, SPInit, spPost } from "../spqueryable.js"; import { IPrincipalInfo, PrincipalType, PrincipalSource } from "../types.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; -import { spPost } from "../operations.js"; import { combine } from "@pnp/core"; export class _Utilities extends _SPQueryable implements IUtilities { diff --git a/packages/sp/subscriptions/types.ts b/packages/sp/subscriptions/types.ts index 9f2c121c7..066265368 100644 --- a/packages/sp/subscriptions/types.ts +++ b/packages/sp/subscriptions/types.ts @@ -2,10 +2,12 @@ import { _SPCollection, spInvokableFactory, _SPInstance, + spPost, + spPatch, + spDelete, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPatch, spDelete } from "../operations.js"; @defaultPath("subscriptions") export class _Subscriptions extends _SPCollection { diff --git a/packages/sp/taxonomy/types.ts b/packages/sp/taxonomy/types.ts index 36b7a3975..5f3957d02 100644 --- a/packages/sp/taxonomy/types.ts +++ b/packages/sp/taxonomy/types.ts @@ -1,8 +1,7 @@ import { isArray } from "@pnp/core"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spDelete, spPatch, spPost } from "../operations.js"; -import { _SPInstance, spInvokableFactory, _SPCollection } from "../spqueryable.js"; +import { _SPInstance, spInvokableFactory, _SPCollection, spDelete, spPatch, spPost } from "../spqueryable.js"; import { encodePath } from "../utils/encode-path-str.js"; /** diff --git a/packages/sp/user-custom-actions/types.ts b/packages/sp/user-custom-actions/types.ts index e39db3d58..d3d98136d 100644 --- a/packages/sp/user-custom-actions/types.ts +++ b/packages/sp/user-custom-actions/types.ts @@ -4,10 +4,11 @@ import { deleteable, _SPInstance, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; import { IBasePermissions } from "../security/index.js"; @defaultPath("usercustomactions") diff --git a/packages/sp/views/types.ts b/packages/sp/views/types.ts index f80665a9f..e240cdfbd 100644 --- a/packages/sp/views/types.ts +++ b/packages/sp/views/types.ts @@ -5,9 +5,10 @@ import { _SPInstance, deleteable, IDeleteable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; -import { spPost, spPostMerge } from "../operations.js"; import { encodePath } from "../utils/encode-path-str.js"; @defaultPath("views") diff --git a/packages/sp/webparts/types.ts b/packages/sp/webparts/types.ts index 7c2c54ce7..87edec000 100644 --- a/packages/sp/webparts/types.ts +++ b/packages/sp/webparts/types.ts @@ -7,9 +7,9 @@ import { spInvokableFactory, SPInstance, ISPInstance, + spPost, } from "../spqueryable.js"; import { body } from "@pnp/queryable"; -import { spPost } from "../operations.js"; export class _LimitedWebPartManager extends _SPQueryable implements ILimitedWebPartManager { diff --git a/packages/sp/webs/types.ts b/packages/sp/webs/types.ts index 3767b35f1..afce2af61 100644 --- a/packages/sp/webs/types.ts +++ b/packages/sp/webs/types.ts @@ -11,11 +11,12 @@ import { deleteable, SPInit, ISPQueryable, + spPost, + spPostMerge, } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; import { IChangeQuery } from "../types.js"; import { odataUrlFrom } from "../utils/odata-url-from.js"; -import { spPost, spPostMerge } from "../operations.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine, isArray } from "@pnp/core"; import { encodePath } from "../utils/encode-path-str.js"; diff --git a/test/core/assumptions.ts b/test/core/assumptions.ts index 780047807..38e17eafe 100644 --- a/test/core/assumptions.ts +++ b/test/core/assumptions.ts @@ -3,10 +3,11 @@ // our assumptions remain correct import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; describe("Assumptions", function () { - it("JS should merge objects how we expect", function () { + it("JS should merge objects how we expect", pnpTest("3576d9bf-aa31-4b3f-8400-104513956328", function () { const o = {}; @@ -58,9 +59,9 @@ describe("Assumptions", function () { expect(test5, "test 5").to.eql({}); - }); + })); - it("should destructure how we assume", function () { + it("should destructure how we assume", pnpTest("67a889c9-a45a-4978-a181-91d5d096edeb", function () { const props = { yes: false, @@ -95,5 +96,5 @@ describe("Assumptions", function () { expect(title).to.eq("hello"); expect(another).to.eq("something"); - }); + })); }); diff --git a/test/core/storage.ts b/test/core/storage.ts index 81953379e..e0017430f 100644 --- a/test/core/storage.ts +++ b/test/core/storage.ts @@ -1,5 +1,6 @@ import { expect } from "chai"; import { PnPClientStorage } from "@pnp/core"; +import { pnpTest } from "../pnp-test.js"; describe("Storage", function () { @@ -7,54 +8,54 @@ describe("Storage", function () { let storage: PnPClientStorage; - beforeEach(function () { + beforeEach(pnpTest("71bacb4d-2a28-4da3-a09b-7b8625345586", function () { storage = new PnPClientStorage(); - }); + })); - it("Add and Get a value (local)", function () { + it("Add and Get a value (local)", pnpTest("4986f3f6-3b31-4ac5-9746-62384a108ae1", function () { storage.local.put("test", "value"); const ret = storage.local.get("test"); expect(ret).to.eq("value"); - }); + })); - it("Add two values, remove one and still return the other (local)", function () { + it("Add two values, remove one and still return the other (local)", pnpTest("b370742a-0eb9-40f5-bb75-43b667f51181", function () { storage.local.put("test1", "value1"); storage.local.put("test2", "value2"); storage.local.delete("test1"); const ret = storage.local.get("test2"); expect(ret).to.eq("value2"); - }); + })); - it("Use getOrPut to add a value using a getter function and return it (local)", function () { + it("Use getOrPut to add a value using a getter function and return it (local)", pnpTest("6f8a3a57-6e1e-4e26-9c86-2bfb05085c5e", function () { storage.local.getOrPut("test", function () { return new Promise(() => "value"); }).then(function () { const ret = storage.local.get("test"); expect(ret).to.eq("value"); }); - }); + })); - it("Add and Get a value (session)", function () { + it("Add and Get a value (session)", pnpTest("71cc7886-18d7-4362-b232-07afd7d6b750", function () { storage.session.put("test", "value"); const ret = storage.session.get("test"); expect(ret).to.eq("value"); - }); + })); - it("Add two values, remove one and still return the other (session)", function () { + it("Add two values, remove one and still return the other (session)", pnpTest("8c570f93-d6aa-49f3-a740-d884f1832b59", function () { storage.session.put("test1", "value1"); storage.session.put("test2", "value2"); storage.session.delete("test1"); const ret = storage.session.get("test2"); expect(ret).to.eq("value2"); - }); + })); - it("Use getOrPut to add a value using a getter function and return it (session)", function () { + it("Use getOrPut to add a value using a getter function and return it (session)", pnpTest("0c25edf5-120e-48d3-b6cd-e2da49391d21", function () { storage.session.getOrPut("test", function () { return new Promise(() => "value"); }).then(function () { const ret = storage.session.get("test"); expect(ret).to.eq("value"); }); - }); + })); }); }); diff --git a/test/core/timeline.ts b/test/core/timeline.ts index a3ab8543e..3d509f362 100644 --- a/test/core/timeline.ts +++ b/test/core/timeline.ts @@ -1,5 +1,6 @@ import { Timeline, asyncReduce } from "@pnp/core"; import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; const TestingMoments = { first: asyncReduce<(a: number) => Promise<[number]>>(), @@ -62,7 +63,7 @@ describe("Timeline", function () { return expect(h).to.eq(2); }); - it("Should process moments 2", async function () { + it("Should process moments 2", pnpTest("8267d3af-554d-44d8-8b00-e33ce7d93f1d", async function () { const tl = new TestTimeline(); @@ -78,9 +79,9 @@ describe("Timeline", function () { const h = await tl.go(0); return expect(h).to.eq(7); - }); + })); - it("Prepend works as expected", function () { + it("Prepend works as expected", pnpTest("890664f0-0e7f-4aa5-bc73-55fa4b05b27b", function () { const tl = new TestTimeline(); @@ -97,9 +98,9 @@ describe("Timeline", function () { expect(observers[0]).to.eq(f3); expect(observers[1]).to.eq(f1); expect(observers[2]).to.eq(f2); - }); + })); - it("Clear works as expected", function () { + it("Clear works as expected", pnpTest("66b43d34-7e34-4506-abc9-4d12b8286937", function () { const tl = new TestTimeline(); @@ -120,9 +121,9 @@ describe("Timeline", function () { const observers2 = tl.on.first.toArray(); expect(observers2).length(0); - }); + })); - it("Replace works as expected", function () { + it("Replace works as expected", pnpTest("b162d48e-2ddd-4b36-8fee-fc3c9ef18838", function () { const tl = new TestTimeline(); @@ -144,9 +145,9 @@ describe("Timeline", function () { expect(observers2).length(1); expect(observers2[0]).to.eq(f1); - }); + })); - it("Logging works as expected", function () { + it("Logging works as expected", pnpTest("0506ad5a-7d00-4f0e-b436-46c90faadd9d", function () { const tl = new TestTimeline(); @@ -161,9 +162,9 @@ describe("Timeline", function () { tl.log("Test 2", 0); expect(messages.length).to.eq(2); - }); + })); - it("Lifecycle works as expected", async function () { + it("Lifecycle works as expected", pnpTest("a7dda9ad-cb00-4ad8-b717-4de294e02ad2", async function () { const tl = new TestTimeline(); @@ -201,5 +202,5 @@ describe("Timeline", function () { expect(tracker[1]).to.eq(2); expect(tracker[2]).to.eq(3); expect(tracker[3]).to.eq(4); - }); + })); }); diff --git a/test/core/util.ts b/test/core/util.ts index 8c953374e..33485f83f 100644 --- a/test/core/util.ts +++ b/test/core/util.ts @@ -13,111 +13,122 @@ import { hOP, getHashCode, } from "@pnp/core"; +import { pnpTest } from "../pnp-test.js"; // tslint:disable:no-unused-expression describe("dateAdd", function () { - it("Add 5 Minutes", function () { + + it("Add 5 Minutes", pnpTest("e5eeda9b-2378-430c-a9d9-ac952c0b4f8e", function () { const testDate = new Date(); const checkDate = new Date(testDate.toLocaleString()); checkDate.setMinutes(testDate.getMinutes() + 5); expect(dateAdd(testDate, "minute", 5).getMinutes()).to.eq(checkDate.getMinutes()); - }); + })); - it("Add 2 Years", function () { + it("Add 2 Years", pnpTest("2a25ffc5-4f96-4f59-9a57-26ea74d1a3b5", function () { const testDate = new Date(); const checkDate = new Date(testDate.toLocaleString()); checkDate.setFullYear(testDate.getFullYear() + 2); expect(dateAdd(testDate, "year", 2).getFullYear()).to.eq(checkDate.getFullYear()); - }); + })); + }); describe("combine", function () { - it("Path (1)", function () { + + it("Path (1)", pnpTest("e8cedd77-c58d-4277-9465-6afa2e73adae", function () { expect(combine("/path/", "path2", "path3", "/path4")).to.eq("path/path2/path3/path4"); - }); + })); - it("Path (2)", function () { + it("Path (2)", pnpTest("1b9f2dc6-5b17-4573-8a65-2ef651b8972c", function () { expect(combine("http://site/path/", "/path4/page.aspx")).to.eq("http://site/path/path4/page.aspx"); - }); + })); - it("Path (3)", function () { + it("Path (3)", pnpTest("df90d9c6-c841-42f4-88d0-fb4d1a0451a5", function () { expect(combine(null, "path2", undefined, null, "/path4")).to.eq("path2/path4"); - }); + })); - it("Path (4)", function () { + it("Path (4)", pnpTest("b8564799-f0cb-4183-81a9-564e1480eba4", function () { expect(combine(null, "path2", undefined, "", null, "/path4")).to.eq("path2/path4"); - }); + })); - it("No Path", function () { + it("No Path", pnpTest("502a081f-144e-45c8-8115-c1ad4bc75d72", function () { expect(combine()).to.eq(""); - }); + })); + }); describe("getRandomString", function () { - it("Length 5", function () { + + it("Length 5", pnpTest("6c726b85-720a-4793-b5f6-2d302d16eb5b", function () { const j = getRandomString(5); expect(j).to.be.a("string"); expect(j).to.have.length(5); - }); + })); - it("Length 28", function () { + it("Length 28", pnpTest("26afbb93-8d8d-4f2a-a1c0-b3a0fb78c6bb", function () { const j = getRandomString(28); expect(j).to.be.a("string"); expect(j).to.have.length(28); - }); + })); + }); describe("getGUID", function () { - it("Test Pattern", function () { + + it("Test Pattern", pnpTest("78cd5f6d-d30a-4c0c-b44f-f55e34e39b06", function () { expect(getGUID()).to.match(/[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}/i); - }); + })); + }); describe("isFunc", function () { - it("True", function () { + + it("True", pnpTest("ff0020e6-0e1b-4b12-a4a1-8a4b2fc8fcdb", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc(function () { return; })).to.be.true; - }); + })); - it("False", function () { + it("False", pnpTest("2a147d36-64ad-4888-a425-e4d18ead4448", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc({ val: 0 })).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc(null)).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isFunc(undefined)).to.be.false; - }); + })); }); describe("objectDefinedNotNull", function () { - it("defined", function () { + it("defined", pnpTest("71a58271-6205-4a7b-b651-9322a36398cc", function () { return expect(objectDefinedNotNull({})).to.be.true; - }); + })); - it("null", function () { + it("null", pnpTest("56af5be3-06e1-41b9-8183-2a9d7654052b", function () { return expect(objectDefinedNotNull(null)).to.be.false; - }); + })); - it("undefined", function () { + it("undefined", pnpTest("65dcfc1f-1c3b-488d-9bc5-3a5dd36e06a3", function () { return expect(objectDefinedNotNull(undefined)).to.be.false; - }); + })); }); describe("isArray", function () { - it("True", function () { + + it("True", pnpTest("3ad9a949-f147-47a7-868c-e1ae0fc9d65e", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isArray([1, 2, 3, 4])).to.be.true; - }); + })); - it("False", function () { + it("False", pnpTest("d2bb66ab-b7ed-4e3d-828a-2044d4a4ffed", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isArray(null)).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions @@ -128,78 +139,89 @@ describe("isArray", function () { expect(isArray({})).to.be.false; // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isArray(undefined)).to.be.false; - }); + })); + }); describe("isUrlAbsolute", function () { - it("Yes (1)", function () { + + it("Yes (1)", pnpTest("edc77eae-ddd3-427c-aae8-863e79583c05", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("https://something.com")).to.be.true; - }); + })); - it("Yes (2)", function () { + it("Yes (2)", pnpTest("25999d21-cc28-4582-bdb5-31fa59af1191", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("//something.com")).to.be.true; - }); + })); - it("Yes (3)", function () { + it("Yes (3)", pnpTest("32547e58-299a-4979-a875-6d2dfdf324cc", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("http://something.com")).to.be.true; - }); + })); - it("No (1)", function () { + it("No (1)", pnpTest("2ee70c05-0f90-47ce-a6cf-801bf459cfca", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("/sites/dev")).to.be.false; - }); + })); - it("No (2)", function () { + it("No (2)", pnpTest("7b6b7504-fd43-4c4d-ad65-e944a11148e9", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("sites/dev")).to.be.false; - }); + })); - it("Empty", function () { + it("Empty", pnpTest("38c0cfa1-e518-47e9-a09a-7e941516dfb0", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(isUrlAbsolute("")).to.be.false; - }); + })); + }); describe("stringIsNullOrEmpty", function () { - it("Yes (1)", function () { + + it("Yes (1)", pnpTest("2c88a924-49d4-4468-b4ed-47dc59341499", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(stringIsNullOrEmpty(null)).to.be.true; - }); + })); - it("Yes (2)", function () { + it("Yes (2)", pnpTest("146cfe8e-3e74-420b-bde7-feec421fb3a8", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(stringIsNullOrEmpty("")).to.be.true; - }); + })); - it("No", function () { + it("No", pnpTest("e843faac-0423-44ee-8206-00468296ea61", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(stringIsNullOrEmpty("not empty")).to.be.false; - }); + })); + }); describe("jsS", function () { + it("Sucess", function () { expect(jsS({ test: true })).to.eq("{\"test\":true}"); }); + }); describe("hOP", function () { - it("Success", function () { + + it("Success", pnpTest("f1d3a279-c51e-4c1b-a3d3-3d8ef3c747f6", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(hOP({ test: true }, "test")).to.be.true; - }); - it("Fail", function () { + })); + + it("Fail", pnpTest("d65fb0d9-be6e-4a3d-9ba9-44e85e8d6288", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(hOP({ test: true }, "nope")).to.be.false; - }); + })); }); describe("getHashCode", function () { - it("Success", function () { + + it("Success", pnpTest("dcd0ccfc-b4ff-4d9f-bd37-8a1b14d2baea", function () { expect(getHashCode("test string value")).to.be.a("number"); expect(getHashCode("test string value !@#$%^&*()_+{}<>,.?/'\"")).to.be.a("number"); - }); + })); + }); diff --git a/test/graph/batch.ts b/test/graph/batch.ts index ab6602144..69016324e 100644 --- a/test/graph/batch.ts +++ b/test/graph/batch.ts @@ -3,6 +3,7 @@ import "@pnp/graph/groups"; import "@pnp/graph/sites"; import { createBatch } from "@pnp/graph/batching"; import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; describe("Batching", function () { @@ -13,7 +14,7 @@ describe("Batching", function () { } }); - it("Single Request", async function () { + it("Single Request", pnpTest("104a9d10-ef6f-485f-961e-45014147f52a", async function () { const order: number[] = []; const expected: number[] = [1, 2]; @@ -27,9 +28,9 @@ describe("Batching", function () { order.push(2); return expect(order.toString()).to.eql(expected.toString()); - }); + })); - it("Even # Requests", async function () { + it("Even # Requests", pnpTest("52bb031b-2a18-46e7-bb1b-8c0085812e0d", async function () { const order: number[] = []; const expected: number[] = [1, 2, 3]; @@ -48,9 +49,9 @@ describe("Batching", function () { order.push(3); return expect(order.toString()).to.eql(expected.toString()); - }); + })); - it("Odd # Requests", async function () { + it("Odd # Requests", pnpTest("0f5f9c29-7da8-483b-8c7d-4a6a9656bb92", async function () { const order: number[] = []; const expected: number[] = [1, 2, 3, 4]; @@ -72,9 +73,9 @@ describe("Batching", function () { order.push(4); return expect(order.toString()).to.eql(expected.toString()); - }); + })); - it("Should work with the same Queryable when properly cloned (Advanced)", async function () { + it("Should work with the same Queryable when properly cloned (Advanced)", pnpTest("76fbb5bf-dfc5-4230-a9df-ef1ecc2ee7a4", async function () { const users = this.pnp.graph.users; @@ -87,9 +88,9 @@ describe("Batching", function () { this.pnp.graph.users.using(batchedBehavior)(); return expect(execute()).to.eventually.be.fulfilled; - }); + })); - it("Should work with the same Queryable when properly cloned by factory (Advanced)", async function () { + it("Should work with the same Queryable when properly cloned by factory (Advanced)", pnpTest("d0ba8747-a776-4f4e-be09-6a6126dc1e06", async function () { const users = this.pnp.graph.users; @@ -101,9 +102,9 @@ describe("Batching", function () { Users(users).using(batchedBehavior)(); return expect(execute()).to.eventually.be.fulfilled; - }); + })); - it("Should fail with the same Queryable (Advanced)", async function () { + it("Should fail with the same Queryable (Advanced)", pnpTest("ca3ae3bb-1729-47d9-abea-e531cd7817dc", async function () { const users = this.pnp.graph.users; @@ -121,5 +122,6 @@ describe("Batching", function () { // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(p2).to.eventually.be.fulfilled; - }); + })); + }); diff --git a/test/graph/calendars.ts b/test/graph/calendars.ts index 68251730b..69bd1f0bc 100644 --- a/test/graph/calendars.ts +++ b/test/graph/calendars.ts @@ -5,6 +5,8 @@ import { HttpRequestError } from "@pnp/queryable"; import { stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; +// TODO:: test recording setup + describe("Calendar", function () { let testUserName = ""; diff --git a/test/graph/columns.ts b/test/graph/columns.ts index 161a9ab52..eaff39179 100644 --- a/test/graph/columns.ts +++ b/test/graph/columns.ts @@ -9,6 +9,7 @@ import { ISite } from "@pnp/graph/sites"; import { IContentType } from "@pnp/graph/content-types"; import { getRandomString } from "@pnp/core"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { pnpTest } from "../pnp-test.js"; describe("Columns", function () { @@ -31,12 +32,16 @@ describe("Columns", function () { }, }; - before(async function () { + before(pnpTest("7fa03413-981c-4d51-be83-8b1b9155985a", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); } + const props = await this.props({ + templateName: getRandomString(5) + "Columns", + }); + site = await getTestingGraphSPSite(this); const ctTemplate = JSON.parse(JSON.stringify({ @@ -50,7 +55,7 @@ describe("Columns", function () { id: "0x0100CDB27E23CEF44850904C80BD666FA645", })); - ctTemplate.name += getRandomString(5) + "Columns"; + ctTemplate.name += props.templateName; const addCT = await site.contentTypes.add(ctTemplate); contentType = addCT.contentType; @@ -61,7 +66,7 @@ describe("Columns", function () { }); list = addList.list; - }); + })); after(async function () { if (list != null) { @@ -73,15 +78,16 @@ describe("Columns", function () { }); describe("Site", function () { - it("columns", async function () { + + it("columns", pnpTest("052a70b6-953b-4267-800d-900b0bf1539d", async function () { const columns = await site.columns(); expect(columns).to.be.an("array"); if (columns.length > 0) { expect(columns[0]).to.haveOwnProperty("id"); } - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("e2ebde42-c5a9-4301-9fdc-92dd711d5414", async function () { let passed = true; const columns = await site.columns(); if (columns.length > 0) { @@ -89,33 +95,50 @@ describe("Columns", function () { passed = (column.id === columns[0].id); } return expect(passed).is.true; - }); + })); + + it("add", pnpTest("7880c343-29a8-4c44-9fb3-4b39f4309c36", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Add", + }); - it("add", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); columnTemplate.name += "Add"; - columnTemplate.displayName += getRandomString(5) + "Add"; + columnTemplate.displayName += props.displayName; const c = await site.columns.add(columnTemplate); await site.columns.getById(c.data.id).delete(); return expect((c.data.name === columnTemplate.name)).to.be.true; - }); + })); + + it("update", pnpTest("8ce610b0-3139-4e2b-9d90-47ad43247250", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Update", + displayName: getRandomString(5) + "Update", + }); - it("update", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Update"; - columnTemplate.displayName += getRandomString(5) + "Update"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const newColumnName = `${columnTemplate.displayName}-CHANGED`; const c = await site.columns.add(columnTemplate); await site.columns.getById(c.data.id).update({ displayName: newColumnName }); const updateColumn = await site.columns.getById(c.data.id)(); await site.columns.getById(c.data.id).delete(); return expect((updateColumn.displayName === newColumnName)).to.be.true; - }); + })); + + it("delete", pnpTest("bcb9bafc-4d9c-40d3-a335-b6ff9650e25c", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Update", + displayName: getRandomString(5) + "Update", + }); - it("delete", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Delete"; - columnTemplate.displayName += getRandomString(5) + "Delete"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const c = await site.columns.add(columnTemplate); await site.columns.getById(c.data.id).delete(); let deletedColumn: ColumnDefinition = null; @@ -125,24 +148,30 @@ describe("Columns", function () { // do nothing } return expect(deletedColumn).to.be.null; - }); + })); }); describe("Content-Type", function () { let siteColumn; - const columnTemplateName = sampleColumn.name + getRandomString(5) + "SiteColumn"; + let columnTemplateName; - before(async function () { + before(pnpTest("7b7c0559-06c7-4c7d-881e-bfc33d47c31a", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); } + const props = await this.props({ + columnTemplateName: sampleColumn.name + getRandomString(5) + "SiteColumn", + }); + + columnTemplateName = props.columnTemplateName; + const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); columnTemplate.name = columnTemplateName; columnTemplate.displayName = columnTemplateName; const addSiteCT = await site.columns.add(columnTemplate); siteColumn = addSiteCT.column; - }); + })); after(async function () { if (siteColumn != null) { @@ -150,12 +179,12 @@ describe("Columns", function () { } }); - it("columns", async function () { + it("columns", pnpTest("0312da75-4067-4d63-bb2c-e5f0d35f4b53", async function () { const columns = await contentType.columns(); return expect(columns).to.be.an("array") && expect(columns[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("d518e3f7-566d-4404-8e97-6cea48d5b1d1", async function () { let passed = true; const columns = await contentType.columns(); if (columns.length > 0) { @@ -163,23 +192,23 @@ describe("Columns", function () { passed = (column.id === columns[0].id); } return expect(passed).is.true; - }); + })); - it("addRef", async function () { + it("addRef", pnpTest("9dd8c09e-9e07-42e2-ac2d-5685966d2aa0", async function () { const c = await contentType.columns.addRef(siteColumn); await contentType.columns.getById(c.data.id).delete(); return expect((c.data.name === columnTemplateName)).to.be.true; - }); + })); // Site column properties cannot be updated in content type. - it.skip("update", async function () { + it.skip("update", pnpTest("c3afb14e-3f42-48e8-9ea6-43be8d231762", async function () { const c = await contentType.columns.addRef(siteColumn); const updateColumnResults = await contentType.columns.getById(c.data.id).update({ propagateChanges: true }); await contentType.columns.getById(c.data.id).delete(); return expect((updateColumnResults.propagateChanges)).to.be.true; - }); + })); - it("delete", async function () { + it("delete", pnpTest("4d6e18c1-abe7-4cd4-a90e-1c1715d5e1ce", async function () { const c = await contentType.columns.addRef(siteColumn); await contentType.columns.getById(c.data.id).delete(); let deletedColumn: ColumnDefinition = null; @@ -189,16 +218,16 @@ describe("Columns", function () { // do nothing } return expect(deletedColumn).to.be.null; - }); + })); }); describe("List", function () { - it("columns", async function () { + it("columns", pnpTest("2b7ff4ba-7b59-49ad-9d98-cda8bec9a012", async function () { const columns = await list.columns(); return expect(columns).to.be.an("array") && expect(columns[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("1560f120-d7da-491a-b27b-48c7b7d124ca", async function () { let passed = true; const columns = await list.columns(); if (columns.length > 0) { @@ -206,33 +235,50 @@ describe("Columns", function () { passed = (column.id === columns[0].id); } return expect(passed).is.true; - }); + })); + + it("add", pnpTest("387b5fb8-14b7-4c9a-8719-f62bc2289780", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Add", + }); - it("add", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); columnTemplate.name += "Add"; - columnTemplate.displayName += getRandomString(5) + "Add"; + columnTemplate.displayName += props.displayName; const c = await list.columns.add(columnTemplate); await list.columns.getById(c.data.id).delete(); return expect((c.data.name === columnTemplate.name)).to.be.true; - }); + })); + + it("update", pnpTest("3827a66a-2f8b-4cd7-addb-b49eac258f45", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Update", + displayName: getRandomString(5) + "Update", + }); - it("update", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Update"; - columnTemplate.displayName += getRandomString(5) + "Update"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const newColumnName = `${columnTemplate.displayName}-CHANGED`; const c = await list.columns.add(columnTemplate); await list.columns.getById(c.data.id).update({ displayName: newColumnName }); const updateColumn = await list.columns.getById(c.data.id)(); await list.columns.getById(c.data.id).delete(); return expect((updateColumn.displayName === newColumnName)).to.be.true; - }); + })); + + it("delete", pnpTest("16650b92-045a-4bfe-8f37-a8a8856385f2", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Delete", + displayName: getRandomString(5) + "Delete", + }); - it("delete", async function () { const columnTemplate = JSON.parse(JSON.stringify(sampleColumn)); - columnTemplate.name += getRandomString(5) + "Delete"; - columnTemplate.displayName += getRandomString(5) + "Delete"; + columnTemplate.name += props.name; + columnTemplate.displayName += props.displayName; const c = await list.columns.add(columnTemplate); await list.columns.getById(c.data.id).delete(); let deletedColumn: ColumnDefinition = null; @@ -242,6 +288,6 @@ describe("Columns", function () { // do nothing } return expect(deletedColumn).to.be.null; - }); + })); }); }); diff --git a/test/graph/contacts.ts b/test/graph/contacts.ts index 43ccd17c4..817f41f9e 100644 --- a/test/graph/contacts.ts +++ b/test/graph/contacts.ts @@ -4,6 +4,8 @@ import "@pnp/graph/contacts"; import { HttpRequestError } from "@pnp/queryable"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +// TODO:: make work with test recording + describe("Contacts", function () { let testUserName = ""; diff --git a/test/graph/content-types.ts b/test/graph/content-types.ts index 8e3cf65d4..0f04a3803 100644 --- a/test/graph/content-types.ts +++ b/test/graph/content-types.ts @@ -7,6 +7,7 @@ import { IList } from "@pnp/graph/lists"; import { ISite } from "@pnp/graph/sites"; import { getRandomString } from "@pnp/core"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { pnpTest } from "../pnp-test.js"; describe("ContentTypes", function () { let site: ISite; @@ -23,21 +24,25 @@ describe("ContentTypes", function () { id: "0x0100CDB27E23CEF44850904C80BD666FA645", }; - before(async function () { + before(pnpTest("558cdcaf-dfe4-47e1-a310-7b1c4c9e5d1d", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); } + const props = await this.props({ + displayName: `PnPGraphTestContentTypes_${getRandomString(8)}`, + }); + site = await getTestingGraphSPSite(this); const listTmp = await site.lists.add({ - displayName: `PnPGraphTestContentTypes_${getRandomString(8)}`, + displayName: props.displayName, list: { "template": "genericList" }, }); list = site.lists.getById(listTmp.data.id); - }); + })); after(async function () { if (list != null) { @@ -47,12 +52,12 @@ describe("ContentTypes", function () { describe("Site", function () { - it("content types", async function () { + it("content types", pnpTest("adc47d1e-6b59-4287-a7f6-1fa42a0862e2", async function () { const ct = await site.contentTypes(); return expect(ct).to.be.an("array") && expect(ct[0]).to.haveOwnProperty("id"); - }); + })); - it("getById", async function () { + it("getById", pnpTest("ab0e1dc6-6387-404f-8acc-b8025d5aa049", async function () { let passed = true; const cts = await site.contentTypes(); if (cts.length > 0) { @@ -60,20 +65,25 @@ describe("ContentTypes", function () { passed = (ct.id === cts[0].id); } return expect(passed).is.true; - }); + })); - it("getCompatibleFromHub", async function () { + it("getCompatibleFromHub", pnpTest("42b30d81-10bf-490e-aaee-e8a2c67c8006", async function () { const cts = await site.contentTypes.getCompatibleHubContentTypes(); return expect(cts).to.be.an("array"); - }); + })); + + it("add", pnpTest("3e939430-6d79-45e9-92cf-1a296a2e0911", async function () { + + const props = await this.props({ + name: getRandomString(5) + "Add", + }); - it("add", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "Add"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await site.contentTypes.getById(ct.data.id).delete(); return expect((ct.data.name === ctTemplate.name)).to.be.true; - }); + })); // potential long running function - not approrpriate for automated tests it.skip("addFromHub"); @@ -82,52 +92,77 @@ describe("ContentTypes", function () { it.skip("associateWithHub"); // Errors with ~ Metadata hub feature is disabled on this site. - it.skip("isPublished", async function () { + it.skip("isPublished", pnpTest("4c3b75f9-d46e-4ae4-a1b7-8ce7bb43009c", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteIsPublished", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteIsPublished"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); const isPublished = await ct.contentType.isPublished(); await site.contentTypes.getById(ct.data.id).delete(); return expect(isPublished).to.be.false; - }); + })); // Errors with ~ Metadata hub feature is disabled on this site. - it.skip("publish", async function () { + it.skip("publish", pnpTest("664acec7-ff46-4bbf-9352-16d0718767de", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SitePublish", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SitePublish"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await ct.contentType.publish(); const isPublished = await ct.contentType.isPublished(); await site.contentTypes.getById(ct.data.id).delete(); return expect(isPublished).to.be.true; - }); + })); // Errors with ~ Metadata hub feature is disabled on this site. - it.skip("unpublish", async function () { + it.skip("unpublish", pnpTest("28cd50ea-5672-48fc-9fc1-842c9d69688b", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteUnPublish", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteUnPublish"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await ct.contentType.publish(); await ct.contentType.unpublish(); const isPublished = await ct.contentType.isPublished(); await site.contentTypes.getById(ct.data.id).delete(); return expect(isPublished).to.be.false; - }); + })); + + it("update", pnpTest("41d3c22d-8632-4890-9ecf-7d0a367d739c", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteUpdate", + }); - it("update", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteUpdate"; + ctTemplate.name += props.name; const newContentTypeName = `${ctTemplate.name}-CHANGED`; const ct = await site.contentTypes.add(ctTemplate); await site.contentTypes.getById(ct.data.id).update({ name: newContentTypeName }); const updateContentType = await site.contentTypes.getById(ct.data.id)(); await site.contentTypes.getById(ct.data.id).delete(); return expect((updateContentType.name === newContentTypeName)).to.be.true; - }); + })); + + it("delete", pnpTest("50a499b1-b6b9-47f7-b14e-567c03ac77a2", async function () { + + const props = await this.props({ + name: getRandomString(5) + "SiteDelete", + }); - it("delete", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "SiteDelete"; + ctTemplate.name += props.name; const ct = await site.contentTypes.add(ctTemplate); await site.contentTypes.getById(ct.data.id).delete(); let deletedContentType: ContentType = null; @@ -137,16 +172,17 @@ describe("ContentTypes", function () { // do nothing } return expect(deletedContentType).to.be.null; - }); + })); }); describe("List", function () { - it("content types", async function () { + + it("content types", pnpTest("3ee007d0-e331-4842-bc8e-8251726d9d39", async function () { const ct = await list.contentTypes(); return expect(ct).to.be.an("array") && expect(ct[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("ab0abf2f-4ffe-4d37-af4b-c8bdb8f2a257", async function () { let passed = true; const cts = await list.contentTypes(); if (cts.length > 0) { @@ -154,29 +190,39 @@ describe("ContentTypes", function () { passed = (ct.id === cts[0].id); } return expect(passed).is.true; - }); + })); - it("getCompatibleFromHub", async function () { + it("getCompatibleFromHub", pnpTest("c74f5186-5aff-4b18-b5b7-97edcd4bd6c5", async function () { const cts = await list.contentTypes.getCompatibleHubContentTypes(); return expect(cts).to.be.an("array"); - }); + })); // potential long running function - not approrpriate for automated tests it.skip("addFromHub"); - it("addCopy", async function () { + it("addCopy", pnpTest("ef5ebb3f-f8f1-4b57-a977-c3ad359365ca", async function () { + + const props = await this.props({ + name: getRandomString(5) + "ListAddCopy", + }); + const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "ListAddCopy"; + ctTemplate.name += props.name; const siteCT = await site.contentTypes.add(ctTemplate); const listCT = await list.contentTypes.addCopy(siteCT.contentType); await list.contentTypes.getById(listCT.data.id).delete(); await site.contentTypes.getById(siteCT.data.id).delete(); return expect((siteCT.data.name === listCT.data.name)).to.be.true; - }); + })); + + it("update", pnpTest("3add8b28-47ea-45a9-9db3-aa370e088f67", async function () { + + const props = await this.props({ + name: getRandomString(5) + "ListUpdate", + }); - it("update", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "ListUpdate"; + ctTemplate.name += props.name; const newContentTypeName = `${ctTemplate.displayName}-CHANGED`; const siteCT = await site.contentTypes.add(ctTemplate); const listCT = await list.contentTypes.addCopy(siteCT.contentType); @@ -185,11 +231,16 @@ describe("ContentTypes", function () { await list.contentTypes.getById(listCT.data.id).delete(); await site.contentTypes.getById(siteCT.data.id).delete(); return expect((updateContentType.name === newContentTypeName)).to.be.true; - }); + })); + + it("delete", pnpTest("5d8dc8f0-5220-400b-b990-0bcdfcd08594", async function () { + + const props = await this.props({ + name: getRandomString(5) + "ListDelete", + }); - it("delete", async function () { const ctTemplate = JSON.parse(JSON.stringify(sampleContentType)); - ctTemplate.name += getRandomString(5) + "ListDelete"; + ctTemplate.name += props.name; const siteCT = await site.contentTypes.add(ctTemplate); const listCT = await list.contentTypes.addCopy(siteCT.contentType); await list.contentTypes.getById(listCT.data.id).delete(); @@ -201,6 +252,6 @@ describe("ContentTypes", function () { // do nothing } return expect(deletedContentType).to.be.null; - }); + })); }); }); diff --git a/test/graph/directoryobjects.ts b/test/graph/directoryobjects.ts index 9ed55e2ec..edcbf600d 100644 --- a/test/graph/directoryobjects.ts +++ b/test/graph/directoryobjects.ts @@ -5,103 +5,118 @@ import "@pnp/graph/directory-objects"; import { GroupType } from "@pnp/graph/groups"; import { getRandomString, getGUID, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; +import { pnpTest } from "../pnp-test.js"; describe("Directory Objects", function () { let testUserName = ""; let testChildGroupID = ""; let testParentGroupID = ""; - const testGUID = getGUID(); - let userInfo = null; + let testGUID; + let userId = null; - before(async function () { + before(pnpTest("3adea3f7-de9b-4872-92c4-82f964a072a8", async function () { if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { this.skip(); } // Get a sample user - userInfo = await getValidUser.call(this); - testUserName = userInfo.userPrincipalName; + const userInfo = await getValidUser.call(this); + + const props = await this.props({ + groupName1: `TestGroup_${getRandomString(4)}`, + groupName2: `TestGroup_${getRandomString(4)}`, + userId: userInfo.id, + userName: userInfo.userPrincipalName, + testGuid: getGUID(), + }); + + testUserName = props.userName; + userId = props.userId; + testGUID = props.testGuid; // Create a test group to ensure we have a directory object - let groupName = `TestGroup_${getRandomString(4)}`; - let result = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Security, { + + let result = await this.pnp.graph.groups.add(props.groupName1, props.groupName1, GroupType.Security, { "members@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, ], "owners@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, ], }); testChildGroupID = result.data.id; - groupName = `TestGroup_${getRandomString(4)}`; - result = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Security, { + result = await this.pnp.graph.groups.add(props.groupName2, props.groupName2, GroupType.Security, { "members@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, "https://graph.microsoft.com/v1.0/groups/" + testChildGroupID, ], "owners@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + props.userId, ], }); testParentGroupID = result.data.id; - }); + })); - it("delete", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const result = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Security, { + it("delete", pnpTest("e1d8a9b8-43c1-4c02-85b3-92ef980d0ee2", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); + + const result = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Security, { "members@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + userId, ], "owners@odata.bind": [ - "https://graph.microsoft.com/v1.0/users/" + userInfo.id, + "https://graph.microsoft.com/v1.0/users/" + userId, ], }); const testDeleteGroupID = result.data.id; return expect(this.pnp.graph.groups.getById(testDeleteGroupID).delete()).eventually.be.fulfilled; - }); + })); - it("Get User Member Objects", async function () { + it("Get User Member Objects", pnpTest("ba2c72fb-d9f0-412d-988e-527d0ce9b7a6", async function () { const memberObjects = await this.pnp.graph.users.getById(testUserName).getMemberObjects(); return expect(memberObjects).contains(testChildGroupID); - }); + })); - it("Get Group Member Objects", async function () { + it("Get Group Member Objects", pnpTest("37fe45e5-5c9b-4b45-a8a5-bd8536ecb512", async function () { const memberObjects = await this.pnp.graph.groups.getById(testChildGroupID).getMemberObjects(true); return expect(memberObjects).contains(testParentGroupID); - }); + })); - it("Get User Member Groups", async function () { + it("Get User Member Groups", pnpTest("a66c2661-e9c1-4880-a5cf-f85c04c1fc09", async function () { const memberObjects = await this.pnp.graph.users.getById(testUserName).getMemberGroups(true); return expect(memberObjects).contains(testChildGroupID); - }); + })); - it("Get Group Member Objects", async function () { + it("Get Group Member Objects", pnpTest("a41f6893-7942-4584-a688-5cdef1304329", async function () { const memberObjects = await this.pnp.graph.groups.getById(testChildGroupID).getMemberGroups(); return expect(memberObjects).contains(testParentGroupID); - }); + })); - it("Check User Member Groups (1)", async function () { + it("Check User Member Groups (1)", pnpTest("fff79512-3b81-4b1f-8de2-c8c65ff3985e", async function () { const memberGroups = await this.pnp.graph.users.getById(testUserName).checkMemberGroups([testChildGroupID, testParentGroupID, testGUID]); return expect(memberGroups.length).is.equal(2); - }); + })); - it("Check User Member Groups (2)", async function () { + it("Check User Member Groups (2)", pnpTest("02172c11-b086-4fb8-a70b-216d24f17d3d", async function () { const memberGroups = await this.pnp.graph.groups.getById(testChildGroupID).checkMemberGroups([testChildGroupID, testParentGroupID, testGUID]); return expect(memberGroups.length).is.equal(1); - }); + })); - it("Get directory object by ID", async function () { + it("Get directory object by ID", pnpTest("501eef0b-1cb8-4b1e-b716-0876114f677c", async function () { const dirObj = await this.pnp.graph.directoryObjects.getById(testChildGroupID); return expect(dirObj).is.not.null; - }); + })); - it("Check MemberOf", async function () { + it("Check MemberOf", pnpTest("cfcd853b-8cba-4fea-8d1d-16afc35ba392", async function () { const memberObjects = await this.pnp.graph.users.getById(testUserName).memberOf(); return expect(memberObjects.length).greaterThan(0); - }); + })); // Remove the test data we created after(async function () { diff --git a/test/graph/drive.ts b/test/graph/files.ts similarity index 99% rename from test/graph/drive.ts rename to test/graph/files.ts index 300835d93..4b4c267a4 100644 --- a/test/graph/drive.ts +++ b/test/graph/files.ts @@ -3,9 +3,9 @@ import * as path from "path"; import * as fs from "fs"; import findupSync from "findup-sync"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; -import { IItemOptions } from "@pnp/graph/drive/types"; +import { IItemOptions } from "@pnp/graph/files/types"; // give ourselves a single reference to the projectRoot const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); diff --git a/test/graph/groups.ts b/test/graph/groups.ts index b9704f59f..aefbba33a 100644 --- a/test/graph/groups.ts +++ b/test/graph/groups.ts @@ -2,6 +2,7 @@ import { getRandomString } from "@pnp/core"; import { expect } from "chai"; import { GroupType } from "@pnp/graph/groups"; import "@pnp/graph/sites/group"; +import { pnpTest } from "../pnp-test.js"; describe("Groups", function () { @@ -19,18 +20,26 @@ describe("Groups", function () { groupID = ""; }); - it("add", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + it("add", pnpTest("022e5336-56a1-4bd3-80a2-74139f386e40", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); + + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); const group = await groupAddResult.group(); groupID = groupAddResult.data.id; return expect(group.displayName).is.not.undefined; - }); + })); + + it("delete", pnpTest("c6d59c80-332b-4d6d-8dbd-54c111cdcf12", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); - it("delete", async function () { // Create a new group - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); // Delete the group // Potential Bug. Delete is only available off of getByID await this.pnp.graph.groups.getById(groupAddResult.data.id).delete(); @@ -44,21 +53,29 @@ describe("Groups", function () { } }); return expect(groupExists).is.not.true; - }); + })); + + it("getById", pnpTest("ea5ae8ab-570c-48fc-b01f-331f3e6ad366", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); - it("getById", async function () { // Create a new group - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); // Get the group by ID const group = await this.pnp.graph.groups.getById(groupAddResult.data.id); return expect(group).is.not.undefined; - }); + })); + + it("update", pnpTest("d1845967-2d71-4995-90e0-58e8967a249a", async function () { + + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); - it("update", async function () { // Create a new group - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); groupID = groupAddResult.data.id; // Update the display name of the group @@ -69,10 +86,10 @@ describe("Groups", function () { // Get the group to check and see if the names are different const group = await this.pnp.graph.groups.getById(groupID)(); - return expect(groupName === group.displayName).is.not.true; - }); + return expect(props.groupName === group.displayName).is.not.true; + })); - it("sites.root.sites", async function () { + it("sites.root.sites", pnpTest("ae59d162-bb17-40f0-b606-a9b5bab3ec6c", async function () { // Find an existing group // This has to be tested on existing groups. On a newly created group, this returns an error often // "Resource provisioning is in progress. Please try again.". This is expected as the team site provisioning takes a few seconds when creating a new group @@ -83,9 +100,9 @@ describe("Groups", function () { const sitesPromise = this.pnp.graph.groups.getById(grpID).sites.root.sites(); return expect(sitesPromise).to.eventually.be.fulfilled; - }); + })); - it("sites.root", async function () { + it("sites.root", pnpTest("b5fce16b-aa14-40e3-98c5-28a828050c04", async function () { // Find an existing group const groups = await this.pnp.graph.groups(); const grpID = groups[0].id; @@ -94,32 +111,7 @@ describe("Groups", function () { const root = await this.pnp.graph.groups.getById(grpID).sites.root(); return expect(root).is.not.null; - }); - - // it("addFavorite()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("removeFavorite()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("resetUnseenCount()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("subscribeByMail()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("unsubscribeByMail()", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); - // it("getCalendarView(start: Date, end: Date)", async function () { - // // This is a user context function. Can't test in application context - // return expect(true).is.true; - // }); + })); afterEach(async function () { if (groupID !== "") { diff --git a/test/graph/lists.ts b/test/graph/lists.ts index 7bd2a6700..fdbad017c 100644 --- a/test/graph/lists.ts +++ b/test/graph/lists.ts @@ -5,6 +5,7 @@ import { List } from "@microsoft/microsoft-graph-types"; import { ISite } from "@pnp/graph/sites"; import { getRandomString } from "@pnp/core"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { pnpTest } from "../pnp-test.js"; describe.only("Lists", function () { let site: ISite; @@ -22,12 +23,12 @@ describe.only("Lists", function () { site = await getTestingGraphSPSite(this); }); - it("lists", async function () { + it("lists", pnpTest("016307d3-a0e3-4c8c-94e8-4f1c8566ffbd", async function () { const lists = await site.lists(); return expect(lists).to.be.an("array") && expect(lists[0]).to.haveOwnProperty("id"); - }); + })); - it("getById()", async function () { + it("getById()", pnpTest("657e7fc0-bf7d-40ed-b903-d75fe0b91d65", async function () { let passed = true; const lists = await site.lists(); if (lists.length > 0) { @@ -35,30 +36,45 @@ describe.only("Lists", function () { passed = (list.id === lists[0].id); } return expect(passed).is.true; - }); + })); + + it("add", pnpTest("a5b3a404-53bb-4895-815d-6681cc36fe7f", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Add", + }); - it("add", async function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); - listTemplate.displayName += getRandomString(5) + "Add"; + listTemplate.displayName += props.displayName; const list = await site.lists.add(listTemplate); await site.lists.getById(list.data.id).delete(); return expect((list.data.displayName === listTemplate.displayName)).to.be.true; - }); + })); + + it("update", pnpTest("a386a85a-03ce-4846-8ca8-2472075694f5", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Update", + }); - it("update", async function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); - listTemplate.displayName += getRandomString(5) + "Update"; + listTemplate.displayName += props.displayName; const newListName = `${listTemplate.displayName}-CHANGED`; const list = await site.lists.add(listTemplate); await site.lists.getById(list.data.id).update({ displayName: newListName }); const updateList = await site.lists.getById(list.data.id)(); await site.lists.getById(list.data.id).delete(); return expect((updateList.displayName === newListName)).to.be.true; - }); + })); + + it("delete", pnpTest("3d070839-0713-4a3e-a718-f89bb378cbe1", async function () { + + const props = await this.props({ + displayName: getRandomString(5) + "Delete", + }); - it("delete", async function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); - listTemplate.displayName += getRandomString(5) + "Delete"; + listTemplate.displayName += props.displayName; const list = await site.lists.add(listTemplate); await site.lists.getById(list.data.id).delete(); let deletedList: List = null; @@ -68,5 +84,5 @@ describe.only("Lists", function () { // do nothing } return expect(deletedList).to.be.null; - }); + })); }); diff --git a/test/graph/paging.ts b/test/graph/paging.ts index 844a56a3c..49b3b601b 100644 --- a/test/graph/paging.ts +++ b/test/graph/paging.ts @@ -5,12 +5,12 @@ import "@pnp/graph/sites"; import "@pnp/graph/lists"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; import { getRandomString } from "@pnp/core"; -import { graphPost, GraphQueryableCollection, IGraphQueryableCollection } from "@pnp/graph"; +import { graphPost, GraphCollection, IGraphCollection } from "@pnp/graph"; import { body } from "@pnp/queryable"; describe("Groups", function () { - let itemsCol: IGraphQueryableCollection; + let itemsCol: IGraphCollection; before(async function () { @@ -26,7 +26,7 @@ describe("Groups", function () { list: { "template": "genericList" }, }); - itemsCol = GraphQueryableCollection(site.lists.getById(listInfo.data.id), "items"); + itemsCol = GraphCollection(site.lists.getById(listInfo.data.id), "items"); for (let i = 0; i < 11; i++) { await graphPost(itemsCol, body({ @@ -41,7 +41,7 @@ describe("Groups", function () { const allUsers = []; - for await (const users of this.pnp.graph.users.top(20).select("displayName").paged()) { + for await (const users of this.pnp.graph.users.top(20).select("displayName")) { allUsers.push(...users); } @@ -56,7 +56,7 @@ describe("Groups", function () { const allGroups = []; - for await (const groups of this.pnp.graph.groups.top(20).select("displayName").paged()) { + for await (const groups of this.pnp.graph.groups.top(20).select("displayName")) { allGroups.push(...groups); } @@ -74,7 +74,7 @@ describe("Groups", function () { const allItems = []; - for await (const items of itemsCol.paged()) { + for await (const items of itemsCol) { allItems.push(...items); } diff --git a/test/graph/querable.ts b/test/graph/querable.ts index faeefbbe5..5c1e79bba 100644 --- a/test/graph/querable.ts +++ b/test/graph/querable.ts @@ -1,7 +1,7 @@ import { expect } from "chai"; import "@pnp/graph/sites/group"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import { Drive, Group } from "@microsoft/microsoft-graph-types"; import { hOP, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; diff --git a/test/graph/sites.ts b/test/graph/sites.ts index 1cb20258f..b250f0424 100644 --- a/test/graph/sites.ts +++ b/test/graph/sites.ts @@ -30,8 +30,9 @@ describe("Sites", function () { site = await getTestingGraphSPSite(this); const tetssite = await site(); const url = new URL(tetssite.webUrl); - const siteByUrl = await this.pnp.graph.sites.getByUrl(url.hostname, url.pathname)(); - passed = (siteByUrl.webUrl.toLowerCase() === tetssite.webUrl.toLowerCase()); + const siteByUrl = await this.pnp.graph.sites.getByUrl(url.hostname, url.pathname); + const siteInfo = await siteByUrl(); + passed = (siteInfo.webUrl.toLowerCase() === tetssite.webUrl.toLowerCase()); return expect(passed).is.true; }); diff --git a/test/pnp-test.ts b/test/pnp-test.ts index 6fc4ba607..09ec4f191 100644 --- a/test/pnp-test.ts +++ b/test/pnp-test.ts @@ -15,6 +15,10 @@ interface IPnPTestFunc { export const PnPTestHeaderName = "X-PnP-TestId"; +// we use this to identify tests with duplicate ids, which will cause problems +// really just a safety measure for us +const idDupeTracker = []; + /** * Behavior used to inject the correct test id into the headers for each request * @@ -46,6 +50,12 @@ function PnPTestIdHeader(id: () => string): TimelinePipe { */ export function pnpTest(id: string, testFunc: (this: IPnPTestFuncThis) => any): IPnPTestFunc { + if (idDupeTracker.indexOf(id.toLowerCase()) > -1) { + throw Error(`Test id ${id} is already in use.`); + } + + idDupeTracker.push(id.toLowerCase()); + return async function (this: IPnPTestFuncThis, ...args: any[]) { this.pnpid = id; diff --git a/test/sp/batch.ts b/test/sp/batch.ts index f4d2f3e23..9e9c7e636 100644 --- a/test/sp/batch.ts +++ b/test/sp/batch.ts @@ -288,7 +288,7 @@ describe("Batching", function () { expect(p2).to.eventually.be.fulfilled; })); - it("Should rebase objects to allow queries on returned objects", pnpTest("d9535bc2-c59a-49ba-8666-b3d80510aca5", async function () { + it("Should rebase objects to allow queries on returned objects", pnpTest("5e17585b-ce83-4fd0-8392-1132069b5503", async function () { const props = await this.props({ listName: "BatchTestRebase", diff --git a/test/sp/items.ts b/test/sp/items.ts index 7a25217f0..42cb34e6e 100644 --- a/test/sp/items.ts +++ b/test/sp/items.ts @@ -2,7 +2,6 @@ import { getRandomString } from "@pnp/core"; import { expect } from "chai"; import "@pnp/sp/lists/web"; import "@pnp/sp/items/list"; -import "@pnp/sp/items/get-all"; import "@pnp/sp/batching"; import { IList } from "@pnp/sp/lists"; import testSPInvokables from "../test-invokable-props.js"; @@ -69,33 +68,17 @@ describe("Items", function () { return expect(list.items.getById(item.Id)()).to.eventually.be.fulfilled; }); - it("getPaged", async function () { - - let page = await list.items.top(2).getPaged(); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(page.hasNext).to.be.true; - expect(page.results.length).to.eql(2); - page = await page.getNext(); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(page.hasNext).to.be.true; - expect(page.results.length).to.eql(2); - }); - it("getAll", async function () { + const a = []; const itemCount = await list.select("ItemCount")().then(r => r.ItemCount); - const page = await list.items.getAll(); - return expect(page.length).to.eq(itemCount); + for await (const items of list.items) { + a.push(...items); + } + return expect(a.length).to.eq(itemCount); }); - it("getAll top(2)", async function () { - - const itemCount = await list.select("ItemCount")().then(r => r.ItemCount); - const page = await list.items.top(2).getAll(); - return expect(page.length).to.eq(itemCount); - }); - it("effectiveBasePermissions", async function () { const item = await list.items.top(1)().then(r => r[0]); diff --git a/test/test-recording.ts b/test/test-recording.ts index 88916868d..688fa3813 100644 --- a/test/test-recording.ts +++ b/test/test-recording.ts @@ -9,6 +9,9 @@ import { default as nodeFetch } from "node-fetch"; // TODO:: a way to record tests from the browser -> console.log what we would save in a file along with the generated filename +// PS to create Guids and put them on the clip board +// "pnpTest(""$(([guid]::NewGuid() | select Guid -expandproperty Guid | Out-String).Trim())"", " | Set-Clipboard + export interface IRecordingOptions { resolvedRecordingPath: string; resolvedTestSettingsPath: string; From 4c50c47149cee5f99706bcdc2025e0f4d29b74a2 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 13:53:59 +0000 Subject: [PATCH 011/171] Fix up merging for changes to GraphQueryable --- package-lock.json | 4 ++-- packages/graph/files/types.ts | 2 +- packages/graph/list-item/types.ts | 11 +++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7e1fa8c0a..94936a2f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pnp/monorepo", - "version": "3.17.0", + "version": "4.0.0-alpha0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pnp/monorepo", - "version": "3.17.0", + "version": "4.0.0-alpha0", "license": "MIT", "devDependencies": { "@azure/identity": "3.2.4", diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index bea36b02f..705c4f69c 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -34,7 +34,7 @@ export class _Drive extends _GraphInstance { /** * Method for retrieving the related list resource, for use with SharePoint drives. - * @returns IGraphQueryableInstance + * @returns IGraphInstance */ public get list(): IGraphInstance { return GraphInstance(this, "list"); diff --git a/packages/graph/list-item/types.ts b/packages/graph/list-item/types.ts index a4c6866f9..57a66fdde 100644 --- a/packages/graph/list-item/types.ts +++ b/packages/graph/list-item/types.ts @@ -1,7 +1,6 @@ import { ListItem as IListItemEntity, ListItemVersion as IListItemVersion } from "@microsoft/microsoft-graph-types"; -import { _GraphQueryableCollection, graphInvokableFactory, _GraphQueryableInstance, IGraphQueryableCollection, GraphQueryableCollection } from "../graphqueryable.js"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, IGraphCollection, GraphCollection, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { graphPost } from "../operations.js"; import { body } from "@pnp/queryable"; /** @@ -9,13 +8,13 @@ import { body } from "@pnp/queryable"; */ @deleteable() @updateable() -export class _ListItem extends _GraphQueryableInstance { +export class _ListItem extends _GraphInstance { /** * Method for retrieving the versions of a list item. * @returns IListItemVersion */ - public get versions(): IGraphQueryableCollection { - return GraphQueryableCollection(this, "versions"); + public get versions(): IGraphCollection { + return GraphCollection(this, "versions"); } } export interface IListItem extends _ListItem, IDeleteable, IUpdateable { } @@ -27,7 +26,7 @@ export const ListItem = graphInvokableFactory(_ListItem); */ @defaultPath("items") @getById(ListItem) -export class _ListItems extends _GraphQueryableCollection{ +export class _ListItems extends _GraphCollection{ /** * Create a new list item as specified in the request body. * From af7b1ecdba411b32209f733a771a1f71476ddfcd Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 14:15:27 +0000 Subject: [PATCH 012/171] Fix Mail endpoint WIP issues Fix issue with Drive Items Changes --- packages/graph/analytics/driveItems.ts | 6 +++--- packages/graph/analytics/types.ts | 3 +-- packages/graph/behaviors/paged.ts | 2 +- packages/graph/files/types.ts | 26 +++++++++++++------------- packages/graph/mail/funcs.ts | 9 ++------- packages/graph/mail/users.ts | 3 --- 6 files changed, 20 insertions(+), 29 deletions(-) diff --git a/packages/graph/analytics/driveItems.ts b/packages/graph/analytics/driveItems.ts index ca4ef9e6f..cf4d97d97 100644 --- a/packages/graph/analytics/driveItems.ts +++ b/packages/graph/analytics/driveItems.ts @@ -1,8 +1,8 @@ -import { _DriveItem } from "../drive/types.js"; -import { IAnalyticsOptions, analytics } from "./types.js"; +import { _DriveItem } from "../files/types.js"; +import { analytics } from "./types.js"; import { ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; -declare module "../drive/types" { +declare module "../files/types" { interface _DriveItem { analytics(analyticsOptions?: IAnalyticsOptions): Promise; } diff --git a/packages/graph/analytics/types.ts b/packages/graph/analytics/types.ts index dc2cdffd7..4337842ea 100644 --- a/packages/graph/analytics/types.ts +++ b/packages/graph/analytics/types.ts @@ -1,6 +1,5 @@ import { ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; -import { graphGet } from "../operations.js"; -import { GraphQueryable } from "../graphqueryable.js"; +import { GraphQueryable, graphGet } from "../graphqueryable.js"; export interface IAnalyticsOptions { timeRange: "allTime" | "lastSevenDays"; diff --git a/packages/graph/behaviors/paged.ts b/packages/graph/behaviors/paged.ts index b469a068a..7cae1886b 100644 --- a/packages/graph/behaviors/paged.ts +++ b/packages/graph/behaviors/paged.ts @@ -11,7 +11,7 @@ export interface IPagedResult { } /** - * A function that will take a collection defining IGraphQueryableCollection and return the count of items + * A function that will take a collection defining IGraphCollection and return the count of items * in that collection. Not all Graph collections support Count. * * @param col The collection to count diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index 705c4f69c..c6544f8d1 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -11,7 +11,7 @@ import { graphPost, graphPut, } from "../graphqueryable.js"; -import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo, ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; +import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo } from "@microsoft/microsoft-graph-types"; import { combine } from "@pnp/core"; import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable } from "../decorators.js"; import { body, BlobParse, CacheNever, errorCheck, InjectHeaders } from "@pnp/queryable"; @@ -128,7 +128,7 @@ export class _Root extends _GraphInstance { /** * Search drive for items matching the query * @param query string, search parameter - * @returns IGraphQueryableCollection + * @returns IGraphCollection */ public search(query: string): IGraphCollection { return GraphCollection(this, `search(q='${query}')`); @@ -136,7 +136,7 @@ export class _Root extends _GraphInstance { /** * Method for retrieving thumbnails of the drive items. - * @returns IGraphQueryableCollection + * @returns IGraphCollection */ public get thumbnails(): IGraphCollection { return GraphCollection(this, "thumbnails"); @@ -207,7 +207,7 @@ export class _DriveItem extends _GraphInstance { /** * Method for retrieving thumbnails of the drive items. - * @returns IGraphQueryableCollection + * @returns IGraphCollection */ public get thumbnails(): IGraphCollection { return GraphCollection(this, "thumbnails"); @@ -347,15 +347,15 @@ export class _DriveItem extends _GraphInstance { return graphPost(DriveItem(this, "preview"), body(previewOptions)); } - /** - * Method for getting item analytics. Defaults to lastSevenDays. - * @param analyticsOptions - IAnalyticsOptions (Optional) - * @returns IGraphQueryableCollection - */ - public analytics(analyticsOptions?: IAnalyticsOptions): IGraphCollection { - const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; - return >GraphCollection(this, query); - } + // /** + // * Method for getting item analytics. Defaults to lastSevenDays. + // * @param analyticsOptions - IAnalyticsOptions (Optional) + // * @returns IGraphCollection + // */ + // public analytics(analyticsOptions?: IAnalyticsOptions): IGraphCollection { + // const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; + // return >GraphCollection(this, query); + // } } export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } export const DriveItem = graphInvokableFactory(_DriveItem); diff --git a/packages/graph/mail/funcs.ts b/packages/graph/mail/funcs.ts index 6bf0906ee..9e3fba5c8 100644 --- a/packages/graph/mail/funcs.ts +++ b/packages/graph/mail/funcs.ts @@ -1,11 +1,6 @@ -import { IGraphQueryable, GraphQueryableCollection, IGraphQueryableCollection } from "../graphqueryable.js"; -import { graphPost } from "../operations.js"; +import { IGraphQueryable, GraphCollection, graphPost } from "../graphqueryable.js"; import { body } from "@pnp/queryable"; -import { Message } from "@microsoft/microsoft-graph-types"; -// export interface IMessage extends Message { -// attachments: -// } /** * Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, * from the user's default calendar, or from some other calendar of the user's @@ -16,5 +11,5 @@ import { Message } from "@microsoft/microsoft-graph-types"; * which is not included the typing and therefore will make the function unusable in that scenario. */ export function mailSend(this: IGraphQueryable, message: any): Promise { - return graphPost(GraphQueryableCollection(this, "mailSend"), body(message)); + return graphPost(GraphCollection(this, "mailSend"), body(message)); } diff --git a/packages/graph/mail/users.ts b/packages/graph/mail/users.ts index f8bc4cb35..6349a3146 100644 --- a/packages/graph/mail/users.ts +++ b/packages/graph/mail/users.ts @@ -1,8 +1,5 @@ -// import { addProp } from "@pnp/queryable"; import { _User } from "../users/types.js"; -// import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars } from "./types.js"; import { mailSend } from "./funcs.js"; -// import { IGraphQueryableCollection } from "../graphqueryable.js"; declare module "../users/types" { interface _User { From 5a6654af6890d15cd4c6253c873fc61dde036b1f Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 14:29:36 +0000 Subject: [PATCH 013/171] Package Updates Going to start using code spell checker to fix any documentation spelling errors and comment spelling errors. --- .vscode/settings.json | 3 + package-lock.json | 1149 +++++++++++++++------------- package.json | 22 +- packages/azidjsclient/package.json | 4 +- packages/graph/files/types.ts | 10 - packages/graph/package.json | 4 +- 6 files changed, 647 insertions(+), 545 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index abe068e72..629e5f75c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,4 +14,7 @@ "typescript.validate.enable": true, "typescript.tsdk": "./node_modules/typescript/lib", "editor.tabSize": 4, + "cSpell.words": [ + "queryables" + ], } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 94936a2f3..593ab6d58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "4.0.0-alpha0", "license": "MIT", "devDependencies": { - "@azure/identity": "3.2.4", + "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.0", - "@microsoft/microsoft-graph-types": "2.35.0", + "@microsoft/microsoft-graph-types": "2.38.0", "@pnp/buildsystem": "3.1.0", "@types/chai": "4.3.5", "@types/chai-as-promised": "7.1.5", @@ -20,25 +20,25 @@ "@types/gulp": "4.0.13", "@types/mocha": "10.0.1", "@types/node": "16.11.7", - "@types/webpack": "5.28.1", + "@types/webpack": "5.28.2", "@types/yargs": "17.0.24", - "@typescript-eslint/eslint-plugin": "5.59.9", - "@typescript-eslint/parser": "5.59.9", - "chai": "4.3.7", + "@typescript-eslint/eslint-plugin": "6.4.1", + "@typescript-eslint/parser": "6.4.1", + "chai": "4.3.8", "chai-as-promised": "7.1.1", - "del-cli": "5.0.0", - "eslint": "8.45.0", + "del-cli": "5.0.1", + "eslint": "8.48.0", "findup-sync": "5.0.0", "mocha": "10.2.0", "msal": "1.4.18", - "node-fetch": "3.3.1", + "node-fetch": "3.3.2", "prettyjson": "1.2.5", "string-replace-loader": "3.1.0", - "tslib": "2.6.0", + "tslib": "2.6.2", "typescript": "4.5.5", "webpack": "5.88.2", "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.0", + "webpack-dev-server": "4.15.1", "yargs": "17.7.2" }, "engines": { @@ -67,16 +67,17 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz", - "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz", + "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" } }, "node_modules/@azure/core-client": { @@ -98,9 +99,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.11.0.tgz", - "integrity": "sha512-nB4KXl6qAyJmBVLWA7SakT4tzpYZTCk4pvRBeI+Ye0WYSOrlTqlMhc4MSS/8atD3ufeYWdkN380LLoXlUUzThw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.12.0.tgz", + "integrity": "sha512-+MnSB0vGZjszSzr5AW8z93/9fkDu2RLtWmAN8gskURq7EW2sSwqy8jZa0V26rjuBVkwhdA3Hw8z3VWoeBUOw+A==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -130,9 +131,9 @@ } }, "node_modules/@azure/core-util": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.3.2.tgz", - "integrity": "sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", + "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -143,13 +144,13 @@ } }, "node_modules/@azure/identity": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.2.4.tgz", - "integrity": "sha512-t63oyi2LAn+ZAehYA7SDlhJDd1J0eLO3a21mxTaJcXqKW/tbRbKmo/BeyyTIXbBaoeTFn0xnyQHyomwndTqKUA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.3.0.tgz", + "integrity": "sha512-gISa/dAAxrWt6F2WiDXZY0y2xY4MLlN2wkNW4cPuq5OgPQKLSkxLc4I2WR04puTfZyQZnpXbAapAMEj1b96fgg==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", + "@azure/core-auth": "^1.5.0", "@azure/core-client": "^1.4.0", "@azure/core-rest-pipeline": "^1.1.0", "@azure/core-tracing": "^1.0.0", @@ -182,21 +183,21 @@ } }, "node_modules/@azure/msal-browser": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.0.tgz", - "integrity": "sha512-gxBh83IumHgEP9uMCm9pJLKLRwICMQTxG9TX3AytdNt3oLUI3tytm/szYD5u5zKJgSkhHvwFSM+NPnM04hYw3w==", + "version": "2.38.2", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.2.tgz", + "integrity": "sha512-71BeIn2we6LIgMplwCSaMq5zAwmalyJR3jFcVOZxNVfQ1saBRwOD+P77nLs5vrRCedVKTq8RMFhIOdpMLNno0A==", "dev": true, "dependencies": { - "@azure/msal-common": "13.2.0" + "@azure/msal-common": "13.3.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.2.0.tgz", - "integrity": "sha512-rnstQ7Zgn3fSTKNQO+/YNV34/QXJs0vni7IA0/3QB1EEyrJg14xyRmTqlw9ta+pdSuT5OJwUP8kI3D/rBwUIBw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.0.tgz", + "integrity": "sha512-/VFWTicjcJbrGp3yQP7A24xU95NiDMe23vxIU1U6qdRPFsprMDNUohMudclnd+WSHE4/McqkZs/nUU3sAKkVjg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -216,18 +217,99 @@ "node": "10 || 12 || 14 || 16 || 18" } }, + "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.2.0.tgz", + "integrity": "sha512-rnstQ7Zgn3fSTKNQO+/YNV34/QXJs0vni7IA0/3QB1EEyrJg14xyRmTqlw9ta+pdSuT5OJwUP8kI3D/rBwUIBw==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", @@ -238,13 +320,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -347,18 +429,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", - "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -379,9 +461,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -435,9 +517,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -463,19 +545,19 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { @@ -485,9 +567,9 @@ "dev": true }, "node_modules/@microsoft/microsoft-graph-types": { - "version": "2.35.0", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.35.0.tgz", - "integrity": "sha512-3jCQyKaYbNuzVG884SNuWKS19FPUxBwHfDAb3DqZWBwPYcX3HbDe2D22z9Ue+UV+JGuw917cH75RTSgrdnutFg==", + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.38.0.tgz", + "integrity": "sha512-EXpTf/TFUb0EfBXiQ0rTmZf6fRgBn73lNfYdU2QKvqiMPQD/Cs2Gt+VmWVtK19F9Mf5Mt4bDTu5Ft0TGXOF8rA==", "dev": true }, "node_modules/@nodelib/fs.scandir": { @@ -628,9 +710,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -672,9 +754,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "version": "4.17.36", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", "dev": true, "dependencies": { "@types/node": "*", @@ -891,9 +973,9 @@ } }, "node_modules/@types/webpack": { - "version": "5.28.1", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.1.tgz", - "integrity": "sha512-qw1MqGZclCoBrpiSe/hokSgQM/su8Ocpl3L/YHE0L6moyaypg4+5F7Uzq7NgaPKPxUxUbQ4fLPLpDWdR27bCZw==", + "version": "5.28.2", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.2.tgz", + "integrity": "sha512-7tcxyrIOd7WGimZIcWU6pDsNh2edGGnwYExOvd3l/nMvuxqwVPrFXnnTbYCnplqV9BJoU7Mo2mfFtiH8CNFvYw==", "dev": true, "dependencies": { "@types/node": "*", @@ -926,32 +1008,33 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz", - "integrity": "sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.1.tgz", + "integrity": "sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.9", - "@typescript-eslint/type-utils": "5.59.9", - "@typescript-eslint/utils": "5.59.9", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/type-utils": "6.4.1", + "@typescript-eslint/utils": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -960,25 +1043,26 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.9.tgz", - "integrity": "sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz", + "integrity": "sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.9", - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/typescript-estree": "5.59.9", + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/typescript-estree": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -987,16 +1071,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz", - "integrity": "sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz", + "integrity": "sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/visitor-keys": "5.59.9" + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1004,25 +1088,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz", - "integrity": "sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.1.tgz", + "integrity": "sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.9", - "@typescript-eslint/utils": "5.59.9", + "@typescript-eslint/typescript-estree": "6.4.1", + "@typescript-eslint/utils": "6.4.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1031,12 +1115,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.9.tgz", - "integrity": "sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz", + "integrity": "sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1044,21 +1128,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz", - "integrity": "sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz", + "integrity": "sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/visitor-keys": "5.59.9", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1071,42 +1155,41 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.9.tgz", - "integrity": "sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.1.tgz", + "integrity": "sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.9", - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/typescript-estree": "5.59.9", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/typescript-estree": "6.4.1", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz", - "integrity": "sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz", + "integrity": "sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.9", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.4.1", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2013,9 +2096,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { @@ -2032,9 +2115,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { @@ -2162,9 +2245,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "version": "1.0.30001524", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", + "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", "dev": true, "funding": [ { @@ -2182,9 +2265,9 @@ ] }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", @@ -2864,9 +2947,9 @@ } }, "node_modules/del-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-5.0.0.tgz", - "integrity": "sha512-rENFhUaYcjoMODwFhhlON+ogN7DoG+4+GFN+bsA1XeDt4w2OKQnQadFP1thHSAlK9FAtl88qgP66wOV+eFZZiQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-5.0.1.tgz", + "integrity": "sha512-hCDHJd0u0jKFqizgInYXZaILsqOIA7Zl6e7M3hJwP+SlwUAgtV/EB22EPF4e2+9VAVnBDQQBE6tDRe+/UuoFhg==", "dev": true, "dependencies": { "del": "^7.0.0", @@ -2973,9 +3056,9 @@ "dev": true }, "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -3046,9 +3129,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.468", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.468.tgz", - "integrity": "sha512-6M1qyhaJOt7rQtNti1lBA0GwclPH+oKCmsra/hkcWs5INLxfXXD/dtdnaKUYQu/pjOBP/8Osoe4mAcNvvzoFag==", + "version": "1.4.503", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz", + "integrity": "sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==", "dev": true }, "node_modules/emoji-regex": { @@ -3200,27 +3283,27 @@ } }, "node_modules/eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.48.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3254,23 +3337,14 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3278,15 +3352,11 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3294,15 +3364,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3353,15 +3414,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3374,7 +3426,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -3383,15 +3435,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3899,16 +3942,17 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { @@ -4060,9 +4104,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -4617,9 +4661,9 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4678,12 +4722,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -5752,9 +5790,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -6067,6 +6105,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -6161,6 +6205,15 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", @@ -7243,12 +7296,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -7290,9 +7337,9 @@ } }, "node_modules/node-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, "dependencies": { "data-uri-to-buffer": "^4.0.0", @@ -8454,12 +8501,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9817,31 +9864,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/ts-api-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", + "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" + "node": ">=16.13.0" }, "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "typescript": ">=4.2.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/type": { @@ -10474,9 +10512,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, "dependencies": { "@types/bonjour": "^3.5.9", @@ -10485,7 +10523,7 @@ "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", @@ -10607,6 +10645,28 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -10833,12 +10893,13 @@ } }, "@azure/core-auth": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz", - "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz", + "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==", "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.0", "tslib": "^2.2.0" } }, @@ -10858,9 +10919,9 @@ } }, "@azure/core-rest-pipeline": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.11.0.tgz", - "integrity": "sha512-nB4KXl6qAyJmBVLWA7SakT4tzpYZTCk4pvRBeI+Ye0WYSOrlTqlMhc4MSS/8atD3ufeYWdkN380LLoXlUUzThw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.12.0.tgz", + "integrity": "sha512-+MnSB0vGZjszSzr5AW8z93/9fkDu2RLtWmAN8gskURq7EW2sSwqy8jZa0V26rjuBVkwhdA3Hw8z3VWoeBUOw+A==", "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", @@ -10884,9 +10945,9 @@ } }, "@azure/core-util": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.3.2.tgz", - "integrity": "sha512-2bECOUh88RvL1pMZTcc6OzfobBeWDBf5oBbhjIhT1MV9otMVWCzpOJkkiKtrnO88y5GGBelgY8At73KGAdbkeQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", + "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", @@ -10894,13 +10955,13 @@ } }, "@azure/identity": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.2.4.tgz", - "integrity": "sha512-t63oyi2LAn+ZAehYA7SDlhJDd1J0eLO3a21mxTaJcXqKW/tbRbKmo/BeyyTIXbBaoeTFn0xnyQHyomwndTqKUA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.3.0.tgz", + "integrity": "sha512-gISa/dAAxrWt6F2WiDXZY0y2xY4MLlN2wkNW4cPuq5OgPQKLSkxLc4I2WR04puTfZyQZnpXbAapAMEj1b96fgg==", "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", + "@azure/core-auth": "^1.5.0", "@azure/core-client": "^1.4.0", "@azure/core-rest-pipeline": "^1.1.0", "@azure/core-tracing": "^1.0.0", @@ -10927,18 +10988,18 @@ } }, "@azure/msal-browser": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.0.tgz", - "integrity": "sha512-gxBh83IumHgEP9uMCm9pJLKLRwICMQTxG9TX3AytdNt3oLUI3tytm/szYD5u5zKJgSkhHvwFSM+NPnM04hYw3w==", + "version": "2.38.2", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.2.tgz", + "integrity": "sha512-71BeIn2we6LIgMplwCSaMq5zAwmalyJR3jFcVOZxNVfQ1saBRwOD+P77nLs5vrRCedVKTq8RMFhIOdpMLNno0A==", "dev": true, "requires": { - "@azure/msal-common": "13.2.0" + "@azure/msal-common": "13.3.0" } }, "@azure/msal-common": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.2.0.tgz", - "integrity": "sha512-rnstQ7Zgn3fSTKNQO+/YNV34/QXJs0vni7IA0/3QB1EEyrJg14xyRmTqlw9ta+pdSuT5OJwUP8kI3D/rBwUIBw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.0.tgz", + "integrity": "sha512-/VFWTicjcJbrGp3yQP7A24xU95NiDMe23vxIU1U6qdRPFsprMDNUohMudclnd+WSHE4/McqkZs/nUU3sAKkVjg==", "dev": true }, "@azure/msal-node": { @@ -10950,15 +11011,82 @@ "@azure/msal-common": "13.2.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" + }, + "dependencies": { + "@azure/msal-common": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.2.0.tgz", + "integrity": "sha512-rnstQ7Zgn3fSTKNQO+/YNV34/QXJs0vni7IA0/3QB1EEyrJg14xyRmTqlw9ta+pdSuT5OJwUP8kI3D/rBwUIBw==", + "dev": true + } } }, "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dev": true, "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/helper-validator-identifier": { @@ -10968,13 +11096,13 @@ "dev": true }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -11052,15 +11180,15 @@ } }, "@eslint-community/regexpp": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.1.tgz", - "integrity": "sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", "dev": true }, "@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -11075,9 +11203,9 @@ } }, "@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", "dev": true }, "@humanwhocodes/config-array": { @@ -11115,9 +11243,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true }, "@jridgewell/set-array": { @@ -11137,19 +11265,19 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@leichtgewicht/ip-codec": { @@ -11159,9 +11287,9 @@ "dev": true }, "@microsoft/microsoft-graph-types": { - "version": "2.35.0", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.35.0.tgz", - "integrity": "sha512-3jCQyKaYbNuzVG884SNuWKS19FPUxBwHfDAb3DqZWBwPYcX3HbDe2D22z9Ue+UV+JGuw917cH75RTSgrdnutFg==", + "version": "2.38.0", + "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.38.0.tgz", + "integrity": "sha512-EXpTf/TFUb0EfBXiQ0rTmZf6fRgBn73lNfYdU2QKvqiMPQD/Cs2Gt+VmWVtK19F9Mf5Mt4bDTu5Ft0TGXOF8rA==", "dev": true }, "@nodelib/fs.scandir": { @@ -11280,9 +11408,9 @@ "dev": true }, "@types/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "version": "8.44.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dev": true, "requires": { "@types/estree": "*", @@ -11324,9 +11452,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "version": "4.17.36", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", "dev": true, "requires": { "@types/node": "*", @@ -11543,9 +11671,9 @@ } }, "@types/webpack": { - "version": "5.28.1", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.1.tgz", - "integrity": "sha512-qw1MqGZclCoBrpiSe/hokSgQM/su8Ocpl3L/YHE0L6moyaypg4+5F7Uzq7NgaPKPxUxUbQ4fLPLpDWdR27bCZw==", + "version": "5.28.2", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.2.tgz", + "integrity": "sha512-7tcxyrIOd7WGimZIcWU6pDsNh2edGGnwYExOvd3l/nMvuxqwVPrFXnnTbYCnplqV9BJoU7Mo2mfFtiH8CNFvYw==", "dev": true, "requires": { "@types/node": "*", @@ -11578,102 +11706,103 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz", - "integrity": "sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.1.tgz", + "integrity": "sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw==", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.9", - "@typescript-eslint/type-utils": "5.59.9", - "@typescript-eslint/utils": "5.59.9", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/type-utils": "6.4.1", + "@typescript-eslint/utils": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/parser": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.9.tgz", - "integrity": "sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz", + "integrity": "sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.59.9", - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/typescript-estree": "5.59.9", + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/typescript-estree": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz", - "integrity": "sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz", + "integrity": "sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/visitor-keys": "5.59.9" + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1" } }, "@typescript-eslint/type-utils": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz", - "integrity": "sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.1.tgz", + "integrity": "sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.59.9", - "@typescript-eslint/utils": "5.59.9", + "@typescript-eslint/typescript-estree": "6.4.1", + "@typescript-eslint/utils": "6.4.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.9.tgz", - "integrity": "sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz", + "integrity": "sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz", - "integrity": "sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz", + "integrity": "sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/visitor-keys": "5.59.9", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/utils": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.9.tgz", - "integrity": "sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.1.tgz", + "integrity": "sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.9", - "@typescript-eslint/types": "5.59.9", - "@typescript-eslint/typescript-estree": "5.59.9", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/typescript-estree": "6.4.1", + "semver": "^7.5.4" } }, "@typescript-eslint/visitor-keys": { - "version": "5.59.9", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz", - "integrity": "sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz", + "integrity": "sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.59.9", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.4.1", + "eslint-visitor-keys": "^3.4.1" } }, "@webassemblyjs/ast": { @@ -12387,14 +12516,14 @@ "dev": true }, "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" } }, @@ -12482,15 +12611,15 @@ } }, "caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "version": "1.0.30001524", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", + "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", "dev": true }, "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -13021,9 +13150,9 @@ } }, "del-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-5.0.0.tgz", - "integrity": "sha512-rENFhUaYcjoMODwFhhlON+ogN7DoG+4+GFN+bsA1XeDt4w2OKQnQadFP1thHSAlK9FAtl88qgP66wOV+eFZZiQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-5.0.1.tgz", + "integrity": "sha512-hCDHJd0u0jKFqizgInYXZaILsqOIA7Zl6e7M3hJwP+SlwUAgtV/EB22EPF4e2+9VAVnBDQQBE6tDRe+/UuoFhg==", "dev": true, "requires": { "del": "^7.0.0", @@ -13082,9 +13211,9 @@ "dev": true }, "dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -13148,9 +13277,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.468", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.468.tgz", - "integrity": "sha512-6M1qyhaJOt7rQtNti1lBA0GwclPH+oKCmsra/hkcWs5INLxfXXD/dtdnaKUYQu/pjOBP/8Osoe4mAcNvvzoFag==", + "version": "1.4.503", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz", + "integrity": "sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==", "dev": true }, "emoji-regex": { @@ -13274,27 +13403,27 @@ "dev": true }, "eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", - "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.48.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -13318,22 +13447,6 @@ "text-table": "^0.2.0" }, "dependencies": { - "eslint-scope": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", - "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -13352,19 +13465,19 @@ } }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "espree": { @@ -13385,14 +13498,6 @@ "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "esrecurse": { @@ -13402,20 +13507,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -13838,12 +13935,13 @@ "dev": true }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, @@ -13960,9 +14058,9 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, @@ -14406,9 +14504,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -14451,12 +14549,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -15284,9 +15376,9 @@ "dev": true }, "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "requires": { "has": "^1.0.3" @@ -15504,6 +15596,12 @@ "argparse": "^2.0.1" } }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -15590,6 +15688,15 @@ "safe-buffer": "^5.0.1" } }, + "keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", @@ -16434,12 +16541,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -16465,9 +16566,9 @@ "dev": true }, "node-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, "requires": { "data-uri-to-buffer": "^4.0.0", @@ -17331,12 +17432,12 @@ "dev": true }, "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "requires": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -18405,29 +18506,19 @@ "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true }, + "ts-api-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", + "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", + "dev": true, + "requires": {} + }, "tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -18801,6 +18892,24 @@ "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } } }, "webpack-cli": { @@ -18893,9 +19002,9 @@ } }, "webpack-dev-server": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", - "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, "requires": { "@types/bonjour": "^3.5.9", @@ -18904,7 +19013,7 @@ "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", diff --git a/package.json b/package.json index c2ff3b2bc..2873576b2 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "version": "4.0.0-alpha0", "description": "A JavaScript library for SharePoint & Graph development.", "devDependencies": { - "@azure/identity": "3.2.4", + "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.0", - "@microsoft/microsoft-graph-types": "2.35.0", + "@microsoft/microsoft-graph-types": "2.38.0", "@pnp/buildsystem": "3.1.0", "@types/chai": "4.3.5", "@types/chai-as-promised": "7.1.5", @@ -16,25 +16,25 @@ "@types/gulp": "4.0.13", "@types/mocha": "10.0.1", "@types/node": "16.11.7", - "@types/webpack": "5.28.1", + "@types/webpack": "5.28.2", "@types/yargs": "17.0.24", - "@typescript-eslint/eslint-plugin": "5.59.9", - "@typescript-eslint/parser": "5.59.9", - "chai": "4.3.7", + "@typescript-eslint/eslint-plugin": "6.4.1", + "@typescript-eslint/parser": "6.4.1", + "chai": "4.3.8", "chai-as-promised": "7.1.1", - "del-cli": "5.0.0", - "eslint": "8.45.0", + "del-cli": "5.0.1", + "eslint": "8.48.0", "findup-sync": "5.0.0", "mocha": "10.2.0", "msal": "1.4.18", - "node-fetch": "3.3.1", + "node-fetch": "3.3.2", "prettyjson": "1.2.5", "string-replace-loader": "3.1.0", - "tslib": "2.6.0", + "tslib": "2.6.2", "typescript": "4.5.5", "webpack": "5.88.2", "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.0", + "webpack-dev-server": "4.15.1", "yargs": "17.7.2" }, "scripts": { diff --git a/packages/azidjsclient/package.json b/packages/azidjsclient/package.json index eb9240c82..32bfc2d1c 100644 --- a/packages/azidjsclient/package.json +++ b/packages/azidjsclient/package.json @@ -7,7 +7,7 @@ "dependencies": { "@pnp/core": "0.0.0-PLACEHOLDER", "@pnp/queryable": "0.0.0-PLACEHOLDER", - "@azure/identity": "3.2.4", - "tslib": "2.6.0" + "@azure/identity": "3.3.0", + "tslib": "2.6.2" } } \ No newline at end of file diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index c6544f8d1..afb91b796 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -346,16 +346,6 @@ export class _DriveItem extends _GraphInstance { public async preview(previewOptions?: IPreviewOptions): Promise { return graphPost(DriveItem(this, "preview"), body(previewOptions)); } - - // /** - // * Method for getting item analytics. Defaults to lastSevenDays. - // * @param analyticsOptions - IAnalyticsOptions (Optional) - // * @returns IGraphCollection - // */ - // public analytics(analyticsOptions?: IAnalyticsOptions): IGraphCollection { - // const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; - // return >GraphCollection(this, query); - // } } export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } export const DriveItem = graphInvokableFactory(_DriveItem); diff --git a/packages/graph/package.json b/packages/graph/package.json index dc70e10d0..7c9730e62 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -8,8 +8,8 @@ "postinstall": "node ./post-install.cjs" }, "dependencies": { - "@microsoft/microsoft-graph-types": "2.35.0", - "tslib": "2.6.0", + "@microsoft/microsoft-graph-types": "2.38.0", + "tslib": "2.6.2", "@pnp/core": "0.0.0-PLACEHOLDER", "@pnp/queryable": "0.0.0-PLACEHOLDER" } From af2b1bf7bf74d8b184d5c28642cbf932a58315a9 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 14:33:11 +0000 Subject: [PATCH 014/171] Remove onedrive file left; fix to queryable spelling --- docs/graph/onedrive.md | 0 packages/queryable/queryable.ts | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 docs/graph/onedrive.md diff --git a/docs/graph/onedrive.md b/docs/graph/onedrive.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index d30904fbe..942284115 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -33,7 +33,7 @@ export type QueryableInit = Queryable | string | [Queryable, string]; @invokable() export class Queryable extends Timeline implements IQueryableInternal { - // tracks any query paramters which will be appended to the request url + // tracks any query parameters which will be appended to the request url private _query: URLSearchParams; // tracks the current url for a given Queryable @@ -52,7 +52,7 @@ export class Queryable extends Timeline implements IQu this._query = new URLSearchParams(); - // add an intneral moment with specific implementaion for promise creation + // add an internal moment with specific implementation for promise creation this.moments[this.InternalPromise] = reduce(); let parent: Queryable; From b30eb990562a4d8b5c687fc5bc39b471d8537fe5 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 14:43:06 +0000 Subject: [PATCH 015/171] Fix merge conflicts --- packages/graph/files/types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index afb91b796..e07ae8a2c 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -347,6 +347,7 @@ export class _DriveItem extends _GraphInstance { return graphPost(DriveItem(this, "preview"), body(previewOptions)); } } + export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } export const DriveItem = graphInvokableFactory(_DriveItem); From 455b332b1baee41f55f07decfe392744a29d03ca Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 14:47:29 +0000 Subject: [PATCH 016/171] Remove IAnaltyicsOptions because it moved. --- packages/graph/files/types.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index e07ae8a2c..76c51d907 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -469,7 +469,3 @@ export interface IDeltaItems { delta: IGraphCollection; values: any[]; } - -export interface IAnalyticsOptions { - timeRange: "allTime" | "lastSevenDays"; -} From ee801c584b34515cffc51519ef2d71391e777ab4 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 28 Aug 2023 14:49:04 +0000 Subject: [PATCH 017/171] Fix Analytics import --- packages/graph/analytics/driveItems.ts | 2 +- packages/graph/files/index.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/graph/analytics/driveItems.ts b/packages/graph/analytics/driveItems.ts index cf4d97d97..719b5188d 100644 --- a/packages/graph/analytics/driveItems.ts +++ b/packages/graph/analytics/driveItems.ts @@ -1,5 +1,5 @@ import { _DriveItem } from "../files/types.js"; -import { analytics } from "./types.js"; +import { analytics, IAnalyticsOptions } from "./types.js"; import { ItemAnalytics as IItemAnalytics } from "@microsoft/microsoft-graph-types"; declare module "../files/types" { diff --git a/packages/graph/files/index.ts b/packages/graph/files/index.ts index 8e7bf5ef4..9f93e61a6 100644 --- a/packages/graph/files/index.ts +++ b/packages/graph/files/index.ts @@ -31,7 +31,6 @@ export { IDeltaItems, IPreviewOptions, IFileOptions, - IAnalyticsOptions, } from "./types.js"; declare module "../fi" { From a0fa893bbfa98d93e3e8dee84219afee5ee9c905 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 31 Aug 2023 11:44:37 -0400 Subject: [PATCH 018/171] merging --- CHANGELOG.md | 3 + debug/launch/graph.ts | 7 +- debug/launch/sp.ts | 14 +- packages/core/extendable.ts | 27 ++- packages/core/index.ts | 1 - packages/nodejs/sp-extensions/stream.ts | 258 ++++++++++++------------ packages/queryable/add-prop.ts | 18 -- packages/queryable/index.ts | 44 +++- packages/queryable/invokable.ts | 18 +- packages/queryable/operations.ts | 32 --- packages/queryable/queryable-factory.ts | 19 -- packages/queryable/queryable.ts | 52 ++++- packages/queryable/request-builders.ts | 20 -- 13 files changed, 275 insertions(+), 238 deletions(-) delete mode 100644 packages/queryable/add-prop.ts delete mode 100644 packages/queryable/operations.ts delete mode 100644 packages/queryable/queryable-factory.ts delete mode 100644 packages/queryable/request-builders.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 49c69bd16..6c1ced204 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed +- queryable + - moved add-props.ts and request-builders.ts to index.ts + - graph - IGraphQueryableCollection now supports async iterator pattern - IGraphQueryableCollection count method now returns -1 if the collection does not support counting diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index 9fe04eec9..7b20913c8 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -8,7 +8,12 @@ export async function Example(settings: any) { const graph = graphSetup(settings); - const users = await graph.users(); + const ur = new URLSearchParams(); + ur.set("$filter", "NOT groupTypes/any(c:c+eq+'Unified')"); + + const users = graph.users.filter("NOT groupTypes/any(c:c+eq+'Unified')"); + + const y = ur.toString(); Logger.log({ data: users, diff --git a/debug/launch/sp.ts b/debug/launch/sp.ts index a6fec4bed..9b8e490f3 100644 --- a/debug/launch/sp.ts +++ b/debug/launch/sp.ts @@ -2,6 +2,8 @@ import { ITestingSettings } from "../../test/load-settings.js"; import { Logger, LogLevel } from "@pnp/logging"; import { spSetup } from "./setup.js"; import "@pnp/sp/webs"; +import "@pnp/sp/lists"; +import "@pnp/sp/items"; declare var process: { exit(code?: number): void }; @@ -9,7 +11,17 @@ export async function Example(settings: ITestingSettings) { const sp = spSetup(settings); - const w = await sp.web(); + + // https://318studios.sharepoint.com/sites/dev/_api/web/lists/getByTitle('FolderTest')/items?$select=FileRef&$orderby=FileRef + + const w = await sp.web.lists.getByTitle("FolderTest").items.select("FileRef").orderBy("FileRef")(); + + + const y = w.map(i => i.FileRef); + + const u = y.sort(); + + Logger.log({ data: w, diff --git a/packages/core/extendable.ts b/packages/core/extendable.ts index ca6b0a190..e04b8fd0d 100644 --- a/packages/core/extendable.ts +++ b/packages/core/extendable.ts @@ -13,10 +13,35 @@ const ObjExtensionsSym = Symbol.for("PnPExt"); const factoryExtensions: Map = new Map(); +/** + * Option 1 + * + * just use it on individual objects, consumers make their own factory functions + * extend(object: any, extensions: ExtensionType) + * + * Option 2 + * + * maintain some support for extending factories - but how are these applied later? + * that pattern needs to change + * + * Option 3 + * + * leave it as a decorator, consumers subclass and tag (I don't like this) + * + * Option 4 + * + * Ask the community if anyone cares. If not, punt them fully (kinda lame) + * + */ + + + + + + /** * Decorator factory wrapping any tagged class in the extension proxy, enabling the use of object extensions * - * @description MUST be applied last (i.e. be the first decorator in the list top to bottom applied to a class) * * @returns Decorator implementation */ diff --git a/packages/core/index.ts b/packages/core/index.ts index 60eabe759..b46211085 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -2,7 +2,6 @@ export * from "./storage.js"; export * from "./util.js"; export * from "./moments.js"; export * from "./timeline.js"; -export * from "./extendable.js"; /** * Behavior exports diff --git a/packages/nodejs/sp-extensions/stream.ts b/packages/nodejs/sp-extensions/stream.ts index 38d78a744..a4f4949c5 100644 --- a/packages/nodejs/sp-extensions/stream.ts +++ b/packages/nodejs/sp-extensions/stream.ts @@ -1,136 +1,136 @@ -import { asCancelableScope, CancelAction, headers } from "@pnp/queryable"; -import { File, Files, IFile, IFileAddResult, IFiles, IFileUploadProgressData } from "@pnp/sp/files/index.js"; -import { spPost, encodePath } from "@pnp/sp"; -import { ReadStream } from "fs"; +// import { asCancelableScope, CancelAction, headers } from "@pnp/queryable"; +// import { File, Files, IFile, IFileAddResult, IFiles, IFileUploadProgressData } from "@pnp/sp/files/index.js"; +// import { spPost, encodePath } from "@pnp/sp"; +// import { ReadStream } from "fs"; import { PassThrough } from "stream"; -import { extendFactory, getGUID, isFunc } from "@pnp/core"; -import { StreamParse } from "../behaviors/stream-parse.js"; -import { fileFromServerRelativePath } from "@pnp/sp/files/index.js"; +// import { extendFactory, getGUID, isFunc } from "@pnp/core"; +// import { StreamParse } from "../behaviors/stream-parse.js"; +// import { fileFromServerRelativePath } from "@pnp/sp/files/index.js"; export interface IResponseBodyStream { body: PassThrough; knownLength: number; } -extendFactory(File, { - - getStream(): Promise { - return File(this, "$value").using(StreamParse())(headers({ "binaryStringResponseBody": "true" })); - }, - - /** - * Sets the contents of a file using a chunked upload approach. Not supported in batching. - * - * @param stream The file to upload (as readable stream) - * @param progress A callback function which can be used to track the progress of the upload - */ - setStreamContentChunked: asCancelableScope(async function (this: IFile, stream: ReadStream, progress?: (data: IFileUploadProgressData) => void): Promise { - - if (!isFunc(progress)) { - progress = () => void (0); - } - - const uploadId = getGUID(); - - const fileRef = File(this).using(CancelAction(() => { - return File(this).cancelUpload(uploadId); - })); - - let blockNumber = -1; - let pointer = 0; - - for await (const chunk of stream) { - blockNumber++; - progress({ - uploadId, - blockNumber, - chunkSize: chunk.length, - currentPointer: pointer, - fileSize: -1, - stage: blockNumber === 0 ? "starting" : "continue", - totalBlocks: -1, - }); - if (blockNumber === 0) { - pointer = await fileRef.startUpload(uploadId, chunk); - } else { - pointer = await fileRef.continueUpload(uploadId, pointer, chunk); - } - } - - progress({ uploadId, blockNumber, chunkSize: -1, currentPointer: -1, fileSize: -1, stage: "finishing", totalBlocks: -1 }); - return await fileRef.finishUpload(uploadId, pointer, Buffer.from([])); - }), -}); - -extendFactory(Files, { - - /** - * Uploads a file. Not supported for batching - * - * @param url The folder-relative url of the file - * @param content The Blob file content or File readable stream to add - * @param progress A callback function which can be used to track the progress of the upload - * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true) - * @param chunkSize The size of each file slice, in bytes (default: 10485760) - * @returns The new File and the raw response. - */ - addChunked: asCancelableScope(async function ( - this: IFiles, - url: string, - content: Blob | ReadStream, - progress?: (data: IFileUploadProgressData) => void, - shouldOverWrite = true, - chunkSize = 10485760 - ) { - - const response = await spPost(Files(this, `add(overwrite=${shouldOverWrite},url='${encodePath(url)}')`)); - - const file = fileFromServerRelativePath(this, response.ServerRelativeUrl); - - file.using(CancelAction(async () => { - return File(file).delete(); - })); - - if ("function" === typeof (content as ReadStream).read) { - return file.setStreamContentChunked(content as ReadStream, progress); - } - - return file.setContentChunked(content as Blob, progress, chunkSize); - }), -}); - -// these are needed to avoid a type/name not found issue where TSC doesn't properly keep -// the references used within the module declarations below -type ProgressFunc = (data: IFileUploadProgressData) => void; -type ChunkedResult = Promise; - -declare module "@pnp/sp/files/types" { - - interface IFile { - /** - * Gets a PassThrough stream representing the file - */ - getStream(): Promise; - - /** - * Sets a file stream content chunk - */ - setStreamContentChunked( - stream: ReadStream, - progress?: ProgressFunc, - ): ChunkedResult; - } - - interface IFiles { - /** - * Adds a file stream in chunks - */ - addChunked( - url: string, - content: Blob | ReadStream, - progress?: ProgressFunc, - shouldOverWrite?: boolean, - chunkSize?: number, - ): ChunkedResult; - } -} +// extendFactory(File, { + +// getStream(): Promise { +// return File(this, "$value").using(StreamParse())(headers({ "binaryStringResponseBody": "true" })); +// }, + +// /** +// * Sets the contents of a file using a chunked upload approach. Not supported in batching. +// * +// * @param stream The file to upload (as readable stream) +// * @param progress A callback function which can be used to track the progress of the upload +// */ +// setStreamContentChunked: asCancelableScope(async function (this: IFile, stream: ReadStream, progress?: (data: IFileUploadProgressData) => void): Promise { + +// if (!isFunc(progress)) { +// progress = () => void (0); +// } + +// const uploadId = getGUID(); + +// const fileRef = File(this).using(CancelAction(() => { +// return File(this).cancelUpload(uploadId); +// })); + +// let blockNumber = -1; +// let pointer = 0; + +// for await (const chunk of stream) { +// blockNumber++; +// progress({ +// uploadId, +// blockNumber, +// chunkSize: chunk.length, +// currentPointer: pointer, +// fileSize: -1, +// stage: blockNumber === 0 ? "starting" : "continue", +// totalBlocks: -1, +// }); +// if (blockNumber === 0) { +// pointer = await fileRef.startUpload(uploadId, chunk); +// } else { +// pointer = await fileRef.continueUpload(uploadId, pointer, chunk); +// } +// } + +// progress({ uploadId, blockNumber, chunkSize: -1, currentPointer: -1, fileSize: -1, stage: "finishing", totalBlocks: -1 }); +// return await fileRef.finishUpload(uploadId, pointer, Buffer.from([])); +// }), +// }); + +// extendFactory(Files, { + +// /** +// * Uploads a file. Not supported for batching +// * +// * @param url The folder-relative url of the file +// * @param content The Blob file content or File readable stream to add +// * @param progress A callback function which can be used to track the progress of the upload +// * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true) +// * @param chunkSize The size of each file slice, in bytes (default: 10485760) +// * @returns The new File and the raw response. +// */ +// addChunked: asCancelableScope(async function ( +// this: IFiles, +// url: string, +// content: Blob | ReadStream, +// progress?: (data: IFileUploadProgressData) => void, +// shouldOverWrite = true, +// chunkSize = 10485760 +// ) { + +// const response = await spPost(Files(this, `add(overwrite=${shouldOverWrite},url='${encodePath(url)}')`)); + +// const file = fileFromServerRelativePath(this, response.ServerRelativeUrl); + +// file.using(CancelAction(async () => { +// return File(file).delete(); +// })); + +// if ("function" === typeof (content as ReadStream).read) { +// return file.setStreamContentChunked(content as ReadStream, progress); +// } + +// return file.setContentChunked(content as Blob, progress, chunkSize); +// }), +// }); + +// // these are needed to avoid a type/name not found issue where TSC doesn't properly keep +// // the references used within the module declarations below +// type ProgressFunc = (data: IFileUploadProgressData) => void; +// type ChunkedResult = Promise; + +// declare module "@pnp/sp/files/types" { + +// interface IFile { +// /** +// * Gets a PassThrough stream representing the file +// */ +// getStream(): Promise; + +// /** +// * Sets a file stream content chunk +// */ +// setStreamContentChunked( +// stream: ReadStream, +// progress?: ProgressFunc, +// ): ChunkedResult; +// } + +// interface IFiles { +// /** +// * Adds a file stream in chunks +// */ +// addChunked( +// url: string, +// content: Blob | ReadStream, +// progress?: ProgressFunc, +// shouldOverWrite?: boolean, +// chunkSize?: number, +// ): ChunkedResult; +// } +// } diff --git a/packages/queryable/add-prop.ts b/packages/queryable/add-prop.ts deleted file mode 100644 index 239cfb1f0..000000000 --- a/packages/queryable/add-prop.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Adds a property to a target instance - * - * @param target The object to whose prototype we will add a property - * @param name Property name - * @param factory Factory method used to produce the property value - * @param path Any additional path required to produce the value - */ -export function addProp(target: { prototype: any }, name: string, factory: (arg: U, p?: string) => T, path?: string): void { - - Reflect.defineProperty(target.prototype, name, { - configurable: true, - enumerable: true, - get: function (this: U): T { - return factory(this, path || name); - }, - }); -} diff --git a/packages/queryable/index.ts b/packages/queryable/index.ts index 3768ab066..e7c3aa677 100644 --- a/packages/queryable/index.ts +++ b/packages/queryable/index.ts @@ -1,9 +1,7 @@ -export * from "./add-prop.js"; +import { jsS } from "@pnp/core"; + export * from "./invokable.js"; -export * from "./operations.js"; export * from "./queryable.js"; -export * from "./queryable-factory.js"; -export * from "./request-builders.js"; /** * Behavior exports @@ -17,3 +15,41 @@ export * from "./behaviors/inject-headers.js"; export * from "./behaviors/parsers.js"; export * from "./behaviors/timeout.js"; export * from "./behaviors/resolvers.js"; + +/** + * Adds a property to a target instance + * + * @param target The object to whose prototype we will add a property + * @param name Property name + * @param factory Factory method used to produce the property value + * @param path Any additional path required to produce the value + */ +export function addProp(target: { prototype: any }, name: string, factory: (arg: U, p?: string) => T, path?: string): void { + + Reflect.defineProperty(target.prototype, name, { + configurable: true, + enumerable: true, + get: function (this: U): T { + return factory(this, path || name); + }, + }); +} + +/** + * takes the supplied object of type U, JSON.stringify's it, and sets it as the value of a "body" property + */ +export function body, U = any>(o: U, previous?: T): T & { body: string } { + return Object.assign({ body: jsS(o) }, previous); +} + +/** + * Adds headers to an new/existing RequestInit + * + * @param o Headers to add + * @param previous Any previous partial RequestInit + * @returns RequestInit combining previous and specified headers + */ +// eslint-disable-next-line @typescript-eslint/ban-types +export function headers, U extends Record = {}>(o: U, previous?: T): T & { headers: U } { + return Object.assign({}, previous, { headers: { ...previous?.headers, ...o } }); +} diff --git a/packages/queryable/invokable.ts b/packages/queryable/invokable.ts index 7342a2923..c7a52272e 100644 --- a/packages/queryable/invokable.ts +++ b/packages/queryable/invokable.ts @@ -1,4 +1,4 @@ -import { get, op } from "./operations.js"; +import { get, op } from "./queryable.js"; import { isFunc } from "@pnp/core"; /** @@ -9,12 +9,6 @@ import { isFunc } from "@pnp/core"; */ export function invokable(invokeableAction?: (this: any, init?: RequestInit) => Promise) { - if (!isFunc(invokeableAction)) { - invokeableAction = function (this: any, init?: RequestInit) { - return op(this, get, init); - }; - } - return (target: any) => { return new Proxy(target, { @@ -23,9 +17,13 @@ export function invokable(invokeableAction?: (this: any, init?: RequestInit) => const invokableInstance = Object.assign(function (init?: RequestInit) { - // the "this" for our invoked object will be set by extendable OR we use invokableInstance directly - const localThis = typeof this === "undefined" ? invokableInstance : this; - return Reflect.apply(invokeableAction, localThis, [init]); + if (!isFunc(invokeableAction)) { + invokeableAction = function (this: any, init?: RequestInit) { + return op(this, get, init); + }; + } + + return Reflect.apply(invokeableAction, invokableInstance, [init]); }, Reflect.construct(clz, args, newTarget)); diff --git a/packages/queryable/operations.ts b/packages/queryable/operations.ts deleted file mode 100644 index 2e9c85ad8..000000000 --- a/packages/queryable/operations.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { IQueryableInternal } from "./queryable"; - -function ensureInit(method: string, init: RequestInit = { headers: {} }): RequestInit { - - return { method, ...init, headers: { ...init.headers } }; -} - -export type Operation = (this: IQueryableInternal, init?: RequestInit) => Promise; - -export function get(this: IQueryableInternal, init?: RequestInit): Promise { - return this.start(ensureInit("GET", init)); -} - -export function post(this: IQueryableInternal, init?: RequestInit): Promise { - return this.start(ensureInit("POST", init)); -} - -export function put(this: IQueryableInternal, init?: RequestInit): Promise { - return this.start(ensureInit("PUT", init)); -} - -export function patch(this: IQueryableInternal, init?: RequestInit): Promise { - return this.start(ensureInit("PATCH", init)); -} - -export function del(this: IQueryableInternal, init?: RequestInit): Promise { - return this.start(ensureInit("DELETE", init)); -} - -export function op(q: IQueryableInternal, operation: Operation, init?: RequestInit): Promise { - return Reflect.apply(operation, q, [init]); -} diff --git a/packages/queryable/queryable-factory.ts b/packages/queryable/queryable-factory.ts deleted file mode 100644 index a9d778ce7..000000000 --- a/packages/queryable/queryable-factory.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { IQueryableInternal, QueryableInit } from "./queryable.js"; - -export function queryableFactory( - constructor: { new(init: QueryableInit, path?: string): InstanceType }, -): (init: QueryableInit, path?: string) => InstanceType { - - return (init: QueryableInit, path?: string) => { - - // construct the concrete instance - const instance = new constructor(init, path); - - // we emit the construct event from the factory because we need all of the decorators and constructors - // to have fully finished before we emit, which is now true. We type the instance to any to get around - // the protected nature of emit - (instance).emit.construct(init, path); - - return instance; - }; -} diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index d30904fbe..4f60a6739 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -1,4 +1,4 @@ -import { combine, getGUID, Timeline, asyncReduce, reduce, broadcast, request, extendable, isArray, TimelinePipe, lifecycle, stringIsNullOrEmpty } from "@pnp/core"; +import { combine, getGUID, Timeline, asyncReduce, reduce, broadcast, request, isArray, TimelinePipe, lifecycle, stringIsNullOrEmpty } from "@pnp/core"; import { IInvokable, invokable } from "./invokable.js"; export type QueryableConstructObserver = (this: IQueryableInternal, init: QueryableInit, path?: string) => void; @@ -29,7 +29,6 @@ const DefaultMoments = { export type QueryableInit = Queryable | string | [Queryable, string]; -@extendable() @invokable() export class Queryable extends Timeline implements IQueryableInternal { @@ -237,3 +236,52 @@ export interface IQueryableInternal extends Timeline, IInvokable { toRequestUrl(): string; toUrl(): string; } + +function ensureInit(method: string, init: RequestInit = { headers: {} }): RequestInit { + + return { method, ...init, headers: { ...init.headers } }; +} + +export type Operation = (this: IQueryableInternal, init?: RequestInit) => Promise; + +export function get(this: IQueryableInternal, init?: RequestInit): Promise { + return this.start(ensureInit("GET", init)); +} + +export function post(this: IQueryableInternal, init?: RequestInit): Promise { + return this.start(ensureInit("POST", init)); +} + +export function put(this: IQueryableInternal, init?: RequestInit): Promise { + return this.start(ensureInit("PUT", init)); +} + +export function patch(this: IQueryableInternal, init?: RequestInit): Promise { + return this.start(ensureInit("PATCH", init)); +} + +export function del(this: IQueryableInternal, init?: RequestInit): Promise { + return this.start(ensureInit("DELETE", init)); +} + +export function op(q: IQueryableInternal, operation: Operation, init?: RequestInit): Promise { + return Reflect.apply(operation, q, [init]); +} + +export function queryableFactory( + constructor: { new(init: QueryableInit, path?: string): InstanceType }, +): (init: QueryableInit, path?: string) => InstanceType { + + return (init: QueryableInit, path?: string) => { + + // construct the concrete instance + const instance = new constructor(init, path); + + // we emit the construct event from the factory because we need all of the decorators and constructors + // to have fully finished before we emit, which is now true. We type the instance to any to get around + // the protected nature of emit + (instance).emit.construct(init, path); + + return instance; + }; +} diff --git a/packages/queryable/request-builders.ts b/packages/queryable/request-builders.ts deleted file mode 100644 index 8a7faaee5..000000000 --- a/packages/queryable/request-builders.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { jsS } from "@pnp/core"; - -/** - * takes the supplied object of type U, JSON.stringify's it, and sets it as the value of a "body" property - */ -export function body, U = any>(o: U, previous?: T): T & { body: string } { - return Object.assign({ body: jsS(o) }, previous); -} - -/** - * Adds headers to an new/existing RequestInit - * - * @param o Headers to add - * @param previous Any previous partial RequestInit - * @returns RequestInit combining previous and specified headers - */ -// eslint-disable-next-line @typescript-eslint/ban-types -export function headers, U extends Record = {}>(o: U, previous?: T): T & { headers: U } { - return Object.assign({}, previous, { headers: { ...previous?.headers, ...o } }); -} From 4029c008aa1a4616a57f820541a7461c19cdfafd Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 29 Sep 2023 07:15:07 -0600 Subject: [PATCH 019/171] Updating Graph Presence to include missing endpoints New documentation samples New tests added 4 new endpoints added. --- docs/graph/cloud-communications.md | 83 +++++++++++++++++++- packages/graph/cloud-communications/types.ts | 53 ++++++++++++- test/graph/cloud-communications.ts | 60 ++++++++++++++ 3 files changed, 192 insertions(+), 4 deletions(-) create mode 100644 test/graph/cloud-communications.ts diff --git a/docs/graph/cloud-communications.md b/docs/graph/cloud-communications.md index 44f557354..bdfd38f31 100644 --- a/docs/graph/cloud-communications.md +++ b/docs/graph/cloud-communications.md @@ -12,7 +12,7 @@ More information can be found in the official Graph documentation: ## Get users presence -Gets a list of all the contacts for the user. +Gets a user's presence ```TypeScript import { graphfi } from "@pnp/graph"; @@ -38,3 +38,84 @@ const graph = graphfi(...); const presenceList = await graph.communications.getPresencesByUserId(["99999999-9999-9999-9999-999999999999"]); ``` + +## Set presence for a User + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/cloud-communications"; + +const graph = graphfi(...); + +const presenceMe = await graph.me.presence.setPresence( + availability: "Busy", + activity:"InACall", + sessionId:"b8d08156-5ba4-4c5d-bee8-f2634901d491", + expirationDuration: "PT1H" +); + +const presenceThem = await graph.users.getById("99999999-9999-9999-9999-999999999999").setPresence( + availability: "Busy", + activity:"InACall", + sessionId:"b8d08156-5ba4-4c5d-bee8-f2634901d491", + expirationDuration: "PT1H" +); + +``` + +## Clear presence for a User + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/cloud-communications"; + +const graph = graphfi(...); + +// clear my presence +await graph.me.presence.clearPreferredPresence(); + +// clear user presence +await graph.users.getById("99999999-9999-9999-9999-999999999999").clearPreferredPresence(); + +``` + +## Set presence preference for a User + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/cloud-communications"; + +const graph = graphfi(...); + +// set my preferred presence +await graph.me.presence.setPreferredPresence({ + availability:"Available", + activity:"Available", + expirationDuration:"PT1H" +}); + + +// set user preferred presence +await graph.users.getById("99999999-9999-9999-9999-999999999999").presence.setPreferredPresence({ + availability:"Available", + activity:"Available", + expirationDuration:"PT1H" +}); + +``` + +## Clear presence preference for a User + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/cloud-communications"; + +const graph = graphfi(...); + +// set my presence preference +await graph.me.presence.clearPreferredPresence(); + +// clear user presence preference +await graph.users.getById("99999999-9999-9999-9999-999999999999").clearPreferredPresence(); + +``` \ No newline at end of file diff --git a/packages/graph/cloud-communications/types.ts b/packages/graph/cloud-communications/types.ts index 19684f18a..0ac6c4e3c 100644 --- a/packages/graph/cloud-communications/types.ts +++ b/packages/graph/cloud-communications/types.ts @@ -1,5 +1,5 @@ -import { Presence as IUserPresence } from "@microsoft/microsoft-graph-types"; +import { Presence as IUserPresence } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; import { body } from "@pnp/queryable"; @@ -9,7 +9,47 @@ import { body } from "@pnp/queryable"; */ @defaultPath("presence") -export class _Presence extends _GraphInstance { } +export class _Presence extends _GraphInstance { + /** + * Sets presence information for a user + * + * @param presence Presence object to set the state of a user's presence session + */ + public async setPresence(presence: ISetPresenceOptions): Promise { + + const postBody = { ...presence }; + return graphPost(Presence(this, "setPresence"), body(postBody)); + } + + /** + * Clear application presence session of a user. If it is the user's only presence session, the user's presence will change to Offline/Offline. + * + * @param sessionId Id of the application to clear presence + */ + public async clearPresence(sessionId: string): Promise { + + const postBody = { sessionId }; + return graphPost(Presence(this, "clearPresence"), body(postBody)); + } + /** + * Set the preferred availability and activity status for a user + * + * @param presence Presence object to set as preferred availbility and activity status of a user + */ + public async setPreferredPresence(presence: IPresenceOptions): Promise { + + const postBody = { ...presence }; + return graphPost(Presence(this, "setUserPreferredPresence"), body(postBody)); + } + /** + * Clears the preferred availability and activity status for a user + * + */ + public async clearPreferredPresence(): Promise { + return graphPost(Presence(this, "clearUserPreferredPresence")); + } + +} export interface IPresence extends _Presence { } export const Presence = graphInvokableFactory(_Presence); @@ -23,9 +63,16 @@ export class _Communications extends _GraphCollection { public async getPresencesByUserId(ids: string[]): Promise { const postBody = { ids }; - // return graphPost(Search(this, "query"), body(request)); return graphPost(Communications(this, "getPresencesByUserId"), body(postBody)); } } export interface ICommunications extends _Communications { } export const Communications = graphInvokableFactory(_Communications); + +export interface IPresenceOptions extends IUserPresence{ + expirationDuration?: string; +} + +export interface ISetPresenceOptions extends IPresenceOptions { + sessionId: string; +} diff --git a/test/graph/cloud-communications.ts b/test/graph/cloud-communications.ts new file mode 100644 index 000000000..13a831de8 --- /dev/null +++ b/test/graph/cloud-communications.ts @@ -0,0 +1,60 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/cloud-communications"; +import { stringIsNullOrEmpty } from "@pnp/core"; + + +describe("Cloud-Communications", function () { + let testUserId = ""; + let sessionId = ""; + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + testUserId = (await this.pnp.graph.users.getById(this.pnp.settings.testUser.substring(this.pnp.settings.testUser.lastIndexOf("|") + 1))()).id; + sessionId = this.pnp.settings.graph.id; + }); + + it.skip("Get User Presence", async function () { + const presence = await this.pnp.graph.users.getById(testUserId).presence(); + return expect(presence).is.not.null; + }); + + it.skip("Get Presence for Multiple Users", async function () { + const presence = await this.pnp.graph.communications.getPresencesByUserId([testUserId,testUserId]); + return expect(presence.length).is.equals(2); + }); + + it("Set User Presence", async function () { + //617b607f-48d8-4431-b708-3c06c8a4d8c7 + const presence = await this.pnp.graph.users.getById("617b607f-48d8-4431-b708-3c06c8a4d8c7").presence.setPresence({ + availability: "Busy", + activity:"InACall", + sessionId: sessionId, + expirationDuration: "PT5M", + }); + return expect(presence.availability).equals("Busy"); + }); + + it("Clear User Presence", async function () { + const presence = await this.pnp.graph.users.getById('617b607f-48d8-4431-b708-3c06c8a4d8c7').presence.clearPresence(sessionId); + return true; + }); + + it("Set User Preferred Presence", async function () { + const presence = await this.pnp.graph.users.getById(testUserId).presence.setPreferredPresence({ + availability: "Available", + activity:"Available", + expirationDuration: "PT5M", + }); + return expect(presence.availability).equals("Available"); + }); + + it("Clear User Preferred Presence", async function () { + const presence = await this.pnp.graph.users.getById('617b607f-48d8-4431-b708-3c06c8a4d8c7').presence.clearPreferredPresence(); + return true; + }); + +}); From 976d67391f68996161819a4abcdb43fa10a89fdc Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 29 Sep 2023 07:16:57 -0600 Subject: [PATCH 020/171] Updating test to use testUser userId --- test/graph/cloud-communications.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/graph/cloud-communications.ts b/test/graph/cloud-communications.ts index 13a831de8..8aa7361b1 100644 --- a/test/graph/cloud-communications.ts +++ b/test/graph/cloud-communications.ts @@ -28,8 +28,7 @@ describe("Cloud-Communications", function () { }); it("Set User Presence", async function () { - //617b607f-48d8-4431-b708-3c06c8a4d8c7 - const presence = await this.pnp.graph.users.getById("617b607f-48d8-4431-b708-3c06c8a4d8c7").presence.setPresence({ + const presence = await this.pnp.graph.users.getById(testUserId).presence.setPresence({ availability: "Busy", activity:"InACall", sessionId: sessionId, @@ -39,7 +38,7 @@ describe("Cloud-Communications", function () { }); it("Clear User Presence", async function () { - const presence = await this.pnp.graph.users.getById('617b607f-48d8-4431-b708-3c06c8a4d8c7').presence.clearPresence(sessionId); + const presence = await this.pnp.graph.users.getById(testUserId).presence.clearPresence(sessionId); return true; }); @@ -53,7 +52,7 @@ describe("Cloud-Communications", function () { }); it("Clear User Preferred Presence", async function () { - const presence = await this.pnp.graph.users.getById('617b607f-48d8-4431-b708-3c06c8a4d8c7').presence.clearPreferredPresence(); + const presence = await this.pnp.graph.users.getById(testUserId).presence.clearPreferredPresence(); return true; }); From 969f4e437f721807c80b409e26fafa317e62a7e4 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 29 Sep 2023 09:35:31 -0600 Subject: [PATCH 021/171] Fixing Presence Tests and return object from Presence type --- packages/graph/cloud-communications/types.ts | 28 ++++++++++++----- test/graph/cloud-communications.ts | 32 ++++++++++++++------ 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/packages/graph/cloud-communications/types.ts b/packages/graph/cloud-communications/types.ts index 0ac6c4e3c..155ee8356 100644 --- a/packages/graph/cloud-communications/types.ts +++ b/packages/graph/cloud-communications/types.ts @@ -1,5 +1,5 @@ -import { Presence as IUserPresence } from "@microsoft/microsoft-graph-types"; +import { DateTimeTimeZone, Presence as IUserPresence, ItemBody } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; import { defaultPath } from "../decorators.js"; import { body } from "@pnp/queryable"; @@ -15,17 +15,17 @@ export class _Presence extends _GraphInstance { * * @param presence Presence object to set the state of a user's presence session */ - public async setPresence(presence: ISetPresenceOptions): Promise { + public async setPresence(presence: ISetPresenceOptions): Promise { const postBody = { ...presence }; return graphPost(Presence(this, "setPresence"), body(postBody)); } /** - * Clear application presence session of a user. If it is the user's only presence session, the user's presence will change to Offline/Offline. - * - * @param sessionId Id of the application to clear presence - */ + * Clear application presence session of a user. If it is the user's only presence session, the user's presence will change to Offline/Offline. + * + * @param sessionId Id of the application to clear presence + */ public async clearPresence(sessionId: string): Promise { const postBody = { sessionId }; @@ -36,7 +36,7 @@ export class _Presence extends _GraphInstance { * * @param presence Presence object to set as preferred availbility and activity status of a user */ - public async setPreferredPresence(presence: IPresenceOptions): Promise { + public async setPreferredPresence(presence: IPresenceOptions): Promise { const postBody = { ...presence }; return graphPost(Presence(this, "setUserPreferredPresence"), body(postBody)); @@ -49,6 +49,15 @@ export class _Presence extends _GraphInstance { return graphPost(Presence(this, "clearUserPreferredPresence")); } + /** + * Set a presence status message for a user + * + */ + public async setStatusMessage(message: IPresenceStatusMessage): Promise { + const postBody = { statusMessage: {...message} }; + return graphPost(Presence(this, "setStatusMessage"), body(postBody)); + } + } export interface IPresence extends _Presence { } export const Presence = graphInvokableFactory(_Presence); @@ -76,3 +85,8 @@ export interface IPresenceOptions extends IUserPresence{ export interface ISetPresenceOptions extends IPresenceOptions { sessionId: string; } + +export interface IPresenceStatusMessage { + message: ItemBody; + expiryDateTime: DateTimeTimeZone; +} \ No newline at end of file diff --git a/test/graph/cloud-communications.ts b/test/graph/cloud-communications.ts index 8aa7361b1..2e82274e8 100644 --- a/test/graph/cloud-communications.ts +++ b/test/graph/cloud-communications.ts @@ -28,32 +28,44 @@ describe("Cloud-Communications", function () { }); it("Set User Presence", async function () { - const presence = await this.pnp.graph.users.getById(testUserId).presence.setPresence({ + return expect(this.pnp.graph.users.getById(testUserId).presence.setPresence({ availability: "Busy", activity:"InACall", sessionId: sessionId, expirationDuration: "PT5M", - }); - return expect(presence.availability).equals("Busy"); + })).eventually.be.fulfilled; }); it("Clear User Presence", async function () { - const presence = await this.pnp.graph.users.getById(testUserId).presence.clearPresence(sessionId); - return true; + return expect(this.pnp.graph.users.getById(testUserId).presence.clearPresence(sessionId)).eventually.be.fulfilled; }); it("Set User Preferred Presence", async function () { - const presence = await this.pnp.graph.users.getById(testUserId).presence.setPreferredPresence({ + return expect(this.pnp.graph.users.getById(testUserId).presence.setPreferredPresence({ availability: "Available", activity:"Available", expirationDuration: "PT5M", - }); - return expect(presence.availability).equals("Available"); + })).eventually.be.fulfilled; }); it("Clear User Preferred Presence", async function () { - const presence = await this.pnp.graph.users.getById(testUserId).presence.clearPreferredPresence(); - return true; + return expect(this.pnp.graph.users.getById(testUserId).presence.clearPreferredPresence()).eventually.be.fulfilled; }); + it("Set User Status Message", async function () { + const date: Date = new Date(); + date.setDate(date.getDate() + 1); + + return expect(this.pnp.graph.users.getById(testUserId).presence.setStatusMessage({ + message:{ + content: "Test Sample Message", + contentType: "text" + }, + expiryDateTime:{ + dateTime: date.toISOString(), + timeZone: 'Pacific Standard Time' + } + })).eventually.be.fulfilled; + }); + }); From f0f6dbf6f4019d76690791d006fd3d46eb50f676 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 2 Oct 2023 16:19:12 -0600 Subject: [PATCH 022/171] WIP - Teams App Catalog --- packages/graph/appCatalogs/index.ts | 22 +++++++ packages/graph/appCatalogs/types.ts | 99 +++++++++++++++++++++++++++++ packages/graph/teams/types.ts | 2 +- 3 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 packages/graph/appCatalogs/index.ts create mode 100644 packages/graph/appCatalogs/types.ts diff --git a/packages/graph/appCatalogs/index.ts b/packages/graph/appCatalogs/index.ts new file mode 100644 index 000000000..5574c454c --- /dev/null +++ b/packages/graph/appCatalogs/index.ts @@ -0,0 +1,22 @@ +import { GraphFI } from "../fi.js"; +import { AppCatalogs, IAppCatalogs} from "./types.js"; + + +export { + AppCatalogs, + IAppCatalogs, +} from "./types.js"; + +declare module "../fi" { + interface GraphFI { + readonly appCatalogs: IAppCatalogs; + } +} + +Reflect.defineProperty(GraphFI.prototype, "appCatalogs", { + configurable: true, + enumerable: true, + get: function (this: GraphFI) { + return this.create(AppCatalogs); + }, +}); diff --git a/packages/graph/appCatalogs/types.ts b/packages/graph/appCatalogs/types.ts new file mode 100644 index 000000000..a33369fdb --- /dev/null +++ b/packages/graph/appCatalogs/types.ts @@ -0,0 +1,99 @@ + +import { AppCatalogs as IAppCatalogsType, TeamsApp as ITeamsAppType, TeamsAppDefinition as ITeamsAppDefinitionType } from "@microsoft/microsoft-graph-types"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost, graphDelete } from "../graphqueryable.js"; +import { IGetById, defaultPath, getById } from "../decorators.js"; +import { InjectHeaders } from "@pnp/queryable/index.js"; + +/** + * AppCatalogs + */ + +@defaultPath("appCatalogs") +export class _AppCatalogs extends _GraphInstance { + /** + * Get teams apps in appCatalog + * + */ + public get teamsApps(): ITeamsApps { + return TeamsApps(this); + } + +} +export interface IAppCatalogs extends _AppCatalogs { } +export const AppCatalogs = graphInvokableFactory(_AppCatalogs); + + +/** + * AppDefinitions + */ +export class _AppDefinition extends _GraphInstance { } +export interface IAppDefinition extends _AppDefinition { } +export const AppDefinitions = graphInvokableFactory(_AppDefinition); + + +/** + * TeamsApp + */ +export class _TeamsApp extends _GraphInstance { + + /** + * Deletes a Teams App + * + */ + public async delete(appDefinitionId?: string): Promise { + + // Un-approved apps must be deleted differently. https://learn.microsoft.com/en-us/graph/api/teamsapp-delete?view=graph-rest-1.0&tabs=http#permissions + if(appDefinitionId){ + return graphDelete(TeamsApp(this,`/appDefinitions/${appDefinitionId}`)); + } + return graphDelete(this); + } + + /** + * Updates a Teams App + * + * @param zip zip file of app + * @param requiresReview This optional query parameter triggers the app review process. Users with admin privileges can submit apps without triggering a review. + */ + public async update(zip: Blob, requiresReview:boolean = false): Promise { + + const q = TeamsApp(this,`appDefinitions?$requiresReview=${requiresReview}`); + q.using(InjectHeaders({ + "Content-Type": "application/zip", + })); + + return graphPost(q, { body: zip }); + } + +} + +export interface ITeamsApp extends _TeamsApp { } +export const TeamsApp = graphInvokableFactory(_TeamsApp); + + +/** + * TeamsApps + */ + +@defaultPath("teamsApps") +@getById(TeamsApp) +export class _TeamsApps extends _GraphCollection { + + /** + * Adds a Teams App + * + * @param zip zip file of app + * @param requiresReview This optional query parameter triggers the app review process. Users with admin privileges can submit apps without triggering a review. + */ + public async add(zip: Blob, requiresReview:boolean = false): Promise { + + const q = TeamsApp(this); + q.using(InjectHeaders({ + "Content-Type": "application/zip", + })); + + return graphPost(q, { body: zip }); + } + } +export interface ITeamsApps extends _TeamsApps, IGetById {} { } +export const TeamsApps = graphInvokableFactory(_TeamsApps); diff --git a/packages/graph/teams/types.ts b/packages/graph/teams/types.ts index 7ac7c401c..fce469c61 100644 --- a/packages/graph/teams/types.ts +++ b/packages/graph/teams/types.ts @@ -180,7 +180,7 @@ export interface IMessage extends _Message { } export const Message = graphInvokableFactory(_Message); /** - * Channels + * Messages */ @defaultPath("messages") @getById(Message) From 6f63e998bb2895138663d7dd8855ebc15974baf6 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 2 Oct 2023 16:26:41 -0600 Subject: [PATCH 023/171] Es Lint fix. --- packages/graph/cloud-communications/types.ts | 9 +++------ test/graph/cloud-communications.ts | 10 +++++----- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/graph/cloud-communications/types.ts b/packages/graph/cloud-communications/types.ts index 155ee8356..8494c8750 100644 --- a/packages/graph/cloud-communications/types.ts +++ b/packages/graph/cloud-communications/types.ts @@ -16,7 +16,6 @@ export class _Presence extends _GraphInstance { * @param presence Presence object to set the state of a user's presence session */ public async setPresence(presence: ISetPresenceOptions): Promise { - const postBody = { ...presence }; return graphPost(Presence(this, "setPresence"), body(postBody)); } @@ -27,7 +26,6 @@ export class _Presence extends _GraphInstance { * @param sessionId Id of the application to clear presence */ public async clearPresence(sessionId: string): Promise { - const postBody = { sessionId }; return graphPost(Presence(this, "clearPresence"), body(postBody)); } @@ -59,18 +57,17 @@ export class _Presence extends _GraphInstance { } } -export interface IPresence extends _Presence { } +export interface IPresence extends _Presence {} export const Presence = graphInvokableFactory(_Presence); @defaultPath("communications") export class _Communications extends _GraphCollection { /** - * Retrieve presence information for a group of users. + * Retrieve presence information for a group of users * * @param ids An array of user id's to retrieve presence for. */ public async getPresencesByUserId(ids: string[]): Promise { - const postBody = { ids }; return graphPost(Communications(this, "getPresencesByUserId"), body(postBody)); } @@ -89,4 +86,4 @@ export interface ISetPresenceOptions extends IPresenceOptions { export interface IPresenceStatusMessage { message: ItemBody; expiryDateTime: DateTimeTimeZone; -} \ No newline at end of file +} diff --git a/test/graph/cloud-communications.ts b/test/graph/cloud-communications.ts index 2e82274e8..b1c9ad0e4 100644 --- a/test/graph/cloud-communications.ts +++ b/test/graph/cloud-communications.ts @@ -26,7 +26,7 @@ describe("Cloud-Communications", function () { const presence = await this.pnp.graph.communications.getPresencesByUserId([testUserId,testUserId]); return expect(presence.length).is.equals(2); }); - + it("Set User Presence", async function () { return expect(this.pnp.graph.users.getById(testUserId).presence.setPresence({ availability: "Busy", @@ -59,13 +59,13 @@ describe("Cloud-Communications", function () { return expect(this.pnp.graph.users.getById(testUserId).presence.setStatusMessage({ message:{ content: "Test Sample Message", - contentType: "text" + contentType: "text", }, expiryDateTime:{ dateTime: date.toISOString(), - timeZone: 'Pacific Standard Time' - } + timeZone: "Pacific Standard Time", + }, })).eventually.be.fulfilled; }); - + }); From fcb2fac9741de4c5f6cdfe0a9d94de71652a5c29 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 2 Oct 2023 19:57:56 -0600 Subject: [PATCH 024/171] v4- Graph Items Docs Update and Document Set Versions WIP - Initial check-in --- docs/graph/items.md | 105 ++++++++++++++++-- packages/graph/documentSetVersions/index.ts | 10 ++ .../graph/documentSetVersions/list-item.ts | 14 +++ packages/graph/documentSetVersions/types.ts | 60 ++++++++++ 4 files changed, 177 insertions(+), 12 deletions(-) create mode 100644 packages/graph/documentSetVersions/index.ts create mode 100644 packages/graph/documentSetVersions/list-item.ts create mode 100644 packages/graph/documentSetVersions/types.ts diff --git a/docs/graph/items.md b/docs/graph/items.md index 26bfb3429..3877ff6ee 100644 --- a/docs/graph/items.md +++ b/docs/graph/items.md @@ -1,38 +1,119 @@ # @pnp/graph/items -Currently, there is no module in graph to access all items directly. Please, instead, default to search by path using the following methods. - [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ### Get list items ```TypeScript -import { Site } from "@pnp/graph/sites"; +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; -const sites = graph.sites.getById("{site id}"); +const graph = graphfi(...); +const items = const siteLists = await graph.site.getById("{site identifier}").lists.getById("{list identifier}").items(); -const items = await Site(sites, "lists/{listid}/items")(); ``` ### Get File/Item version information ```TypeScript -import { Site } from "@pnp/graph/sites"; - -const sites = graph.sites.getById("{site id}"); +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; -const users = await Site(sites, "lists/{listid}/items/{item id}/versions")(); +const graph = graphfi(...); +const itemVersions = const siteLists = await graph.site.getById("{site identifier}").lists.getById("{list identifier}").items.getById(1).versions(); + ``` ### Get list items with fields included ```TypeScript -import { Site } from "@pnp/graph/sites"; +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; + +const graph = graphfi(...); +const listItems = await graph.site.getById("{site identifier}").lists.getById("{list identifier}").items..expand("fields")(); + +``` + +### Create a new list item + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; import "@pnp/graph/lists"; -const sites = graph.sites.getById("{site id}"); +const graph = graphfi(...); +var newItem = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.add({ + Title: "Widget", +}); + +``` +### Update a list item + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; + +const graph = graphfi(...); +var newItem = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").update({ + Title: "Widget", +}); + +``` + +### Delete a list item + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; + +const graph = graphfi(...); +var newItem = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").delete(); + +``` + +### Get Document Set Versions of an Item + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; +import "@pnp/graph/documentSetVersions"; +const graph = graphfi(...); +var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}")(); +var documentSetVersions = item.documentSetVersions(); + +``` + +### Create a new Document Set Version + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; +import "@pnp/graph/documentSetVersions"; + +const graph = graphfi(...); +var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.add("New Comment"); + +``` + +### Restore a Document Set version + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; +import "@pnp/graph/documentSetVersions"; -const listItems : IList[] = await Site(sites, "lists/{site id}/items?$expand=fields")(); +const graph = graphfi(...); +var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.getById(1).restore(); + ``` #### Hint: Note that you can just use normal [graph queries](https://developer.microsoft.com/en-us/graph/graph-explorer) in this search. diff --git a/packages/graph/documentSetVersions/index.ts b/packages/graph/documentSetVersions/index.ts new file mode 100644 index 000000000..b988dbc0b --- /dev/null +++ b/packages/graph/documentSetVersions/index.ts @@ -0,0 +1,10 @@ + +import "./list-item.js"; +export { + IDocumentSetVersion, + DocumentSetVersion, + IDocumentSetVersions, + DocumentSetVersions, + IDocumentSetVersionAddResult +} from "./types.js"; + diff --git a/packages/graph/documentSetVersions/list-item.ts b/packages/graph/documentSetVersions/list-item.ts new file mode 100644 index 000000000..686a38cc7 --- /dev/null +++ b/packages/graph/documentSetVersions/list-item.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { DocumentSetVersions, IDocumentSetVersions } from "./types.js"; +import { _ListItem } from "../list-item/types.js"; + +declare module "../list-item/types" { + interface _ListItem { + readonly documentSetVersions: IDocumentSetVersions; + } + interface IListItem { + readonly documentSetVersions: IDocumentSetVersions; + } +} + +addProp(_ListItem, "documentSetVersions", DocumentSetVersions); \ No newline at end of file diff --git a/packages/graph/documentSetVersions/types.ts b/packages/graph/documentSetVersions/types.ts new file mode 100644 index 000000000..6b94508c4 --- /dev/null +++ b/packages/graph/documentSetVersions/types.ts @@ -0,0 +1,60 @@ +import { DocumentSetVersion as IDocumentSetVersionEntity } from "@microsoft/microsoft-graph-types"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost, GraphInstance, GraphQueryable } from "../graphqueryable.js"; +import { defaultPath, deleteable, IDeleteable, getById, IGetById } from "../decorators.js"; +import { body } from "@pnp/queryable"; + +/** + * Represents a document set version + */ +@deleteable() +export class _DocumentSetVersion extends _GraphInstance { + /** + * Restore a document set version + * + */ + public async restore(): Promise { + return graphPost(DocumentSetVersion(this, "restore")); + } +} +export interface IDocumentSetVersion extends _DocumentSetVersion, IDeleteable { } +export const DocumentSetVersion = graphInvokableFactory(_DocumentSetVersion); + +/** + * Describes a collection of document set versions + * + */ +@defaultPath("documentSetVersions") +@getById(DocumentSetVersion) +export class _DocumentSetVersions extends _GraphCollection{ + /** + * Create a new document set version as specified in the request body. + * + * @param comment a comment about the captured version + * @param shouldCaptureMinorVersion If true, minor versions of items are also captured; otherwise, only major versions will be captured. + * + */ + public async add(comment: string, shouldCaptureMinorVersion:boolean = false): Promise { + + const postBody = { + comment: comment, + shouldCaptureMinorVersion: shouldCaptureMinorVersion + } + const data = await graphPost(this, body(postBody)); + + return { + data, + item: (this).getById(data.id), + }; + } +} + +export interface IDocumentSetVersions extends _DocumentSetVersions, IGetById {} +export const DocumentSetVersions = graphInvokableFactory(_DocumentSetVersions); + +/** + * IListAddResult + */ +export interface IDocumentSetVersionAddResult { + item: IDocumentSetVersion; + data: IDocumentSetVersionEntity; +} \ No newline at end of file From 8fd18a44347d94f1b2cad98ef2cfcaef44a80c99 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 13 Oct 2023 09:25:29 -0600 Subject: [PATCH 025/171] Refactor and List-Item Tests. --- docs/graph/items.md | 22 ++- packages/graph/documentSetVersions/index.ts | 10 -- packages/graph/documentSetVersions/types.ts | 60 -------- .../document-sets.ts} | 7 +- packages/graph/list-item/index.ts | 6 + packages/graph/list-item/types.ts | 60 +++++++- settings.example.js | 1 + test/graph/list-items.ts | 133 ++++++++++++++++++ 8 files changed, 217 insertions(+), 82 deletions(-) delete mode 100644 packages/graph/documentSetVersions/index.ts delete mode 100644 packages/graph/documentSetVersions/types.ts rename packages/graph/{documentSetVersions/list-item.ts => list-item/document-sets.ts} (50%) create mode 100644 test/graph/list-items.ts diff --git a/docs/graph/items.md b/docs/graph/items.md index 3877ff6ee..6401e7a0b 100644 --- a/docs/graph/items.md +++ b/docs/graph/items.md @@ -83,23 +83,34 @@ var newItem = await graph.sites.getById("{site identifier}").lists.getById("{lis import { graphfi } from "@pnp/graph"; import "@pnp/graph/list-items"; import "@pnp/graph/lists"; -import "@pnp/graph/documentSetVersions"; + const graph = graphfi(...); -var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}")(); +var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions(); var documentSetVersions = item.documentSetVersions(); ``` +### Get Document Set Versions By Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/list-items"; +import "@pnp/graph/lists"; + +const graph = graphfi(...); +var documentSetVersion = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.getById("{document set version id}"); + +``` + ### Create a new Document Set Version ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/list-items"; import "@pnp/graph/lists"; -import "@pnp/graph/documentSetVersions"; const graph = graphfi(...); -var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.add("New Comment"); +var version = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.add("New Comment"); ``` @@ -109,10 +120,9 @@ var item = await graph.sites.getById("{site identifier}").lists.getById("{list i import { graphfi } from "@pnp/graph"; import "@pnp/graph/list-items"; import "@pnp/graph/lists"; -import "@pnp/graph/documentSetVersions"; const graph = graphfi(...); -var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.getById(1).restore(); +await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.getById("{document set version id}").restore(); ``` diff --git a/packages/graph/documentSetVersions/index.ts b/packages/graph/documentSetVersions/index.ts deleted file mode 100644 index b988dbc0b..000000000 --- a/packages/graph/documentSetVersions/index.ts +++ /dev/null @@ -1,10 +0,0 @@ - -import "./list-item.js"; -export { - IDocumentSetVersion, - DocumentSetVersion, - IDocumentSetVersions, - DocumentSetVersions, - IDocumentSetVersionAddResult -} from "./types.js"; - diff --git a/packages/graph/documentSetVersions/types.ts b/packages/graph/documentSetVersions/types.ts deleted file mode 100644 index 6b94508c4..000000000 --- a/packages/graph/documentSetVersions/types.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { DocumentSetVersion as IDocumentSetVersionEntity } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost, GraphInstance, GraphQueryable } from "../graphqueryable.js"; -import { defaultPath, deleteable, IDeleteable, getById, IGetById } from "../decorators.js"; -import { body } from "@pnp/queryable"; - -/** - * Represents a document set version - */ -@deleteable() -export class _DocumentSetVersion extends _GraphInstance { - /** - * Restore a document set version - * - */ - public async restore(): Promise { - return graphPost(DocumentSetVersion(this, "restore")); - } -} -export interface IDocumentSetVersion extends _DocumentSetVersion, IDeleteable { } -export const DocumentSetVersion = graphInvokableFactory(_DocumentSetVersion); - -/** - * Describes a collection of document set versions - * - */ -@defaultPath("documentSetVersions") -@getById(DocumentSetVersion) -export class _DocumentSetVersions extends _GraphCollection{ - /** - * Create a new document set version as specified in the request body. - * - * @param comment a comment about the captured version - * @param shouldCaptureMinorVersion If true, minor versions of items are also captured; otherwise, only major versions will be captured. - * - */ - public async add(comment: string, shouldCaptureMinorVersion:boolean = false): Promise { - - const postBody = { - comment: comment, - shouldCaptureMinorVersion: shouldCaptureMinorVersion - } - const data = await graphPost(this, body(postBody)); - - return { - data, - item: (this).getById(data.id), - }; - } -} - -export interface IDocumentSetVersions extends _DocumentSetVersions, IGetById {} -export const DocumentSetVersions = graphInvokableFactory(_DocumentSetVersions); - -/** - * IListAddResult - */ -export interface IDocumentSetVersionAddResult { - item: IDocumentSetVersion; - data: IDocumentSetVersionEntity; -} \ No newline at end of file diff --git a/packages/graph/documentSetVersions/list-item.ts b/packages/graph/list-item/document-sets.ts similarity index 50% rename from packages/graph/documentSetVersions/list-item.ts rename to packages/graph/list-item/document-sets.ts index 686a38cc7..11ae2c21e 100644 --- a/packages/graph/documentSetVersions/list-item.ts +++ b/packages/graph/list-item/document-sets.ts @@ -1,8 +1,7 @@ import { addProp } from "@pnp/queryable"; -import { DocumentSetVersions, IDocumentSetVersions } from "./types.js"; -import { _ListItem } from "../list-item/types.js"; +import { DocumentSetVersions, _ListItem } from "./types.js"; -declare module "../list-item/types" { +declare module "./types" { interface _ListItem { readonly documentSetVersions: IDocumentSetVersions; } @@ -11,4 +10,4 @@ declare module "../list-item/types" { } } -addProp(_ListItem, "documentSetVersions", DocumentSetVersions); \ No newline at end of file +addProp(_ListItem, "documentSetVersions", DocumentSetVersions); diff --git a/packages/graph/list-item/index.ts b/packages/graph/list-item/index.ts index 86195c15b..f85c30980 100644 --- a/packages/graph/list-item/index.ts +++ b/packages/graph/list-item/index.ts @@ -1,4 +1,5 @@ import "./list.js"; +import "./document-sets.js"; export { ListItems, @@ -6,4 +7,9 @@ export { ListItem, IListItem, IListItemAddResult, + IDocumentSetVersion, + DocumentSetVersion, + DocumentSetVersions, + IDocumentSetVersions, + IDocumentSetVersionAddResult, } from "./types.js"; diff --git a/packages/graph/list-item/types.ts b/packages/graph/list-item/types.ts index 57a66fdde..62af34f61 100644 --- a/packages/graph/list-item/types.ts +++ b/packages/graph/list-item/types.ts @@ -1,4 +1,4 @@ -import { ListItem as IListItemEntity, ListItemVersion as IListItemVersion } from "@microsoft/microsoft-graph-types"; +import { ListItem as IListItemEntity, ListItemVersion as IListItemVersion, DocumentSetVersion as IDocumentSetVersionEntity } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance, IGraphCollection, GraphCollection, graphPost } from "../graphqueryable.js"; import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; import { body } from "@pnp/queryable"; @@ -17,7 +17,7 @@ export class _ListItem extends _GraphInstance { return GraphCollection(this, "versions"); } } -export interface IListItem extends _ListItem, IDeleteable, IUpdateable { } +export interface IListItem extends _ListItem, IDeleteable, IUpdateable {} export const ListItem = graphInvokableFactory(_ListItem); /** @@ -45,6 +45,62 @@ export class _ListItems extends _GraphCollection{ export interface IListItems extends _ListItems, IGetById { } export const ListItems = graphInvokableFactory(_ListItems); +/** + * Represents a document set version + */ +@deleteable() +export class _DocumentSetVersion extends _GraphInstance { + /** + * Restore a document set version + * + */ + public async restore(): Promise { + return graphPost(DocumentSetVersion(this, "restore")); + } +} +export interface IDocumentSetVersion extends _DocumentSetVersion, IDeleteable { } +export const DocumentSetVersion = graphInvokableFactory(_DocumentSetVersion); + +/** + * Describes a collection of document set versions + * + */ +@defaultPath("documentSetVersions") +@getById(DocumentSetVersion) +export class _DocumentSetVersions extends _GraphCollection{ + /** + * Create a new document set version as specified in the request body. + * + * @param comment a comment about the captured version + * @param shouldCaptureMinorVersion If true, minor versions of items are also captured; otherwise, only major versions will be captured. + * + */ + public async add(comment: string, shouldCaptureMinorVersion = false): Promise { + + const postBody = { + comment: comment, + shouldCaptureMinorVersion: shouldCaptureMinorVersion, + }; + const data = await graphPost(this, body(postBody)); + + return { + data, + item: (this).getById(data.id), + }; + } +} + +export interface IDocumentSetVersions extends _DocumentSetVersions, IGetById {} +export const DocumentSetVersions = graphInvokableFactory(_DocumentSetVersions); + +/** + * IListAddResult + */ +export interface IDocumentSetVersionAddResult { + item: IDocumentSetVersion; + data: IDocumentSetVersionEntity; +} + /** * IListAddResult */ diff --git a/settings.example.js b/settings.example.js index 0eedaad3d..bf1b6bc30 100644 --- a/settings.example.js +++ b/settings.example.js @@ -39,6 +39,7 @@ export const settings = { // set your scopes as needed here scopes: ["https://{tenant}.sharepoint.com/.default"] }, + testWebUrl:"{ site collection for testing }" }, // all are optional if using msal graph: { diff --git a/test/graph/list-items.ts b/test/graph/list-items.ts new file mode 100644 index 000000000..50019a36e --- /dev/null +++ b/test/graph/list-items.ts @@ -0,0 +1,133 @@ +import { expect } from "chai"; +import "@pnp/graph/sites"; +import "@pnp/graph/lists"; +import { List } from "@microsoft/microsoft-graph-types"; +import { ISite } from "@pnp/graph/sites"; +import { getRandomString } from "@pnp/core"; +import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { pnpTest } from "../pnp-test.js"; +import { IList } from "@pnp/graph/lists"; +import { IListItem } from "@pnp/graph/list-item/types.js"; + +describe("List-Items", function () { + let site: ISite; + let list: IList; + let item: IListItem; + + const sampleList: List = { + displayName: "PnPGraphTestList", + list: { "template": "ItemTestList-Graph" }, + }; + + before(async function () { + + if (!this.pnp.settings.enableWebTests) { + this.skip(); + } + + site = await getTestingGraphSPSite(this); + + const props = await this.props({ + displayName: getRandomString(5) + "Add", + }); + + const listTemplate = JSON.parse(JSON.stringify(sampleList)); + listTemplate.displayName += props.displayName; + const list = (await site.lists.add(listTemplate)).list; + + // add test items. Document set can be added later + if(list){ + await list.items.add({Title: `Item ${getRandomString(4)}`} as any); + await list.items.add({Title: `Item ${getRandomString(4)}`} as any); + // can't do until Graph Drives is done. + /* const documentSetCT = await site.contentTypes.getById("0x0120D520")(); + await list.contentTypes.add(documentSetCT); + // create item + const itemData = await list.items.select("Id").top(1)<{ Id: number }[]>(); + item = list.items.getById(itemData[0].Id?.toString()); + + // add document set version to item + item.documentSetVersions.add("Test"); + */ + } + + }); + + it("items", pnpTest("3e0e16a0-5683-4c3a-aa3d-f35bb6912de1", async function () { + const items = await list.items(); + return expect(items).to.be.an("array") && expect(items[0]).to.haveOwnProperty("id"); + })); + + it("getById()", pnpTest("6f9592fd-1568-4d9c-a3f5-7f45165d84f2", async function () { + const itemData = await list.items.select("Id").top(1)<{ Id: number }[]>(); + return expect(itemData[0].Id).is.not.null; + })); + + it("add", pnpTest("587e280b-0342-4515-a166-1b05cee9f242", async function () { + // fieldvalueset. ugh. Casting as any. + const itemAdded = await list.items.add({fields: + { + title: getRandomString(5) + "Add", + }, + } as any); + + return expect((itemAdded.data.id)).is.not.null; + })); + + it("update", pnpTest("5766613a-51b8-4f88-ba0f-2436d160b86b", async function () { + // fieldvalueset. ugh. Casting as any. + const itemUpdated = await item.update({fields: + { + title: getRandomString(5) + "Update", + }, + } as any); + + + return expect(itemUpdated).is.not.null; + })); + + it("delete", pnpTest("e55bf53f-1316-4e47-97c1-b0c0cdd860ef", async function () { + const item = await list.items.add({fields: + { + title: getRandomString(5) + "Add", + }, + } as any); + const r = await list.items.filter(`Id eq '${item.data.id}'`)(); + return expect(r.length).to.eq(0); + })); + + it.skip("documentSetVersions", pnpTest("c2889ca3-0230-4c6e-879d-71cc9cd08e83", async function () { + const versions = await item.documentSetVersions(); + return expect(versions).to.be.an("array") && expect(versions[0]).to.haveOwnProperty("id"); + })); + + it.skip("documentSetVersions - getById()", pnpTest("35226d93-204b-4877-9041-26e04e437914", async function () { + const versions = await item.documentSetVersions(); + + const version = await item.documentSetVersions.getById(versions[0].id); + return expect(version).to.not.be.null && expect(version).to.haveOwnProperty("id"); + })); + + it.skip("documentSetVersions - add()", pnpTest("a192e096-fe84-4c2c-adc5-b1b9021c0031", async function () { + const documentSetVersion = await item.documentSetVersions.add("New Comment"); + return expect(documentSetVersion).to.not.be.null && expect(documentSetVersion).to.haveOwnProperty("id"); + })); + + it.skip("documentSetVersions - restore()", pnpTest("8814b247-4087-4c87-9a8f-af997f7d8745", async function () { + const restore = await item.documentSetVersions[0].restore(); + return expect(restore).to.be.fulfilled; + })); + + // Remove the test list we created + after(async function () { + if (list) { + try { + await list.delete(); + } catch (err) { + console.error("Cannot clean up test list"); + } + } + return; + }); + +}); From 5df22dd1fa39cf3187e104fec323ee9403a97bc8 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 13 Oct 2023 10:22:04 -0600 Subject: [PATCH 026/171] AppCatalog Docs --- docs/graph/appCatalogs.md | 83 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/graph/appCatalogs.md diff --git a/docs/graph/appCatalogs.md b/docs/graph/appCatalogs.md new file mode 100644 index 000000000..e15c42c25 --- /dev/null +++ b/docs/graph/appCatalogs.md @@ -0,0 +1,83 @@ +# @pnp/graph/appcatalogs + +The ability to use Teams App Catalogs + +## AppCatalogs, IAppCatalogs + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get Teams Apps in App Catalog + +Using teamsApps() you get the Teams AppCatalog + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalogs"; + +const graph = graphfi(...); + +const apps = await graph.appCatalogs.teamsApps(); + +``` +## Get Teams Apps by Id + +Using getById() you get the Teams App by Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalogs"; + +const graph = graphfi(...); + +const apps = await graph.appCatalogs.teamsApps.getById('{teams app id}')(); + +``` +## Add a Teams App + + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalogs"; + +const graph = graphfi(...); +const appPackage = {...} as Blob; + +//second parameter is "Requires Approval" +const app = await graph.appCatalogs.teamsApps.getById('{teams app id}').add(appPackage, false); + +``` +## Update a Teams App + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalogs"; + +const graph = graphfi(...); +const appPackage = {...} as Blob; + +//second parameter is "Requires Approval" +const app = await graph.appCatalogs.teamsApps.getById('{teams app id}').update(appPackage, false); + +``` +## Delete a Teams App + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalogs"; + +const graph = graphfi(...); + +//delete a Teams App +await graph.appCatalogs.teamsApps.getById(app).delete(); + +// delete an un-approved Teams App requires the app definition id. +// sample is just selecting the first app definition. +const appDefinition = (await graph.appCatalogs.teamsApps.getById("{teams app id}")()).appDefinitions[0]; +await graph.appCatalogs.teamsApps.getById(app).delete(appDefinition); + +``` \ No newline at end of file From d4ad5e1d2c9a9fb535b2dd4672e6ec6b4e3dd400 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 13 Oct 2023 10:30:03 -0600 Subject: [PATCH 027/171] Update list-items.ts --- test/graph/list-items.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/graph/list-items.ts b/test/graph/list-items.ts index 50019a36e..9f134b60b 100644 --- a/test/graph/list-items.ts +++ b/test/graph/list-items.ts @@ -39,16 +39,6 @@ describe("List-Items", function () { if(list){ await list.items.add({Title: `Item ${getRandomString(4)}`} as any); await list.items.add({Title: `Item ${getRandomString(4)}`} as any); - // can't do until Graph Drives is done. - /* const documentSetCT = await site.contentTypes.getById("0x0120D520")(); - await list.contentTypes.add(documentSetCT); - // create item - const itemData = await list.items.select("Id").top(1)<{ Id: number }[]>(); - item = list.items.getById(itemData[0].Id?.toString()); - - // add document set version to item - item.documentSetVersions.add("Test"); - */ } }); From 3b1415b4e3a6b628bfaf79186a25b384d33b428a Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 2 Oct 2023 16:59:13 -0600 Subject: [PATCH 028/171] Add missing Tasks endpoint Adding missing task endpoint to get all tasks on Me object. --- docs/graph/planner.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/graph/planner.md b/docs/graph/planner.md index 6535567c5..bf48acc41 100644 --- a/docs/graph/planner.md +++ b/docs/graph/planner.md @@ -106,6 +106,20 @@ const updPlan = await graph.planner.plans.getById('planId').update({title: 'New ``` +## Get All My Tasks from all plans + +Using the tasks() you can get the Tasks across all plans + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/planner"; + +const graph = graphfi(...); + +const planTasks = await graph.me.tasks() + +``` + ## Get Task by Id Using the planner.tasks.getById() you can get a specific Task. From 93da155f45a45bacedc2e46044cdae4a386f895a Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 2 Oct 2023 16:49:52 -0600 Subject: [PATCH 029/171] Adding missing reference to get all plans Adding this to planner, not groups. --- docs/graph/planner.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/graph/planner.md b/docs/graph/planner.md index bf48acc41..b850df567 100644 --- a/docs/graph/planner.md +++ b/docs/graph/planner.md @@ -261,3 +261,18 @@ const graph = graphfi(...); const bucketTasks = await graph.planner.buckets.getById('bucketId').tasks(); ``` + +## Get Plans for a group + +Gets all the plans for a group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/planner"; + +const graph = graphfi(...); + +const plans = await graph.groups.getById("b179a282-9f94-4bb5-a395-2a80de5a5a78").plans(); + +``` From b08bca998b28de7adda91136205b2384f5ca41bf Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 2 Oct 2023 16:31:53 -0600 Subject: [PATCH 030/171] Update Teams Tab Docs --- docs/graph/teams.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/docs/graph/teams.md b/docs/graph/teams.md index d5e198004..1ffea3569 100644 --- a/docs/graph/teams.md +++ b/docs/graph/teams.md @@ -273,7 +273,7 @@ channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.getByI ``` -## Add a new Tab +## Add a new Tab to Channel ```TypeScript import { graphfi } from "@pnp/graph"; @@ -286,6 +286,34 @@ channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.add('T ``` +## Update a Tab + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; + +const graph = graphfi(...); + +const tab = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528'). +channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.getById('Id').update({ + displayName: "New tab name" +}); + +``` + +## Remove a Tab from channel + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; + +const graph = graphfi(...); + +const tab = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528'). +channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.getById('Id').delete(); + +``` + ## Team Membership Get the members and/or owners of a group. From bc8d1fc128c4b50e609f78e88bc15b8813038d32 Mon Sep 17 00:00:00 2001 From: Akshay Kishor Chauhan Date: Sun, 1 Oct 2023 18:21:41 +0530 Subject: [PATCH 031/171] fix typos --- docs/core/timeline.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/timeline.md b/docs/core/timeline.md index 6351136f8..9b738bcea 100644 --- a/docs/core/timeline.md +++ b/docs/core/timeline.md @@ -136,7 +136,7 @@ const h = await tl.go(0); const h2 = await tl.go(5); ``` -## Understanding the Timline Lifecycle +## Understanding the Timeline Lifecycle Now that you implemented a simple timeline let's take a minute to understand the lifecycle of a timeline execution. There are four moments always defined for every timeline: init, dispose, log, and error. Of these init and dispose are used within the lifecycle, while log and error are used as you need. From db78afa80b2389d1ca9a668259065f5ee7327fbd Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Sun, 22 Oct 2023 12:39:09 -0600 Subject: [PATCH 032/171] Adding Tests, Refactoring, adding missing endpoints --- docs/graph/appCatalog.md | 121 ++++++++++++++++++ docs/graph/appCatalogs.md | 83 ------------ packages/graph/appCatalog/index.ts | 22 ++++ .../{appCatalogs => appCatalog}/types.ts | 87 ++++++++----- packages/graph/appCatalogs/index.ts | 22 ---- packages/graph/presets/all.ts | 2 + test/graph/appCatalogs.ts | 47 +++++++ 7 files changed, 247 insertions(+), 137 deletions(-) create mode 100644 docs/graph/appCatalog.md delete mode 100644 docs/graph/appCatalogs.md create mode 100644 packages/graph/appCatalog/index.ts rename packages/graph/{appCatalogs => appCatalog}/types.ts (51%) delete mode 100644 packages/graph/appCatalogs/index.ts create mode 100644 test/graph/appCatalogs.ts diff --git a/docs/graph/appCatalog.md b/docs/graph/appCatalog.md new file mode 100644 index 000000000..9d664fcad --- /dev/null +++ b/docs/graph/appCatalog.md @@ -0,0 +1,121 @@ +# @pnp/graph/appcatalog + +The ability to use Teams App Catalog + +## AppCatalog, IAppCatalog + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get Teams Apps in App Catalog + +Using teamsApps() you get the Teams AppCatalog + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); + +const apps = await graph.appCatalog.teamsApps(); + +``` +## Get Teams Apps by Id + +Using getById() you get the Teams App by Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); + +const apps = await graph.appCatalog.teamsApps.getById('{teams app id}')(); + +``` +## Add a Teams App + + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); +const appPackage = {...} as Blob; + +//second parameter is "Requires Approval" +const app = await graph.appCatalog.teamsApps.getById('{teams app id}').add(appPackage, false); + +``` +## Update a Teams App + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); +const appPackage = {...} as Blob; + +//second parameter is "Requires Approval" +const app = await graph.appCatalog.teamsApps.getById('{teams app id}').update(appPackage, false); + +``` +## Delete a Teams App + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); + +//delete a Teams App +await graph.appCatalog.teamsApps.getById(app).delete(); + +// delete an un-approved Teams App requires the app definition id. +// sample is just selecting the first app definition. +const appDefinition = (await graph.appCatalog.teamsApps.getById("{teams app id}")()).appDefinitions[0]; +await graph.appCatalog.teamsApps.getById(app).delete(appDefinition); + +``` +## Get Teams App Definitions + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); + +//get teams app definitions +await graph.appCatalog.teamsApps.getById(`{teams app id}`).appDefinitions(); + +``` +## Get Teams App Definitions by Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); + +//get teams app definitions +await graph.appCatalog.teamsApps.getById(`{teams app id}`).appDefinitions.getById(`{Teams App Definition Id}`) + +``` +## Get Bot associated with Teams App Definition + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; + +const graph = graphfi(...); + +await graph.appCatalog.teamsApps.getById(`{teams app id}`).appDefinitions.getById(`{Teams App Definition Id}`).bot(); + +``` \ No newline at end of file diff --git a/docs/graph/appCatalogs.md b/docs/graph/appCatalogs.md deleted file mode 100644 index e15c42c25..000000000 --- a/docs/graph/appCatalogs.md +++ /dev/null @@ -1,83 +0,0 @@ -# @pnp/graph/appcatalogs - -The ability to use Teams App Catalogs - -## AppCatalogs, IAppCatalogs - -[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) - -## Get Teams Apps in App Catalog - -Using teamsApps() you get the Teams AppCatalog - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/teams"; -import "@pnp/graph/appCatalogs"; - -const graph = graphfi(...); - -const apps = await graph.appCatalogs.teamsApps(); - -``` -## Get Teams Apps by Id - -Using getById() you get the Teams App by Id - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/teams"; -import "@pnp/graph/appCatalogs"; - -const graph = graphfi(...); - -const apps = await graph.appCatalogs.teamsApps.getById('{teams app id}')(); - -``` -## Add a Teams App - - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/teams"; -import "@pnp/graph/appCatalogs"; - -const graph = graphfi(...); -const appPackage = {...} as Blob; - -//second parameter is "Requires Approval" -const app = await graph.appCatalogs.teamsApps.getById('{teams app id}').add(appPackage, false); - -``` -## Update a Teams App - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/teams"; -import "@pnp/graph/appCatalogs"; - -const graph = graphfi(...); -const appPackage = {...} as Blob; - -//second parameter is "Requires Approval" -const app = await graph.appCatalogs.teamsApps.getById('{teams app id}').update(appPackage, false); - -``` -## Delete a Teams App - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/teams"; -import "@pnp/graph/appCatalogs"; - -const graph = graphfi(...); - -//delete a Teams App -await graph.appCatalogs.teamsApps.getById(app).delete(); - -// delete an un-approved Teams App requires the app definition id. -// sample is just selecting the first app definition. -const appDefinition = (await graph.appCatalogs.teamsApps.getById("{teams app id}")()).appDefinitions[0]; -await graph.appCatalogs.teamsApps.getById(app).delete(appDefinition); - -``` \ No newline at end of file diff --git a/packages/graph/appCatalog/index.ts b/packages/graph/appCatalog/index.ts new file mode 100644 index 000000000..8fba9b1aa --- /dev/null +++ b/packages/graph/appCatalog/index.ts @@ -0,0 +1,22 @@ +import { GraphFI } from "../fi.js"; +import { AppCatalog, IAppCatalog} from "./types.js"; + + +export { + AppCatalog, + IAppCatalog, +} from "./types.js"; + +declare module "../fi" { + interface GraphFI { + readonly appCatalog: IAppCatalog; + } +} + +Reflect.defineProperty(GraphFI.prototype, "appCatalog", { + configurable: true, + enumerable: true, + get: function (this: GraphFI) { + return this.create(AppCatalog); + }, +}); diff --git a/packages/graph/appCatalogs/types.ts b/packages/graph/appCatalog/types.ts similarity index 51% rename from packages/graph/appCatalogs/types.ts rename to packages/graph/appCatalog/types.ts index a33369fdb..cad91a185 100644 --- a/packages/graph/appCatalogs/types.ts +++ b/packages/graph/appCatalog/types.ts @@ -1,7 +1,10 @@ - -import { AppCatalogs as IAppCatalogsType, TeamsApp as ITeamsAppType, TeamsAppDefinition as ITeamsAppDefinitionType } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost, graphDelete } from "../graphqueryable.js"; -import { IGetById, defaultPath, getById } from "../decorators.js"; +import { + AppCatalogs as IAppCatalogsType, + TeamsApp as ITeamsAppType, + TeamsAppDefinition as ITeamsAppDefinitionType, + TeamworkBot as ITeamworkBot } from "@microsoft/microsoft-graph-types"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost, graphDelete, graphGet } from "../graphqueryable.js"; +import { IGetById, defaultPath, getById } from "../decorators.js"; import { InjectHeaders } from "@pnp/queryable/index.js"; /** @@ -9,65 +12,86 @@ import { InjectHeaders } from "@pnp/queryable/index.js"; */ @defaultPath("appCatalogs") -export class _AppCatalogs extends _GraphInstance { +export class _AppCatalog extends _GraphInstance { /** * Get teams apps in appCatalog - * + * */ public get teamsApps(): ITeamsApps { return TeamsApps(this); } } -export interface IAppCatalogs extends _AppCatalogs { } -export const AppCatalogs = graphInvokableFactory(_AppCatalogs); +export interface IAppCatalog extends _AppCatalog {} +export const AppCatalog = graphInvokableFactory(_AppCatalog); +/** + * AppDefinition + */ +export class _AppDefinition extends _GraphInstance { + /** + * Gets bot associated with app + * + */ + public async bot(): Promise{ + return graphGet(AppDefinitions(this, "/bot")); + } +} +export interface IAppDefinition extends _AppDefinition { } +export const AppDefinition = graphInvokableFactory(_AppDefinition); /** * AppDefinitions */ -export class _AppDefinition extends _GraphInstance { } -export interface IAppDefinition extends _AppDefinition { } -export const AppDefinitions = graphInvokableFactory(_AppDefinition); + +@defaultPath("appDefinitions") +@getById(AppDefinition) +export class _AppDefinitions extends _GraphCollection {} +export interface IAppDefinitions extends _AppDefinitions, IGetById {} +export const AppDefinitions = graphInvokableFactory(_AppDefinitions); /** * TeamsApp */ -export class _TeamsApp extends _GraphInstance { +export class _TeamsApp extends _GraphInstance { + /** + * Get app definitions + * + */ + public get appDefinitions(): IAppDefinitions { + return AppDefinitions(this); + } /** * Deletes a Teams App - * + * */ public async delete(appDefinitionId?: string): Promise { - // Un-approved apps must be deleted differently. https://learn.microsoft.com/en-us/graph/api/teamsapp-delete?view=graph-rest-1.0&tabs=http#permissions if(appDefinitionId){ - return graphDelete(TeamsApp(this,`/appDefinitions/${appDefinitionId}`)); + return graphDelete(AppDefinitions(this,`/${appDefinitionId}`)); } return graphDelete(this); } - /** + /** * Updates a Teams App * * @param zip zip file of app - * @param requiresReview This optional query parameter triggers the app review process. Users with admin privileges can submit apps without triggering a review. + * @param requiresReview This optional query parameter triggers the app review process. Users with admin privileges can submit apps without triggering a review. */ - public async update(zip: Blob, requiresReview:boolean = false): Promise { - - const q = TeamsApp(this,`appDefinitions?$requiresReview=${requiresReview}`); + public async update(zip: Blob, requiresReview = false): Promise { + const q = AppDefinitions(this,`?$requiresReview=${requiresReview}`); q.using(InjectHeaders({ "Content-Type": "application/zip", })); - + return graphPost(q, { body: zip }); } - } -export interface ITeamsApp extends _TeamsApp { } +export interface ITeamsApp extends _TeamsApp{} export const TeamsApp = graphInvokableFactory(_TeamsApp); @@ -78,22 +102,21 @@ export const TeamsApp = graphInvokableFactory(_TeamsApp); @defaultPath("teamsApps") @getById(TeamsApp) export class _TeamsApps extends _GraphCollection { - - /** + /** * Adds a Teams App * * @param zip zip file of app - * @param requiresReview This optional query parameter triggers the app review process. Users with admin privileges can submit apps without triggering a review. + * @param requiresReview This optional query parameter triggers the app review process. Users with admin privileges can submit apps without triggering a review. + * */ - public async add(zip: Blob, requiresReview:boolean = false): Promise { - - const q = TeamsApp(this); + public async add(zip: Blob, requiresReview = false): Promise { + const q = TeamsApp(this, `?requiresReview=${requiresReview}`); q.using(InjectHeaders({ "Content-Type": "application/zip", })); - + return graphPost(q, { body: zip }); } - } -export interface ITeamsApps extends _TeamsApps, IGetById {} { } +} +export interface ITeamsApps extends _TeamsApps, IGetById{} export const TeamsApps = graphInvokableFactory(_TeamsApps); diff --git a/packages/graph/appCatalogs/index.ts b/packages/graph/appCatalogs/index.ts deleted file mode 100644 index 5574c454c..000000000 --- a/packages/graph/appCatalogs/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { GraphFI } from "../fi.js"; -import { AppCatalogs, IAppCatalogs} from "./types.js"; - - -export { - AppCatalogs, - IAppCatalogs, -} from "./types.js"; - -declare module "../fi" { - interface GraphFI { - readonly appCatalogs: IAppCatalogs; - } -} - -Reflect.defineProperty(GraphFI.prototype, "appCatalogs", { - configurable: true, - enumerable: true, - get: function (this: GraphFI) { - return this.create(AppCatalogs); - }, -}); diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index 641972213..2edcc11ad 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -1,3 +1,4 @@ +import "../appCatalog/index.js"; import "../attachments/index.js"; import "../calendars/index.js"; import "../cloud-communications/index.js"; @@ -20,6 +21,7 @@ import "../subscriptions/index.js"; import "../teams/index.js"; import "../users/index.js"; +export * from "../appCatalog/index.js"; export * from "../attachments/index.js"; export * from "../calendars/index.js"; export * from "../cloud-communications/index.js"; diff --git a/test/graph/appCatalogs.ts b/test/graph/appCatalogs.ts new file mode 100644 index 000000000..39aa54dc7 --- /dev/null +++ b/test/graph/appCatalogs.ts @@ -0,0 +1,47 @@ +import { expect } from "chai"; +import "@pnp/graph/teams"; +import "@pnp/graph/appCatalog"; +import { pnpTest } from "../pnp-test.js"; + +describe.only("AppCatalog", function () { + + before(async function () { + + if (!this.pnp.settings.enableWebTests) { + this.skip(); + } + }); + + it("teamsApps", pnpTest("32d84a70-52cb-47c8-8957-cda902c07d85", async function () { + const apps = await this.pnp.graph.appCatalog.teamsApps(); + return expect(apps).to.be.an("array") && expect(apps[0]).to.haveOwnProperty("id"); + })); + + it("teamsApps - getById()", pnpTest("17bfb2cd-8fd3-41d3-a387-2fcf410b7100", async function () { + let passed = false; + const apps = await this.pnp.graph.appCatalog.teamsApps(); + if (apps.length > 0) { + const app = await this.pnp.graph.appCatalog.teamsApps.getById(apps[0].id)(); + passed = (app.id === apps[0].id); + } + return expect(passed).is.true; + })); + + it("appDefinitions", pnpTest("63c8ef41-067f-4f58-bd78-9b5d8d60b5b4", async function () { + const apps = await this.pnp.graph.appCatalog.teamsApps(); + const appDefinitions = await this.pnp.graph.appCatalog.teamsApps.getById(apps[0].id).appDefinitions(); + return expect(appDefinitions).to.be.an("array") && expect(appDefinitions[0]).to.haveOwnProperty("id"); + })); + + it("appDefinitions - getById()", pnpTest("11dce742-2aeb-4b8e-8967-6f73b7fd55d6", async function () { + let passed = false; + const apps = await this.pnp.graph.appCatalog.teamsApps(); + const appDefinitions = await this.pnp.graph.appCatalog.teamsApps.getById(apps[0].id).appDefinitions(); + + if (apps.length > 0) { + const def = await this.pnp.graph.appCatalog.teamsApps.getById(apps[0].id).appDefinitions.getById(appDefinitions[0].id)(); + passed = (def.id === appDefinitions[0].id); + } + return expect(passed).is.true; + })); +}); From 755eacef4b5515017ff7e5f330a154809d2b4229 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 13 Nov 2023 07:56:53 -0500 Subject: [PATCH 033/171] Update addable --- docs/graph/items.md | 2 +- packages/graph/list-item/types.ts | 51 +++++-------------------------- test/graph/list-items.ts | 6 ++-- 3 files changed, 12 insertions(+), 47 deletions(-) diff --git a/docs/graph/items.md b/docs/graph/items.md index 6401e7a0b..21eab2757 100644 --- a/docs/graph/items.md +++ b/docs/graph/items.md @@ -110,7 +110,7 @@ import "@pnp/graph/list-items"; import "@pnp/graph/lists"; const graph = graphfi(...); -var version = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.add("New Comment"); +var version = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions.add({comment:"Test Comment", shouldCaptureMinorVersion: true}); ``` diff --git a/packages/graph/list-item/types.ts b/packages/graph/list-item/types.ts index 62af34f61..101734540 100644 --- a/packages/graph/list-item/types.ts +++ b/packages/graph/list-item/types.ts @@ -1,7 +1,6 @@ import { ListItem as IListItemEntity, ListItemVersion as IListItemVersion, DocumentSetVersion as IDocumentSetVersionEntity } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance, IGraphCollection, GraphCollection, graphPost } from "../graphqueryable.js"; -import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { body } from "@pnp/queryable"; +import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById, addable, IAddable } from "../decorators.js"; /** * Represents a list item entity @@ -26,23 +25,10 @@ export const ListItem = graphInvokableFactory(_ListItem); */ @defaultPath("items") @getById(ListItem) -export class _ListItems extends _GraphCollection{ - /** - * Create a new list item as specified in the request body. - * - * @param listItem a JSON representation of a List object. - */ - public async add(listItem: IListItemEntity): Promise { - const data = await graphPost(this, body(listItem)); +@addable() +export class _ListItems extends _GraphCollection{} - return { - data, - list: (this).getById(data.id), - }; - } -} - -export interface IListItems extends _ListItems, IGetById { } +export interface IListItems extends _ListItems, IGetById, IAddable { } export const ListItems = graphInvokableFactory(_ListItems); /** @@ -67,34 +53,13 @@ export const DocumentSetVersion = graphInvokableFactory(_Do */ @defaultPath("documentSetVersions") @getById(DocumentSetVersion) -export class _DocumentSetVersions extends _GraphCollection{ - /** - * Create a new document set version as specified in the request body. - * - * @param comment a comment about the captured version - * @param shouldCaptureMinorVersion If true, minor versions of items are also captured; otherwise, only major versions will be captured. - * - */ - public async add(comment: string, shouldCaptureMinorVersion = false): Promise { - - const postBody = { - comment: comment, - shouldCaptureMinorVersion: shouldCaptureMinorVersion, - }; - const data = await graphPost(this, body(postBody)); - - return { - data, - item: (this).getById(data.id), - }; - } -} - -export interface IDocumentSetVersions extends _DocumentSetVersions, IGetById {} +@addable() +export class _DocumentSetVersions extends _GraphCollection{} +export interface IDocumentSetVersions extends _DocumentSetVersions, IGetById, IAddable {} export const DocumentSetVersions = graphInvokableFactory(_DocumentSetVersions); /** - * IListAddResult + * IDocumentSetVersionAddResult */ export interface IDocumentSetVersionAddResult { item: IDocumentSetVersion; diff --git a/test/graph/list-items.ts b/test/graph/list-items.ts index 9f134b60b..b0d4d5b4f 100644 --- a/test/graph/list-items.ts +++ b/test/graph/list-items.ts @@ -61,7 +61,7 @@ describe("List-Items", function () { }, } as any); - return expect((itemAdded.data.id)).is.not.null; + return expect((itemAdded.id)).is.not.null; })); it("update", pnpTest("5766613a-51b8-4f88-ba0f-2436d160b86b", async function () { @@ -82,7 +82,7 @@ describe("List-Items", function () { title: getRandomString(5) + "Add", }, } as any); - const r = await list.items.filter(`Id eq '${item.data.id}'`)(); + const r = await list.items.filter(`Id eq '${item.id}'`)(); return expect(r.length).to.eq(0); })); @@ -99,7 +99,7 @@ describe("List-Items", function () { })); it.skip("documentSetVersions - add()", pnpTest("a192e096-fe84-4c2c-adc5-b1b9021c0031", async function () { - const documentSetVersion = await item.documentSetVersions.add("New Comment"); + const documentSetVersion = await item.documentSetVersions.add({comment:"Test Comment"}); return expect(documentSetVersion).to.not.be.null && expect(documentSetVersion).to.haveOwnProperty("id"); })); From 2e8f7459eae55fdc1430ecb8092e6fd5e83cd2ba Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 20 Nov 2023 08:30:51 -0500 Subject: [PATCH 034/171] Updating Docs --- docs/graph/items.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/graph/items.md b/docs/graph/items.md index 21eab2757..949cb0787 100644 --- a/docs/graph/items.md +++ b/docs/graph/items.md @@ -85,8 +85,7 @@ import "@pnp/graph/list-items"; import "@pnp/graph/lists"; const graph = graphfi(...); -var item = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions(); -var documentSetVersions = item.documentSetVersions(); +var documentSetVersions = await graph.sites.getById("{site identifier}").lists.getById("{list identifier}").items.getById("{item identifier}").documentSetVersions(); ``` From 8361deb8d0f8a428a53657f989e318d482fa5e72 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Sun, 10 Dec 2023 12:48:37 -0500 Subject: [PATCH 035/171] Adding installed Apps to User --- docs/graph/teams.md | 105 ++++++++++++++++++++++++++-------- packages/graph/teams/users.ts | 5 +- 2 files changed, 85 insertions(+), 25 deletions(-) diff --git a/docs/graph/teams.md b/docs/graph/teams.md index 1ffea3569..8052ce95d 100644 --- a/docs/graph/teams.md +++ b/docs/graph/teams.md @@ -3,7 +3,9 @@ The ability to manage Team is a capability introduced in the 1.2.7 of @pnp/graph. Through the methods described you can add, update and delete items in Teams. -## Teams the user is a member of +## Teams + +### Teams the user is a member of ```TypeScript import { graphfi } from "@pnp/graph"; @@ -18,7 +20,7 @@ const myJoinedTeams = await graph.me.joinedTeams(); ``` -## Get Teams by Id +### Get Teams by Id Using the teams.getById() you can get a specific Team. @@ -31,12 +33,12 @@ const graph = graphfi(...); const team = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528')(); ``` -## Create new Team/Group - Method #1 +### Create new Team/Group - Method #1 The first way to create a new Team and corresponding Group is to first create the group and then create the team. Follow the example in Groups to create the group and get the GroupID. Then make a call to create the team from the group. -## Create a Team via a specific group +### Create a Team via a specific group Here we get the group via id and use `createTeam` @@ -61,7 +63,7 @@ const createdTeam = await graph.groups.getById('679c8ff4-f07d-40de-b02b-60ec3324 }}); ``` -## Create new Team/Group - Method #2 +### Create new Team/Group - Method #2 The second way to create a new Team and corresponding Group is to do so in one call. This can be done by using the createTeam method. @@ -89,7 +91,7 @@ const createdTeam: ITeamCreateResultAsync = await graph.teams.create(team); const createdTeamStatus = await graph.teams.getById(createdTeam.teamId).getOperationById(createdTeam.operationId); ``` -## Clone a Team +### Clone a Team ```TypeScript import { graphfi } from "@pnp/graph"; @@ -102,7 +104,7 @@ const clonedTeam = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d82265 ``` -## Get Teams Async Operation +### Get Teams Async Operation ```TypeScript import { graphfi } from "@pnp/graph"; @@ -115,7 +117,7 @@ const clonedTeam = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d82265 const clonedTeamStatus = await graph.teams.getById(clonedTeam.teamId).getOperationById(clonedTeam.operationId); ``` -## Archive a Team +### Archive a Team ```TypeScript import { graphfi } from "@pnp/graph"; @@ -126,7 +128,7 @@ const graph = graphfi(...); const archived = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528').archive(); ``` -## Unarchive a Team +### Unarchive a Team ```TypeScript import { graphfi } from "@pnp/graph"; @@ -137,7 +139,7 @@ const graph = graphfi(...); const archived = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528').unarchive(); ``` -## Get all channels of a Team +### Get all channels of a Team ```TypeScript import { graphfi } from "@pnp/graph"; @@ -148,7 +150,7 @@ const graph = graphfi(...); const channels = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528').channels(); ``` -## Get primary channel +### Get primary channel Using the teams.getById() you can get a specific Team. @@ -160,7 +162,7 @@ const graph = graphfi(...); const channel = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528').primaryChannel(); ``` -## Get channel by Id +### Get channel by Id ```TypeScript import { graphfi } from "@pnp/graph"; @@ -172,7 +174,7 @@ const channel = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528' ``` -## Create a new Channel +### Create a new Channel ```TypeScript import { graphfi } from "@pnp/graph"; @@ -183,7 +185,7 @@ const newChannel = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d82265 ``` -## List Messages +### List Messages ```TypeScript import { graphfi } from "@pnp/graph"; @@ -194,7 +196,7 @@ const graph = graphfi(...); const chatMessages = await graph.teams.getById('3531fzfb-f9ee-4f43-982a-6c90d8226528').channels.getById('19:65723d632b384xa89c81115c281428a3@thread.skype').messages(); ``` -## Add chat message to Channel +### Add chat message to Channel ```TypeScript import { graphfi } from "@pnp/graph"; @@ -211,7 +213,7 @@ const message = { const chatMessage: ChatMessage = await graph.teams.getById('3531fzfb-f9ee-4f43-982a-6c90d8226528').channels.getById('19:65723d632b384xa89c81115c281428a3@thread.skype').messages.add(message); ``` -## Get installed Apps +### Get installed Apps ```TypeScript import { graphfi } from "@pnp/graph"; @@ -223,7 +225,7 @@ const installedApps = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d82 ``` -## Add an App +### Add an App ```TypeScript import { graphfi } from "@pnp/graph"; @@ -235,7 +237,7 @@ const addedApp = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d8226528 ``` -## Remove an App +### Remove an App ```TypeScript import { graphfi } from "@pnp/graph"; @@ -247,7 +249,7 @@ const removedApp = await graph.teams.getById('3531f3fb-f9ee-4f43-982a-6c90d82265 ``` -## Get Tabs from a Channel +### Get Tabs from a Channel ```TypeScript import { graphfi } from "@pnp/graph"; @@ -260,7 +262,7 @@ channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs(); ``` -## Get Tab by Id +### Get Tab by Id ```TypeScript import { graphfi } from "@pnp/graph"; @@ -273,7 +275,7 @@ channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.getByI ``` -## Add a new Tab to Channel +### Add a new Tab to Channel ```TypeScript import { graphfi } from "@pnp/graph"; @@ -286,7 +288,7 @@ channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.add('T ``` -## Update a Tab +### Update a Tab ```TypeScript import { graphfi } from "@pnp/graph"; @@ -301,7 +303,7 @@ channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.getByI ``` -## Remove a Tab from channel +### Remove a Tab from channel ```TypeScript import { graphfi } from "@pnp/graph"; @@ -314,8 +316,63 @@ channels.getById('19:65723d632b384ca89c81115c281428a3@thread.skype').tabs.getByI ``` -## Team Membership +### Team Membership Get the members and/or owners of a group. See [Groups](./groups.md) + + +## Users + + +### Get installed Apps + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/teams"; + +const graph = graphfi(...); + +const installedApps = await graph.me.installedApps(); +const installedAppsForUsers = await graph.users('user@contoso.com').installedApps(); + +``` +### Get an App + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/teams"; + +const graph = graphfi(...); + +const addedApp = await graph.me.installedApps.getById('NWI2NDk4MzQtNzQxMi00Y2NlLTllNjktMTc2ZTk1YTM5NGY1IyNhNmI2MzM2NS0zMWE0LTRmNDMtOTJlYy03MTBiNzE1NTdhZjk')(); + +``` + +### Add an App + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/teams"; + +const graph = graphfi(...); + +const addedApp = await graph.me.installedApps.add('https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/12345678-9abc-def0-123456789a'); + +``` + +### Remove an App + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/teams"; + +const graph = graphfi(...); + +const removedApp = await graph.me.installedApps.getById('NWI2NDk4MzQtNzQxMi00Y2NlLTllNjktMTc2ZTk1YTM5NGY1IyNhNmI2MzM2NS0zMWE0LTRmNDMtOTJlYy03MTBiNzE1NTdhZjk').delete(); + +``` diff --git a/packages/graph/teams/users.ts b/packages/graph/teams/users.ts index 77dc7cc5a..3c3553264 100644 --- a/packages/graph/teams/users.ts +++ b/packages/graph/teams/users.ts @@ -1,14 +1,17 @@ import { addProp } from "@pnp/queryable"; import { _User } from "../users/types.js"; -import { ITeams, Teams } from "./types.js"; +import { IInstalledApps, InstalledApps, ITeams, Teams } from "./types.js"; declare module "../users/types" { interface _User { readonly joinedTeams: ITeams; + readonly installedApps: IInstalledApps; } interface IUser { readonly joinedTeams: ITeams; + readonly installedApps: IInstalledApps; } } addProp(_User, "joinedTeams", Teams); +addProp(_User, "installedApps", InstalledApps, "teamwork/installedApps"); From 7038e066cb69589e5fb82244c987e7f44cbe416f Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 10:15:59 -0500 Subject: [PATCH 036/171] v0 of new buildsystem --- .vscode/launch.json | 8 +- .vscode/settings.json | 2 +- .vscode/tasks.json | 10 +- buildsystem-config2.js | 115 + buildsystem-config2.ts | 154 + debug/launch/graph.ts | 20 +- debug/launch/main.ts | 6 +- debug/serve/main.ts | 61 +- package.json | 1 + packages/graph/files/types.ts | 4 + .../behaviors/diagnostics-jwt-decode.ts | 24 + packages/queryable/index.ts | 4 + packages/sp/spqueryable.ts | 2 +- test/sp/fields.ts | 756 +- test/sp/files.ts | 5 +- tools/buildsystem/.npmignore | 1 - tools/buildsystem/bin/buildsystem.ts | 131 +- tools/buildsystem/index.ts | 21 +- tools/buildsystem/package-lock.json | 6472 +++++++++-------- tools/buildsystem/package.json | 24 +- tools/buildsystem/src/behaviors/build.ts | 33 + .../src/behaviors/copy-asset-files.ts | 51 + .../src/behaviors/copy-package-files.ts | 49 + .../src/behaviors/publish-nightly.ts | 37 + tools/buildsystem/src/behaviors/publish.ts | 45 + .../src/behaviors/replace-version.ts | 25 + tools/buildsystem/src/behaviors/webpack.ts | 31 + .../src/behaviors/write-packagejson.ts | 46 + tools/buildsystem/src/build-timeline.ts | 91 + tools/buildsystem/src/builder.ts | 55 - tools/buildsystem/src/buildsystem.ts | 6 - tools/buildsystem/src/config.ts | 83 - tools/buildsystem/src/lib/copy-file.ts | 22 + tools/buildsystem/src/lib/getSubDirs.ts | 7 - .../src/lib/{importJSON.ts => import-json.ts} | 0 tools/buildsystem/src/lib/write-file.ts | 22 + tools/buildsystem/src/packager.ts | 66 - tools/buildsystem/src/publisher.ts | 51 - tools/buildsystem/src/tasks/build/build.ts | 30 - tools/buildsystem/src/tasks/build/index.ts | 2 - .../src/tasks/build/replace-version.ts | 40 - tools/buildsystem/src/tasks/index.ts | 7 - .../src/tasks/package/copy-package-scripts.ts | 45 - .../src/tasks/package/copy-static-assets.ts | 38 - .../src/tasks/package/copy-target-files.ts | 51 - tools/buildsystem/src/tasks/package/index.ts | 5 - .../buildsystem/src/tasks/package/webpack.ts | 26 - .../src/tasks/package/write-package-files.ts | 77 - tools/buildsystem/src/tasks/publish/index.ts | 4 - .../src/tasks/publish/publish-beta-package.ts | 43 - .../src/tasks/publish/publish-package.ts | 43 - .../src/tasks/publish/publish-v3nightly.ts | 43 - .../tasks/publish/v3nightly-update-version.ts | 56 - tools/buildsystem/src/types.ts | 35 + tools/buildsystem/tsconfig.json | 4 +- tools/local-module-resolver/esm-packages.ts | 2 + tsconfig.buildsystem.json | 3 +- tsconfig.localresolver.json | 17 + 58 files changed, 4939 insertions(+), 4173 deletions(-) create mode 100644 buildsystem-config2.js create mode 100644 buildsystem-config2.ts create mode 100644 packages/queryable/behaviors/diagnostics-jwt-decode.ts create mode 100644 tools/buildsystem/src/behaviors/build.ts create mode 100644 tools/buildsystem/src/behaviors/copy-asset-files.ts create mode 100644 tools/buildsystem/src/behaviors/copy-package-files.ts create mode 100644 tools/buildsystem/src/behaviors/publish-nightly.ts create mode 100644 tools/buildsystem/src/behaviors/publish.ts create mode 100644 tools/buildsystem/src/behaviors/replace-version.ts create mode 100644 tools/buildsystem/src/behaviors/webpack.ts create mode 100644 tools/buildsystem/src/behaviors/write-packagejson.ts create mode 100644 tools/buildsystem/src/build-timeline.ts delete mode 100644 tools/buildsystem/src/builder.ts delete mode 100644 tools/buildsystem/src/buildsystem.ts delete mode 100644 tools/buildsystem/src/config.ts create mode 100644 tools/buildsystem/src/lib/copy-file.ts delete mode 100644 tools/buildsystem/src/lib/getSubDirs.ts rename tools/buildsystem/src/lib/{importJSON.ts => import-json.ts} (100%) create mode 100644 tools/buildsystem/src/lib/write-file.ts delete mode 100644 tools/buildsystem/src/packager.ts delete mode 100644 tools/buildsystem/src/publisher.ts delete mode 100644 tools/buildsystem/src/tasks/build/build.ts delete mode 100644 tools/buildsystem/src/tasks/build/index.ts delete mode 100644 tools/buildsystem/src/tasks/build/replace-version.ts delete mode 100644 tools/buildsystem/src/tasks/index.ts delete mode 100644 tools/buildsystem/src/tasks/package/copy-package-scripts.ts delete mode 100644 tools/buildsystem/src/tasks/package/copy-static-assets.ts delete mode 100644 tools/buildsystem/src/tasks/package/copy-target-files.ts delete mode 100644 tools/buildsystem/src/tasks/package/index.ts delete mode 100644 tools/buildsystem/src/tasks/package/webpack.ts delete mode 100644 tools/buildsystem/src/tasks/package/write-package-files.ts delete mode 100644 tools/buildsystem/src/tasks/publish/index.ts delete mode 100644 tools/buildsystem/src/tasks/publish/publish-beta-package.ts delete mode 100644 tools/buildsystem/src/tasks/publish/publish-package.ts delete mode 100644 tools/buildsystem/src/tasks/publish/publish-v3nightly.ts delete mode 100644 tools/buildsystem/src/tasks/publish/v3nightly-update-version.ts create mode 100644 tools/buildsystem/src/types.ts create mode 100644 tools/local-module-resolver/esm-packages.ts create mode 100644 tsconfig.localresolver.json diff --git a/.vscode/launch.json b/.vscode/launch.json index 86d5df370..2301813a7 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -54,13 +54,15 @@ "program": "${workspaceRoot}/tools/buildsystem/bin/buildsystem.ts", "args": [ "-n", - "package" + "build" ], "cwd": "${workspaceRoot}", "preLaunchTask": "build-buildsystem", "runtimeExecutable": null, "runtimeArgs": [ - "--nolazy" + "--nolazy", + "--experimental-loader", + "file://${workspaceRoot}/build/debugging/tools/local-module-resolver/esm-packages.js" ], "env": { "NODE_ENV": "development" @@ -69,7 +71,7 @@ "internalConsoleOptions": "openOnSessionStart", "sourceMaps": true, "outFiles": [ - "${workspaceRoot}/tools/buildsystem/**/*.js" + "${workspaceRoot}/build/build-system/**/*.js" ], "skipFiles": [ "/**" diff --git a/.vscode/settings.json b/.vscode/settings.json index 629e5f75c..fdf6d860d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,7 +6,7 @@ "**/node_modules": true, "coverage": true, ".nyc_output": true, - "build": true, + "build": false, "dist": true, "site": true, "buildsystem-config.js": true diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 7a854b66e..90251e674 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -51,8 +51,14 @@ { "label": "build-buildsystem", "type": "shell", - "command": "tsc -p ./tools/buildsystem", - "args": [], + "command": "npx", + "args": [ + "tsc", + "-p", + "./tools/buildsystem", + "--outDir", + "./build/build-system" + ], "isBackground": false, "problemMatcher": [ "$tsc", diff --git a/buildsystem-config2.js b/buildsystem-config2.js new file mode 100644 index 000000000..1abe50c4c --- /dev/null +++ b/buildsystem-config2.js @@ -0,0 +1,115 @@ +import { resolve } from "path"; +// import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; +export default [{ + name: "build", + distFolder: "./dist/packages", + targets: [ + resolve("./packages/tsconfig.json"), + ] + }]; +// export default [ +// { +// name: "build", +// role: "build", +// packageRoot: resolve("./packages/"), +// preBuildTasks: [], +// // these tsconfig files will all be transpiled per the settings in the file +// buildTargets: [ +// resolve("./packages/tsconfig.json"), +// ], +// postBuildTasks: [ +// // this task replaces the $$Version$$ with the version from the root package.json at build time +// Tasks.Build.createReplaceVersion([ +// "sp/behaviors/telemetry.js", +// "graph/behaviors/telemetry.js", +// ]), +// ], +// }, +// { +// name: "package", +// role: "package", +// prePackageTasks: [], +// packageTargets: [ +// { +// outDir: resolve("./dist/packages"), +// target: resolve("./packages/tsconfig.json"), +// tasks: [ +// Tasks.Package.createCopyTargetFiles(), +// Tasks.Package.copyStaticAssets, +// Tasks.Package.createCopyPackageScripts(), +// Tasks.Package.createWritePackageFiles((p) => { +// return Object.assign({}, p, { +// funding: { +// type: "individual", +// url: "https://github.com/sponsors/patrick-rodgers/", +// }, +// type: "module", +// engines: { +// node: ">=14.15.1" +// }, +// author: { +// name: "Microsoft and other contributors" +// }, +// license: "MIT", +// bugs: { +// url: "https://github.com/pnp/pnpjs/issues" +// }, +// homepage: "https://github.com/pnp/pnpjs", +// repository: { +// type: "git", +// url: "git:github.com/pnp/pnpjs" +// } +// }); +// }), +// ], +// }, +// ], +// postPackageTasks: [], +// }, +// { +// name: "publish", +// role: "publish", +// packageRoots: [ +// resolve("./dist/packages"), +// ], +// prePublishTasks: [], +// publishTasks: [Tasks.Publish.publishPackage], +// postPublishTasks: [], +// }, +// { +// name: "build-debug", +// role: "build", +// packageRoot: resolve("./debug/"), +// exclude: [], +// preBuildTasks: [], +// buildTargets: [ +// resolve("./debug/launch/tsconfig.json"), +// ], +// postBuildTasks: [ +// Tasks.Build.createReplaceVersion([ +// "packages/sp/behaviors/telemetry.js", +// "packages/graph/behaviors/telemetry.js", +// ]), +// ], +// }, +// { +// name: "publish-beta", +// role: "publish", +// packageRoots: [ +// resolve("./dist/packages"), +// ], +// prePublishTasks: [], +// publishTasks: [Tasks.Publish.publishBetaPackage], +// postPublishTasks: [], +// }, +// { +// name: "publish-v3nightly", +// role: "publish", +// packageRoots: [ +// resolve("./dist/packages"), +// ], +// prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], +// publishTasks: [Tasks.Publish.publishV3Nightly], +// postPublishTasks: [], +// }, +// ]; diff --git a/buildsystem-config2.ts b/buildsystem-config2.ts new file mode 100644 index 000000000..1cc8627d2 --- /dev/null +++ b/buildsystem-config2.ts @@ -0,0 +1,154 @@ +import { resolve } from "path"; +// import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; + +export default [{ + name: "build", + distFolder: "./dist/packages", + targets: [ + resolve("./packages/tsconfig.json"), + ] +}]; + +// export default [ +// { + +// name: "build", + +// role: "build", + +// packageRoot: resolve("./packages/"), + +// preBuildTasks: [], + +// // these tsconfig files will all be transpiled per the settings in the file +// buildTargets: [ +// resolve("./packages/tsconfig.json"), +// ], + +// postBuildTasks: [ +// // this task replaces the $$Version$$ with the version from the root package.json at build time +// Tasks.Build.createReplaceVersion([ +// "sp/behaviors/telemetry.js", +// "graph/behaviors/telemetry.js", +// ]), +// ], +// }, +// { + +// name: "package", + +// role: "package", + +// prePackageTasks: [], + +// packageTargets: [ +// { +// outDir: resolve("./dist/packages"), +// target: resolve("./packages/tsconfig.json"), +// tasks: [ +// Tasks.Package.createCopyTargetFiles(), +// Tasks.Package.copyStaticAssets, +// Tasks.Package.createCopyPackageScripts(), +// Tasks.Package.createWritePackageFiles((p) => { +// return Object.assign({}, p, { +// funding: { +// type: "individual", +// url: "https://github.com/sponsors/patrick-rodgers/", +// }, +// type: "module", +// engines: { +// node: ">=14.15.1" +// }, +// author: { +// name: "Microsoft and other contributors" +// }, +// license: "MIT", +// bugs: { +// url: "https://github.com/pnp/pnpjs/issues" +// }, +// homepage: "https://github.com/pnp/pnpjs", +// repository: { +// type: "git", +// url: "git:github.com/pnp/pnpjs" +// } +// }); +// }), +// ], +// }, +// ], + +// postPackageTasks: [], +// }, +// { + +// name: "publish", + +// role: "publish", + +// packageRoots: [ +// resolve("./dist/packages"), +// ], + +// prePublishTasks: [], + +// publishTasks: [Tasks.Publish.publishPackage], + +// postPublishTasks: [], +// }, +// { + +// name: "build-debug", + +// role: "build", + +// packageRoot: resolve("./debug/"), + +// exclude: [], + +// preBuildTasks: [], + +// buildTargets: [ +// resolve("./debug/launch/tsconfig.json"), +// ], + +// postBuildTasks: [ + +// Tasks.Build.createReplaceVersion([ +// "packages/sp/behaviors/telemetry.js", +// "packages/graph/behaviors/telemetry.js", +// ]), +// ], +// }, +// { + +// name: "publish-beta", + +// role: "publish", + +// packageRoots: [ +// resolve("./dist/packages"), +// ], + +// prePublishTasks: [], + +// publishTasks: [Tasks.Publish.publishBetaPackage], + +// postPublishTasks: [], +// }, +// { + +// name: "publish-v3nightly", + +// role: "publish", + +// packageRoots: [ +// resolve("./dist/packages"), +// ], + +// prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], + +// publishTasks: [Tasks.Publish.publishV3Nightly], + +// postPublishTasks: [], +// }, +// ]; diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index b6efb5f89..4c63e4ee3 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,6 +1,6 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; -import "@pnp/graph/users"; +import "@pnp/graph/sites"; import { encodeSharingUrl } from "@pnp/graph/files"; declare var process: { exit(code?: number): void }; @@ -9,20 +9,14 @@ export async function Example(settings: any) { const graph = graphSetup(settings); - const ur = new URLSearchParams(); - ur.set("$filter", "NOT groupTypes/any(c:c+eq+'Unified')"); + const y = await graph.sites.getAllSites().select("modifiedDateTime")(); - const url = encodeSharingUrl("https://microsoft.sharepoint-df.com/teams/ODSPProductDay2/SitePages/ODSP-Seme.aspx"); - const users = graph.users.filter("NOT groupTypes/any(c:c+eq+'Unified')"); - - const y = ur.toString(); - - Logger.log({ - data: users, - level: LogLevel.Info, - message: "List of Users Data", - }); + // Logger.log({ + // data: users, + // level: LogLevel.Info, + // message: "List of Users Data", + // }); process.exit(0); } diff --git a/debug/launch/main.ts b/debug/launch/main.ts index 9c9922e07..22daa0872 100644 --- a/debug/launch/main.ts +++ b/debug/launch/main.ts @@ -9,7 +9,7 @@ import { ITestingSettings } from "../../test/load-settings.js"; // will allow you to keep all your debugging files locally // comment out the example // import { Example } from "./sp.js"; -import { Example } from "./graph.js"; +import { Example } from "./app-folder.js"; // setup the connection to SharePoint using the settings file, you can // override any of the values as you want here, just be sure not to commit @@ -19,7 +19,7 @@ import { Example } from "./graph.js"; // create a settings file using settings.example.js as a template import(findup("settings.js")).then((settings: { settings: ITestingSettings }) => { - Logger.activeLogLevel = LogLevel.Info; + Logger.activeLogLevel = LogLevel.Info; // // setup console logger Logger.subscribe(ConsoleListener("Debug", { @@ -27,7 +27,7 @@ import(findup("settings.js")).then((settings: { settings: ITestingSettings }) => error: "red", verbose: "lightslategray", warning: "yellow", - })); + })); Example(settings.settings); diff --git a/debug/serve/main.ts b/debug/serve/main.ts index 492e9d21a..70a2a47bc 100644 --- a/debug/serve/main.ts +++ b/debug/serve/main.ts @@ -1,13 +1,41 @@ import { MSAL } from "@pnp/msaljsclient/index.js"; import { spfi, SPBrowser } from "@pnp/sp"; import "@pnp/sp/webs"; +import { graphfi, GraphBrowser } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/lists"; +import "@pnp/graph/files"; +import "@pnp/graph/users"; import { settings } from "../../settings.js"; +import { Diagnostics_JWTDecoder } from "@pnp/queryable"; +import { ConsoleListener, PnPLogging, Logger, LogLevel } from "@pnp/logging"; // import { graph } from "@pnp/graph/presets/all"; // ****** // Please edit this file and do any testing required. Please do not submit changes as part of a PR. // ****** +const localInit = { + auth: { + authority: "https://login.microsoftonline.com/ef379d32-30d7-46fd-9bc8-971e0cfff9bd/", + clientId: "726ef411-3b09-4799-9b70-f0e5dde64466", + redirectUri: "https://localhost:8080/spa.html", + } +} + +//heartbeat +// const localInit = { +// auth: { +// authority: "https://login.microsoftonline.com/6b0c2761-33e5-48b4-868c-169359f2f8be/", +// clientId: "9b2a3203-adb3-4d28-8ee9-8a54a411b1b2", +// redirectUri: "https://localhost:8080/spa.html", +// } +// } + +const localScopes = ["Files.ReadWrite.AppFolder"]; + +Logger.subscribe(ConsoleListener()); + // ensure our DOM is ready for us to do stuff document.onreadystatechange = async () => { @@ -28,13 +56,38 @@ document.onreadystatechange = async () => { try { + // // Make sure to add `https://localhost:8080/spa.html` as a Redirect URI in your testing's AAD App Registration + // const sp = spfi().using( + // SPBrowser({ baseUrl: "https://318studios.sharepoint.com/sites/SiteSelectedDelegated"}), + // MSAL(localInit, {scopes: localScopes}) + // ); + // Make sure to add `https://localhost:8080/spa.html` as a Redirect URI in your testing's AAD App Registration - const sp = spfi().using( - SPBrowser({ baseUrl: settings.testing.sp.url}), - MSAL(settings.testing.sp.msal.init, {scopes: settings.testing.sp.msal.scopes}) + const graph = graphfi().using( + GraphBrowser(), + MSAL(localInit, { scopes: localScopes }), + PnPLogging(LogLevel.Info), ); - const r = await sp.web(); + graph.using(Diagnostics_JWTDecoder()); + + + // https://a830edad9050849einspufstc3x.sharepoint.com + + // const r = await graph.me.drive.special("approot")(); + + const r = await graph.users.getById("patrick@three18studios.com").drive.special("approot")(); + + // + + // const site = await graph.sites.getByUrl("318studios.sharepoint.com", "/sites/dev/"); + + // const r = await site.drive.special("approot")(); + + + // const r = await graph.sites.getById("a830edad9050849einspufstc3x.sharepoint.com:/sites/test1")(); + //const r = await graph.sites.getById("318studios.sharepoint.com:/sites/SiteSelectedDelegated:")(); + // const r = await graph.sites.getById("318studios.sharepoint.com:/sites/SiteSelectedDelegated:").lists.getById("e76d1709-44a3-41a7-8146-6f3191d6e72b")(); html.push(``); diff --git a/package.json b/package.json index acd81816e..373250d38 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ }, "scripts": { "build": "npm run pnp-buildsystem-init && pnpbuild -n build", + "build-localresolver": "npx tsc -p tsconfig.localresolver.json", "buildDebug": "npm run clean && npm run pnp-buildsystem-init && pnpbuild -n build-debug", "clean": "del-cli \"./?(dist|site|build|buildsystem-config.js)\"", "lint": "eslint ./packages ./test --ext .ts", diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index 76c51d907..a6571281a 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -205,6 +205,10 @@ export class _DriveItem extends _GraphInstance { return DriveItems(this, "children"); } + public get items(): IDriveItems { + return DriveItems(this, "items"); + } + /** * Method for retrieving thumbnails of the drive items. * @returns IGraphCollection diff --git a/packages/queryable/behaviors/diagnostics-jwt-decode.ts b/packages/queryable/behaviors/diagnostics-jwt-decode.ts new file mode 100644 index 000000000..1371ee6cd --- /dev/null +++ b/packages/queryable/behaviors/diagnostics-jwt-decode.ts @@ -0,0 +1,24 @@ +import { stringIsNullOrEmpty } from "@pnp/core"; +import { Queryable } from "../queryable"; + +export function Diagnostics_JWTDecoder() { + + return (instance: Queryable) => { + + instance.on.auth(async function (url: URL, init: RequestInit) { + + // eslint-disable-next-line @typescript-eslint/dot-notation + if (!stringIsNullOrEmpty(init.headers["Authorization"])) { + + // eslint-disable-next-line @typescript-eslint/dot-notation + const parts = (init.headers["Authorization"]).split("."); + + this.log(JSON.stringify(JSON.parse(atob(parts[1])), null, 2), 1); + } + + return [url, init]; + }); + + return instance; + }; +} diff --git a/packages/queryable/index.ts b/packages/queryable/index.ts index e7c3aa677..2a97f9efb 100644 --- a/packages/queryable/index.ts +++ b/packages/queryable/index.ts @@ -16,6 +16,10 @@ export * from "./behaviors/parsers.js"; export * from "./behaviors/timeout.js"; export * from "./behaviors/resolvers.js"; + +// testing +export * from "./behaviors/diagnostics-jwt-decode.js"; + /** * Adds a property to a target instance * diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index 775e2db6b..62712c60f 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -89,7 +89,7 @@ export class _SPQueryable extends Queryable { // there could be spaces or not around the boundaries let url = this.toUrl().replace(/([( *| *, *| *= *])'!(@.*?)::(.*?)'([ *)| *, *])/ig, (match, frontBoundary, labelName, value, endBoundary) => { this.log(`Rewriting aliased parameter from match ${match} to label: ${labelName} value: ${value}`, 0); - aliasedParams.set(labelName,`'${value}'`); + aliasedParams.set(labelName, `'${value}'`); return `${frontBoundary}${labelName}${endBoundary}`; }); diff --git a/test/sp/fields.ts b/test/sp/fields.ts index e5804db18..35d6e9842 100644 --- a/test/sp/fields.ts +++ b/test/sp/fields.ts @@ -17,6 +17,7 @@ import { pnpTest } from "../pnp-test.js"; describe("Fields", function () { + const testFieldName = "PnPJSTest"; const titleFieldId = "fa564e0f-0c70-4ab9-b863-0177e6ddd247"; const testFieldGroup = "PnP Test Group"; @@ -61,36 +62,61 @@ describe("Fields", function () { return expect(field).to.not.be.null; })); - it("add", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addText", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields.addText(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addNumber", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields.addNumber(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addCalculated", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; + it("add", pnpTest("80e75ef7-3d5a-4880-9b28-67143ce6d058", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addText", pnpTest("54ce0598-f27c-4787-9d39-3f31cedaacbd", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addText(name, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addNumber", pnpTest("5f3f2ba5-d467-4ebb-8161-3589c35f62c4", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addNumber(name, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addCalculated", pnpTest("4dc773f4-6f65-44e9-8ff6-8a03fe4dcb31", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + const field = await this.pnp.sp.web.fields - .addCalculated(testFieldNameRand, { + .addCalculated(name, { Formula: "=Modified+1", DateFormat: DateTimeFieldFormatType.DateOnly, FieldTypeKind: FieldTypes.Calculated, Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addDateTime", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addDateTime", pnpTest("8c6ef065-4ead-40ba-b240-43c4c750ceb2", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + const field = await this.pnp.sp.web.fields - .addDateTime(testFieldNameRand, + .addDateTime(name, { DisplayFormat: DateTimeFieldFormatType.DateOnly, DateTimeCalendarType: CalendarType.Gregorian, @@ -98,17 +124,28 @@ describe("Fields", function () { Group: testFieldGroup, } ); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addCurrency", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields.addCurrency(testFieldNameRand, { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addMultilineText", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addCurrency", pnpTest("673c2821-b07d-4c52-ae70-e5afe2a786bb", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addCurrency(name, { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addMultilineText", pnpTest("a6e8d8be-4db2-4e2a-a65b-0af3cfe6ff0e", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + const field = await this.pnp.sp.web.fields - .addMultilineText(testFieldNameRand, { + .addMultilineText(name, { NumberOfLines: 6, RichText: true, RestrictedMode: false, @@ -116,282 +153,441 @@ describe("Fields", function () { AllowHyperlink: true, Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addUrl", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addUrl(testFieldNameRand, { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addUser", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addUser(testFieldNameRand, { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addLookup", async function () { - const lookupListName = `LookupList_${getRandomString(10)}`; + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addUrl", pnpTest("c0754452-3817-415c-96d4-89e47d5cb7c2", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addUrl(name, { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: testFieldGroup }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addUser", pnpTest("93b6e6b4-d9b2-464f-8846-9c0353b9515f", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addUser(name, { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: testFieldGroup }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addLookup", pnpTest("578da2cd-0a42-42a0-84e7-0e0de0315610", async function () { + + const { name, lookupListName } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + lookupListName: `LookupList_${getRandomString(10)}`, + }); + const list = await this.pnp.sp.web.lists.add(lookupListName, testFieldDescription, 100, false); - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields.addLookup(testFieldNameRand, { LookupListId: list.data.Id, LookupFieldName: "Title" }); + + const field = await this.pnp.sp.web.fields.addLookup(name, { LookupListId: list.data.Id, LookupFieldName: "Title" }); await field.field.update({ Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addChoice", async function () { - const choices = [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`]; - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addChoice(testFieldNameRand, { Choices: choices, EditFormat: ChoiceFieldFormatType.Dropdown, FillInChoice: false, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addMultiChoice", async function () { - const choices = [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`]; - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addMultiChoice(testFieldNameRand, { Choices: choices, FillInChoice: false, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addBoolean", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addBoolean(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addDependentLookupField", async function () { - const lookupListName = `LookupList_${getRandomString(10)}`; + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addChoice", pnpTest("deff0f4a-5a4d-4607-b882-cb9c1b972d47", async function () { + + const { choices, name } = await this.props({ + choices: [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`], + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addChoice(name, { + Choices: choices, + EditFormat: ChoiceFieldFormatType.Dropdown, + FillInChoice: false, + Group: testFieldGroup, + }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addMultiChoice", pnpTest("011f8908-35b1-4a41-84d6-fbf5ce8d892a", async function () { + + const { choices, name } = await this.props({ + choices: [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`], + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addMultiChoice(name, { Choices: choices, FillInChoice: false, Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addBoolean", pnpTest("b5d13907-d9dc-48c5-a3d4-cfcfbfed9c99", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addBoolean(name, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addDependentLookupField", pnpTest("16a58810-c90c-4eb3-af0b-60a34d9f5a36", async function () { + + const { primary, secondary, lookupListName } = await this.props({ + primary: `primary_${getRandomString(10)}`, + secondary: `secondary_${getRandomString(10)}`, + lookupListName: `LookupList_${getRandomString(10)}`, + }); + const list = await this.pnp.sp.web.lists.add(lookupListName, testFieldDescription, 100, false); - const testFieldNamePrimary = `${testFieldName}_${getRandomString(10)}`; - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addLookup(testFieldNamePrimary, { LookupListId: list.data.Id, LookupFieldName: "Title" }); - const fieldDep = await this.pnp.sp.web.fields - .addDependentLookupField(testFieldNameRand, field.data.Id, "Description"); - return expect(fieldDep.data.Title).to.be.equal(testFieldNameRand); - }); - it("addLocation", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addLocation(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("update", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - await this.pnp.sp.web.fields.getByTitle(testFieldNameRand).update({ Description: testFieldDescription }); - const fieldResult = await this.pnp.sp.web.fields.getByTitle(testFieldNameRand)(); + + const field = await this.pnp.sp.web.fields.addLookup(primary, { LookupListId: list.data.Id, LookupFieldName: "Title" }); + + const fieldDep = await this.pnp.sp.web.fields.addDependentLookupField(secondary, field.data.Id, "Description"); + + return expect(fieldDep.data.Title).to.be.equal(secondary); + })); + + it("addLocation", pnpTest("76f5fd29-9fda-4eef-aed4-c29feec3ccfa", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addLocation(name, { Group: testFieldGroup }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("update", pnpTest("83525af1-10dc-4da1-a3a6-056c806bcdcc", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + await this.pnp.sp.web.fields.getByTitle(name).update({ Description: testFieldDescription }); + + const fieldResult = await this.pnp.sp.web.fields.getByTitle(name)(); + return expect(fieldResult.Description).to.be.equal(testFieldDescription); - }); - it("setShowInDisplayForm", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - try { - await this.pnp.sp.web.fields.getByTitle(testFieldNameRand).setShowInDisplayForm(true); - return expect(true).to.be.true; - } catch (err) { - return expect(false).to.be.true; - } - }); - it("setShowInEditForm", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - try { - await this.pnp.sp.web.fields.getByTitle(testFieldNameRand).setShowInEditForm(true); - return expect(true).to.be.true; - } catch (err) { - return expect(false).to.be.true; - } - }); - it("setShowInNewForm", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - try { - await this.pnp.sp.web.fields.getByTitle(testFieldNameRand).setShowInNewForm(true); - return expect(true).to.be.true; - } catch (err) { - return expect(false).to.be.true; - } - }); - it("delete", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const f = await this.pnp.sp.web.fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); + })); + + it("setShowInDisplayForm", pnpTest("3e9c6f6c-7b3e-44d2-83fe-95c94c824513", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + + return expect(this.pnp.sp.web.fields.getByTitle(name).setShowInDisplayForm(true)).to.eventually.be.fulfilled; + })); + + it("setShowInEditForm", pnpTest("9cfae885-6d53-4278-a45a-df8c48e7cd59", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + + return expect(this.pnp.sp.web.fields.getByTitle(name).setShowInEditForm(true)).to.eventually.be.fulfilled; + })); + + it("setShowInNewForm", pnpTest("2ae3d1a2-4eaa-4b0d-a128-b4d81fb656de", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + + return expect(this.pnp.sp.web.fields.getByTitle(name).setShowInNewForm(true)).to.eventually.be.fulfilled; + })); + + it("delete", pnpTest("7130986f-4b77-4278-a980-6cf49b9691de", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const f = await this.pnp.sp.web.fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + return expect(f.field.delete()).to.eventually.be.fulfilled; - }); + })); }); describe("List", function () { - // List tests - it("getById", async function () { + + it("getById", pnpTest("6e68860b-1a24-4c3c-b5ad-79f6d6a7f539", async function () { const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.getById(titleFieldId).select("Title")<{ Title: string }>(); return expect(field.Title).to.eq("Title"); - }); - it("getByTitle", async function () { + })); + + it("getByTitle", pnpTest("1cdf405a-3631-450c-9d17-15d980a98782", async function () { const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle("Title").select("Id")<{ Id: string }>(); return expect(field.Id).to.eq(titleFieldId); - }); + })); - it("getByInternalNameOrTitle (1)", async function () { + it("getByInternalNameOrTitle (1)", pnpTest("14343d58-f0c2-4f8c-ad89-2c55008edcd3", async function () { const field = await this.pnp.sp.site.rootWeb.fields.getByInternalNameOrTitle("Other Address Country/Region").select("Title")<{ Title: string }>(); return expect(field.Title).to.eq("Other Address Country/Region"); - }); + })); - it("getByInternalNameOrTitle (2)", async function () { + it("getByInternalNameOrTitle (2)", pnpTest("2baf89f5-1e3e-4fb6-9c85-f5839f6d762c", async function () { const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.getByInternalNameOrTitle("Title").select("Id")<{ Id: string }>(); return expect(field.Id).to.eq(titleFieldId); - }); + })); + + it("createFieldAsXml", pnpTest("850a224d-82aa-44ed-bb1e-cf0f97007129", async function () { + + const { name, fieldId } = await this.props({ + fieldId: getGUID(), + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const testFieldSchema = ``; - it("createFieldAsXml", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const testFieldId = getGUID(); - const testFieldSchema = ``; const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.createFieldAsXml(testFieldSchema); - const result = expect(field.data.Title).to.be.equal(testFieldNameRand); - return result; - }); - it("add", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addText", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addText(testFieldNameRand, { MaxLength: 255, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addNumber", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields.addNumber(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addCalculated", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addCalculated(testFieldNameRand, - { Formula: "=Modified+1", DateFormat: DateTimeFieldFormatType.DateOnly, FieldTypeKind: FieldTypes.Calculated, Group: testFieldGroup } - ); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addDateTime", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addDateTime(testFieldNameRand, - { - DisplayFormat: DateTimeFieldFormatType.DateOnly, - DateTimeCalendarType: CalendarType.Gregorian, - FriendlyDisplayFormat: DateTimeFieldFriendlyFormatType.Disabled, - Group: testFieldGroup, - } - ); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("add", pnpTest("6a1cb77e-97fb-4ce3-8d73-fdd4f4a7c239", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addText", pnpTest("81840f7d-ae56-4c0d-9650-1b759dbd774a", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addText(name, { MaxLength: 255, Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addNumber", pnpTest("d3bc8f38-ee7d-40a5-8b40-61f9d05f68a9", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addNumber(name, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addCalculated", pnpTest("cb328457-cb39-4b1c-98de-5d085431803b", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addCalculated(name, { + Formula: "=Modified+1", + DateFormat: DateTimeFieldFormatType.DateOnly, + FieldTypeKind: FieldTypes.Calculated, + Group: testFieldGroup, + }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addDateTime", pnpTest("dfa18a6f-9957-4a75-aea6-a8a6a30a0d3e", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addDateTime(name, { + DisplayFormat: DateTimeFieldFormatType.DateOnly, + DateTimeCalendarType: CalendarType.Gregorian, + FriendlyDisplayFormat: DateTimeFieldFriendlyFormatType.Disabled, + Group: testFieldGroup, + }); + + return expect(field.data.Title).to.be.equal(name); + })); + it("addCurrency", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addCurrency(testFieldNameRand, { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addMultilineText", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addMultilineText(testFieldNameRand, { - NumberOfLines: 6, - RichText: true, - RestrictedMode: false, - AppendOnly: false, - AllowHyperlink: true, - Group: testFieldGroup, - }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addUrl", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.fields - .addUrl(testFieldNameRand, { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addUser", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addUser(testFieldNameRand, { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addCurrency(name, { + MinimumValue: 0, + MaximumValue: 100, + CurrencyLocaleId: 1033, + Group: testFieldGroup, + }); + + return expect(field.data.Title).to.be.equal(name); }); - it("addLookup", async function () { - const lookupListName = `LookupList_${getRandomString(10)}`; + + it("addMultilineText", pnpTest("52e64708-f16a-4fbc-81c1-a4387c786621", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addMultilineText(name, { + NumberOfLines: 6, + RichText: true, + RestrictedMode: false, + AppendOnly: false, + AllowHyperlink: true, + Group: testFieldGroup, + }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addUrl", pnpTest("895c46bc-1feb-4b7c-8136-c54a93fc5ea0", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.fields.addUrl(name, { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addUser", pnpTest("89eda1be-52bd-4be1-9ea4-bcdc31fd984f", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addUser(name, { + SelectionMode: FieldUserSelectionMode.PeopleOnly, + Group: testFieldGroup, + }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addLookup", pnpTest("b977c6d0-c6b4-44e4-bb7d-c62e942949cb", async function () { + + const { name, lookupListName } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + lookupListName: `LookupList_${getRandomString(10)}`, + }); + const list = await this.pnp.sp.web.lists.add(lookupListName, testFieldDescription, 100, false); - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addLookup(testFieldNameRand, { LookupListId: list.data.Id, LookupFieldName: "Title" }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addChoice", async function () { - const choices = [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`]; - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addChoice(testFieldNameRand, { Choices: choices, EditFormat: ChoiceFieldFormatType.Dropdown, FillInChoice: false, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addMultiChoice", async function () { - const choices = [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`]; - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addMultiChoice(testFieldNameRand, { Choices: choices, FillInChoice: false, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addBoolean", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addBoolean(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("addLocation", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields - .addLocation(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); - }); - it("update", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.lists.getByTitle(listName).fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(testFieldNameRand).update({ Description: testFieldDescription }); - const fieldResult = await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(testFieldNameRand)(); + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addLookup(name, { LookupListId: list.data.Id, LookupFieldName: "Title" }); + + return expect(field.data.Title).to.be.equal(name); + })); + + it("addChoice", pnpTest("feffd849-9f80-4f57-aa84-9a56f308fbce", async function () { + + const { name, choices } = await this.props({ + choices: [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`], + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addChoice(name, { + Choices: choices, + EditFormat: ChoiceFieldFormatType.Dropdown, + FillInChoice: false, + Group: testFieldGroup, + }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addMultiChoice", pnpTest("96cd525d-7541-4b05-a867-01b019826b91", async function () { + + const { name, choices } = await this.props({ + choices: [`Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`, `Choice_${getRandomString(5)}`], + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addMultiChoice(name, { Choices: choices, FillInChoice: false, Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addBoolean", pnpTest("4c48b3fc-659d-4b35-95f9-da847ed8c5b5", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addBoolean(name, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("addLocation", pnpTest("bc663610-bbe2-47b8-85fe-4576b02684b2", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addLocation(name, { Group: testFieldGroup }); + return expect(field.data.Title).to.be.equal(name); + })); + + it("update", pnpTest("7c560353-590a-4785-b44a-09b6c9934ba4", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(name).update({ Description: testFieldDescription }); + const fieldResult = await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(name)(); return expect(fieldResult.Description).to.be.equal(testFieldDescription); - }); - it("setShowInDisplayForm", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.lists.getByTitle(listName).fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - try { - await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(testFieldNameRand).setShowInDisplayForm(true); - return expect(true).to.be.true; - } catch (err) { - return expect(false).to.be.true; - } - }); + })); + + it("setShowInDisplayForm", pnpTest("a106be65-84ef-4c91-baa9-a88e39b12fc1", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + + return expect(this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(name).setShowInDisplayForm(true)).to.eventually.be.fulfilled; + })); + it("setShowInEditForm", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.lists.getByTitle(listName).fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - try { - await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(testFieldNameRand).setShowInEditForm(true); - return expect(true).to.be.true; - } catch (err) { - return expect(false).to.be.true; - } - }); - it("setShowInNewForm", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - await this.pnp.sp.web.lists.getByTitle(listName).fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - try { - await this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(testFieldNameRand).setShowInNewForm(true); - return expect(true).to.be.true; - } catch (err) { - return expect(false).to.be.true; - } + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + + return expect(this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(name).setShowInEditForm(true)).to.eventually.be.fulfilled; }); + + it("setShowInNewForm", pnpTest("2d042af3-b23f-42d8-9028-5b2dc7a03d7f", async function () { + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); + + return expect(this.pnp.sp.web.lists.getByTitle(listName).fields.getByTitle(name).setShowInNewForm(true)).to.eventually.be.fulfilled; + })); + it("delete", async function () { - const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; - const f = await this.pnp.sp.web.lists.getByTitle(listName).fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); + + const { name } = await this.props({ + name: `${testFieldName}_${getRandomString(10)}`, + }); + + const f = await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); return expect(f.field.delete()).to.eventually.be.fulfilled; }); }); diff --git a/test/sp/files.ts b/test/sp/files.ts index 2f2ecbfe0..7df1b9247 100644 --- a/test/sp/files.ts +++ b/test/sp/files.ts @@ -10,6 +10,7 @@ import { IFiles, TemplateFileType } from "@pnp/sp/files"; import { readFileSync } from "fs"; import { resolve, dirname } from "path"; import findupSync from "findup-sync"; +import { pnpTest } from "../pnp-test.js"; // give ourselves a single reference to the projectRoot const projectRoot = resolve(dirname(findupSync("package.json"))); @@ -21,7 +22,7 @@ describe("Files", function () { let testFileNamePercentPoundServerRelPath = ""; let files: IFiles = null; - before(async function () { + before(pnpTest("948e4449-4cc4-4353-a584-b35c497acbd4", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); @@ -32,7 +33,7 @@ describe("Files", function () { await files.addUsingPath(testFileName, "Test file!", { Overwrite: true }); const res = await files.addUsingPath(testFileNamePercentPound, "Test file!", { Overwrite: true }); testFileNamePercentPoundServerRelPath = res.data.ServerRelativeUrl; - }); + })); it("getByUrl (FileName)", async function () { diff --git a/tools/buildsystem/.npmignore b/tools/buildsystem/.npmignore index 7887ae0a2..4c3b6e881 100644 --- a/tools/buildsystem/.npmignore +++ b/tools/buildsystem/.npmignore @@ -1,4 +1,3 @@ *.ts !*.d.ts tsconfig.json - diff --git a/tools/buildsystem/bin/buildsystem.ts b/tools/buildsystem/bin/buildsystem.ts index 7404be7de..64729a620 100644 --- a/tools/buildsystem/bin/buildsystem.ts +++ b/tools/buildsystem/bin/buildsystem.ts @@ -3,23 +3,40 @@ import Liftoff from "liftoff"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; -import { join } from "path"; +import { dirname, join, resolve } from "path"; import { cwd } from "process"; -import { ConfigCollection, BuildSchema, PackageSchema, PublishSchema } from "../src/config.js"; -import { builder } from "../src/builder.js"; -import { packager } from "../src/packager.js"; -import { publisher } from "../src/publisher.js"; -import importJSON from "../src/lib/importJSON.js"; +import importJSON from "../src/lib/import-json.js"; +import { BuildTimeline } from "../src/build-timeline.js"; +import { IBuildContext, BuildSchema, TSConfig } from "../src/types.js"; +import { Logger, ConsoleListener, LogLevel, PnPLogging } from "@pnp/logging"; + + +import Build from "../src/behaviors/build.js"; +import ReplaceVersion from "../src/behaviors/replace-version.js"; +import CopyPackageFiles from "../src/behaviors/copy-package-files.js"; +import CopyAssetFiles from "../src/behaviors/copy-asset-files.js"; +import WritePackageJSON from "../src/behaviors/write-packagejson.js"; +import Publish from "../src/behaviors/publish.js"; const args: any = yargs(hideBin(process.argv)).argv; -const packagePath = join(cwd(), 'package.json'); +const context: Partial = { + resolvedProjectRoot: join(cwd(), "package.json"), +}; const BuildSystem = new Liftoff({ - configName: "buildsystem-config", + configName: "buildsystem-config2", name: "buildsystem", }); +// setup console logger +Logger.subscribe(ConsoleListener("", { + color: "skyblue", + error: "red", + verbose: "lightslategray", + warning: "yellow", +})); + BuildSystem.prepare({}, function (env) { BuildSystem.execute(env, async function (env: Liftoff.LiftoffEnv) { @@ -28,11 +45,13 @@ BuildSystem.prepare({}, function (env) { throw Error("No config file found."); } - const configs: { default: ConfigCollection } = await import("file://" + env.configPath); - const pkg: { version: string } = importJSON(packagePath); + const configs: { default: BuildSchema[] } = await import("file://" + env.configPath); + const pkg: { version: string } = importJSON(context.resolvedProjectRoot); - let name = (args.n || args.name); + context.version = pkg.version; + + let name = (args.n || args.name); if (typeof name === "undefined" || name === null || name === "") { // default to build if no name is supplied name = "build"; @@ -45,26 +64,74 @@ BuildSystem.prepare({}, function (env) { throw Error(`No configuration entry found in ${env.configPath} with name ${name}.`); } - switch (config[0].role) { - - case "build": - - await builder(pkg.version, config[0]); - break; - - case "package": - - await packager(pkg.version, config[0]); - break; - - case "publish": - - await publisher(pkg.version, config[0]); - break; - - default: - - throw Error(`Unrecognized role in config.`); - } + // setup other context values from config + context.distRoot = config[0].distFolder || "./dist/packages"; + + // we setup a baseTimeline to which we attach all the behaviors, then pass it as the base for target timelines + const baseTimeline = new BuildTimeline().using( + PnPLogging(LogLevel.Verbose), + Build(), + ReplaceVersion(["sp/behaviors/telemetry.js", "graph/behaviors/telemetry.js"]), + CopyPackageFiles("src", ["**/*.cjs"]), + CopyAssetFiles(".", ["LICENSE"]), + CopyAssetFiles("./packages", ["readme.md"]), + CopyPackageFiles("built", ["**/*.d.ts", "**/*.js", "**/*.js.map", "**/*.d.ts.map"]), + WritePackageJSON((p) => { + return Object.assign({}, p, { + funding: { + type: "individual", + url: "https://github.com/sponsors/patrick-rodgers/", + }, + type: "module", + engines: { + node: ">=14.15.1" + }, + author: { + name: "Microsoft and other contributors" + }, + license: "MIT", + bugs: { + url: "https://github.com/pnp/pnpjs/issues" + }, + homepage: "https://github.com/pnp/pnpjs", + repository: { + type: "git", + url: "git:github.com/pnp/pnpjs" + } + }); + }), + Publish(), + ); + + // now we make an array of timelines 1/target + const timelines = config[0].targets.map(tsconfigPath => { + + const tsconfigRoot = resolve(dirname(tsconfigPath)); + const parsedTSConfig: TSConfig = importJSON(tsconfigPath); + const resolvedOutDir = resolve(tsconfigRoot, parsedTSConfig.compilerOptions.outDir); + + // we need to get some extra data for each package + const packages = parsedTSConfig?.references.map(ref => ({ + + name: dirname(ref.path).replace(/^\.\//, ""), + resolvedPkgSrcTSConfigPath: resolve(tsconfigRoot, ref.path), + resolvedPkgSrcRoot: dirname(resolve(tsconfigRoot, ref.path)), + resolvedPkgOutRoot: resolve(resolvedOutDir, dirname(ref.path)), + resolvedPkgDistRoot: resolve(context.distRoot, dirname(ref.path)), + })); + + return Object.assign({}, context, { + target: { + tsconfigPath, + tsconfigRoot, + parsedTSConfig, + resolvedOutDir, + packages, + } + }); + }).map(context => new BuildTimeline(baseTimeline, context)); + + // we start one timeline per target + await Promise.all(timelines.map(tl => tl.start())); }); }); diff --git a/tools/buildsystem/index.ts b/tools/buildsystem/index.ts index f5b71af72..acf588457 100644 --- a/tools/buildsystem/index.ts +++ b/tools/buildsystem/index.ts @@ -1 +1,20 @@ -export * from "./src/buildsystem.js"; +// export behaviors +export * from "./src/behaviors/build.js"; +export * from "./src/behaviors/copy-asset-files.js"; +export * from "./src/behaviors/copy-package-files.js"; +export * from "./src/behaviors/publish-nightly.js"; +export * from "./src/behaviors/publish.js"; +export * from "./src/behaviors/replace-version.js"; +export * from "./src/behaviors/webpack.js"; +export * from "./src/behaviors/write-packagejson.js"; + +export { + BuildObserver, + BuildTimeline, + asyncReduceVoid, +} from "./src/build-timeline.js"; + +export { + BuildSchema, + IBuildContext, +} from "./src/types.js"; diff --git a/tools/buildsystem/package-lock.json b/tools/buildsystem/package-lock.json index e66919931..f4d92ef41 100644 --- a/tools/buildsystem/package-lock.json +++ b/tools/buildsystem/package-lock.json @@ -1,32 +1,2882 @@ { "name": "@pnp/buildsystem", - "version": "3.0.2", - "lockfileVersion": 1, + "version": "4.0.0-beta0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@pnp/buildsystem", + "version": "4.0.0-beta0", + "license": "MIT", + "dependencies": { + "@pnp/core": "^3.21.0", + "@pnp/logging": "^3.21.0", + "globby": "^14.0.0", + "liftoff": "^4.0.0", + "replace-in-file": "^7.0.2", + "webpack": "^5.89.0", + "yargs": "^17.7.2" + }, + "bin": { + "pnpbuild": "bin/buildsystem.js" + }, + "devDependencies": { + "@types/liftoff": "^4.0.0", + "@types/yargs": "^17.0.7", + "del-cli": "^5.1.0", + "typescript": "^4.5.4" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pnp/core": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.21.0.tgz", + "integrity": "sha512-4R+MGo7aitBPUQ4eapLbsiZwPFrMnFZ/6OB4lvXQrtl2IAdZC922gR+bB05O00iEplOcUW9EZJlitLfzTdNuTg==", + "dependencies": { + "tslib": "2.4.1" + }, + "engines": { + "node": ">=14.15.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" + } + }, + "node_modules/@pnp/logging": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", + "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", + "dependencies": { + "tslib": "2.4.1" + }, + "engines": { + "node": ">=14.15.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", + "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/fined": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/fined/-/fined-1.1.3.tgz", + "integrity": "sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/liftoff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/liftoff/-/liftoff-4.0.0.tgz", + "integrity": "sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==", + "dev": true, + "dependencies": { + "@types/fined": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.7.tgz", + "integrity": "sha512-OvLKmpKdea1aWtqHv9bxVVcMoT6syAeK+198dfETIFkAevYRGwqh4H+KFxfjUETZuUuE5sQCAFwdOdoHUdo8eg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001286", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", + "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-7.1.0.tgz", + "integrity": "sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==", + "dev": true, + "dependencies": { + "globby": "^13.1.2", + "graceful-fs": "^4.2.10", + "is-glob": "^4.0.3", + "is-path-cwd": "^3.0.0", + "is-path-inside": "^4.0.0", + "p-map": "^5.5.0", + "rimraf": "^3.0.2", + "slash": "^4.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/del-cli": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-5.1.0.tgz", + "integrity": "sha512-xwMeh2acluWeccsfzE7VLsG3yTr7nWikbfw+xhMnpRrF15pGSkw+3/vJZWlGoE4I86UiLRNHicmKt4tkIX9Jtg==", + "dev": true, + "dependencies": { + "del": "^7.1.0", + "meow": "^10.1.3" + }, + "bin": { + "del": "cli.js", + "del-cli": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/del/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.17.tgz", + "integrity": "sha512-zhk1MravPtq/KBhmGB7TLBILmXTgRG9TFSI3qS3DbgyfHzIl72iiTE37r/BHIbPCJJlWIo5rySyxiH4vWhu2ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-glob/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/fast-glob/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", + "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", + "dependencies": { + "@sindresorhus/merge-streams": "^1.0.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", + "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/liftoff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-4.0.0.tgz", + "integrity": "sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==", + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "object.map": "^1.0.1", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/liftoff/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftoff/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftoff/node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/liftoff/node_modules/fined": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/liftoff/node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/liftoff/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/liftoff/node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/liftoff/node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/liftoff/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/replace-in-file": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.0.2.tgz", + "integrity": "sha512-tPG+Qmqf+x2Rf1WVdb/9B5tFIf6KJ5hs3fgxh1OTzPRUugPPvyAva7NvCJtnSpmyq6r+ABYcuUOqZkm6yzGSUw==", + "dependencies": { + "chalk": "^4.1.2", + "glob": "^8.1.0", + "yargs": "^17.7.2" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "requires": { - "@babel/highlight": "^7.16.0" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -62,13 +2912,19 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -82,11 +2938,53 @@ } } }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -95,47 +2993,60 @@ "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, + "@pnp/core": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.21.0.tgz", + "integrity": "sha512-4R+MGo7aitBPUQ4eapLbsiZwPFrMnFZ/6OB4lvXQrtl2IAdZC922gR+bB05O00iEplOcUW9EZJlitLfzTdNuTg==", + "requires": { + "tslib": "2.4.1" + } + }, + "@pnp/logging": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", + "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", + "requires": { + "tslib": "2.4.1" + } + }, + "@sindresorhus/merge-streams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", + "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==" + }, "@types/eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", - "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - }, - "@types/expect": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", - "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "@types/fined": { "version": "1.1.3", @@ -143,135 +3054,10 @@ "integrity": "sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww==", "dev": true }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/glob-stream": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", - "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "@types/gulp": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.9.tgz", - "integrity": "sha512-zzT+wfQ8uwoXjDhRK9Zkmmk09/fbLLmN/yDHFizJiEKIve85qutOnXcP/TM2sKPBTU+Jc16vfPbOMkORMUBN7Q==", - "dev": true, - "requires": { - "@types/undertaker": "*", - "@types/vinyl-fs": "*", - "chokidar": "^3.3.1" - }, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/liftoff": { "version": "4.0.0", @@ -283,85 +3069,23 @@ "@types/node": "*" } }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true }, - "@types/mkdirp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-1.0.2.tgz", - "integrity": "sha512-o0K1tSO0Dx5X6xlU5F1D6625FawhC3dU3iqr25lluNv/+/QIVH8RLNEiVokgIZo+mz+87w/3Mkg/VvQS+J51fQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/node": { "version": "16.11.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" }, "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/pump": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/pump/-/pump-1.1.1.tgz", - "integrity": "sha512-wpRerjHDxFBQ4r8XNv3xHJZeuqrBBoeQ/fhgkooV2F7KsPIYRROb/+f9ODgZfOEyO5/w2ej4YQdpPPXipT8DAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/undertaker": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.7.tgz", - "integrity": "sha512-xuY7nBwo1zSRoY2aitp/HArHfTulFAKql2Fr4b4mWbBBP+F50n7Jm6nwISTTMaDk2xvl92O10TTejVF0Q9mInw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/undertaker-registry": "*", - "async-done": "~1.3.2" - } - }, - "@types/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "@types/vinyl": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.6.tgz", - "integrity": "sha512-ayJ0iOCDNHnKpKTgBG6Q6JOnHTj9zFta+3j2b8Ejza0e4cvRyMn0ZoLEmbPrTHe5YYRlDYPvPWVdV4cTaRyH7g==", - "dev": true, - "requires": { - "@types/expect": "^1.20.4", - "@types/node": "*" - } - }, - "@types/vinyl-fs": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.12.tgz", - "integrity": "sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==", - "dev": true, - "requires": { - "@types/glob-stream": "*", - "@types/node": "*", - "@types/vinyl": "*" - } - }, "@types/yargs": { "version": "17.0.7", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.7.tgz", @@ -378,133 +3102,133 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "requires": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -519,23 +3243,24 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "acorn": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==" + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" }, "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "requires": {} }, "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" } }, "ajv": { @@ -552,25 +3277,13 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "requires": { - "ansi-wrap": "0.1.0" - } + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -580,302 +3293,33 @@ "color-convert": "^2.0.1" } }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, "array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } - } - }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } - } - }, "array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "requires": { - "async-done": "^1.2.2" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "balanced-match": "^1.0.0" } }, "browserslist": { @@ -890,64 +3334,27 @@ "picocolors": "^1.0.0" } }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true }, "camelcase-keys": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.1.tgz", - "integrity": "sha512-P331lEls98pW8JLyodNWfzuz91BEDVA4VpW2/SwXnyv2K495tq1N777xzDbFgnEigfA7UIY0xa6PwR/H9jijjA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "requires": { - "camelcase": "^6.2.0", + "camelcase": "^6.3.0", "map-obj": "^4.1.0", "quick-lru": "^5.1.1", "type-fest": "^1.2.1" - }, - "dependencies": { - "camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", - "dev": true - } } }, "caniuse-lite": { @@ -964,126 +3371,28 @@ "supports-color": "^7.1.0" } }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - } - } - }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "escape-string-regexp": "5.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -1099,200 +3408,86 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - } - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true }, "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true } } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "requires": { - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "del": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-7.1.0.tgz", + "integrity": "sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==", + "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "globby": "^13.1.2", + "graceful-fs": "^4.2.10", + "is-glob": "^4.0.3", + "is-path-cwd": "^3.0.0", + "is-path-inside": "^4.0.0", + "p-map": "^5.5.0", + "rimraf": "^3.0.2", + "slash": "^4.0.0" }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" } } } }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, "del-cli": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-4.0.1.tgz", - "integrity": "sha512-KtR/6cBfZkGDAP2NA7z+bP4p1OMob3wjN9mq13+SWvExx6jT9gFWfLgXEeX8J2B47OKeNCq9yTONmtryQ+m+6g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-5.1.0.tgz", + "integrity": "sha512-xwMeh2acluWeccsfzE7VLsG3yTr7nWikbfw+xhMnpRrF15pGSkw+3/vJZWlGoE4I86UiLRNHicmKt4tkIX9Jtg==", "dev": true, "requires": { - "del": "^6.0.0", - "meow": "^10.1.0" + "del": "^7.1.0", + "meow": "^10.1.3" } }, "detect-file": { @@ -1307,34 +3502,6 @@ "dev": true, "requires": { "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" } }, "electron-to-chromium": { @@ -1347,18 +3514,10 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1368,54 +3527,15 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" }, "escalade": { "version": "3.1.1", @@ -1423,9 +3543,9 @@ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true }, "eslint-scope": { @@ -1462,38 +3582,6 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -1502,125 +3590,20 @@ "homedir-polyfill": "^1.0.1" } }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -1633,7 +3616,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -1642,7 +3624,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -1651,7 +3632,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -1659,24 +3639,21 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -1688,91 +3665,22 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" - }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "requires": { "reusify": "^1.0.4" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, "for-in": { @@ -1788,45 +3696,10 @@ "for-in": "^1.0.1" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "function-bind": { "version": "1.1.1", @@ -1834,72 +3707,20 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, "glob-to-regexp": { @@ -1907,20 +3728,6 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - } - }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -1944,125 +3751,34 @@ } }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", + "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", + "requires": { + "@sindresorhus/merge-streams": "^1.0.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "dependencies": { - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - } + "path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==" }, - "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } + "slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==" } } }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "requires": { - "glogg": "^1.0.0" - } + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "hard-rejection": { "version": "2.1.0", @@ -2083,40 +3799,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -2126,26 +3808,29 @@ } }, "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==" }, "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2161,11 +3846,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -2175,41 +3855,11 @@ "is-windows": "^1.0.1" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "is-core-module": { "version": "2.8.0", @@ -2219,58 +3869,15 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", @@ -2280,55 +3887,24 @@ "is-extglob": "^2.1.1" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", + "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", "dev": true }, "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -2345,26 +3921,11 @@ "unc-path-regex": "^0.1.2" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2376,9 +3937,9 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "jest-worker": { - "version": "27.4.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", - "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -2401,70 +3962,21 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==" - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "requires": { - "flush-write-stream": "^1.0.2" - } - }, "liftoff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-4.0.0.tgz", @@ -2567,18 +4079,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -2604,67 +4104,27 @@ }, "make-iterator": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" } }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, "meow": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.2.tgz", - "integrity": "sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "requires": { "@types/minimist": "^1.2.2", @@ -2681,93 +4141,6 @@ "yargs-parser": "^20.2.9" }, "dependencies": { - "decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - } - }, - "read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "requires": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -2784,28 +4157,7 @@ "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "mime-db": { "version": "1.51.0", @@ -2827,11 +4179,11 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } }, "minimist-options": { @@ -2845,160 +4197,28 @@ "kind-of": "^6.0.3" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, "node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" }, "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "requires": { - "once": "^1.3.2" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", @@ -3027,15 +4247,6 @@ "isobject": "^3.0.1" } }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3044,22 +4255,6 @@ "wrappy": "1" } }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "^1.0.0" - } - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -3079,12 +4274,12 @@ } }, "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, "requires": { - "aggregate-error": "^3.0.0" + "aggregate-error": "^4.0.0" } }, "parse-filepath": { @@ -3098,45 +4293,33 @@ } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "requires": { - "error-ex": "^1.2.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" - }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true }, "path-parse": { "version": "1.0.7", @@ -3157,14 +4340,10 @@ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "picocolors": { "version": "1.0.0", @@ -3172,83 +4351,19 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quick-lru": { "version": "5.1.1", @@ -3265,54 +4380,26 @@ } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, "requires": { - "resolve": "^1.1.6" + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" } }, "redent": { @@ -3323,104 +4410,22 @@ "requires": { "indent-string": "^5.0.0", "strip-indent": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - } - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" } }, "replace-in-file": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.2.tgz", - "integrity": "sha512-Dbt5pXKvFVPL3WAaEB3ZX+95yP0CeAtIPJDwYzHbPP5EAHn+0UoegH/Wg3HKflU9dYBH8UnBC2NvY3P+9EZtTg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.0.2.tgz", + "integrity": "sha512-tPG+Qmqf+x2Rf1WVdb/9B5tFIf6KJ5hs3fgxh1OTzPRUugPPvyAva7NvCJtnSpmyq6r+ABYcuUOqZkm6yzGSUw==", "requires": { "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" + "glob": "^8.1.0", + "yargs": "^17.7.2" } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "resolve": { "version": "1.20.0", @@ -3440,29 +4445,10 @@ "global-modules": "^1.0.0" } }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { "version": "3.0.2", @@ -3471,34 +4457,60 @@ "dev": true, "requires": { "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "requires": { "queue-microtask": "^1.2.2" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -3506,171 +4518,32 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "requires": { - "sver-compat": "^1.5.0" + "lru-cache": "^6.0.0" } }, "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "requires": { "randombytes": "^2.1.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { "version": "0.5.21", @@ -3679,29 +4552,13 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" - }, "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -3710,96 +4567,41 @@ "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "safe-buffer": "~5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "is-utf8": "^0.2.0" + "ansi-regex": "^5.0.1" } }, "strip-indent": { @@ -3819,182 +4621,44 @@ "has-flag": "^4.0.0" } }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", - "source-map": "~0.7.2", "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - } } }, "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "requires": { - "jest-worker": "^27.0.6", + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "requires": { - "readable-stream": "3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "requires": { - "through2": "^2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" } }, "trim-newlines": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.0.2.tgz", - "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "type-fest": { "version": "1.4.0", @@ -4002,11 +4666,6 @@ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", @@ -4018,88 +4677,10 @@ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" }, "uri-js": { "version": "4.4.1", @@ -4109,159 +4690,60 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "webpack": { - "version": "5.65.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", - "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" } }, "webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "which": { "version": "1.3.1", @@ -4271,18 +4753,14 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -4290,15 +4768,10 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", @@ -4307,92 +4780,23 @@ "dev": true }, "yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" - } + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, "yocto-queue": { "version": "0.1.0", diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 768d8f332..34e17de53 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "3.1.0", + "version": "4.0.0-beta0", "bin": { "pnpbuild": "bin/buildsystem.js" }, @@ -9,28 +9,22 @@ "type": "module", "typings": "./index", "dependencies": { - "ansi-colors": "^4.1.1", - "fancy-log": "^1.3.3", - "gulp": "^4.0.2", + "@pnp/core": "^3.21.0", + "@pnp/logging": "^3.21.0", + "globby": "^14.0.0", "liftoff": "^4.0.0", - "mkdirp": "^1.0.4", - "pump": "^3.0.0", - "replace-in-file": "^6.3.2", - "through2": "^4.0.2", - "webpack": "^5.65.0", - "yargs": "^17.3.0" + "replace-in-file": "^7.0.2", + "webpack": "^5.89.0", + "yargs": "^17.7.2" }, "devDependencies": { - "@types/gulp": "^4.0.9", "@types/liftoff": "^4.0.0", - "@types/mkdirp": "^1.0.2", - "@types/pump": "^1.1.1", "@types/yargs": "^17.0.7", - "del-cli": "^4.0.1", + "del-cli": "^5.1.0", "typescript": "^4.5.4" }, "engines": { - "node": ">=14.15.1" + "node": ">=18" }, "author": { "name": "Microsoft and other contributors" diff --git a/tools/buildsystem/src/behaviors/build.ts b/tools/buildsystem/src/behaviors/build.ts new file mode 100644 index 000000000..b9f262725 --- /dev/null +++ b/tools/buildsystem/src/behaviors/build.ts @@ -0,0 +1,33 @@ +import { TimelinePipe } from "@pnp/core"; +import { exec } from "child_process"; +import { resolve } from "path"; +import { BuildTimeline } from "src/build-timeline"; + +const tscPath = resolve("./node_modules/.bin/tsc"); + +export default function Build(): TimelinePipe { + + return (instance: BuildTimeline) => { + + instance.on.build(async function (this: BuildTimeline) { + + const { tsconfigPath } = this.context.target; + + this.log(`Starting Build for target "${tsconfigPath}"`, 1); + + return new Promise((res, reject) => { + + exec(`${tscPath} -b ${tsconfigPath}`, (error, stdout, _stderr) => { + + if (error === null) { + this.log(`Completing Build for target "${tsconfigPath}"`, 1); + res(); + } else { + this.log(`Error in Build for target "${tsconfigPath}"`, 3); + reject(stdout); + } + }); + }); + }); + } +} diff --git a/tools/buildsystem/src/behaviors/copy-asset-files.ts b/tools/buildsystem/src/behaviors/copy-asset-files.ts new file mode 100644 index 000000000..dd71915e1 --- /dev/null +++ b/tools/buildsystem/src/behaviors/copy-asset-files.ts @@ -0,0 +1,51 @@ +import { TimelinePipe } from "@pnp/core"; +import { BuildTimeline } from "../build-timeline.js"; +import globby from "globby"; +import { resolve } from "path"; +import buildCopyFile from "../lib/copy-file.js"; + +/** + * Copies files from a single location and to each project's dist folder + * @param pattern glob patterns for files (see https://www.npmjs.com/package/globby) + * @returns + */ +export default function CopyAssetFiles(path: string, pattern: string[]): TimelinePipe { + + const stringPattern = JSON.stringify(pattern); + + return (instance: BuildTimeline) => { + + instance.on.package(async function (this: BuildTimeline) { + + const resolvedPath = resolve(path); + + this.log(`Starting CopyAssetFiles with pattern ${stringPattern} in path '${resolvedPath}'`); + + const temp = await (globby)(pattern, { + cwd: resolvedPath, + }); + + this.log(`CopyAssetFiles found ${temp.length} files for pattern ${stringPattern} in path '${resolvedPath}'`); + + const files = await this.context.target.packages.reduce((p, pkg) => { + + return p.then(async (a) => { + + a.push(...temp.map(t => ({ + src: resolve(path, t), + dest: resolve(pkg.resolvedPkgDistRoot, t), + }))); + + return a; + }); + + }, Promise.resolve<{ src: string, dest: string }[]>([])); + + await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); + + this.log(`Completing CopyAssetFiles.`); + }); + } + + +} \ No newline at end of file diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts new file mode 100644 index 000000000..fcbd3f06d --- /dev/null +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -0,0 +1,49 @@ +import { TimelinePipe } from "@pnp/core"; +import { BuildTimeline } from "../build-timeline.js"; +import globby from "globby"; +import { resolve } from "path"; +import buildCopyFile from "../lib/copy-file.js"; + +/** + * Copies files from the target's directory based on the supplied patterns to the same directory in the dist folder + * @param pattern glob patterns for files (see https://www.npmjs.com/package/globby) + * @returns + */ +export default function CopyPackageFiles(source: "src" | "built", pattern: string[]): TimelinePipe { + + const stringPattern = JSON.stringify(pattern); + + return (instance: BuildTimeline) => { + + instance.on.package(async function (this: BuildTimeline) { + + this.log(`Starting CopyPackageFiles with pattern ${stringPattern} on target '${this.context.target.tsconfigPath}'`); + + const files = await this.context.target.packages.reduce((p, pkg) => { + + const fileSourceRoot = resolve(source === "src" ? pkg.resolvedPkgSrcRoot : pkg.resolvedPkgOutRoot); + + return p.then(async (a) => { + + const temp = await (globby)(pattern, { + cwd: fileSourceRoot, + }); + + a.push(...temp.map(t => ({ + src: resolve(fileSourceRoot, t), + dest: resolve(pkg.resolvedPkgDistRoot, t), + }))); + + return a; + }); + + }, Promise.resolve<{ src: string, dest: string }[]>([])); + + this.log(`CopyPackageFiles found ${files.length} files for pattern ${stringPattern} in target '${this.context.target.tsconfigPath}'`); + + await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); + + this.log(`Completing CopyPackageFiles with pattern ${stringPattern} on target '${this.context.target.tsconfigPath}'`); + }); + } +} diff --git a/tools/buildsystem/src/behaviors/publish-nightly.ts b/tools/buildsystem/src/behaviors/publish-nightly.ts new file mode 100644 index 000000000..d97faf642 --- /dev/null +++ b/tools/buildsystem/src/behaviors/publish-nightly.ts @@ -0,0 +1,37 @@ +import { TimelinePipe } from "@pnp/core"; +import { BuildTimeline } from "src/build-timeline"; +import Publish from "./publish.js"; +import { resolve } from "path"; +import importJSON from "../lib/import-json.js"; +import buildWriteFile from "src/lib/write-file.js"; + +export default function PublishNightly(flags: string[], nightlyName: "v3nightly" | "v4nightly"): TimelinePipe { + + flags.push("--tag", nightlyName); + + return (instance: BuildTimeline) => { + + // this updates all the package.json versions to the nightly pattern + instance.on.prePublish(async function (this: BuildTimeline) { + + const { target } = this.context; + const date = new Date(); + + const version = `-${nightlyName}.${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, "0")}${date.getDate().toString().padStart(2, "0")}`; + + this.log(`Updating nightly package.json version to ${version}`); + + await Promise.all(target.packages.map(pkg => { + + const packageJsonPath = resolve(pkg.resolvedPkgDistRoot, "package.json"); + const packageJson = importJSON(packageJsonPath); + packageJson.version = version; + + return buildWriteFile(packageJsonPath, JSON.stringify(packageJson, null, 4)) + })); + }); + + // we want to publish + Publish(flags)(instance); + } +} diff --git a/tools/buildsystem/src/behaviors/publish.ts b/tools/buildsystem/src/behaviors/publish.ts new file mode 100644 index 000000000..ae138dc28 --- /dev/null +++ b/tools/buildsystem/src/behaviors/publish.ts @@ -0,0 +1,45 @@ +import { TimelinePipe } from "@pnp/core"; +import { BuildTimeline } from "src/build-timeline"; +// import { exec } from "child_process"; + +export default function Publish(flags?: string[]): TimelinePipe { + + const stringFlags = flags?.join(" ") || ""; + + return (instance: BuildTimeline) => { + + instance.on.publish(async function (this: BuildTimeline) { + + const { target } = this.context; + + const promises: Promise[] = []; + + target.packages.forEach(pkg => { + + promises.push(new Promise((resolve, _reject) => { + + this.log(`Publishing ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`); + + this.log("Would publish here."); + resolve(); + + // exec(`npm publish --access public --provenance ${stringFlags}`, + // { + // cwd: pkg.resolvedPkgDistRoot, + // }, (error, _stdout, _stderr) => { + + // if (error === null) { + // this.log(`Published ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`); + // resolve(); + // } else { + // this.log(`${error}`, 3); + // reject(error); + // } + // }); + })); + }); + + await Promise.all(promises); + }); + } +} diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts new file mode 100644 index 000000000..2f9265db8 --- /dev/null +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -0,0 +1,25 @@ +import { TimelinePipe } from "@pnp/core"; +import { resolve } from "path"; +import { BuildTimeline } from "src/build-timeline"; +import replace from "replace-in-file"; + +export default function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/ig): TimelinePipe { + + return (instance: BuildTimeline) => { + + instance.on.postBuild(async function (this: BuildTimeline) { + + const { version, target } = this.context; + + this.log(`Replacing package version for target "${target.tsconfigPath}"`, 1); + + const options = { + files: paths.map(p => resolve(target.resolvedOutDir, p)), + from: versionMask, + to: version, + }; + + return (replace)(options); + }); + } +} diff --git a/tools/buildsystem/src/behaviors/webpack.ts b/tools/buildsystem/src/behaviors/webpack.ts new file mode 100644 index 000000000..1cd6a2ba2 --- /dev/null +++ b/tools/buildsystem/src/behaviors/webpack.ts @@ -0,0 +1,31 @@ +import { TimelinePipe } from "@pnp/core"; +import { BuildTimeline } from "src/build-timeline"; +import * as wp from "webpack"; + +export default function Webpack(config: wp.Configuration): TimelinePipe { + + return (instance: BuildTimeline) => { + + instance.on.postPackage(async function (this: BuildTimeline) { + + return new Promise((resolve, reject) => { + + wp(config, (err, stats) => { + + if (err || stats.hasErrors()) { + console.error("Webpack exited with errors"); + console.error(stats.toString()); + return reject(err); + } + + if (stats.hasWarnings()) { + console.warn("Webpack exited with warnings"); + console.warn(stats.toString()); + } + + resolve(); + }); + }); + }); + } +} diff --git a/tools/buildsystem/src/behaviors/write-packagejson.ts b/tools/buildsystem/src/behaviors/write-packagejson.ts new file mode 100644 index 000000000..159a9a01c --- /dev/null +++ b/tools/buildsystem/src/behaviors/write-packagejson.ts @@ -0,0 +1,46 @@ +import { TimelinePipe } from "@pnp/core"; +import { resolve } from "path"; +import { BuildTimeline } from "../build-timeline.js"; +import importJSON from "../lib/import-json.js"; +import buildWriteFile from "../lib/write-file.js"; + +export default function WritePackageJSON(transform?: (p: any) => typeof p): TimelinePipe { + + return (instance: BuildTimeline) => { + + instance.on.postBuild(async function (this: BuildTimeline) { + + const { version, target } = this.context; + + const promises = []; + + target.packages.forEach((pkg) => { + + let pkgFile = importJSON(resolve(pkg.resolvedPkgSrcRoot, "package.json")); + + pkgFile.version = version; + + // update our peer dependencies and dependencies placeholder if needed + for (const key in pkgFile.peerDependencies) { + if (pkgFile.peerDependencies[key] === "0.0.0-PLACEHOLDER") { + pkgFile.peerDependencies[key] = version; + } + } + + for (const key in pkgFile.dependencies) { + if (pkgFile.dependencies[key] === "0.0.0-PLACEHOLDER") { + pkgFile.dependencies[key] = version; + } + } + + if (typeof transform === "function") { + pkgFile = transform(pkgFile); + } + + promises.push(buildWriteFile(resolve(pkg.resolvedPkgDistRoot, "package.json"), JSON.stringify(pkgFile, null, 4))); + }); + + await Promise.all(promises); + }); + } +} diff --git a/tools/buildsystem/src/build-timeline.ts b/tools/buildsystem/src/build-timeline.ts new file mode 100644 index 000000000..e41d874fa --- /dev/null +++ b/tools/buildsystem/src/build-timeline.ts @@ -0,0 +1,91 @@ +import { ObserverFunction, Timeline, getGUID } from "@pnp/core"; +import { IBuildContext } from "./types.js"; + +export type BuildObserver = (this: any) => Promise; + +export function asyncReduceVoid>(): (observers: T[]) => Promise { + + return async function (this: Timeline, observers: T[]): Promise { + const obs = [...observers]; + return obs.reduce((prom, func: T) => prom.then(() => Reflect.apply(func, this, [])), Promise.resolve()); + }; +} + +const BuildMoments = { + preBuild: asyncReduceVoid(), + build: asyncReduceVoid(), + postBuild: asyncReduceVoid(), + prePackage: asyncReduceVoid(), + package: asyncReduceVoid(), + postPackage: asyncReduceVoid(), + prePublish: asyncReduceVoid(), + publish: asyncReduceVoid(), + postPublish: asyncReduceVoid(), +} as const; + +export class BuildTimeline extends Timeline { + + protected InternalResolve = Symbol.for("Queryable_Resolve"); + protected InternalReject = Symbol.for("Queryable_Reject"); + + constructor(templateTimeline?: BuildTimeline, protected context?: Partial) { + super(BuildMoments); + + if (typeof templateTimeline !== "undefined") { + this.observers = templateTimeline.observers; + this._inheritingObservers = true; + } + } + + public start(): Promise { + return this.execute(); + } + + protected execute(): Promise { + + // if there are NO observers registered this is likely either a bug in the library or a user error, direct to docs + if (Reflect.ownKeys(this.observers).length < 1) { + throw Error("No observers registered for this request. (https://pnp.github.io/pnpjs/queryable/queryable#no-observers-registered-for-this-request)"); + } + + // // schedule the execution after we return the promise below in the next event loop + setTimeout(async () => { + + try { + + const { context } = this; + context.buildId = getGUID(); + + await this.emit.preBuild(); + await this.emit.build(); + await this.emit.postBuild(); + + await this.emit.prePackage(); + await this.emit.package(); + await this.emit.postPackage(); + + await this.emit.prePublish(); + await this.emit.publish(); + await this.emit.postPublish(); + + this.emit[this.InternalResolve](); + + } catch (e) { + + this.emit[this.InternalReject](e); + } + + }, 0); + + // // this is the promise that the calling code will recieve and await + let promise = new Promise((resolve, reject) => { + + // we overwrite any pre-existing internal events as a + // given queryable only processes a single request at a time + this.on[this.InternalResolve].replace(resolve); + this.on[this.InternalReject].replace(reject); + }); + + return promise; + } +} diff --git a/tools/buildsystem/src/builder.ts b/tools/buildsystem/src/builder.ts deleted file mode 100644 index 7a2d2ea0e..000000000 --- a/tools/buildsystem/src/builder.ts +++ /dev/null @@ -1,55 +0,0 @@ -import colors from "ansi-colors"; -import log from "fancy-log"; - -import { BuildSchema, BuildTask } from "./config.js"; -import { build } from "./tasks/build/build.js"; - -/** - * Engine function to process build files - * - * @param version The version to be written into all the build packages - * @param config The build configuration object - * @param callback (err?) => void - */ -export async function builder(version: string, config: BuildSchema): Promise { - - try { - - // run any pre-build tasks - await runTasks("pre-build", config.preBuildTasks || [], version, config); - - log(`${colors.bgBlue(" ")} Processing build targets.`); - // run build targets - await build(version, config); - log(`${colors.bgGreen(" ")} Processed build targets.`); - - // run any post-build tasks - await runTasks("post-build", config.postBuildTasks || [], version, config); - - } catch (e) { - - log(`${colors.bgRed(" ")} ${colors.bold(colors.red(`Build error`))}.`); - log(`${colors.bgRed(" ")} ${colors.bold(colors.red("Error:"))} ${colors.bold(colors.white(typeof e === "string" ? e : JSON.stringify(e)))}`); - throw e; - } -} - -async function runTasks(name: string, tasks: BuildTask[], version: string, config: BuildSchema): Promise { - - log(`${colors.bgBlue(" ")} Beginning (${tasks.length}) ${name} tasks.`); - for (let i = 0; i < tasks.length; i++) { - - const task = tasks[i]; - - if (typeof task === "undefined" || task === null) { - continue; - } - - if (typeof task === "function") { - await task(version, config); - } else { - await task.task(version, config, task.packages); - } - } - log(`${colors.bgGreen(" ")} Finished ${name} tasks.`); -} diff --git a/tools/buildsystem/src/buildsystem.ts b/tools/buildsystem/src/buildsystem.ts deleted file mode 100644 index 0e7f12af5..000000000 --- a/tools/buildsystem/src/buildsystem.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./builder.js"; -export * from "./packager.js"; -export * from "./publisher.js"; -import * as _Tasks from "./tasks/index.js"; -export * from "./config.js"; -export const Tasks = _Tasks; diff --git a/tools/buildsystem/src/config.ts b/tools/buildsystem/src/config.ts deleted file mode 100644 index a699f6433..000000000 --- a/tools/buildsystem/src/config.ts +++ /dev/null @@ -1,83 +0,0 @@ -export interface BaseSchema { - name: string; - role: "build" | "package" | "publish"; -} - -// define build related types - -export type BuildFunction = (version: string, config: BuildSchema, packages?: string[]) => Promise; - -export interface BuildTaskScoped { - packages: string[]; - task: BuildFunction; -} - -export type BuildTask = BuildFunction | BuildTaskScoped; - -export interface BuildSchema extends BaseSchema { - - role: "build"; - - packageRoot: string; - - preBuildTasks: BuildTask[]; - - buildTargets: string[]; - - postBuildTasks: BuildTask[]; -} - -// define package related types - -export type PrePackageTask = () => Promise; - -export type PostPackageTask = () => Promise; - -export type PackageFunction = (target: PackageTargetMap, version?: string) => Promise; - -export type PackageTask = PackageFunction; - -export interface PackageTargetMap { - target: string; - outDir: string; - tasks: PackageTask[]; -} - -export interface PackageSchema extends BaseSchema { - - role: "package"; - - prePackageTasks: PrePackageTask[]; - - packageTargets: PackageTargetMap[]; - - postPackageTasks: PostPackageTask[]; -} - -// define the publish types - -export type PublishFunction = (version: string, config: PublishSchema, packages?: string[]) => Promise; - -export interface PublishTaskScoped { - packages: string[]; - task: PublishFunction; -} - -export type PublishTask = PublishFunction | PublishTaskScoped; - -export interface PublishSchema extends BaseSchema { - - role: "publish"; - - packageRoots: string[]; - - prePublishTasks: PublishTask[]; - - publishTasks: PublishTask[]; - - postPublishTasks: PublishTask[]; -} - -export type ValidConfigs = BuildSchema | PackageSchema | PublishSchema; - -export type ConfigCollection = ValidConfigs[]; diff --git a/tools/buildsystem/src/lib/copy-file.ts b/tools/buildsystem/src/lib/copy-file.ts new file mode 100644 index 000000000..1f1e7e941 --- /dev/null +++ b/tools/buildsystem/src/lib/copy-file.ts @@ -0,0 +1,22 @@ +import { copyFile, mkdirSync } from "fs"; +import { dirname } from "path"; + +export default function buildCopyFile(src: string, dest: string): Promise { + + return new Promise((resolve, reject) => { + + mkdirSync(dirname(dest), { recursive: true }); + + copyFile(src, dest, (err) => { + + if (typeof err !== "undefined" && err !== null) { + + reject(err); + + } else { + + resolve(); + } + }); + }); +} diff --git a/tools/buildsystem/src/lib/getSubDirs.ts b/tools/buildsystem/src/lib/getSubDirs.ts deleted file mode 100644 index 5a955c624..000000000 --- a/tools/buildsystem/src/lib/getSubDirs.ts +++ /dev/null @@ -1,7 +0,0 @@ -// after: https://stackoverflow.com/questions/18112204/get-all-directories-within-directory-nodejs -import { lstatSync, readdirSync } from "fs"; -import { join } from "path"; - -const isDirectory = (root, dirName) => lstatSync(join(root, dirName)).isDirectory(); - -export default (root): string[] => readdirSync(root).filter(dirName => isDirectory(root, dirName)); diff --git a/tools/buildsystem/src/lib/importJSON.ts b/tools/buildsystem/src/lib/import-json.ts similarity index 100% rename from tools/buildsystem/src/lib/importJSON.ts rename to tools/buildsystem/src/lib/import-json.ts diff --git a/tools/buildsystem/src/lib/write-file.ts b/tools/buildsystem/src/lib/write-file.ts new file mode 100644 index 000000000..d4f55c816 --- /dev/null +++ b/tools/buildsystem/src/lib/write-file.ts @@ -0,0 +1,22 @@ +import { writeFile, mkdirSync } from "fs"; +import { dirname } from "path"; + +export default function buildWriteFile(dest: string, content: string): Promise { + + return new Promise((resolve, reject) => { + + mkdirSync(dirname(dest), { recursive: true }); + + writeFile(dest, content, (err) => { + + if (typeof err !== "undefined" && err !== null) { + + reject(err); + + } else { + + resolve(); + } + }); + }); +} diff --git a/tools/buildsystem/src/packager.ts b/tools/buildsystem/src/packager.ts deleted file mode 100644 index c7079a55d..000000000 --- a/tools/buildsystem/src/packager.ts +++ /dev/null @@ -1,66 +0,0 @@ -import colors from "ansi-colors"; -import log from "fancy-log"; - -import { PackageSchema, PackageTargetMap, PrePackageTask, PostPackageTask } from "./config.js"; - -/** - * Engine function to process build files - * - * @param version The version to be written into all the build packages - * @param config The build configuration object - * @param callback (err?) => void - */ -export async function packager(version: string, config: PackageSchema): Promise { - - try { - - // run any pre-package tasks - await runTasks("pre-package", config.prePackageTasks || []); - - // run any package tasks - config.packageTargets.forEach(async target => { - await runTargetTasks("package", version, target); - }); - - // run any post-package tasks - await runTasks("post-package", config.postPackageTasks || []); - - } catch (e) { - - log(`${colors.bgRed(" ")} ${colors.bold(colors.red("Packaging error"))}.`); - log(`${colors.bgRed(" ")} ${colors.bold(colors.red("Error:"))} ${colors.bold(colors.white(typeof e === "string" ? e : JSON.stringify(e)))}`); - throw e; - } -} - -async function runTargetTasks(name: string, version: string, target: PackageTargetMap): Promise { - - log(`${colors.bgBlue(" ")} Beginning (${target.tasks.length}) ${name} tasks for target '${target.target}'.`); - for (let i = 0; i < target.tasks.length; i++) { - - const task = target.tasks[i]; - - if (typeof task === "undefined" || task === null) { - continue; - } - - await task(target, version); - } - log(`${colors.bgGreen(" ")} Finished ${name} tasks.`); -} - -async function runTasks(name: string, tasks: PrePackageTask[] | PostPackageTask[]): Promise { - - log(`${colors.bgBlue(" ")} Beginning (${tasks.length}) ${name} tasks.`); - for (let i = 0; i < tasks.length; i++) { - - const task = tasks[i]; - - if (typeof task === "undefined" || task === null) { - continue; - } - - await task(); - } - log(`${colors.bgGreen(" ")} Finished ${name} tasks.`); -} diff --git a/tools/buildsystem/src/publisher.ts b/tools/buildsystem/src/publisher.ts deleted file mode 100644 index ddfa28c56..000000000 --- a/tools/buildsystem/src/publisher.ts +++ /dev/null @@ -1,51 +0,0 @@ -import colors from "ansi-colors"; -import log from "fancy-log"; - -import { PublishSchema, PublishTask } from "./config.js"; - -/** - * Engine function to process publish files - * - * @param version The version to be written into all the published packages - * @param config The build configuration object - * @param callback (err?) => void - */ -export async function publisher(version: string, config: PublishSchema): Promise { - - try { - - // run any pre-publish tasks - await runTasks("pre-publish", version, config.prePublishTasks || [], config); - - // run any publish tasks - await runTasks("publish", version, config.publishTasks || [], config); - - // run any post-publish tasks - await runTasks("post-publish", version, config.postPublishTasks || [], config); - - } catch (e) { - - log(`${colors.bgRed(" ")} ${colors.bold(colors.red(`Publishing error`))}.`); - log(`${colors.bgRed(" ")} ${colors.bold(colors.red("Error:"))} ${colors.bold(colors.white(typeof e === "string" ? e : JSON.stringify(e)))}`); - throw e; - } -} - -async function runTasks(name: string, version: string, tasks: PublishTask[], config: PublishSchema): Promise { - - log(`${colors.bgBlue(" ")} Beginning (${tasks.length}) ${name} tasks.`); - for (let i = 0; i < tasks.length; i++) { - - const task = tasks[i]; - if (typeof task === "undefined" || task === null) { - continue; - } - - if (typeof task === "function") { - await task(version, config); - } else { - await task.task(version, config, task.packages); - } - } - log(`${colors.bgGreen(" ")} Finished ${name} tasks.`); -} diff --git a/tools/buildsystem/src/tasks/build/build.ts b/tools/buildsystem/src/tasks/build/build.ts deleted file mode 100644 index 6b3df07c7..000000000 --- a/tools/buildsystem/src/tasks/build/build.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { resolve } from "path"; - -import { exec } from "child_process"; -import { BuildSchema } from "../../config.js"; - -const tscPath = resolve("./node_modules/.bin/tsc"); - -/** - * Builds the project based on the supplied tsconfig.json file - * - * @param ctx The build context - */ -export function build(_0: string, config: BuildSchema) { - - // for each build target we need to invoke tsc - - return Promise.all(config.buildTargets.map(buildTarget => new Promise((resolve, reject) => { - // exec a child process to run a tsc build based on the project file in each - // package directory. Build is now fully managed via tsconfig.json files - exec(`${tscPath} -b ${buildTarget}`, (error, stdout, stderr) => { - - if (error === null) { - resolve(); - } else { - console.error(error); - reject(stdout); - } - }); - }))); -} diff --git a/tools/buildsystem/src/tasks/build/index.ts b/tools/buildsystem/src/tasks/build/index.ts deleted file mode 100644 index bd9138182..000000000 --- a/tools/buildsystem/src/tasks/build/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./build.js"; -export * from "./replace-version.js"; diff --git a/tools/buildsystem/src/tasks/build/replace-version.ts b/tools/buildsystem/src/tasks/build/replace-version.ts deleted file mode 100644 index f3f02070c..000000000 --- a/tools/buildsystem/src/tasks/build/replace-version.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { BuildSchema } from "../../config.js"; -import replace from "replace-in-file"; -import { resolve, dirname } from "path"; -import importJSON from "../../lib/importJSON.js"; - -interface TSConfig { - compilerOptions: { - outDir: string; - }; -} - -export function createReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/ig): (version: string, config: BuildSchema) => Promise { - - /** - * Replaces the $$Version$$ string in the SharePoint HttpClient - * - * @param version The version number - * @param ctx The build context - */ - return async function (version: string, config: BuildSchema): Promise { - - const options = { - files: [], - from: versionMask, - to: version, - }; - - for (let i = 0; i < config.buildTargets.length; i++) { - - // read our outDir from the build target (which will be a tsconfig file) - const buildConfig: TSConfig = importJSON(config.buildTargets[i]); - const buildRoot = resolve(dirname(config.buildTargets[i])); - - options.files.push(...paths.map(p => resolve(buildRoot, buildConfig.compilerOptions.outDir, p))); - } - - await (replace)(options); - } - -} diff --git a/tools/buildsystem/src/tasks/index.ts b/tools/buildsystem/src/tasks/index.ts deleted file mode 100644 index 88292fa26..000000000 --- a/tools/buildsystem/src/tasks/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as _Build from "./build/index.js"; -import * as _Package from "./package/index.js"; -import * as _Publish from "./publish/index.js"; - -export let Build = _Build; -export let Package = _Package; -export let Publish = _Publish; diff --git a/tools/buildsystem/src/tasks/package/copy-package-scripts.ts b/tools/buildsystem/src/tasks/package/copy-package-scripts.ts deleted file mode 100644 index 726eca65d..000000000 --- a/tools/buildsystem/src/tasks/package/copy-package-scripts.ts +++ /dev/null @@ -1,45 +0,0 @@ -import pump from "pump"; -import gulp from "gulp"; -import { resolve, dirname } from "path"; -import { PackageTargetMap, PackageFunction } from "../../config.js"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import { obj, TransformFunction } from "through2"; - -/** - * Copies any *.cjs files from the individual package folders to the respective dist package folders - */ -export function createCopyPackageScripts(targetOverride = "", subDir = "", transforms: TransformFunction[] = []): PackageFunction { - - return async (target: PackageTargetMap, _version: string) => { - - const usedTarget = targetOverride === "" ? target.target : targetOverride; - // will be ./packages - const packagesRoot = resolve(dirname(usedTarget)); - - const dirs = getSubDirNames(packagesRoot); - - dirs.forEach(async dir => { - - await new Promise((res, rej) => { - - pump([ - gulp.src(["./**/*.cjs"], { - cwd: resolve(packagesRoot, dir), - }), - ...transforms.map(t => obj(t)), - gulp.dest(resolve(target.outDir, dir, subDir), { - overwrite: true, - }), - ], (err: (Error | null)) => { - - if (err !== undefined) { - console.error(err); - rej(err); - } else { - res(); - } - }); - }); - }); - }; -} diff --git a/tools/buildsystem/src/tasks/package/copy-static-assets.ts b/tools/buildsystem/src/tasks/package/copy-static-assets.ts deleted file mode 100644 index 3faabb90c..000000000 --- a/tools/buildsystem/src/tasks/package/copy-static-assets.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { PackageTargetMap } from "../../config.js"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import { cwd } from "process"; -import mkdir from "mkdirp"; -import { resolve, dirname, join } from "path"; -import { createReadStream, createWriteStream } from "fs"; -import importJSON from "../../lib/importJSON.js"; - -interface TSConfig { - compilerOptions: { - outDir: string; - }; -} - -export function copyStaticAssets(target: PackageTargetMap, _version: string) { - - const projectRoot = cwd(); - - const licensePath = resolve(projectRoot, "LICENSE"); - const readmePath = resolve(projectRoot, "./packages/readme.md"); - - const buildConfig: TSConfig = importJSON(target.target); - const sourceRoot = resolve(dirname(target.target)); - const buildOutDir = resolve(sourceRoot, buildConfig.compilerOptions.outDir); - - // get the sub directories from the output, these will match the folder structure\ - // in the .ts source directory - const builtFolders = getSubDirNames(buildOutDir); - - for (let j = 0; j < builtFolders.length; j++) { - const dest = resolve(target.outDir, builtFolders[j]); - mkdir.sync(dest); - createReadStream(licensePath).pipe(createWriteStream(join(dest, "LICENSE"))); - createReadStream(readmePath).pipe(createWriteStream(join(dest, "readme.md"))); - } - - return Promise.resolve(); -} diff --git a/tools/buildsystem/src/tasks/package/copy-target-files.ts b/tools/buildsystem/src/tasks/package/copy-target-files.ts deleted file mode 100644 index 3eba7484d..000000000 --- a/tools/buildsystem/src/tasks/package/copy-target-files.ts +++ /dev/null @@ -1,51 +0,0 @@ -import pump from "pump"; -import gulp from "gulp"; -import { resolve, dirname } from "path"; -import { PackageTargetMap, PackageFunction } from "../../config.js"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import { obj, TransformFunction } from "through2"; -import importJSON from "../../lib/importJSON.js"; - -interface TSConfig { - compilerOptions: { - outDir: string; - }; -} - -export function createCopyTargetFiles(targetOverride = "", subDir = "", transforms: TransformFunction[] = []): PackageFunction { - - return async (target: PackageTargetMap, _version: string) => { - - // read the outdir from the packagetarget - const usedTarget = targetOverride === "" ? target.target : targetOverride; - const buildConfig: TSConfig = importJSON(usedTarget); - const sourceRoot = resolve(dirname(usedTarget)); - const buildOutDir = resolve(sourceRoot, buildConfig.compilerOptions.outDir); - - const dirs = getSubDirNames(buildOutDir); - - dirs.forEach(async dir => { - - await new Promise((res, rej) => { - - pump([ - gulp.src(["./**/*.d.ts", "./**/*.js", "./**/*.js.map", "./**/*.d.ts.map"], { - cwd: resolve(buildOutDir, dir), - }), - ...transforms.map(t => obj(t)), - gulp.dest(resolve(target.outDir, dir, subDir), { - overwrite: true, - }), - ], (err: (Error | null)) => { - - if (err !== undefined) { - console.error(err); - rej(err); - } else { - res(); - } - }); - }); - }); - }; -} diff --git a/tools/buildsystem/src/tasks/package/index.ts b/tools/buildsystem/src/tasks/package/index.ts deleted file mode 100644 index 9dea7e934..000000000 --- a/tools/buildsystem/src/tasks/package/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from "./copy-package-scripts.js"; -export * from "./copy-target-files.js"; -export * from "./copy-static-assets.js"; -export * from "./write-package-files.js"; -export * from "./webpack.js"; diff --git a/tools/buildsystem/src/tasks/package/webpack.ts b/tools/buildsystem/src/tasks/package/webpack.ts deleted file mode 100644 index fedc7cd43..000000000 --- a/tools/buildsystem/src/tasks/package/webpack.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as wp from "webpack"; - -export function webpack(config: wp.Configuration): () => Promise { - - return () => { - - return new Promise((res, reject) => { - - wp(config, (err, stats) => { - - if (err || stats.hasErrors()) { - console.error("Webpack exited with errors"); - console.error(stats.toString()); - reject(err); - } - - if (stats.hasWarnings()) { - console.warn("Webpack exited with warnings"); - console.warn(stats.toString()); - } - - res(); - }); - }); - }; -} diff --git a/tools/buildsystem/src/tasks/package/write-package-files.ts b/tools/buildsystem/src/tasks/package/write-package-files.ts deleted file mode 100644 index 1b3d74978..000000000 --- a/tools/buildsystem/src/tasks/package/write-package-files.ts +++ /dev/null @@ -1,77 +0,0 @@ -import mkdir from "mkdirp"; -import { resolve, dirname, join } from "path"; -import { writeFile } from "fs"; - -import { PackageTargetMap } from "../../config.js"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import importJSON from "../../lib/importJSON.js"; - -interface TSConfig { - compilerOptions: { - outDir: string; - }; -} - -/** - * Writes the package.json for the dist package. This should be last in the pipeline as that allows previous tasks - * to update the pkgObj as needed before it is written to the fs here. This task does handle the statndard rewrites - * - * @param ctx The build context - */ -export function createWritePackageFiles(transform: (pkg: any) => any = (p) => Object.assign({}, p)) { - - return (target: PackageTargetMap, version: string) => { - - const promises: Promise[] = []; - - // read the outdir from the packagetarget - const buildConfig: TSConfig = importJSON(target.target); - const sourceRoot = resolve(dirname(target.target)); - const buildOutDir = resolve(sourceRoot, buildConfig.compilerOptions.outDir); - - // get the sub directories from the output, these will match the folder structure - // in the .ts source directory - const builtFolders = getSubDirNames(buildOutDir); - - for (let j = 0; j < builtFolders.length; j++) { - - // read the package.json from the root of the original source - let pkg = importJSON(resolve(sourceRoot, builtFolders[j], "package.json")); - - pkg.version = version; - pkg.main = `./index.js`; - - // update our peer dependencies and dependencies placeholder if needed - for (const key in pkg.peerDependencies) { - if (pkg.peerDependencies[key] === "0.0.0-PLACEHOLDER") { - pkg.peerDependencies[key] = version; - } - } - - for (const key in pkg.dependencies) { - if (pkg.dependencies[key] === "0.0.0-PLACEHOLDER") { - pkg.dependencies[key] = version; - } - } - - // finally call our transform function giving the caller the ability to make any final edits - pkg = transform(pkg); - - promises.push(new Promise((res, reject) => { - const folderPath = resolve(target.outDir, builtFolders[j]); - mkdir.sync(folderPath); - writeFile(join(folderPath, "package.json"), JSON.stringify(pkg, null, 4), (err) => { - - if (err) { - console.error(err); - reject(err); - } else { - res(); - } - }); - })); - } - - return Promise.all(promises); - }; -} diff --git a/tools/buildsystem/src/tasks/publish/index.ts b/tools/buildsystem/src/tasks/publish/index.ts deleted file mode 100644 index 83d37fb7b..000000000 --- a/tools/buildsystem/src/tasks/publish/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./publish-package.js"; -export * from "./publish-beta-package.js"; -export * from "./publish-v3nightly.js"; -export * from "./v3nightly-update-version.js"; diff --git a/tools/buildsystem/src/tasks/publish/publish-beta-package.ts b/tools/buildsystem/src/tasks/publish/publish-beta-package.ts deleted file mode 100644 index 13a354cc5..000000000 --- a/tools/buildsystem/src/tasks/publish/publish-beta-package.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { exec } from "child_process"; -import { PublishSchema } from "../../config.js"; -import { resolve } from "path"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import log from "fancy-log"; -import colors from "ansi-colors"; - -export function publishBetaPackage(_version: string, config: PublishSchema): Promise { - - const promises: Promise[] = []; - - config.packageRoots.forEach(packageRoot => { - - const publishRoot = resolve(packageRoot); - const packageFolders = getSubDirNames(publishRoot).filter(name => name !== "documentation"); - - for (let i = 0; i < packageFolders.length; i++) { - - promises.push(new Promise((res, reject) => { - - const packagePath = resolve(publishRoot, packageFolders[i]); - - log(`${colors.bgBlue(" ")} Publishing BETA ${packagePath}`); - - exec("npm publish --tag beta --access public --provenance", - { - cwd: resolve(publishRoot, packageFolders[i]), - }, (error, stdout, _stderr) => { - - if (error === null) { - log(`${colors.bgGreen(" ")} Published BETA ${packagePath}`); - res(); - } else { - console.error(error); - reject(stdout); - } - }); - })); - } - }); - - return Promise.all(promises); -} diff --git a/tools/buildsystem/src/tasks/publish/publish-package.ts b/tools/buildsystem/src/tasks/publish/publish-package.ts deleted file mode 100644 index ef1119d65..000000000 --- a/tools/buildsystem/src/tasks/publish/publish-package.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { exec } from "child_process"; -import { PublishSchema } from "../../config.js"; -import { resolve } from "path"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import log from "fancy-log"; -import colors from "ansi-colors"; - -export function publishPackage(_version: string, config: PublishSchema): Promise { - - const promises: Promise[] = []; - - config.packageRoots.forEach(packageRoot => { - - const publishRoot = resolve(packageRoot); - const packageFolders = getSubDirNames(publishRoot); - - for (let i = 0; i < packageFolders.length; i++) { - - promises.push(new Promise((res, reject) => { - - const packagePath = resolve(publishRoot, packageFolders[i]); - - log(`${colors.bgBlue(" ")} Publishing ${packagePath}`); - - exec("npm publish --access public --provenance", - { - cwd: resolve(publishRoot, packageFolders[i]), - }, (error, _stdout, _stderr) => { - - if (error === null) { - log(`${colors.bgGreen(" ")} Published ${packagePath}`); - res(); - } else { - console.error(error); - reject(error); - } - }); - })); - } - }); - - return Promise.all(promises); -} diff --git a/tools/buildsystem/src/tasks/publish/publish-v3nightly.ts b/tools/buildsystem/src/tasks/publish/publish-v3nightly.ts deleted file mode 100644 index 3256c025f..000000000 --- a/tools/buildsystem/src/tasks/publish/publish-v3nightly.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { exec } from "child_process"; -import { PublishSchema } from "../../config.js"; -import { resolve } from "path"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import log from "fancy-log"; -import colors from "ansi-colors"; - -export function publishV3Nightly(_version: string, config: PublishSchema): Promise { - - const promises: Promise[] = []; - - config.packageRoots.forEach(packageRoot => { - - const publishRoot = resolve(packageRoot); - const packageFolders = getSubDirNames(publishRoot).filter(name => name !== "documentation"); - - for (let i = 0; i < packageFolders.length; i++) { - - promises.push(new Promise((res, reject) => { - - const packagePath = resolve(publishRoot, packageFolders[i]); - - log(`${colors.bgBlue(" ")} Publishing v3 NIGHTLY ${packagePath}`); - - exec("npm publish --tag v3nightly --access public --provenance", - { - cwd: resolve(publishRoot, packageFolders[i]), - }, (error, stdout, _stderr) => { - - if (error === null) { - log(`${colors.bgGreen(" ")} Published v3 NIGHTLY ${packagePath}`); - res(); - } else { - console.error(error); - reject(stdout); - } - }); - })); - } - }); - - return Promise.all(promises); -} diff --git a/tools/buildsystem/src/tasks/publish/v3nightly-update-version.ts b/tools/buildsystem/src/tasks/publish/v3nightly-update-version.ts deleted file mode 100644 index fb133caca..000000000 --- a/tools/buildsystem/src/tasks/publish/v3nightly-update-version.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { PublishSchema } from "../../config.js"; -import { join, resolve } from "path"; -import getSubDirNames from "../../lib/getSubDirs.js"; -import { writeFileSync } from "fs"; -import log from "fancy-log"; -import colors from "ansi-colors"; -import importJSON from "../../lib/importJSON.js"; - -export function updateV3NightlyVersion(_version: string, config: PublishSchema): Promise { - - const promises: Promise[] = []; - - config.packageRoots.forEach(packageRoot => { - - const publishRoot = resolve(packageRoot); - const packageFolders = getSubDirNames(publishRoot).filter(name => name !== "documentation"); - const date = new Date(); - const versionStr = `-v3nightly.${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, "0")}${date.getDate().toString().padStart(2, "0")}`; - - for (let i = 0; i < packageFolders.length; i++) { - - promises.push(new Promise((res, reject) => { - - const packagePath = resolve(publishRoot, packageFolders[i]); - const packageJsonPath = join(packagePath, "package.json"); - const packageJson = importJSON(packageJsonPath); - - try { - - log(`${colors.bgBlue(" ")} Updating package.json version ${packagePath} to ${versionStr}`); - - packageJson.version += versionStr; - - if (packageJson.dependencies) { - const keys = Object.getOwnPropertyNames(packageJson.dependencies); - for (let i = 0; i < keys.length; i++) { - if (keys[i].startsWith("@pnp")) { - packageJson.dependencies[keys[i]] += versionStr; - } - } - } - - writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); - - res(); - - } catch (e) { - - reject(e); - } - })); - } - }); - - return Promise.all(promises); -} diff --git a/tools/buildsystem/src/types.ts b/tools/buildsystem/src/types.ts new file mode 100644 index 000000000..8cfd377d3 --- /dev/null +++ b/tools/buildsystem/src/types.ts @@ -0,0 +1,35 @@ +export interface BuildSchema { + name: string; + distFolder: string; + targets: string[]; +} + +export interface TSConfig { + compilerOptions: { + outDir: string; + }; + references?: { + path: string; + }[]; +} + +export interface IBuildContext { + buildId: string; + resolvedProjectRoot: string; + version: string; + configName: string; + distRoot: string; + target: { + tsconfigPath: string; + tsconfigRoot: string; + parsedTSConfig: TSConfig; + resolvedOutDir: string; + packages: { + name: string; + resolvedPkgSrcTSConfigPath: string; + resolvedPkgSrcRoot: string; + resolvedPkgOutRoot: string; + resolvedPkgDistRoot: string; + }[]; + }; +} diff --git a/tools/buildsystem/tsconfig.json b/tools/buildsystem/tsconfig.json index 93b05344e..8f1826622 100644 --- a/tools/buildsystem/tsconfig.json +++ b/tools/buildsystem/tsconfig.json @@ -19,7 +19,7 @@ "forceConsistentCasingInFileNames": true, "moduleResolution": "node", "noUnusedLocals": true, - "noUnusedParameters": false, + "noUnusedParameters": true, "pretty": true, "experimentalDecorators": true, "noFallthroughCasesInSwitch": true, @@ -30,7 +30,7 @@ "preserveConstEnums": true, "importHelpers": true, "resolveJsonModule": true, - "allowSyntheticDefaultImports": true, + "allowSyntheticDefaultImports": true }, "include": [ "./index.ts", diff --git a/tools/local-module-resolver/esm-packages.ts b/tools/local-module-resolver/esm-packages.ts new file mode 100644 index 000000000..b2d6b29e9 --- /dev/null +++ b/tools/local-module-resolver/esm-packages.ts @@ -0,0 +1,2 @@ +import { createResolve} from "./esm.js"; +export const resolve = createResolve("/build/packages"); diff --git a/tsconfig.buildsystem.json b/tsconfig.buildsystem.json index 3fc021c70..04ef29630 100644 --- a/tsconfig.buildsystem.json +++ b/tsconfig.buildsystem.json @@ -11,7 +11,8 @@ "allowSyntheticDefaultImports": true }, "include": [ - "buildsystem-config.ts" + "buildsystem-config.ts", + "buildsystem-config2.ts" ], "exclude": [] } \ No newline at end of file diff --git a/tsconfig.localresolver.json b/tsconfig.localresolver.json new file mode 100644 index 000000000..b9b57ad12 --- /dev/null +++ b/tsconfig.localresolver.json @@ -0,0 +1,17 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "outDir": "./build/debugging", + "rootDir": ".", + "composite": false, + "declaration": false, + "declarationMap": false, + "sourceMap": false, + "allowSyntheticDefaultImports": true + }, + "include": [ + "./tools/local-module-resolver/**/*.ts" + ], + "exclude": [] +} From aba2fbf61757d96538f7e7f4b02fe949bb382556 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 10:32:26 -0500 Subject: [PATCH 037/171] v0 of new buildsystem --- debug/launch/graph.ts | 16 +++++------- debug/launch/main.ts | 4 +-- debug/launch/sp.ts | 12 +-------- debug/serve/main.ts | 61 +++---------------------------------------- 4 files changed, 14 insertions(+), 79 deletions(-) diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index 4c63e4ee3..9fe04eec9 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,7 +1,6 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; -import "@pnp/graph/sites"; -import { encodeSharingUrl } from "@pnp/graph/files"; +import "@pnp/graph/users"; declare var process: { exit(code?: number): void }; @@ -9,14 +8,13 @@ export async function Example(settings: any) { const graph = graphSetup(settings); - const y = await graph.sites.getAllSites().select("modifiedDateTime")(); + const users = await graph.users(); - - // Logger.log({ - // data: users, - // level: LogLevel.Info, - // message: "List of Users Data", - // }); + Logger.log({ + data: users, + level: LogLevel.Info, + message: "List of Users Data", + }); process.exit(0); } diff --git a/debug/launch/main.ts b/debug/launch/main.ts index 22daa0872..230ee47d3 100644 --- a/debug/launch/main.ts +++ b/debug/launch/main.ts @@ -8,8 +8,8 @@ import { ITestingSettings } from "../../test/load-settings.js"; // add your debugging imports here and prior to submitting a PR git checkout debug/debug.ts // will allow you to keep all your debugging files locally // comment out the example -// import { Example } from "./sp.js"; -import { Example } from "./app-folder.js"; +import { Example } from "./sp.js"; +// import { Example } from "./graph.js"; // setup the connection to SharePoint using the settings file, you can // override any of the values as you want here, just be sure not to commit diff --git a/debug/launch/sp.ts b/debug/launch/sp.ts index 9b8e490f3..dab257330 100644 --- a/debug/launch/sp.ts +++ b/debug/launch/sp.ts @@ -11,17 +11,7 @@ export async function Example(settings: ITestingSettings) { const sp = spSetup(settings); - - // https://318studios.sharepoint.com/sites/dev/_api/web/lists/getByTitle('FolderTest')/items?$select=FileRef&$orderby=FileRef - - const w = await sp.web.lists.getByTitle("FolderTest").items.select("FileRef").orderBy("FileRef")(); - - - const y = w.map(i => i.FileRef); - - const u = y.sort(); - - + const w = await sp.web(); Logger.log({ data: w, diff --git a/debug/serve/main.ts b/debug/serve/main.ts index 70a2a47bc..492e9d21a 100644 --- a/debug/serve/main.ts +++ b/debug/serve/main.ts @@ -1,41 +1,13 @@ import { MSAL } from "@pnp/msaljsclient/index.js"; import { spfi, SPBrowser } from "@pnp/sp"; import "@pnp/sp/webs"; -import { graphfi, GraphBrowser } from "@pnp/graph"; -import "@pnp/graph/sites"; -import "@pnp/graph/lists"; -import "@pnp/graph/files"; -import "@pnp/graph/users"; import { settings } from "../../settings.js"; -import { Diagnostics_JWTDecoder } from "@pnp/queryable"; -import { ConsoleListener, PnPLogging, Logger, LogLevel } from "@pnp/logging"; // import { graph } from "@pnp/graph/presets/all"; // ****** // Please edit this file and do any testing required. Please do not submit changes as part of a PR. // ****** -const localInit = { - auth: { - authority: "https://login.microsoftonline.com/ef379d32-30d7-46fd-9bc8-971e0cfff9bd/", - clientId: "726ef411-3b09-4799-9b70-f0e5dde64466", - redirectUri: "https://localhost:8080/spa.html", - } -} - -//heartbeat -// const localInit = { -// auth: { -// authority: "https://login.microsoftonline.com/6b0c2761-33e5-48b4-868c-169359f2f8be/", -// clientId: "9b2a3203-adb3-4d28-8ee9-8a54a411b1b2", -// redirectUri: "https://localhost:8080/spa.html", -// } -// } - -const localScopes = ["Files.ReadWrite.AppFolder"]; - -Logger.subscribe(ConsoleListener()); - // ensure our DOM is ready for us to do stuff document.onreadystatechange = async () => { @@ -56,38 +28,13 @@ document.onreadystatechange = async () => { try { - // // Make sure to add `https://localhost:8080/spa.html` as a Redirect URI in your testing's AAD App Registration - // const sp = spfi().using( - // SPBrowser({ baseUrl: "https://318studios.sharepoint.com/sites/SiteSelectedDelegated"}), - // MSAL(localInit, {scopes: localScopes}) - // ); - // Make sure to add `https://localhost:8080/spa.html` as a Redirect URI in your testing's AAD App Registration - const graph = graphfi().using( - GraphBrowser(), - MSAL(localInit, { scopes: localScopes }), - PnPLogging(LogLevel.Info), + const sp = spfi().using( + SPBrowser({ baseUrl: settings.testing.sp.url}), + MSAL(settings.testing.sp.msal.init, {scopes: settings.testing.sp.msal.scopes}) ); - graph.using(Diagnostics_JWTDecoder()); - - - // https://a830edad9050849einspufstc3x.sharepoint.com - - // const r = await graph.me.drive.special("approot")(); - - const r = await graph.users.getById("patrick@three18studios.com").drive.special("approot")(); - - // - - // const site = await graph.sites.getByUrl("318studios.sharepoint.com", "/sites/dev/"); - - // const r = await site.drive.special("approot")(); - - - // const r = await graph.sites.getById("a830edad9050849einspufstc3x.sharepoint.com:/sites/test1")(); - //const r = await graph.sites.getById("318studios.sharepoint.com:/sites/SiteSelectedDelegated:")(); - // const r = await graph.sites.getById("318studios.sharepoint.com:/sites/SiteSelectedDelegated:").lists.getById("e76d1709-44a3-41a7-8146-6f3191d6e72b")(); + const r = await sp.web(); html.push(``); From 8eb692cbab8492a87db7ee0cacb8678205b94741 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 10:32:53 -0500 Subject: [PATCH 038/171] v0 of new buildsystem --- .vscode/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index fdf6d860d..629e5f75c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,7 +6,7 @@ "**/node_modules": true, "coverage": true, ".nyc_output": true, - "build": false, + "build": true, "dist": true, "site": true, "buildsystem-config.js": true From 4a6d5455ad3e51dc3d427682ada819db5fb1d297 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 10:34:25 -0500 Subject: [PATCH 039/171] v0 of new buildsystem --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 96b9ce18a..268f0b5eb 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,4 @@ settings.js # don't save the locally produced .js of the buildsystem config buildsystem-config.js +buildsystem-config2.js From 1c4e466c40197603cb1b4513933acefb8001dc99 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 10:47:10 -0500 Subject: [PATCH 040/171] Update publish-buildsystem.yml --- .github/workflows/publish-buildsystem.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-buildsystem.yml b/.github/workflows/publish-buildsystem.yml index b56845e69..ac6568ebd 100644 --- a/.github/workflows/publish-buildsystem.yml +++ b/.github/workflows/publish-buildsystem.yml @@ -14,7 +14,7 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 with: - ref: version-3 + ref: version-4 # setup nodejs - name: Use Node.js 16 uses: actions/setup-node@v3 From 542d392782f1a4da6cb08a58f523942cb9f11789 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 11:34:47 -0500 Subject: [PATCH 041/171] more build system work --- tools/buildsystem/bin/buildsystem.ts | 73 +- tools/buildsystem/index.ts | 16 +- tools/buildsystem/package-lock.json | 1656 ++++++++--------- tools/buildsystem/package.json | 3 +- tools/buildsystem/src/behaviors/build.ts | 10 +- .../src/behaviors/copy-asset-files.ts | 4 +- .../src/behaviors/copy-package-files.ts | 2 +- .../src/behaviors/publish-nightly.ts | 26 +- tools/buildsystem/src/behaviors/publish.ts | 35 +- .../src/behaviors/replace-version.ts | 2 +- tools/buildsystem/src/behaviors/webpack.ts | 10 +- .../src/behaviors/write-packagejson.ts | 2 +- tools/buildsystem/src/build-timeline.ts | 2 +- tools/buildsystem/src/types.ts | 13 + 14 files changed, 883 insertions(+), 971 deletions(-) diff --git a/tools/buildsystem/bin/buildsystem.ts b/tools/buildsystem/bin/buildsystem.ts index 64729a620..2cb413644 100644 --- a/tools/buildsystem/bin/buildsystem.ts +++ b/tools/buildsystem/bin/buildsystem.ts @@ -6,17 +6,8 @@ import { hideBin } from "yargs/helpers"; import { dirname, join, resolve } from "path"; import { cwd } from "process"; import importJSON from "../src/lib/import-json.js"; -import { BuildTimeline } from "../src/build-timeline.js"; +import { BuildTimeline, BuildMoments } from "../src/build-timeline.js"; import { IBuildContext, BuildSchema, TSConfig } from "../src/types.js"; -import { Logger, ConsoleListener, LogLevel, PnPLogging } from "@pnp/logging"; - - -import Build from "../src/behaviors/build.js"; -import ReplaceVersion from "../src/behaviors/replace-version.js"; -import CopyPackageFiles from "../src/behaviors/copy-package-files.js"; -import CopyAssetFiles from "../src/behaviors/copy-asset-files.js"; -import WritePackageJSON from "../src/behaviors/write-packagejson.js"; -import Publish from "../src/behaviors/publish.js"; const args: any = yargs(hideBin(process.argv)).argv; @@ -25,18 +16,10 @@ const context: Partial = { }; const BuildSystem = new Liftoff({ - configName: "buildsystem-config2", + configName: "buildsystem-config", name: "buildsystem", }); -// setup console logger -Logger.subscribe(ConsoleListener("", { - color: "skyblue", - error: "red", - verbose: "lightslategray", - warning: "yellow", -})); - BuildSystem.prepare({}, function (env) { BuildSystem.execute(env, async function (env: Liftoff.LiftoffEnv) { @@ -64,44 +47,24 @@ BuildSystem.prepare({}, function (env) { throw Error(`No configuration entry found in ${env.configPath} with name ${name}.`); } + const activeConfig = config[0]; + // setup other context values from config context.distRoot = config[0].distFolder || "./dist/packages"; - // we setup a baseTimeline to which we attach all the behaviors, then pass it as the base for target timelines - const baseTimeline = new BuildTimeline().using( - PnPLogging(LogLevel.Verbose), - Build(), - ReplaceVersion(["sp/behaviors/telemetry.js", "graph/behaviors/telemetry.js"]), - CopyPackageFiles("src", ["**/*.cjs"]), - CopyAssetFiles(".", ["LICENSE"]), - CopyAssetFiles("./packages", ["readme.md"]), - CopyPackageFiles("built", ["**/*.d.ts", "**/*.js", "**/*.js.map", "**/*.d.ts.map"]), - WritePackageJSON((p) => { - return Object.assign({}, p, { - funding: { - type: "individual", - url: "https://github.com/sponsors/patrick-rodgers/", - }, - type: "module", - engines: { - node: ">=14.15.1" - }, - author: { - name: "Microsoft and other contributors" - }, - license: "MIT", - bugs: { - url: "https://github.com/pnp/pnpjs/issues" - }, - homepage: "https://github.com/pnp/pnpjs", - repository: { - type: "git", - url: "git:github.com/pnp/pnpjs" - } - }); - }), - Publish(), - ); + const baseTimeline = new BuildTimeline(); + + // now we apply all our configs + if (activeConfig.behaviors) { + baseTimeline.using(...activeConfig.behaviors); + } + + // read in any moment defined observers + for (let key in BuildMoments) { + if (activeConfig[key]) { + baseTimeline.on[key](...activeConfig[key]); + } + } // now we make an array of timelines 1/target const timelines = config[0].targets.map(tsconfigPath => { @@ -110,7 +73,7 @@ BuildSystem.prepare({}, function (env) { const parsedTSConfig: TSConfig = importJSON(tsconfigPath); const resolvedOutDir = resolve(tsconfigRoot, parsedTSConfig.compilerOptions.outDir); - // we need to get some extra data for each package + // we need to resolve some extra data for each package const packages = parsedTSConfig?.references.map(ref => ({ name: dirname(ref.path).replace(/^\.\//, ""), diff --git a/tools/buildsystem/index.ts b/tools/buildsystem/index.ts index acf588457..422bc1949 100644 --- a/tools/buildsystem/index.ts +++ b/tools/buildsystem/index.ts @@ -1,12 +1,12 @@ // export behaviors -export * from "./src/behaviors/build.js"; -export * from "./src/behaviors/copy-asset-files.js"; -export * from "./src/behaviors/copy-package-files.js"; -export * from "./src/behaviors/publish-nightly.js"; -export * from "./src/behaviors/publish.js"; -export * from "./src/behaviors/replace-version.js"; -export * from "./src/behaviors/webpack.js"; -export * from "./src/behaviors/write-packagejson.js"; +export { Build } from "./src/behaviors/build.js"; +export { CopyAssetFiles } from "./src/behaviors/copy-asset-files.js"; +export { CopyPackageFiles } from "./src/behaviors/copy-package-files.js"; +export { PublishNightly } from "./src/behaviors/publish-nightly.js"; +export { Publish } from "./src/behaviors/publish.js"; +export { ReplaceVersion } from "./src/behaviors/replace-version.js"; +export { Webpack } from "./src/behaviors/webpack.js"; +export { WritePackageJSON } from "./src/behaviors/write-packagejson.js"; export { BuildObserver, diff --git a/tools/buildsystem/package-lock.json b/tools/buildsystem/package-lock.json index f4d92ef41..8f90fe7c3 100644 --- a/tools/buildsystem/package-lock.json +++ b/tools/buildsystem/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "@pnp/core": "^3.21.0", - "@pnp/logging": "^3.21.0", "globby": "^14.0.0", "liftoff": "^4.0.0", "replace-in-file": "^7.0.2", @@ -47,77 +46,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", @@ -141,77 +69,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -311,21 +168,6 @@ "url": "https://github.com/sponsors/patrick-rodgers/" } }, - "node_modules/@pnp/logging": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", - "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", - "dependencies": { - "tslib": "2.4.1" - }, - "engines": { - "node": ">=14.15.1" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/patrick-rodgers/" - } - }, "node_modules/@sindresorhus/merge-streams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", @@ -361,9 +203,9 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/fined": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/fined/-/fined-1.1.3.tgz", - "integrity": "sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/fined/-/fined-1.1.5.tgz", + "integrity": "sha512-2N93vadEGDFhASTIRbizbl4bNqpMOId5zZfj6hHqYZfEzEfO9onnU4Im8xvzo8uudySDveDHBOOSlTWf38ErfQ==", "dev": true }, "node_modules/@types/json-schema": { @@ -372,9 +214,9 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/liftoff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/liftoff/-/liftoff-4.0.0.tgz", - "integrity": "sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/liftoff/-/liftoff-4.0.3.tgz", + "integrity": "sha512-UgbL2kR5pLrWICvr8+fuSg0u43LY250q7ZMkC+XKC3E+rs/YBDEnQIzsnhU5dYsLlwMi3R75UvCL87pObP1sxw==", "dev": true, "dependencies": { "@types/fined": "*", @@ -388,9 +230,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", @@ -399,18 +244,18 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.7.tgz", - "integrity": "sha512-OvLKmpKdea1aWtqHv9bxVVcMoT6syAeK+198dfETIFkAevYRGwqh4H+KFxfjUETZuUuE5sQCAFwdOdoHUdo8eg==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@webassemblyjs/ast": { @@ -621,23 +466,21 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "engines": { "node": ">=0.10.0" } @@ -672,26 +515,46 @@ "balanced-match": "^1.0.0" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer-from": { @@ -730,27 +593,45 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001286", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", - "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" } }, "node_modules/chrome-trace-event": { @@ -790,20 +671,19 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/commander": { "version": "2.20.3", @@ -926,7 +806,7 @@ "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "engines": { "node": ">=0.10.0" } @@ -943,10 +823,19 @@ "node": ">=8" } }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/electron-to-chromium": { - "version": "1.4.17", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.17.tgz", - "integrity": "sha512-zhk1MravPtq/KBhmGB7TLBILmXTgRG9TFSI3qS3DbgyfHzIl72iiTE37r/BHIbPCJJlWIo5rySyxiH4vWhu2ZA==" + "version": "1.4.615", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", + "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -1049,7 +938,7 @@ "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -1082,70 +971,6 @@ "node": ">=8.6.0" } }, - "node_modules/fast-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-glob/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/fast-glob/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1159,6 +984,17 @@ "reusify": "^1.0.4" } }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1175,10 +1011,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/fined": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "engines": { "node": ">=0.10.0" } @@ -1186,7 +1059,7 @@ "node_modules/for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dependencies": { "for-in": "^1.0.1" }, @@ -1200,9 +1073,12 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -1230,6 +1106,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -1251,7 +1138,7 @@ "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -1282,17 +1169,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globby/node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", @@ -1318,23 +1194,24 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { - "node": ">= 0.4.0" + "node": ">=4" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/homedir-polyfill": { @@ -1418,11 +1295,11 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1431,7 +1308,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -1455,6 +1332,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-path-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", @@ -1488,6 +1373,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -1521,12 +1414,12 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } @@ -1544,6 +1437,14 @@ "node": ">= 10.13.0" } }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -1600,115 +1501,6 @@ "node": ">=10.13.0" } }, - "node_modules/liftoff/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/liftoff/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/liftoff/node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/liftoff/node_modules/fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/liftoff/node_modules/flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/liftoff/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/liftoff/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/liftoff/node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/liftoff/node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/liftoff/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -1716,9 +1508,9 @@ "dev": true }, "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "engines": { "node": ">=6.11.5" } @@ -1764,7 +1556,7 @@ "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "engines": { "node": ">=0.10.0" } @@ -1807,15 +1599,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -1826,23 +1609,35 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": ">= 8" + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -1888,9 +1683,9 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/normalize-package-data": { "version": "3.0.3", @@ -1910,7 +1705,7 @@ "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dependencies": { "array-each": "^1.0.1", "array-slice": "^1.0.0", @@ -1924,7 +1719,7 @@ "node_modules/object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "dependencies": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" @@ -1936,7 +1731,7 @@ "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dependencies": { "isobject": "^3.0.1" }, @@ -1947,7 +1742,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -2000,7 +1795,7 @@ "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -2031,7 +1826,7 @@ "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "engines": { "node": ">=0.10.0" } @@ -2062,7 +1857,7 @@ "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dependencies": { "path-root-regex": "^0.1.0" }, @@ -2073,18 +1868,20 @@ "node_modules/path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/picocolors": { @@ -2185,6 +1982,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/redent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", @@ -2217,6 +2025,70 @@ "node": ">=10" } }, + "node_modules/replace-in-file/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/replace-in-file/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/replace-in-file/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/replace-in-file/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/replace-in-file/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2226,12 +2098,16 @@ } }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2240,7 +2116,7 @@ "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -2497,14 +2373,26 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/tapable": { @@ -2565,6 +2453,17 @@ } } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/trim-newlines": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", @@ -2595,9 +2494,9 @@ } }, "node_modules/typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -2610,11 +2509,16 @@ "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "engines": { "node": ">=0.10.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unicorn-magic": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", @@ -2626,6 +2530,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2737,10 +2670,40 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/y18n": { "version": "5.0.8", @@ -2774,6 +2737,15 @@ } }, "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", @@ -2803,64 +2775,6 @@ "requires": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@babel/helper-validator-identifier": { @@ -2878,64 +2792,6 @@ "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@jridgewell/gen-mapping": { @@ -3012,14 +2868,6 @@ "tslib": "2.4.1" } }, - "@pnp/logging": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", - "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", - "requires": { - "tslib": "2.4.1" - } - }, "@sindresorhus/merge-streams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", @@ -3049,9 +2897,9 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "@types/fined": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/fined/-/fined-1.1.3.tgz", - "integrity": "sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/fined/-/fined-1.1.5.tgz", + "integrity": "sha512-2N93vadEGDFhASTIRbizbl4bNqpMOId5zZfj6hHqYZfEzEfO9onnU4Im8xvzo8uudySDveDHBOOSlTWf38ErfQ==", "dev": true }, "@types/json-schema": { @@ -3060,9 +2908,9 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/liftoff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/liftoff/-/liftoff-4.0.0.tgz", - "integrity": "sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/liftoff/-/liftoff-4.0.3.tgz", + "integrity": "sha512-UgbL2kR5pLrWICvr8+fuSg0u43LY250q7ZMkC+XKC3E+rs/YBDEnQIzsnhU5dYsLlwMi3R75UvCL87pObP1sxw==", "dev": true, "requires": { "@types/fined": "*", @@ -3076,9 +2924,12 @@ "dev": true }, "@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "requires": { + "undici-types": "~5.26.4" + } }, "@types/normalize-package-data": { "version": "2.4.4", @@ -3087,18 +2938,18 @@ "dev": true }, "@types/yargs": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.7.tgz", - "integrity": "sha512-OvLKmpKdea1aWtqHv9bxVVcMoT6syAeK+198dfETIFkAevYRGwqh4H+KFxfjUETZuUuE5sQCAFwdOdoHUdo8eg==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "@webassemblyjs/ast": { @@ -3286,17 +3137,18 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" }, "array-slice": { "version": "1.1.0", @@ -3322,16 +3174,23 @@ "balanced-match": "^1.0.0" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" } }, "buffer-from": { @@ -3358,17 +3217,27 @@ } }, "caniuse-lite": { - "version": "1.0.30001286", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", - "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==" + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==" }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } } }, "chrome-trace-event": { @@ -3396,17 +3265,19 @@ } }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "commander": { "version": "2.20.3", @@ -3493,7 +3364,7 @@ "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" }, "dir-glob": { "version": "3.0.1", @@ -3502,12 +3373,20 @@ "dev": true, "requires": { "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } } }, "electron-to-chromium": { - "version": "1.4.17", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.17.tgz", - "integrity": "sha512-zhk1MravPtq/KBhmGB7TLBILmXTgRG9TFSI3qS3DbgyfHzIl72iiTE37r/BHIbPCJJlWIo5rySyxiH4vWhu2ZA==" + "version": "1.4.615", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", + "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==" }, "emoji-regex": { "version": "8.0.0", @@ -3585,7 +3464,7 @@ "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "requires": { "homedir-polyfill": "^1.0.1" } @@ -3610,54 +3489,6 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } } }, "fast-json-stable-stringify": { @@ -3673,6 +3504,14 @@ "reusify": "^1.0.4" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3683,15 +3522,43 @@ "path-exists": "^4.0.0" } }, + "findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + } + }, + "flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" }, "for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "requires": { "for-in": "^1.0.1" } @@ -3702,9 +3569,9 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "get-caller-file": { "version": "2.0.5", @@ -3723,6 +3590,14 @@ "once": "^1.3.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -3741,7 +3616,7 @@ "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "requires": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -3763,11 +3638,6 @@ "unicorn-magic": "^0.1.0" }, "dependencies": { - "path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==" - }, "slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", @@ -3786,19 +3656,20 @@ "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "requires": { - "function-bind": "^1.1.1" + "function-bind": "^1.1.2" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -3862,17 +3733,17 @@ "dev": true }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -3887,6 +3758,11 @@ "is-extglob": "^2.1.1" } }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, "is-path-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", @@ -3905,6 +3781,11 @@ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -3929,12 +3810,12 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, "jest-worker": { "version": "27.5.1", @@ -3946,6 +3827,11 @@ "supports-color": "^8.0.0" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -3990,87 +3876,6 @@ "object.map": "^1.0.1", "rechoir": "^0.8.0", "resolve": "^1.20.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" - } - }, - "flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "requires": { - "resolve": "^1.20.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } } }, "lines-and-columns": { @@ -4080,9 +3885,9 @@ "dev": true }, "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "locate-path": { "version": "6.0.0", @@ -4113,7 +3918,7 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" }, "map-obj": { "version": "4.3.0", @@ -4139,14 +3944,6 @@ "trim-newlines": "^4.0.2", "type-fest": "^1.2.2", "yargs-parser": "^20.2.9" - }, - "dependencies": { - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } } }, "merge-stream": { @@ -4159,17 +3956,26 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "min-indent": { @@ -4203,9 +4009,9 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "normalize-package-data": { "version": "3.0.3", @@ -4222,7 +4028,7 @@ "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "requires": { "array-each": "^1.0.1", "array-slice": "^1.0.0", @@ -4233,7 +4039,7 @@ "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "requires": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" @@ -4242,7 +4048,7 @@ "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "requires": { "isobject": "^3.0.1" } @@ -4250,7 +4056,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } @@ -4285,7 +4091,7 @@ "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "requires": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -4307,7 +4113,7 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" }, "path-exists": { "version": "4.0.0", @@ -4329,7 +4135,7 @@ "path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "requires": { "path-root-regex": "^0.1.0" } @@ -4337,13 +4143,12 @@ "path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" }, "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==" }, "picocolors": { "version": "1.0.0", @@ -4402,6 +4207,14 @@ "type-fest": "^1.0.1" } }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "requires": { + "resolve": "^1.20.0" + } + }, "redent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", @@ -4420,6 +4233,51 @@ "chalk": "^4.1.2", "glob": "^8.1.0", "yargs": "^17.7.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "require-directory": { @@ -4428,18 +4286,19 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -4614,13 +4473,19 @@ } }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -4649,6 +4514,14 @@ "terser": "^5.16.8" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, "trim-newlines": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", @@ -4667,21 +4540,35 @@ "dev": true }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==" + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "unicorn-magic": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4761,12 +4648,35 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "y18n": { "version": "5.0.8", @@ -4791,12 +4701,20 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" + }, + "dependencies": { + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } } }, "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true }, "yocto-queue": { "version": "0.1.0", diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 34e17de53..6cd43446a 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta0", + "version": "4.0.0-beta1", "bin": { "pnpbuild": "bin/buildsystem.js" }, @@ -10,7 +10,6 @@ "typings": "./index", "dependencies": { "@pnp/core": "^3.21.0", - "@pnp/logging": "^3.21.0", "globby": "^14.0.0", "liftoff": "^4.0.0", "replace-in-file": "^7.0.2", diff --git a/tools/buildsystem/src/behaviors/build.ts b/tools/buildsystem/src/behaviors/build.ts index b9f262725..5e817d402 100644 --- a/tools/buildsystem/src/behaviors/build.ts +++ b/tools/buildsystem/src/behaviors/build.ts @@ -5,7 +5,13 @@ import { BuildTimeline } from "src/build-timeline"; const tscPath = resolve("./node_modules/.bin/tsc"); -export default function Build(): TimelinePipe { +/** + * Executes a tsc build based on the current context target + * @returns + */ +export function Build(flags?: string[]): TimelinePipe { + + const stringFlags = flags?.join(" ") || ""; return (instance: BuildTimeline) => { @@ -17,7 +23,7 @@ export default function Build(): TimelinePipe { return new Promise((res, reject) => { - exec(`${tscPath} -b ${tsconfigPath}`, (error, stdout, _stderr) => { + exec(`${tscPath} -b ${tsconfigPath} ${stringFlags}`, (error, stdout, _stderr) => { if (error === null) { this.log(`Completing Build for target "${tsconfigPath}"`, 1); diff --git a/tools/buildsystem/src/behaviors/copy-asset-files.ts b/tools/buildsystem/src/behaviors/copy-asset-files.ts index dd71915e1..c7835df01 100644 --- a/tools/buildsystem/src/behaviors/copy-asset-files.ts +++ b/tools/buildsystem/src/behaviors/copy-asset-files.ts @@ -9,7 +9,7 @@ import buildCopyFile from "../lib/copy-file.js"; * @param pattern glob patterns for files (see https://www.npmjs.com/package/globby) * @returns */ -export default function CopyAssetFiles(path: string, pattern: string[]): TimelinePipe { +export function CopyAssetFiles(path: string, pattern: string[]): TimelinePipe { const stringPattern = JSON.stringify(pattern); @@ -43,7 +43,7 @@ export default function CopyAssetFiles(path: string, pattern: string[]): Timelin await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); - this.log(`Completing CopyAssetFiles.`); + this.log(`Completed CopyAssetFiles.`); }); } diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index fcbd3f06d..acf4c3488 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -9,7 +9,7 @@ import buildCopyFile from "../lib/copy-file.js"; * @param pattern glob patterns for files (see https://www.npmjs.com/package/globby) * @returns */ -export default function CopyPackageFiles(source: "src" | "built", pattern: string[]): TimelinePipe { +export function CopyPackageFiles(source: "src" | "built", pattern: string[]): TimelinePipe { const stringPattern = JSON.stringify(pattern); diff --git a/tools/buildsystem/src/behaviors/publish-nightly.ts b/tools/buildsystem/src/behaviors/publish-nightly.ts index d97faf642..16cbefc4b 100644 --- a/tools/buildsystem/src/behaviors/publish-nightly.ts +++ b/tools/buildsystem/src/behaviors/publish-nightly.ts @@ -1,11 +1,18 @@ import { TimelinePipe } from "@pnp/core"; import { BuildTimeline } from "src/build-timeline"; -import Publish from "./publish.js"; +import { Publish } from "./publish.js"; import { resolve } from "path"; import importJSON from "../lib/import-json.js"; import buildWriteFile from "src/lib/write-file.js"; -export default function PublishNightly(flags: string[], nightlyName: "v3nightly" | "v4nightly"): TimelinePipe { +/** + * Does a nightly publish after setting the nightly version and updating deps + * + * @param flags Flags supplied to tsc (--tag is automatically applied) + * @param nightlyName Tag and version string used to identify this build + * @returns + */ +export function PublishNightly(flags: string[], nightlyName: "v3nightly" | "v4nightly"): TimelinePipe { flags.push("--tag", nightlyName); @@ -17,15 +24,24 @@ export default function PublishNightly(flags: string[], nightlyName: "v3nightly" const { target } = this.context; const date = new Date(); - const version = `-${nightlyName}.${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, "0")}${date.getDate().toString().padStart(2, "0")}`; + const versionStr = `-${nightlyName}.${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, "0")}${date.getDate().toString().padStart(2, "0")}`; - this.log(`Updating nightly package.json version to ${version}`); + this.log(`Updating nightly package.json version to ${versionStr}`); await Promise.all(target.packages.map(pkg => { const packageJsonPath = resolve(pkg.resolvedPkgDistRoot, "package.json"); const packageJson = importJSON(packageJsonPath); - packageJson.version = version; + packageJson.version += versionStr; + + if (packageJson.dependencies) { + const keys = Object.getOwnPropertyNames(packageJson.dependencies); + for (let i = 0; i < keys.length; i++) { + if (keys[i].startsWith("@pnp")) { + packageJson.dependencies[keys[i]] += versionStr; + } + } + } return buildWriteFile(packageJsonPath, JSON.stringify(packageJson, null, 4)) })); diff --git a/tools/buildsystem/src/behaviors/publish.ts b/tools/buildsystem/src/behaviors/publish.ts index ae138dc28..feb5d2570 100644 --- a/tools/buildsystem/src/behaviors/publish.ts +++ b/tools/buildsystem/src/behaviors/publish.ts @@ -1,8 +1,8 @@ import { TimelinePipe } from "@pnp/core"; import { BuildTimeline } from "src/build-timeline"; -// import { exec } from "child_process"; +import { exec } from "child_process"; -export default function Publish(flags?: string[]): TimelinePipe { +export function Publish(flags?: string[]): TimelinePipe { const stringFlags = flags?.join(" ") || ""; @@ -16,26 +16,23 @@ export default function Publish(flags?: string[]): TimelinePipe { target.packages.forEach(pkg => { - promises.push(new Promise((resolve, _reject) => { + promises.push(new Promise((resolve, reject) => { this.log(`Publishing ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`); - this.log("Would publish here."); - resolve(); - - // exec(`npm publish --access public --provenance ${stringFlags}`, - // { - // cwd: pkg.resolvedPkgDistRoot, - // }, (error, _stdout, _stderr) => { - - // if (error === null) { - // this.log(`Published ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`); - // resolve(); - // } else { - // this.log(`${error}`, 3); - // reject(error); - // } - // }); + exec(`npm publish ${stringFlags}`, + { + cwd: pkg.resolvedPkgDistRoot, + }, (error, _stdout, _stderr) => { + + if (error === null) { + this.log(`Published ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`); + resolve(); + } else { + this.log(`${error}`, 3); + reject(error); + } + }); })); }); diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index 2f9265db8..3c1018b1d 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -3,7 +3,7 @@ import { resolve } from "path"; import { BuildTimeline } from "src/build-timeline"; import replace from "replace-in-file"; -export default function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/ig): TimelinePipe { +export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/ig): TimelinePipe { return (instance: BuildTimeline) => { diff --git a/tools/buildsystem/src/behaviors/webpack.ts b/tools/buildsystem/src/behaviors/webpack.ts index 1cd6a2ba2..b4c809db2 100644 --- a/tools/buildsystem/src/behaviors/webpack.ts +++ b/tools/buildsystem/src/behaviors/webpack.ts @@ -2,7 +2,7 @@ import { TimelinePipe } from "@pnp/core"; import { BuildTimeline } from "src/build-timeline"; import * as wp from "webpack"; -export default function Webpack(config: wp.Configuration): TimelinePipe { +export function Webpack(config: wp.Configuration): TimelinePipe { return (instance: BuildTimeline) => { @@ -13,14 +13,14 @@ export default function Webpack(config: wp.Configuration): TimelinePipe { wp(config, (err, stats) => { if (err || stats.hasErrors()) { - console.error("Webpack exited with errors"); - console.error(stats.toString()); + this.log("Webpack exited with errors", 3); + this.log(stats.toString(), 3); return reject(err); } if (stats.hasWarnings()) { - console.warn("Webpack exited with warnings"); - console.warn(stats.toString()); + this.log("Webpack exited with warnings", 2); + this.log(stats.toString(), 2); } resolve(); diff --git a/tools/buildsystem/src/behaviors/write-packagejson.ts b/tools/buildsystem/src/behaviors/write-packagejson.ts index 159a9a01c..4e81d235d 100644 --- a/tools/buildsystem/src/behaviors/write-packagejson.ts +++ b/tools/buildsystem/src/behaviors/write-packagejson.ts @@ -4,7 +4,7 @@ import { BuildTimeline } from "../build-timeline.js"; import importJSON from "../lib/import-json.js"; import buildWriteFile from "../lib/write-file.js"; -export default function WritePackageJSON(transform?: (p: any) => typeof p): TimelinePipe { +export function WritePackageJSON(transform?: (p: any) => typeof p): TimelinePipe { return (instance: BuildTimeline) => { diff --git a/tools/buildsystem/src/build-timeline.ts b/tools/buildsystem/src/build-timeline.ts index e41d874fa..3d53cb886 100644 --- a/tools/buildsystem/src/build-timeline.ts +++ b/tools/buildsystem/src/build-timeline.ts @@ -11,7 +11,7 @@ export function asyncReduceVoid>(): (observers: }; } -const BuildMoments = { +export const BuildMoments = { preBuild: asyncReduceVoid(), build: asyncReduceVoid(), postBuild: asyncReduceVoid(), diff --git a/tools/buildsystem/src/types.ts b/tools/buildsystem/src/types.ts index 8cfd377d3..754beeb23 100644 --- a/tools/buildsystem/src/types.ts +++ b/tools/buildsystem/src/types.ts @@ -1,7 +1,20 @@ +import { TimelinePipe } from "@pnp/core"; +import { BuildObserver } from "./build-timeline.js"; + export interface BuildSchema { name: string; distFolder: string; targets: string[]; + behaviors?: TimelinePipe[]; + preBuild?: BuildObserver[]; + build?: BuildObserver[]; + postBuild?: BuildObserver[]; + prePackage?: BuildObserver[]; + package?: BuildObserver[]; + postPackage?: BuildObserver[]; + prePublish?: BuildObserver[]; + publish?: BuildObserver[]; + postPublish?: BuildObserver[]; } export interface TSConfig { From c87eb0cc5b3b6a0c7a7f668a94322628c24c8022 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 11:37:16 -0500 Subject: [PATCH 042/171] Update package.json --- tools/buildsystem/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 34e17de53..bc68430e2 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta0", + "version": "4.0.0-beta1", "bin": { "pnpbuild": "bin/buildsystem.js" }, From 4cabfeb32aa23fd92f4ff96984e14220264c9ff1 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 11:40:25 -0500 Subject: [PATCH 043/171] buildsystem stuff --- buildsystem-config.old.ts | 146 ++ buildsystem-config.ts | 240 +- buildsystem-config2.js | 115 - buildsystem-config2.ts | 154 -- package-lock.json | 4601 +++++-------------------------------- package.json | 2 +- tsconfig.buildsystem.json | 3 +- 7 files changed, 788 insertions(+), 4473 deletions(-) create mode 100644 buildsystem-config.old.ts delete mode 100644 buildsystem-config2.js delete mode 100644 buildsystem-config2.ts diff --git a/buildsystem-config.old.ts b/buildsystem-config.old.ts new file mode 100644 index 000000000..b8aa40cbc --- /dev/null +++ b/buildsystem-config.old.ts @@ -0,0 +1,146 @@ +import { resolve } from "path"; +import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; + +export default [ + { + + name: "build", + + role: "build", + + packageRoot: resolve("./packages/"), + + preBuildTasks: [], + + // these tsconfig files will all be transpiled per the settings in the file + buildTargets: [ + resolve("./packages/tsconfig.json"), + ], + + postBuildTasks: [ + // this task replaces the $$Version$$ with the version from the root package.json at build time + Tasks.Build.createReplaceVersion([ + "sp/behaviors/telemetry.js", + "graph/behaviors/telemetry.js", + ]), + ], + }, + { + + name: "package", + + role: "package", + + prePackageTasks: [], + + packageTargets: [ + { + outDir: resolve("./dist/packages"), + target: resolve("./packages/tsconfig.json"), + tasks: [ + Tasks.Package.createCopyTargetFiles(), + Tasks.Package.copyStaticAssets, + Tasks.Package.createCopyPackageScripts(), + Tasks.Package.createWritePackageFiles((p) => { + return Object.assign({}, p, { + funding: { + type: "individual", + url: "https://github.com/sponsors/patrick-rodgers/", + }, + type: "module", + engines: { + node: ">=14.15.1" + }, + author: { + name: "Microsoft and other contributors" + }, + license: "MIT", + bugs: { + url: "https://github.com/pnp/pnpjs/issues" + }, + homepage: "https://github.com/pnp/pnpjs", + repository: { + type: "git", + url: "git:github.com/pnp/pnpjs" + } + }); + }), + ], + }, + ], + + postPackageTasks: [], + }, + { + + name: "publish", + + role: "publish", + + packageRoots: [ + resolve("./dist/packages"), + ], + + prePublishTasks: [], + + publishTasks: [Tasks.Publish.publishPackage], + + postPublishTasks: [], + }, + { + + name: "build-debug", + + role: "build", + + packageRoot: resolve("./debug/"), + + exclude: [], + + preBuildTasks: [], + + buildTargets: [ + resolve("./debug/launch/tsconfig.json"), + ], + + postBuildTasks: [ + + Tasks.Build.createReplaceVersion([ + "packages/sp/behaviors/telemetry.js", + "packages/graph/behaviors/telemetry.js", + ]), + ], + }, + { + + name: "publish-beta", + + role: "publish", + + packageRoots: [ + resolve("./dist/packages"), + ], + + prePublishTasks: [], + + publishTasks: [Tasks.Publish.publishBetaPackage], + + postPublishTasks: [], + }, + { + + name: "publish-v3nightly", + + role: "publish", + + packageRoots: [ + resolve("./dist/packages"), + ], + + prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], + + publishTasks: [Tasks.Publish.publishV3Nightly], + + postPublishTasks: [], + }, +]; diff --git a/buildsystem-config.ts b/buildsystem-config.ts index b8aa40cbc..8f8c53879 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -1,146 +1,156 @@ import { resolve } from "path"; -import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; - -export default [ - { - - name: "build", +import * as s from "@pnp/buildsystem"; +// import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; + + +export default [{ + name: "build", + distFolder: "./dist/packages", + targets: [ + resolve("./packages/tsconfig.json"), + ] +}]; + +// export default [ +// { + +// name: "build", + +// role: "build", + +// packageRoot: resolve("./packages/"), + +// preBuildTasks: [], + +// // these tsconfig files will all be transpiled per the settings in the file +// buildTargets: [ +// resolve("./packages/tsconfig.json"), +// ], + +// postBuildTasks: [ +// // this task replaces the $$Version$$ with the version from the root package.json at build time +// Tasks.Build.createReplaceVersion([ +// "sp/behaviors/telemetry.js", +// "graph/behaviors/telemetry.js", +// ]), +// ], +// }, +// { - role: "build", - - packageRoot: resolve("./packages/"), - - preBuildTasks: [], - - // these tsconfig files will all be transpiled per the settings in the file - buildTargets: [ - resolve("./packages/tsconfig.json"), - ], +// name: "package", - postBuildTasks: [ - // this task replaces the $$Version$$ with the version from the root package.json at build time - Tasks.Build.createReplaceVersion([ - "sp/behaviors/telemetry.js", - "graph/behaviors/telemetry.js", - ]), - ], - }, - { +// role: "package", - name: "package", +// prePackageTasks: [], - role: "package", +// packageTargets: [ +// { +// outDir: resolve("./dist/packages"), +// target: resolve("./packages/tsconfig.json"), +// tasks: [ +// Tasks.Package.createCopyTargetFiles(), +// Tasks.Package.copyStaticAssets, +// Tasks.Package.createCopyPackageScripts(), +// Tasks.Package.createWritePackageFiles((p) => { +// return Object.assign({}, p, { +// funding: { +// type: "individual", +// url: "https://github.com/sponsors/patrick-rodgers/", +// }, +// type: "module", +// engines: { +// node: ">=14.15.1" +// }, +// author: { +// name: "Microsoft and other contributors" +// }, +// license: "MIT", +// bugs: { +// url: "https://github.com/pnp/pnpjs/issues" +// }, +// homepage: "https://github.com/pnp/pnpjs", +// repository: { +// type: "git", +// url: "git:github.com/pnp/pnpjs" +// } +// }); +// }), +// ], +// }, +// ], - prePackageTasks: [], +// postPackageTasks: [], +// }, +// { - packageTargets: [ - { - outDir: resolve("./dist/packages"), - target: resolve("./packages/tsconfig.json"), - tasks: [ - Tasks.Package.createCopyTargetFiles(), - Tasks.Package.copyStaticAssets, - Tasks.Package.createCopyPackageScripts(), - Tasks.Package.createWritePackageFiles((p) => { - return Object.assign({}, p, { - funding: { - type: "individual", - url: "https://github.com/sponsors/patrick-rodgers/", - }, - type: "module", - engines: { - node: ">=14.15.1" - }, - author: { - name: "Microsoft and other contributors" - }, - license: "MIT", - bugs: { - url: "https://github.com/pnp/pnpjs/issues" - }, - homepage: "https://github.com/pnp/pnpjs", - repository: { - type: "git", - url: "git:github.com/pnp/pnpjs" - } - }); - }), - ], - }, - ], +// name: "publish", - postPackageTasks: [], - }, - { +// role: "publish", - name: "publish", +// packageRoots: [ +// resolve("./dist/packages"), +// ], - role: "publish", +// prePublishTasks: [], - packageRoots: [ - resolve("./dist/packages"), - ], +// publishTasks: [Tasks.Publish.publishPackage], - prePublishTasks: [], +// postPublishTasks: [], +// }, +// { - publishTasks: [Tasks.Publish.publishPackage], +// name: "build-debug", - postPublishTasks: [], - }, - { +// role: "build", - name: "build-debug", +// packageRoot: resolve("./debug/"), - role: "build", +// exclude: [], - packageRoot: resolve("./debug/"), +// preBuildTasks: [], - exclude: [], +// buildTargets: [ +// resolve("./debug/launch/tsconfig.json"), +// ], - preBuildTasks: [], +// postBuildTasks: [ - buildTargets: [ - resolve("./debug/launch/tsconfig.json"), - ], +// Tasks.Build.createReplaceVersion([ +// "packages/sp/behaviors/telemetry.js", +// "packages/graph/behaviors/telemetry.js", +// ]), +// ], +// }, +// { + +// name: "publish-beta", - postBuildTasks: [ +// role: "publish", - Tasks.Build.createReplaceVersion([ - "packages/sp/behaviors/telemetry.js", - "packages/graph/behaviors/telemetry.js", - ]), - ], - }, - { - - name: "publish-beta", +// packageRoots: [ +// resolve("./dist/packages"), +// ], - role: "publish", +// prePublishTasks: [], - packageRoots: [ - resolve("./dist/packages"), - ], +// publishTasks: [Tasks.Publish.publishBetaPackage], - prePublishTasks: [], +// postPublishTasks: [], +// }, +// { - publishTasks: [Tasks.Publish.publishBetaPackage], +// name: "publish-v3nightly", - postPublishTasks: [], - }, - { +// role: "publish", - name: "publish-v3nightly", +// packageRoots: [ +// resolve("./dist/packages"), +// ], - role: "publish", +// prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], - packageRoots: [ - resolve("./dist/packages"), - ], +// publishTasks: [Tasks.Publish.publishV3Nightly], - prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], - - publishTasks: [Tasks.Publish.publishV3Nightly], - - postPublishTasks: [], - }, -]; +// postPublishTasks: [], +// }, +// ]; diff --git a/buildsystem-config2.js b/buildsystem-config2.js deleted file mode 100644 index 1abe50c4c..000000000 --- a/buildsystem-config2.js +++ /dev/null @@ -1,115 +0,0 @@ -import { resolve } from "path"; -// import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; -export default [{ - name: "build", - distFolder: "./dist/packages", - targets: [ - resolve("./packages/tsconfig.json"), - ] - }]; -// export default [ -// { -// name: "build", -// role: "build", -// packageRoot: resolve("./packages/"), -// preBuildTasks: [], -// // these tsconfig files will all be transpiled per the settings in the file -// buildTargets: [ -// resolve("./packages/tsconfig.json"), -// ], -// postBuildTasks: [ -// // this task replaces the $$Version$$ with the version from the root package.json at build time -// Tasks.Build.createReplaceVersion([ -// "sp/behaviors/telemetry.js", -// "graph/behaviors/telemetry.js", -// ]), -// ], -// }, -// { -// name: "package", -// role: "package", -// prePackageTasks: [], -// packageTargets: [ -// { -// outDir: resolve("./dist/packages"), -// target: resolve("./packages/tsconfig.json"), -// tasks: [ -// Tasks.Package.createCopyTargetFiles(), -// Tasks.Package.copyStaticAssets, -// Tasks.Package.createCopyPackageScripts(), -// Tasks.Package.createWritePackageFiles((p) => { -// return Object.assign({}, p, { -// funding: { -// type: "individual", -// url: "https://github.com/sponsors/patrick-rodgers/", -// }, -// type: "module", -// engines: { -// node: ">=14.15.1" -// }, -// author: { -// name: "Microsoft and other contributors" -// }, -// license: "MIT", -// bugs: { -// url: "https://github.com/pnp/pnpjs/issues" -// }, -// homepage: "https://github.com/pnp/pnpjs", -// repository: { -// type: "git", -// url: "git:github.com/pnp/pnpjs" -// } -// }); -// }), -// ], -// }, -// ], -// postPackageTasks: [], -// }, -// { -// name: "publish", -// role: "publish", -// packageRoots: [ -// resolve("./dist/packages"), -// ], -// prePublishTasks: [], -// publishTasks: [Tasks.Publish.publishPackage], -// postPublishTasks: [], -// }, -// { -// name: "build-debug", -// role: "build", -// packageRoot: resolve("./debug/"), -// exclude: [], -// preBuildTasks: [], -// buildTargets: [ -// resolve("./debug/launch/tsconfig.json"), -// ], -// postBuildTasks: [ -// Tasks.Build.createReplaceVersion([ -// "packages/sp/behaviors/telemetry.js", -// "packages/graph/behaviors/telemetry.js", -// ]), -// ], -// }, -// { -// name: "publish-beta", -// role: "publish", -// packageRoots: [ -// resolve("./dist/packages"), -// ], -// prePublishTasks: [], -// publishTasks: [Tasks.Publish.publishBetaPackage], -// postPublishTasks: [], -// }, -// { -// name: "publish-v3nightly", -// role: "publish", -// packageRoots: [ -// resolve("./dist/packages"), -// ], -// prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], -// publishTasks: [Tasks.Publish.publishV3Nightly], -// postPublishTasks: [], -// }, -// ]; diff --git a/buildsystem-config2.ts b/buildsystem-config2.ts deleted file mode 100644 index 1cc8627d2..000000000 --- a/buildsystem-config2.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { resolve } from "path"; -// import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; - -export default [{ - name: "build", - distFolder: "./dist/packages", - targets: [ - resolve("./packages/tsconfig.json"), - ] -}]; - -// export default [ -// { - -// name: "build", - -// role: "build", - -// packageRoot: resolve("./packages/"), - -// preBuildTasks: [], - -// // these tsconfig files will all be transpiled per the settings in the file -// buildTargets: [ -// resolve("./packages/tsconfig.json"), -// ], - -// postBuildTasks: [ -// // this task replaces the $$Version$$ with the version from the root package.json at build time -// Tasks.Build.createReplaceVersion([ -// "sp/behaviors/telemetry.js", -// "graph/behaviors/telemetry.js", -// ]), -// ], -// }, -// { - -// name: "package", - -// role: "package", - -// prePackageTasks: [], - -// packageTargets: [ -// { -// outDir: resolve("./dist/packages"), -// target: resolve("./packages/tsconfig.json"), -// tasks: [ -// Tasks.Package.createCopyTargetFiles(), -// Tasks.Package.copyStaticAssets, -// Tasks.Package.createCopyPackageScripts(), -// Tasks.Package.createWritePackageFiles((p) => { -// return Object.assign({}, p, { -// funding: { -// type: "individual", -// url: "https://github.com/sponsors/patrick-rodgers/", -// }, -// type: "module", -// engines: { -// node: ">=14.15.1" -// }, -// author: { -// name: "Microsoft and other contributors" -// }, -// license: "MIT", -// bugs: { -// url: "https://github.com/pnp/pnpjs/issues" -// }, -// homepage: "https://github.com/pnp/pnpjs", -// repository: { -// type: "git", -// url: "git:github.com/pnp/pnpjs" -// } -// }); -// }), -// ], -// }, -// ], - -// postPackageTasks: [], -// }, -// { - -// name: "publish", - -// role: "publish", - -// packageRoots: [ -// resolve("./dist/packages"), -// ], - -// prePublishTasks: [], - -// publishTasks: [Tasks.Publish.publishPackage], - -// postPublishTasks: [], -// }, -// { - -// name: "build-debug", - -// role: "build", - -// packageRoot: resolve("./debug/"), - -// exclude: [], - -// preBuildTasks: [], - -// buildTargets: [ -// resolve("./debug/launch/tsconfig.json"), -// ], - -// postBuildTasks: [ - -// Tasks.Build.createReplaceVersion([ -// "packages/sp/behaviors/telemetry.js", -// "packages/graph/behaviors/telemetry.js", -// ]), -// ], -// }, -// { - -// name: "publish-beta", - -// role: "publish", - -// packageRoots: [ -// resolve("./dist/packages"), -// ], - -// prePublishTasks: [], - -// publishTasks: [Tasks.Publish.publishBetaPackage], - -// postPublishTasks: [], -// }, -// { - -// name: "publish-v3nightly", - -// role: "publish", - -// packageRoots: [ -// resolve("./dist/packages"), -// ], - -// prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], - -// publishTasks: [Tasks.Publish.publishV3Nightly], - -// postPublishTasks: [], -// }, -// ]; diff --git a/package-lock.json b/package-lock.json index 0dbd29cfb..99542f70d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "3.1.0", + "@pnp/buildsystem": "4.0.0-beta0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", @@ -599,25 +599,173 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-3.1.0.tgz", - "integrity": "sha512-FZ5gk/ZjmKZib78+97QheIDKUxoLxlBHaMsUtABWZNjLWHQ65ZW/mCUIX0OGNzIbjXh7OT+QMgTsnou0ApoMJQ==", + "version": "4.0.0-beta0", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta0.tgz", + "integrity": "sha512-Bdf6/X7cJ4Mpe7LlAGtuLg3Y2HLryPtKS2tjc9sPFScQ0/8S6nx+pU0XvHiwzbFjN1UC4EvJhEVYGvyS0Tg43Q==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1", - "fancy-log": "^1.3.3", - "gulp": "^4.0.2", + "@pnp/core": "^3.21.0", + "@pnp/logging": "^3.21.0", + "globby": "^14.0.0", "liftoff": "^4.0.0", - "mkdirp": "^1.0.4", - "pump": "^3.0.0", - "replace-in-file": "^6.3.2", - "through2": "^4.0.2", - "webpack": "^5.65.0", - "yargs": "^17.3.0" + "replace-in-file": "^7.0.2", + "webpack": "^5.89.0", + "yargs": "^17.7.2" }, "bin": { "pnpbuild": "bin/buildsystem.js" }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" + } + }, + "node_modules/@pnp/buildsystem/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@pnp/buildsystem/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@pnp/buildsystem/node_modules/globby": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", + "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^1.0.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pnp/buildsystem/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pnp/buildsystem/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pnp/buildsystem/node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@pnp/core": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.21.0.tgz", + "integrity": "sha512-4R+MGo7aitBPUQ4eapLbsiZwPFrMnFZ/6OB4lvXQrtl2IAdZC922gR+bB05O00iEplOcUW9EZJlitLfzTdNuTg==", + "dev": true, + "dependencies": { + "tslib": "2.4.1" + }, + "engines": { + "node": ">=14.15.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" + } + }, + "node_modules/@pnp/core/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@pnp/logging": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", + "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", + "dev": true, + "dependencies": { + "tslib": "2.4.1" + }, "engines": { "node": ">=14.15.1" }, @@ -626,6 +774,24 @@ "url": "https://github.com/sponsors/patrick-rodgers/" } }, + "node_modules/@pnp/logging/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", + "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -1524,27 +1690,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -1581,15 +1726,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1603,81 +1739,12 @@ "node": ">= 8" } }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", @@ -1693,49 +1760,6 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", @@ -1745,20 +1769,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1768,15 +1778,6 @@ "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1795,15 +1796,6 @@ "node": "*" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/async-done": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", @@ -1819,67 +1811,11 @@ "node": ">= 0.10" } }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", - "dev": true, - "dependencies": { - "async-done": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", - "dev": true, - "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/balanced-match": { "version": "1.0.2", @@ -1887,83 +1823,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -1988,16 +1847,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -2118,18 +1967,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "dev": true, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -2151,26 +1988,6 @@ "node": ">= 0.8" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -2349,21 +2166,6 @@ "node": ">=6.0" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", @@ -2405,24 +2207,6 @@ "node": ">=12" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -2458,59 +2242,6 @@ "node": ">=0.10.0" } }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2529,15 +2260,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -2571,12 +2293,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -2634,21 +2350,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", @@ -2679,12 +2380,6 @@ "node": ">= 0.6" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -2700,25 +2395,6 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "dependencies": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -2739,16 +2415,6 @@ "node": ">= 8" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -2821,15 +2487,6 @@ "node": ">=0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -2848,18 +2505,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "dependencies": { - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -2872,29 +2517,6 @@ "node": ">= 10" } }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -2904,35 +2526,6 @@ "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/del/-/del-7.1.0.tgz", @@ -3088,40 +2681,6 @@ "node": ">=6.0.0" } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } - }, - "node_modules/each-props/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3216,54 +2775,6 @@ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3500,39 +3011,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -3608,132 +3086,12 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3741,9 +3099,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3833,13 +3191,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3970,16 +3321,6 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, "node_modules/follow-redirects": { "version": "1.15.3", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", @@ -4056,18 +3397,6 @@ "node": ">= 0.6" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -4077,29 +3406,6 @@ "node": ">= 0.6" } }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs-mkdirp-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "node_modules/fs-monkey": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", @@ -4177,15 +3483,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -4218,1100 +3515,109 @@ "node": ">= 6" } }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "isexe": "^2.0.0" }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "bin": { + "which": "bin/which" } }, - "node_modules/glob-watcher/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/globals": { + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "node_modules/globby/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, "engines": { - "node": ">= 4.0" + "node": ">=8" } }, - "node_modules/glob-watcher/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/glob-watcher/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/gulp-cli/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli/node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli/node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/gulp-cli/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/gulp-cli/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/gulp-cli/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/gulp-cli/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/gulp-cli/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-cli/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/gulp-cli/node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - }, - "node_modules/gulp-cli/node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - }, - "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", - "dev": true, - "dependencies": { - "glogg": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/handle-thing": { "version": "2.0.1", @@ -5349,18 +3655,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -5385,69 +3679,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -5722,24 +3953,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", @@ -5762,102 +3975,34 @@ "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "has": "^1.0.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-docker": { @@ -5875,15 +4020,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5914,15 +4050,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6022,21 +4149,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -6205,12 +4317,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -6241,28 +4347,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", - "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/launch-editor": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", @@ -6273,42 +4357,6 @@ "shell-quote": "^1.7.3" } }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6347,34 +4395,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -6432,304 +4452,85 @@ "dev": true }, "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/make-iterator/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true }, - "node_modules/matchdep/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true }, - "node_modules/matchdep/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true }, - "node_modules/matchdep/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, - "node_modules/matchdep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matchdep/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "get-func-name": "^2.0.0" } }, - "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/matchdep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/kind-of": { + "node_modules/make-iterator/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", @@ -6738,54 +4539,25 @@ "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "node": ">=8" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/media-typer": { @@ -6991,55 +4763,6 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", @@ -7175,182 +4898,47 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/msal": { - "version": "1.4.18", - "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.18.tgz", - "integrity": "sha512-QyWMWrZqpwtK6LEqhwtbikxIWqA1EOcdMvDeIDjIXdGU29wM4orwq538sPe1+JfKDIgPmJj1Fgi5B7luaw/IyA==", - "dev": true, - "dependencies": { - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/msal": { + "version": "1.4.18", + "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.18.tgz", + "integrity": "sha512-QyWMWrZqpwtK6LEqhwtbikxIWqA1EOcdMvDeIDjIXdGU29wM4orwq538sPe1+JfKDIgPmJj1Fgi5B7luaw/IyA==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "tslib": "^1.9.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/nanomatch/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/msal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { @@ -7374,12 +4962,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -7456,18 +5038,6 @@ "node": ">=0.10.0" } }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -7480,41 +5050,6 @@ "node": ">=8" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -7524,45 +5059,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", @@ -7603,19 +5099,6 @@ "node": ">=0.10.0" } }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -7701,27 +5184,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -7833,15 +5295,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -7860,21 +5313,6 @@ "node": ">= 0.8" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7971,36 +5409,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -8065,15 +5473,6 @@ "node": ">=8" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -8083,15 +5482,6 @@ "node": ">= 0.8.0" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/prettyjson": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", @@ -8133,37 +5523,6 @@ "node": ">= 0.10" } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -8382,152 +5741,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "node_modules/replace-in-file": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.0.2.tgz", + "integrity": "sha512-tPG+Qmqf+x2Rf1WVdb/9B5tFIf6KJ5hs3fgxh1OTzPRUugPPvyAva7NvCJtnSpmyq6r+ABYcuUOqZkm6yzGSUw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" + "chalk": "^4.1.2", + "glob": "^8.1.0", + "yargs": "^17.7.2" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" + "bin": { + "replace-in-file": "bin/cli.js" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-bom-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" + "node": ">=10" } }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "node_modules/replace-in-file/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", + "node_modules/replace-in-file/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">= 0.10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/replace-in-file": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", - "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==", + "node_modules/replace-in-file/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "chalk": "^4.1.2", - "glob": "^7.2.0", - "yargs": "^17.2.1" - }, - "bin": { - "replace-in-file": "bin/cli.js" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" @@ -8551,12 +5816,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -8623,34 +5882,6 @@ "node": ">=4" } }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dev": true, - "dependencies": { - "value-or-function": "^3.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -8728,15 +5959,6 @@ } ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8794,18 +6016,6 @@ "node": ">=10" } }, - "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", - "dev": true, - "dependencies": { - "sver-compat": "^1.5.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -8953,39 +6163,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -9075,146 +6252,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -9235,20 +6272,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -9259,22 +6282,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -9297,129 +6304,58 @@ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", - "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/split-string/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/spdx-license-ids": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, "node_modules/statuses": { @@ -9447,12 +6383,6 @@ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", "dev": true }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -9507,18 +6437,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -9551,359 +6469,126 @@ "engines": { "node": ">=8" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", - "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz", - "integrity": "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/through2-filter/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/to-regex/node_modules/is-accessor-descriptor": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/to-regex/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/to-regex/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/terser": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz", + "integrity": "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/to-regex/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "randombytes": "^2.1.0" } }, - "node_modules/to-regex/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "through2": "^2.0.3" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/to-through/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "node": ">=8.0" } }, "node_modules/toidentifier": { @@ -9945,12 +6630,6 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9997,12 +6676,6 @@ "node": ">= 0.6" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, "node_modules/typescript": { "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", @@ -10025,65 +6698,16 @@ "node": ">=0.10.0" } }, - "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker/node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "node": ">=18" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/unpipe": { @@ -10095,64 +6719,6 @@ "node": ">= 0.8" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -10192,22 +6758,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -10232,18 +6782,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -10254,15 +6792,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -10272,91 +6801,6 @@ "node": ">= 0.8" } }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -10768,12 +7212,6 @@ "node": ">= 8" } }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -10830,15 +7268,6 @@ } } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 373250d38..7232724f9 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "3.1.0", + "@pnp/buildsystem": "4.0.0-beta0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", diff --git a/tsconfig.buildsystem.json b/tsconfig.buildsystem.json index 04ef29630..3fc021c70 100644 --- a/tsconfig.buildsystem.json +++ b/tsconfig.buildsystem.json @@ -11,8 +11,7 @@ "allowSyntheticDefaultImports": true }, "include": [ - "buildsystem-config.ts", - "buildsystem-config2.ts" + "buildsystem-config.ts" ], "exclude": [] } \ No newline at end of file From 651056e0be7ea4284c3197bcb936eec0baecc520 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 11:47:40 -0500 Subject: [PATCH 044/171] build system :) --- buildsystem-config.ts | 4 ++-- package-lock.json | 8 ++++---- package.json | 2 +- tools/buildsystem/package.json | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 8f8c53879..6607d53f1 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -1,9 +1,9 @@ import { resolve } from "path"; -import * as s from "@pnp/buildsystem"; +import { BuildSchema } from "@pnp/buildsystem"; // import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; -export default [{ +export default [{ name: "build", distFolder: "./dist/packages", targets: [ diff --git a/package-lock.json b/package-lock.json index 99542f70d..c898426e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "4.0.0-beta0", + "@pnp/buildsystem": "^4.0.0-beta1", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", @@ -599,9 +599,9 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta0", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta0.tgz", - "integrity": "sha512-Bdf6/X7cJ4Mpe7LlAGtuLg3Y2HLryPtKS2tjc9sPFScQ0/8S6nx+pU0XvHiwzbFjN1UC4EvJhEVYGvyS0Tg43Q==", + "version": "4.0.0-beta1", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta1.tgz", + "integrity": "sha512-Ve8vqiaEl+qAte6EFNZ3dPjh8VqhIg/LF/dvJ0oJ5sxq6onhSrsow3DqhbymUfsqKkGa0KGF5EfAHWur+/YGAw==", "dev": true, "dependencies": { "@pnp/core": "^3.21.0", diff --git a/package.json b/package.json index 7232724f9..4c73b16cb 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "4.0.0-beta0", + "@pnp/buildsystem": "^4.0.0-beta2", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 6cd43446a..16592fde2 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta1", + "version": "4.0.0-beta2", "bin": { "pnpbuild": "bin/buildsystem.js" }, From 2c1b7ed503785b2a9f9a27c3a3f62d6f3d5f6b63 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 12:00:36 -0500 Subject: [PATCH 045/171] build system --- buildsystem-config.ts | 21 +++++++++++-- package-lock.json | 31 +++---------------- tools/buildsystem/package.json | 2 +- tools/buildsystem/src/behaviors/build.ts | 2 ++ .../src/behaviors/copy-asset-files.ts | 4 +-- .../src/behaviors/copy-package-files.ts | 2 ++ .../src/behaviors/publish-nightly.ts | 4 ++- tools/buildsystem/src/behaviors/publish.ts | 2 ++ .../src/behaviors/replace-version.ts | 2 ++ tools/buildsystem/src/behaviors/webpack.ts | 2 ++ .../src/behaviors/write-packagejson.ts | 2 ++ 11 files changed, 41 insertions(+), 33 deletions(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 6607d53f1..de70280c2 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -1,14 +1,31 @@ import { resolve } from "path"; -import { BuildSchema } from "@pnp/buildsystem"; +import { + BuildSchema, + BuildTimeline, + Build, + ReplaceVersion, + } from "@pnp/buildsystem"; // import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; +export function PnPBuild(): (b: BuildTimeline) => BuildTimeline { + + return (instance: BuildTimeline) => { + + Build()(instance); + ReplaceVersion(["sp/behaviors/telemetry.js", "graph/behaviors/telemetry.js"])(instance); + + return instance; + } +} + export default [{ name: "build", distFolder: "./dist/packages", targets: [ resolve("./packages/tsconfig.json"), - ] + ], + behaviors: [PnPBuild()] }]; // export default [ diff --git a/package-lock.json b/package-lock.json index c898426e9..03f4103f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta1", + "@pnp/buildsystem": "^4.0.0-beta2", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", @@ -599,13 +599,12 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta1", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta1.tgz", - "integrity": "sha512-Ve8vqiaEl+qAte6EFNZ3dPjh8VqhIg/LF/dvJ0oJ5sxq6onhSrsow3DqhbymUfsqKkGa0KGF5EfAHWur+/YGAw==", + "version": "4.0.0-beta2", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta2.tgz", + "integrity": "sha512-nLds0p8l/HMqpsAIiymdyMUpT1xrRxBGDUKcgGJRLcpYmLdLkCHHfkEvTsQlyyDdeFd1KV1iYaJQ3HToZ2bnQg==", "dev": true, "dependencies": { "@pnp/core": "^3.21.0", - "@pnp/logging": "^3.21.0", "globby": "^14.0.0", "liftoff": "^4.0.0", "replace-in-file": "^7.0.2", @@ -758,28 +757,6 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, - "node_modules/@pnp/logging": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", - "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", - "dev": true, - "dependencies": { - "tslib": "2.4.1" - }, - "engines": { - "node": ">=14.15.1" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/patrick-rodgers/" - } - }, - "node_modules/@pnp/logging/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "dev": true - }, "node_modules/@sindresorhus/merge-streams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 16592fde2..b3cb7cb69 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta2", + "version": "4.0.0-beta3", "bin": { "pnpbuild": "bin/buildsystem.js" }, diff --git a/tools/buildsystem/src/behaviors/build.ts b/tools/buildsystem/src/behaviors/build.ts index 5e817d402..d93bd0186 100644 --- a/tools/buildsystem/src/behaviors/build.ts +++ b/tools/buildsystem/src/behaviors/build.ts @@ -35,5 +35,7 @@ export function Build(flags?: string[]): TimelinePipe { }); }); }); + + return instance; } } diff --git a/tools/buildsystem/src/behaviors/copy-asset-files.ts b/tools/buildsystem/src/behaviors/copy-asset-files.ts index c7835df01..15181e5ee 100644 --- a/tools/buildsystem/src/behaviors/copy-asset-files.ts +++ b/tools/buildsystem/src/behaviors/copy-asset-files.ts @@ -45,7 +45,7 @@ export function CopyAssetFiles(path: string, pattern: string[]): TimelinePipe { this.log(`Completed CopyAssetFiles.`); }); - } - + return instance; + } } \ No newline at end of file diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index acf4c3488..6767e7904 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -45,5 +45,7 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti this.log(`Completing CopyPackageFiles with pattern ${stringPattern} on target '${this.context.target.tsconfigPath}'`); }); + + return instance; } } diff --git a/tools/buildsystem/src/behaviors/publish-nightly.ts b/tools/buildsystem/src/behaviors/publish-nightly.ts index 16cbefc4b..d1eb7cada 100644 --- a/tools/buildsystem/src/behaviors/publish-nightly.ts +++ b/tools/buildsystem/src/behaviors/publish-nightly.ts @@ -3,7 +3,7 @@ import { BuildTimeline } from "src/build-timeline"; import { Publish } from "./publish.js"; import { resolve } from "path"; import importJSON from "../lib/import-json.js"; -import buildWriteFile from "src/lib/write-file.js"; +import buildWriteFile from "../lib/write-file.js"; /** * Does a nightly publish after setting the nightly version and updating deps @@ -49,5 +49,7 @@ export function PublishNightly(flags: string[], nightlyName: "v3nightly" | "v4ni // we want to publish Publish(flags)(instance); + + return instance; } } diff --git a/tools/buildsystem/src/behaviors/publish.ts b/tools/buildsystem/src/behaviors/publish.ts index feb5d2570..089a93f8f 100644 --- a/tools/buildsystem/src/behaviors/publish.ts +++ b/tools/buildsystem/src/behaviors/publish.ts @@ -38,5 +38,7 @@ export function Publish(flags?: string[]): TimelinePipe { await Promise.all(promises); }); + + return instance; } } diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index 3c1018b1d..e8fd4cad0 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -21,5 +21,7 @@ export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/i return (replace)(options); }); + + return instance; } } diff --git a/tools/buildsystem/src/behaviors/webpack.ts b/tools/buildsystem/src/behaviors/webpack.ts index b4c809db2..d1e782b1a 100644 --- a/tools/buildsystem/src/behaviors/webpack.ts +++ b/tools/buildsystem/src/behaviors/webpack.ts @@ -27,5 +27,7 @@ export function Webpack(config: wp.Configuration): TimelinePipe { }); }); }); + + return instance; } } diff --git a/tools/buildsystem/src/behaviors/write-packagejson.ts b/tools/buildsystem/src/behaviors/write-packagejson.ts index 4e81d235d..54fbf115d 100644 --- a/tools/buildsystem/src/behaviors/write-packagejson.ts +++ b/tools/buildsystem/src/behaviors/write-packagejson.ts @@ -42,5 +42,7 @@ export function WritePackageJSON(transform?: (p: any) => typeof p): TimelinePipe await Promise.all(promises); }); + + return instance; } } From a8d7464ef37b732ba8f2dba46e3949eab6af759c Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 12:31:38 -0500 Subject: [PATCH 046/171] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c73b16cb..373250d38 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta2", + "@pnp/buildsystem": "3.1.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", From dee2f5267d1f89ab33f8108933268568292b9d40 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 14:22:56 -0500 Subject: [PATCH 047/171] more build system :) --- .gitignore | 1 - tools/buildsystem/bin/buildsystem.ts | 4 +- tools/buildsystem/package-lock.json | 233 ++---------------- tools/buildsystem/package.json | 3 +- .../src/behaviors/copy-asset-files.ts | 2 +- .../src/behaviors/copy-package-files.ts | 2 +- .../src/behaviors/replace-version.ts | 22 +- tools/buildsystem/tsconfig.json | 3 +- tools/local-module-resolver/esm.ts | 4 +- 9 files changed, 43 insertions(+), 231 deletions(-) diff --git a/.gitignore b/.gitignore index 268f0b5eb..96b9ce18a 100644 --- a/.gitignore +++ b/.gitignore @@ -55,4 +55,3 @@ settings.js # don't save the locally produced .js of the buildsystem config buildsystem-config.js -buildsystem-config2.js diff --git a/tools/buildsystem/bin/buildsystem.ts b/tools/buildsystem/bin/buildsystem.ts index 2cb413644..0503573b5 100644 --- a/tools/buildsystem/bin/buildsystem.ts +++ b/tools/buildsystem/bin/buildsystem.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import Liftoff from "liftoff"; +import * as Liftoff from "liftoff"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; import { dirname, join, resolve } from "path"; @@ -15,7 +15,7 @@ const context: Partial = { resolvedProjectRoot: join(cwd(), "package.json"), }; -const BuildSystem = new Liftoff({ +const BuildSystem = new (Liftoff).default({ configName: "buildsystem-config", name: "buildsystem", }); diff --git a/tools/buildsystem/package-lock.json b/tools/buildsystem/package-lock.json index 8f90fe7c3..54fe8ced9 100644 --- a/tools/buildsystem/package-lock.json +++ b/tools/buildsystem/package-lock.json @@ -1,18 +1,17 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta0", + "version": "4.0.0-beta3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pnp/buildsystem", - "version": "4.0.0-beta0", + "version": "4.0.0-beta3", "license": "MIT", "dependencies": { "@pnp/core": "^3.21.0", "globby": "^14.0.0", "liftoff": "^4.0.0", - "replace-in-file": "^7.0.2", "webpack": "^5.89.0", "yargs": "^17.7.2" }, @@ -505,15 +504,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/braces": { "version": "3.0.2", @@ -1070,7 +1062,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/function-bind": { "version": "1.1.2", @@ -1088,24 +1081,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1261,6 +1236,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1269,7 +1245,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -1652,17 +1629,6 @@ "node": ">=4" } }, - "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", @@ -1743,6 +1709,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -2009,86 +1976,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/replace-in-file": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.0.2.tgz", - "integrity": "sha512-tPG+Qmqf+x2Rf1WVdb/9B5tFIf6KJ5hs3fgxh1OTzPRUugPPvyAva7NvCJtnSpmyq6r+ABYcuUOqZkm6yzGSUw==", - "dependencies": { - "chalk": "^4.1.2", - "glob": "^8.1.0", - "yargs": "^17.7.2" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/replace-in-file/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/replace-in-file/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/replace-in-file/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/replace-in-file/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/replace-in-file/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/replace-in-file/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2703,7 +2590,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", @@ -3164,15 +3052,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "braces": { "version": "3.0.2", @@ -3566,7 +3447,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "function-bind": { "version": "1.1.2", @@ -3578,18 +3460,6 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -3702,6 +3572,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -3710,7 +3581,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -3984,14 +3856,6 @@ "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, "minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", @@ -4057,6 +3921,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } @@ -4225,61 +4090,6 @@ "strip-indent": "^4.0.0" } }, - "replace-in-file": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.0.2.tgz", - "integrity": "sha512-tPG+Qmqf+x2Rf1WVdb/9B5tFIf6KJ5hs3fgxh1OTzPRUugPPvyAva7NvCJtnSpmyq6r+ABYcuUOqZkm6yzGSUw==", - "requires": { - "chalk": "^4.1.2", - "glob": "^8.1.0", - "yargs": "^17.7.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4676,7 +4486,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "y18n": { "version": "5.0.8", diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index b3cb7cb69..49de56bc4 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta3", + "version": "4.0.0-beta4", "bin": { "pnpbuild": "bin/buildsystem.js" }, @@ -12,7 +12,6 @@ "@pnp/core": "^3.21.0", "globby": "^14.0.0", "liftoff": "^4.0.0", - "replace-in-file": "^7.0.2", "webpack": "^5.89.0", "yargs": "^17.7.2" }, diff --git a/tools/buildsystem/src/behaviors/copy-asset-files.ts b/tools/buildsystem/src/behaviors/copy-asset-files.ts index 15181e5ee..071a21482 100644 --- a/tools/buildsystem/src/behaviors/copy-asset-files.ts +++ b/tools/buildsystem/src/behaviors/copy-asset-files.ts @@ -1,6 +1,6 @@ import { TimelinePipe } from "@pnp/core"; import { BuildTimeline } from "../build-timeline.js"; -import globby from "globby"; +import { globby } from "globby"; import { resolve } from "path"; import buildCopyFile from "../lib/copy-file.js"; diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index 6767e7904..492fe7f0f 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -1,6 +1,6 @@ import { TimelinePipe } from "@pnp/core"; import { BuildTimeline } from "../build-timeline.js"; -import globby from "globby"; +import { globby } from "globby"; import { resolve } from "path"; import buildCopyFile from "../lib/copy-file.js"; diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index e8fd4cad0..c958cd1b5 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -1,7 +1,8 @@ import { TimelinePipe } from "@pnp/core"; +import { BuildTimeline } from "../build-timeline.js"; +import { readFile } from "fs/promises"; +import buildWriteFile from "src/lib/write-file.js"; import { resolve } from "path"; -import { BuildTimeline } from "src/build-timeline"; -import replace from "replace-in-file"; export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/ig): TimelinePipe { @@ -13,13 +14,16 @@ export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/i this.log(`Replacing package version for target "${target.tsconfigPath}"`, 1); - const options = { - files: paths.map(p => resolve(target.resolvedOutDir, p)), - from: versionMask, - to: version, - }; - - return (replace)(options); + paths.forEach(async (path) => { + + const file = await readFile(resolve(path)); + + const txt = file.toString(); + + txt.replace(versionMask, version); + + await buildWriteFile(path, txt); + }); }); return instance; diff --git a/tools/buildsystem/tsconfig.json b/tools/buildsystem/tsconfig.json index 8f1826622..a06704fd4 100644 --- a/tools/buildsystem/tsconfig.json +++ b/tools/buildsystem/tsconfig.json @@ -29,8 +29,7 @@ "strictNullChecks": false, "preserveConstEnums": true, "importHelpers": true, - "resolveJsonModule": true, - "allowSyntheticDefaultImports": true + "resolveJsonModule": true }, "include": [ "./index.ts", diff --git a/tools/local-module-resolver/esm.ts b/tools/local-module-resolver/esm.ts index 4e2c3c8ae..2c60f7e49 100644 --- a/tools/local-module-resolver/esm.ts +++ b/tools/local-module-resolver/esm.ts @@ -3,7 +3,7 @@ import { existsSync } from "fs"; import findup from "findup-sync"; // give ourselves a single reference to the projectRoot -const projectRoot = resolve(dirname(findup("package.json"))); +const projectRoot = resolve(dirname(findup("package.json")!)); function log(_message: string) { // console.log(`PnP Node Local Module Loader: ${message}`); @@ -23,7 +23,7 @@ export function createResolve(innerPath: string): ResolverFunc { const modulePath = specifier.substring(4); if (cache.has(modulePath)) { - return cache.get(modulePath); + return cache.get(modulePath)!; } let candidate = join(projectRoot, innerPath, modulePath); From b9b48e46d3863dc676a10ca248e2239dc16d02a6 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 15:50:18 -0500 Subject: [PATCH 048/171] more build system again again --- buildsystem-config.old.ts | 146 ---------- buildsystem-config.ts | 271 ++++++++---------- package-lock.json | 89 ++---- package.json | 12 +- tools/buildsystem/bin/buildsystem.ts | 33 ++- .../src/behaviors/replace-version.ts | 15 +- tsconfig.buildsystem.json | 2 +- 7 files changed, 185 insertions(+), 383 deletions(-) delete mode 100644 buildsystem-config.old.ts diff --git a/buildsystem-config.old.ts b/buildsystem-config.old.ts deleted file mode 100644 index b8aa40cbc..000000000 --- a/buildsystem-config.old.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { resolve } from "path"; -import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; - -export default [ - { - - name: "build", - - role: "build", - - packageRoot: resolve("./packages/"), - - preBuildTasks: [], - - // these tsconfig files will all be transpiled per the settings in the file - buildTargets: [ - resolve("./packages/tsconfig.json"), - ], - - postBuildTasks: [ - // this task replaces the $$Version$$ with the version from the root package.json at build time - Tasks.Build.createReplaceVersion([ - "sp/behaviors/telemetry.js", - "graph/behaviors/telemetry.js", - ]), - ], - }, - { - - name: "package", - - role: "package", - - prePackageTasks: [], - - packageTargets: [ - { - outDir: resolve("./dist/packages"), - target: resolve("./packages/tsconfig.json"), - tasks: [ - Tasks.Package.createCopyTargetFiles(), - Tasks.Package.copyStaticAssets, - Tasks.Package.createCopyPackageScripts(), - Tasks.Package.createWritePackageFiles((p) => { - return Object.assign({}, p, { - funding: { - type: "individual", - url: "https://github.com/sponsors/patrick-rodgers/", - }, - type: "module", - engines: { - node: ">=14.15.1" - }, - author: { - name: "Microsoft and other contributors" - }, - license: "MIT", - bugs: { - url: "https://github.com/pnp/pnpjs/issues" - }, - homepage: "https://github.com/pnp/pnpjs", - repository: { - type: "git", - url: "git:github.com/pnp/pnpjs" - } - }); - }), - ], - }, - ], - - postPackageTasks: [], - }, - { - - name: "publish", - - role: "publish", - - packageRoots: [ - resolve("./dist/packages"), - ], - - prePublishTasks: [], - - publishTasks: [Tasks.Publish.publishPackage], - - postPublishTasks: [], - }, - { - - name: "build-debug", - - role: "build", - - packageRoot: resolve("./debug/"), - - exclude: [], - - preBuildTasks: [], - - buildTargets: [ - resolve("./debug/launch/tsconfig.json"), - ], - - postBuildTasks: [ - - Tasks.Build.createReplaceVersion([ - "packages/sp/behaviors/telemetry.js", - "packages/graph/behaviors/telemetry.js", - ]), - ], - }, - { - - name: "publish-beta", - - role: "publish", - - packageRoots: [ - resolve("./dist/packages"), - ], - - prePublishTasks: [], - - publishTasks: [Tasks.Publish.publishBetaPackage], - - postPublishTasks: [], - }, - { - - name: "publish-v3nightly", - - role: "publish", - - packageRoots: [ - resolve("./dist/packages"), - ], - - prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], - - publishTasks: [Tasks.Publish.publishV3Nightly], - - postPublishTasks: [], - }, -]; diff --git a/buildsystem-config.ts b/buildsystem-config.ts index de70280c2..beaa70695 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -1,13 +1,32 @@ import { resolve } from "path"; -import { +import { BuildSchema, BuildTimeline, Build, ReplaceVersion, - } from "@pnp/buildsystem"; -// import { ConfigCollection, BuildSchema, Tasks, PackageSchema, PublishSchema } from "@pnp/buildsystem"; - -export function PnPBuild(): (b: BuildTimeline) => BuildTimeline { + CopyPackageFiles, + CopyAssetFiles, + WritePackageJSON, + Publish, +} from "@pnp/buildsystem"; +import { + Logger, + ConsoleListener, + LogLevel, + PnPLogging, +} from "@pnp/logging"; + +Logger.subscribe(ConsoleListener("", { + color: "skyblue", + error: "red", + verbose: "lightslategray", + warning: "yellow", +})); + +const logLevel = LogLevel.Verbose; +const distFolder = "./dist/packages"; + +function PnPBuild(): (b: BuildTimeline) => BuildTimeline { return (instance: BuildTimeline) => { @@ -18,156 +37,110 @@ export function PnPBuild(): (b: BuildTimeline) => BuildTimeline { } } +function PnPPackage(): (b: BuildTimeline) => BuildTimeline { -export default [{ - name: "build", - distFolder: "./dist/packages", - targets: [ - resolve("./packages/tsconfig.json"), - ], - behaviors: [PnPBuild()] -}]; - -// export default [ -// { - -// name: "build", - -// role: "build", - -// packageRoot: resolve("./packages/"), - -// preBuildTasks: [], - -// // these tsconfig files will all be transpiled per the settings in the file -// buildTargets: [ -// resolve("./packages/tsconfig.json"), -// ], - -// postBuildTasks: [ -// // this task replaces the $$Version$$ with the version from the root package.json at build time -// Tasks.Build.createReplaceVersion([ -// "sp/behaviors/telemetry.js", -// "graph/behaviors/telemetry.js", -// ]), -// ], -// }, -// { - -// name: "package", - -// role: "package", - -// prePackageTasks: [], - -// packageTargets: [ -// { -// outDir: resolve("./dist/packages"), -// target: resolve("./packages/tsconfig.json"), -// tasks: [ -// Tasks.Package.createCopyTargetFiles(), -// Tasks.Package.copyStaticAssets, -// Tasks.Package.createCopyPackageScripts(), -// Tasks.Package.createWritePackageFiles((p) => { -// return Object.assign({}, p, { -// funding: { -// type: "individual", -// url: "https://github.com/sponsors/patrick-rodgers/", -// }, -// type: "module", -// engines: { -// node: ">=14.15.1" -// }, -// author: { -// name: "Microsoft and other contributors" -// }, -// license: "MIT", -// bugs: { -// url: "https://github.com/pnp/pnpjs/issues" -// }, -// homepage: "https://github.com/pnp/pnpjs", -// repository: { -// type: "git", -// url: "git:github.com/pnp/pnpjs" -// } -// }); -// }), -// ], -// }, -// ], - -// postPackageTasks: [], -// }, -// { - -// name: "publish", - -// role: "publish", - -// packageRoots: [ -// resolve("./dist/packages"), -// ], - -// prePublishTasks: [], - -// publishTasks: [Tasks.Publish.publishPackage], - -// postPublishTasks: [], -// }, -// { - -// name: "build-debug", - -// role: "build", - -// packageRoot: resolve("./debug/"), - -// exclude: [], - -// preBuildTasks: [], - -// buildTargets: [ -// resolve("./debug/launch/tsconfig.json"), -// ], - -// postBuildTasks: [ - -// Tasks.Build.createReplaceVersion([ -// "packages/sp/behaviors/telemetry.js", -// "packages/graph/behaviors/telemetry.js", -// ]), -// ], -// }, -// { - -// name: "publish-beta", - -// role: "publish", - -// packageRoots: [ -// resolve("./dist/packages"), -// ], - -// prePublishTasks: [], + return (instance: BuildTimeline) => { -// publishTasks: [Tasks.Publish.publishBetaPackage], + CopyPackageFiles("src", ["**/*.cjs"])(instance); + CopyAssetFiles(".", ["LICENSE"])(instance); + CopyAssetFiles("./packages", ["readme.md"])(instance); + CopyPackageFiles("built", ["**/*.d.ts", "**/*.js", "**/*.js.map", "**/*.d.ts.map"])(instance); + WritePackageJSON((p) => { + return Object.assign({}, p, { + funding: { + type: "individual", + url: "https://github.com/sponsors/patrick-rodgers/", + }, + type: "module", + engines: { + node: ">=14.15.1" + }, + author: { + name: "Microsoft and other contributors" + }, + license: "MIT", + bugs: { + url: "https://github.com/pnp/pnpjs/issues" + }, + homepage: "https://github.com/pnp/pnpjs", + repository: { + type: "git", + url: "git:github.com/pnp/pnpjs" + } + }); + })(instance); -// postPublishTasks: [], -// }, -// { + return instance; + } +} -// name: "publish-v3nightly", +function PnPPublish(flags?: string[]): (b: BuildTimeline) => BuildTimeline { -// role: "publish", + return (instance: BuildTimeline) => { -// packageRoots: [ -// resolve("./dist/packages"), -// ], + Publish(flags)(instance); -// prePublishTasks: [Tasks.Publish.updateV3NightlyVersion], + return instance; + } +} -// publishTasks: [Tasks.Publish.publishV3Nightly], +const commonBehaviors = [ + PnPLogging(logLevel), +] -// postPublishTasks: [], -// }, -// ]; +export default [{ + name: "build", + distFolder, + targets: [ + resolve("./packages/tsconfig.json"), + ], + behaviors: [PnPBuild(), ...commonBehaviors], +}, +{ + name: "build-debug", + distFolder, + targets: [ + resolve("./debug/launch/tsconfig.json"), + ], + behaviors: [Build(), ReplaceVersion(["packages/sp/behaviors/telemetry.js", "packages/graph/behaviors/telemetry.js"]), ...commonBehaviors], +}, +{ + name: "package", + distFolder, + targets: [ + resolve("./packages/tsconfig.json"), + ], + behaviors: [PnPBuild(), PnPPackage(), ...commonBehaviors], +}, +{ + name: "publish", + distFolder, + targets: [ + resolve("./packages/tsconfig.json"), + ], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish(), ...commonBehaviors], +}, +{ + name: "publish-beta", + distFolder, + targets: [ + resolve("./packages/tsconfig.json"), + ], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish(["--tag", "beta"]), ...commonBehaviors], +}, +{ + name: "publish-v3nightly", + distFolder, + targets: [ + resolve("./packages/tsconfig.json"), + ], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish(["--tag", "v3nightly"]), ...commonBehaviors], +}, +{ + name: "publish-v4nightly", + distFolder, + targets: [ + resolve("./packages/tsconfig.json"), + ], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish(["--tag", "v4nightly"]), ...commonBehaviors], +}]; diff --git a/package-lock.json b/package-lock.json index 03f4103f2..62ddcadda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,14 @@ "name": "@pnp/monorepo", "version": "4.0.0-alpha0", "license": "MIT", + "dependencies": { + "@pnp/logging": "^3.21.0" + }, "devDependencies": { "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta2", + "@pnp/buildsystem": "^4.0.0-beta4", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", @@ -599,15 +602,14 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta2", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta2.tgz", - "integrity": "sha512-nLds0p8l/HMqpsAIiymdyMUpT1xrRxBGDUKcgGJRLcpYmLdLkCHHfkEvTsQlyyDdeFd1KV1iYaJQ3HToZ2bnQg==", + "version": "4.0.0-beta4", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta4.tgz", + "integrity": "sha512-RPc0rD8KGS66QUvLMAVehfF3APTFxj0Jj8Cd24FZzTZLOrRLK5IHTL01kULqJ0Hn10wmkD0J7rJKRPGnk8EMNw==", "dev": true, "dependencies": { "@pnp/core": "^3.21.0", "globby": "^14.0.0", "liftoff": "^4.0.0", - "replace-in-file": "^7.0.2", "webpack": "^5.89.0", "yargs": "^17.7.2" }, @@ -757,6 +759,26 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, + "node_modules/@pnp/logging": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", + "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", + "dependencies": { + "tslib": "2.4.1" + }, + "engines": { + "node": ">=14.15.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" + } + }, + "node_modules/@pnp/logging/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, "node_modules/@sindresorhus/merge-streams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", @@ -5718,63 +5740,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/replace-in-file": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-7.0.2.tgz", - "integrity": "sha512-tPG+Qmqf+x2Rf1WVdb/9B5tFIf6KJ5hs3fgxh1OTzPRUugPPvyAva7NvCJtnSpmyq6r+ABYcuUOqZkm6yzGSUw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "glob": "^8.1.0", - "yargs": "^17.7.2" - }, - "bin": { - "replace-in-file": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/replace-in-file/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/replace-in-file/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/replace-in-file/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", diff --git a/package.json b/package.json index 4c73b16cb..e6d555448 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta2", + "@pnp/buildsystem": "^4.0.0-beta4", + "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", @@ -40,14 +41,13 @@ "scripts": { "build": "npm run pnp-buildsystem-init && pnpbuild -n build", "build-localresolver": "npx tsc -p tsconfig.localresolver.json", - "buildDebug": "npm run clean && npm run pnp-buildsystem-init && pnpbuild -n build-debug", + "buildDebug": "npm run pnp-buildsystem-init && pnpbuild -n build-debug", "clean": "del-cli \"./?(dist|site|build|buildsystem-config.js)\"", "lint": "eslint ./packages ./test --ext .ts", - "just-publish": "npm run pnp-buildsystem-init && pnpbuild -n publish", - "package": "npm run build && pnpbuild -n package", + "package": "npm run pnp-buildsystem-init && pnpbuild -n package", "pnp-buildsystem-init": "tsc -p tsconfig.buildsystem.json", - "pnp-publish-beta": "npm run clean && npm run package && pnpbuild -n publish-beta", - "pnp-publish-v3nightly": "npm run clean && npm run package && pnpbuild -n publish-v3nightly", + "pnp-publish-beta": "npm run pnp-buildsystem-init && pnpbuild -n publish-beta", + "pnp-publish-v3nightly": "npm run pnp-buildsystem-init && pnpbuild -n publish-v3nightly", "serve": "tsc -p ./debug/serve/tsconfig.json && node ./build/server/debug/serve/plumbing/run.js", "spfx": "node ./debug/spfx/pnpjs-local-debug-start.js", "start": "npm run serve", diff --git a/tools/buildsystem/bin/buildsystem.ts b/tools/buildsystem/bin/buildsystem.ts index 0503573b5..682d6b7aa 100644 --- a/tools/buildsystem/bin/buildsystem.ts +++ b/tools/buildsystem/bin/buildsystem.ts @@ -73,16 +73,29 @@ BuildSystem.prepare({}, function (env) { const parsedTSConfig: TSConfig = importJSON(tsconfigPath); const resolvedOutDir = resolve(tsconfigRoot, parsedTSConfig.compilerOptions.outDir); - // we need to resolve some extra data for each package - const packages = parsedTSConfig?.references.map(ref => ({ - - name: dirname(ref.path).replace(/^\.\//, ""), - resolvedPkgSrcTSConfigPath: resolve(tsconfigRoot, ref.path), - resolvedPkgSrcRoot: dirname(resolve(tsconfigRoot, ref.path)), - resolvedPkgOutRoot: resolve(resolvedOutDir, dirname(ref.path)), - resolvedPkgDistRoot: resolve(context.distRoot, dirname(ref.path)), - })); - + const packages = []; + + if (parsedTSConfig.references) { + // we need to resolve some extra data for each package + packages.push(...parsedTSConfig.references.map(ref => ({ + + name: dirname(ref.path).replace(/^\.\//, ""), + resolvedPkgSrcTSConfigPath: resolve(tsconfigRoot, ref.path), + resolvedPkgSrcRoot: dirname(resolve(tsconfigRoot, ref.path)), + resolvedPkgOutRoot: resolve(resolvedOutDir, dirname(ref.path)), + resolvedPkgDistRoot: resolve(context.distRoot, dirname(ref.path)), + }))); + } else { + // we have a single package (debug for example) + packages.push({ + name: "root", + resolvedPkgSrcTSConfigPath: tsconfigRoot, + resolvedPkgSrcRoot: tsconfigRoot, + resolvedPkgOutRoot: resolvedOutDir, + resolvedPkgDistRoot: context.distRoot, + }); + } + return Object.assign({}, context, { target: { tsconfigPath, diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index c958cd1b5..c483de01f 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -1,10 +1,10 @@ import { TimelinePipe } from "@pnp/core"; import { BuildTimeline } from "../build-timeline.js"; import { readFile } from "fs/promises"; -import buildWriteFile from "src/lib/write-file.js"; +import buildWriteFile from "../lib/write-file.js"; import { resolve } from "path"; -export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/ig): TimelinePipe { +export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/img): TimelinePipe { return (instance: BuildTimeline) => { @@ -16,13 +16,10 @@ export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/i paths.forEach(async (path) => { - const file = await readFile(resolve(path)); - - const txt = file.toString(); - - txt.replace(versionMask, version); - - await buildWriteFile(path, txt); + const resolvedPath = resolve(target.resolvedOutDir, path); + this.log(`Resolving path '${path}' to '${resolvedPath}'.`, 0); + const file = await readFile(resolve(resolvedPath)); + await buildWriteFile(resolvedPath, file.toString().replace(versionMask, version)); }); }); diff --git a/tsconfig.buildsystem.json b/tsconfig.buildsystem.json index 3fc021c70..128fa538d 100644 --- a/tsconfig.buildsystem.json +++ b/tsconfig.buildsystem.json @@ -8,7 +8,7 @@ "declaration": false, "declarationMap": false, "sourceMap": false, - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, }, "include": [ "buildsystem-config.ts" From ea4297b67dc5b3acd2741a366d77f27881e9c9d3 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 15:53:21 -0500 Subject: [PATCH 049/171] Update package.json --- tools/buildsystem/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 49de56bc4..fda9abbfb 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta4", + "version": "4.0.0-beta5", "bin": { "pnpbuild": "bin/buildsystem.js" }, From fe05d7dab2b2d420a53819721229c07bfa316137 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 15:59:53 -0500 Subject: [PATCH 050/171] Create v4-nightly --- .github/workflows/v4-nightly | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/v4-nightly diff --git a/.github/workflows/v4-nightly b/.github/workflows/v4-nightly new file mode 100644 index 000000000..512225007 --- /dev/null +++ b/.github/workflows/v4-nightly @@ -0,0 +1,40 @@ +name: v4 Nightly Builds + +on: + schedule: + - cron: "0 2 * * 1-5" + + workflow_dispatch: + +jobs: + publish-v4-nightly: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: version-4 + # setup nodejs + - name: Use Node.js 18 + uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: 'https://registry.npmjs.org' + cache: 'npm' + cache-dependency-path: package-lock.json + + # Run the npm install + - run: npm ci + + # Runs a set of commands using the runners shell + - name: Test - not setup + run: echo this would be the tests + + # Runs a single command using the runners shell + - name: Run a one-line script + run: npm run pnp-publish-v4nightly + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} From bc9fb34487af7de543078d8da693983e09027af0 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 16:00:16 -0500 Subject: [PATCH 051/171] Rename v4-nightly to v4-nightly.yml --- .github/workflows/{v4-nightly => v4-nightly.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{v4-nightly => v4-nightly.yml} (100%) diff --git a/.github/workflows/v4-nightly b/.github/workflows/v4-nightly.yml similarity index 100% rename from .github/workflows/v4-nightly rename to .github/workflows/v4-nightly.yml From 3b6139e3e2200167476e025386a7722b0dbd00a1 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 16:01:25 -0500 Subject: [PATCH 052/171] adding v4 nightly --- package-lock.json | 16 ++++++++-------- package.json | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 62ddcadda..16ae6bce0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,12 @@ "name": "@pnp/monorepo", "version": "4.0.0-alpha0", "license": "MIT", - "dependencies": { - "@pnp/logging": "^3.21.0" - }, "devDependencies": { "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta4", + "@pnp/buildsystem": "^4.0.0-beta5", + "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", @@ -602,9 +600,9 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta4", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta4.tgz", - "integrity": "sha512-RPc0rD8KGS66QUvLMAVehfF3APTFxj0Jj8Cd24FZzTZLOrRLK5IHTL01kULqJ0Hn10wmkD0J7rJKRPGnk8EMNw==", + "version": "4.0.0-beta5", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta5.tgz", + "integrity": "sha512-OhMFUkR/LeOJjqLXd/c6D59FjCmpvOndKuNFL27CnC70SnVlDLMxYu2RMkOBPWUgtRJ2ZJUO3r/rNrS2OxKBQw==", "dev": true, "dependencies": { "@pnp/core": "^3.21.0", @@ -763,6 +761,7 @@ "version": "3.21.0", "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", + "dev": true, "dependencies": { "tslib": "2.4.1" }, @@ -777,7 +776,8 @@ "node_modules/@pnp/logging/node_modules/tslib": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true }, "node_modules/@sindresorhus/merge-streams": { "version": "1.0.0", diff --git a/package.json b/package.json index e6d555448..06209e047 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta4", + "@pnp/buildsystem": "^4.0.0-beta5", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", @@ -48,6 +48,7 @@ "pnp-buildsystem-init": "tsc -p tsconfig.buildsystem.json", "pnp-publish-beta": "npm run pnp-buildsystem-init && pnpbuild -n publish-beta", "pnp-publish-v3nightly": "npm run pnp-buildsystem-init && pnpbuild -n publish-v3nightly", + "pnp-publish-v4nightly": "npm run pnp-buildsystem-init && pnpbuild -n publish-v4nightly", "serve": "tsc -p ./debug/serve/tsconfig.json && node ./build/server/debug/serve/plumbing/run.js", "spfx": "node ./debug/spfx/pnpjs-local-debug-start.js", "start": "npm run serve", From 611f53d77c0b03f7d91151e65898aaba6934a977 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 16:12:40 -0500 Subject: [PATCH 053/171] fixing up v4 nightly --- buildsystem-config.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index beaa70695..9c77626ad 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -8,6 +8,7 @@ import { CopyAssetFiles, WritePackageJSON, Publish, + PublishNightly, } from "@pnp/buildsystem"; import { Logger, @@ -25,6 +26,7 @@ Logger.subscribe(ConsoleListener("", { const logLevel = LogLevel.Verbose; const distFolder = "./dist/packages"; +const commonPublishTags = ["--access", "public", "--provenance"]; function PnPBuild(): (b: BuildTimeline) => BuildTimeline { @@ -118,7 +120,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), PnPPublish(), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish(commonPublishTags), ...commonBehaviors], }, { name: "publish-beta", @@ -126,7 +128,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), PnPPublish(["--tag", "beta"]), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish([...commonPublishTags, "--tag", "beta"]), ...commonBehaviors], }, { name: "publish-v3nightly", @@ -134,7 +136,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), PnPPublish(["--tag", "v3nightly"]), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), PublishNightly([...commonPublishTags], "v3nightly"), ...commonBehaviors], }, { name: "publish-v4nightly", @@ -142,5 +144,5 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), PnPPublish(["--tag", "v4nightly"]), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), PublishNightly([...commonPublishTags], "v4nightly"), ...commonBehaviors], }]; From 26dcb68ca3126d04feacb27c67681b8c400394c2 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 20 Dec 2023 18:17:28 -0500 Subject: [PATCH 054/171] Update buildsystem-config.ts --- buildsystem-config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 9c77626ad..aa08ff7b7 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -26,7 +26,7 @@ Logger.subscribe(ConsoleListener("", { const logLevel = LogLevel.Verbose; const distFolder = "./dist/packages"; -const commonPublishTags = ["--access", "public", "--provenance"]; +const commonPublishTags = ["--access", "public"]; function PnPBuild(): (b: BuildTimeline) => BuildTimeline { From 642743c0bb9305134b6923ba335b905e0d444d10 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 21 Dec 2023 14:35:36 +0000 Subject: [PATCH 055/171] Graph Mail endpoints and related --- .vscode/settings.json | 4 + CHANGELOG.md | 1 + docs/graph/attachments.md | 38 ++ docs/graph/calendars.md | 4 + docs/graph/conversations.md | 294 ++++++++++ docs/graph/groups.md | 12 +- docs/graph/{outlook.md => mail-categories.md} | 4 +- docs/graph/mail-folders.md | 166 ++++++ docs/graph/mail-mailbox.md | 103 ++++ docs/graph/mail-messages.md | 208 +++++++ docs/graph/mail-rules.md | 103 ++++ docs/graph/messages.md | 20 - mkdocs.yml | 9 +- package-lock.json | 542 +++++++++--------- packages/graph/attachments/event.ts | 14 + packages/graph/attachments/index.ts | 2 + packages/graph/attachments/message.ts | 14 + packages/graph/attachments/types.ts | 10 +- packages/graph/behaviors/paged.ts | 10 +- packages/graph/graphqueryable.ts | 2 +- .../{outlook/types.ts => mail/categories.ts} | 26 +- packages/graph/mail/folders.ts | 108 ++++ packages/graph/mail/funcs.ts | 30 +- packages/graph/mail/groups.ts | 0 packages/graph/mail/index.ts | 39 +- packages/graph/mail/mailbox.ts | 104 ++++ packages/graph/mail/messages.ts | 178 ++++++ packages/graph/mail/types.ts | 0 packages/graph/mail/users.ts | 64 ++- packages/graph/messages/index.ts | 14 - packages/graph/messages/types.ts | 46 -- packages/graph/messages/users.ts | 27 - packages/graph/outlook/index.ts | 11 - packages/graph/outlook/users.ts | 14 - packages/graph/presets/all.ts | 4 +- test/graph/analytics.ts | 12 +- test/graph/appCatalogs.ts | 2 +- test/graph/attachments.ts | 78 +++ test/graph/group-conversations.ts | 126 ++++ test/graph/{outlook.ts => mail-categories.ts} | 14 +- test/graph/mail-folders.ts | 194 +++++++ test/graph/mail-mailbox.ts | 157 +++++ test/graph/mail-messages.ts | 232 ++++++++ test/graph/mail-rules.ts | 112 ++++ 44 files changed, 2671 insertions(+), 481 deletions(-) create mode 100644 docs/graph/attachments.md create mode 100644 docs/graph/conversations.md rename docs/graph/{outlook.md => mail-categories.md} (94%) create mode 100644 docs/graph/mail-folders.md create mode 100644 docs/graph/mail-mailbox.md create mode 100644 docs/graph/mail-messages.md create mode 100644 docs/graph/mail-rules.md delete mode 100644 docs/graph/messages.md create mode 100644 packages/graph/attachments/event.ts create mode 100644 packages/graph/attachments/message.ts rename packages/graph/{outlook/types.ts => mail/categories.ts} (68%) create mode 100644 packages/graph/mail/folders.ts delete mode 100644 packages/graph/mail/groups.ts create mode 100644 packages/graph/mail/mailbox.ts create mode 100644 packages/graph/mail/messages.ts delete mode 100644 packages/graph/mail/types.ts delete mode 100644 packages/graph/messages/index.ts delete mode 100644 packages/graph/messages/types.ts delete mode 100644 packages/graph/messages/users.ts delete mode 100644 packages/graph/outlook/index.ts delete mode 100644 packages/graph/outlook/users.ts create mode 100644 test/graph/attachments.ts create mode 100644 test/graph/group-conversations.ts rename test/graph/{outlook.ts => mail-categories.ts} (89%) create mode 100644 test/graph/mail-folders.ts create mode 100644 test/graph/mail-mailbox.ts create mode 100644 test/graph/mail-messages.ts create mode 100644 test/graph/mail-rules.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 629e5f75c..761d8a23e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,6 +15,10 @@ "typescript.tsdk": "./node_modules/typescript/lib", "editor.tabSize": 4, "cSpell.words": [ + "deleteable", + "graphfi", + "graphqueryable", + "Invokable", "queryables" ], } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c1ced204..559f2627b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - All GraphQueryable*, _GraphQueryable*, and IGraphQueryable* have been renamed to remove "Queryable" (ex: GraphQueryableCollection is now GraphCollection) - @pnp/graph/onedrive renamed to @pnp/graph/files - ISites.getByUrl is now async + - mailCategory.add() returns Microsoft Graph types OutlookCategory vs object with data property. - sp - _Items and IItems now supports async iterator pattern diff --git a/docs/graph/attachments.md b/docs/graph/attachments.md new file mode 100644 index 000000000..d89fcfde0 --- /dev/null +++ b/docs/graph/attachments.md @@ -0,0 +1,38 @@ +# Graph Attachments + +More information can be found in the official Graph documentation: + +- [Attachments Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/attachment?view=graph-rest-1.0) + +Attachments work with [Calendar Events](./calendars.md), [Mail Message](./mail-messages.md), and [Conversation Thread Posts](./conversations.md). The samples below are generic on purpose. + +## IAttachment, IAttachments + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get Attachments + +```TypeScript +import { graphfi } from "@pnp/graph"; +// Imports required for the object you're obtaining attachments for. +import "@pnp/graph/attachments"; + +const graph = graphfi(...); + +const event_message_post = graph.xxx; +const a = await event_message_post.attachments(); +``` + +## Get Attachment By Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +// Imports required for the object you're obtaining attachments for. +import "@pnp/graph/attachments"; + +const graph = graphfi(...); + +const event_message_post = graph.xxx; +const attachmentId = ""; +const a = await event_message_post.attachments.getById(attachmentId)(); +``` diff --git a/docs/graph/calendars.md b/docs/graph/calendars.md index b25ce0dbc..e773daa67 100644 --- a/docs/graph/calendars.md +++ b/docs/graph/calendars.md @@ -268,3 +268,7 @@ const instances2 = await event.instances("2020-01-01", "2020-03-01").select("sub // you can specify times along with the dates const instance3 = await event.instances("2020-01-01T19:00:00-08:00", "2020-03-01T19:00:00-08:00")(); ``` + +## Event Attachments + +See [Attachments](./attachments.md) \ No newline at end of file diff --git a/docs/graph/conversations.md b/docs/graph/conversations.md new file mode 100644 index 000000000..80c5c9787 --- /dev/null +++ b/docs/graph/conversations.md @@ -0,0 +1,294 @@ +# Graph Conversations + +More information can be found in the official Graph documentation: + +- [Conversation Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/conversation?view=graph-rest-1.0) +- [Conversation Thread Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/conversationthread?view=graph-rest-1.0) +- [Post Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/post?view=graph-rest-1.0) + +## IConversation, IConversations, IPost, IPostForwardInfo, IPosts, ISenders, IThread, IThreads + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get Group Accepted/Rejected Senders + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const accepted = await graph.groups.getById(groupId).acceptedSenders(); +const rejected = await graph.groups.getById(groupId).rejectedSenders(); +``` + +## Add Group Accepted/Rejected Senders + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const sender = "https://graph.microsoft.com/v1.0/users/user@contoso.com"; +await graph.groups.getById(groupId).acceptedSenders.add(sender); +await graph.groups.getById(groupId).rejectedSenders.add(sender); +``` + +## Delete Group Accepted/Rejected Senders + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const sender = "https://graph.microsoft.com/v1.0/users/user@contoso.com"; +await graph.groups.getById(groupId).acceptedSenders.remove(sender); +await graph.groups.getById(groupId).rejectedSenders.remove(sender); +``` + +## Get Group Conversations + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const c = await graph.groups.getById(groupId).conversations(); +``` + +## Get Group Conversation by Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const conversationId = ""; +const c = await graph.groups.getById(groupId).conversations.getById(conversationId)(); +``` + +## Add/Update/Delete a Group Conversation + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; +import { Conversation } from "@microsoft/microsoft-graph-types"; + +const graph = graphfi(...); + +const conversation: Conversation = { + topic: "My New Conversation", + ... +}; + +const c = await graph.groups.getById(groupId).conversations.add(conversation); + +const conversationId = ""; +const update = await graph.groups.getById(groupId).conversations.getById(conversationId) + .update({topic: "My Conversation"}); +await graph.groups.getById(groupId).conversations.getById(conversationId).delete(); +``` + +## Get Group Conversation Threads + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; +import { Conversation } from "@microsoft/microsoft-graph-types"; + +const graph = graphfi(...); + +const groupId = ""; +const conversationId = ""; +const t = await graph.groups.getById(groupId).conversations.getById(conversationId).threads(); +``` + +## Get Group Conversation Thread by Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const conversationId = ""; +const threadId = ""; +const c = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId)(); +``` + +## Create/Update/Delete a Group Conversation Thread + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; +import { ConversationThread } from "@microsoft/microsoft-graph-types"; + +const graph = graphfi(...); + +const conversationThread: ConversationThread = { + topic: "My New Conversation", + ... +}; + +const conversationId = ""; +const t = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.add(conversationThread); + +const threadId = ""; +const update = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId) + .update({topic: "My Conversation"}); +await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).delete(); +``` + +## Reply to a Group Conversation Thread + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; +import { Post } from "@microsoft/microsoft-graph-types"; + +const graph = graphfi(...); + +const post: Post = { + body: { content: "This is a post" }, + from: { + emailAddress: { + address: "", + name: "", + }, + }, +}; + +const conversationId = ""; +const threadId = ""; +const reply = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).reply(post); +``` + +## Get Group Conversation Thread Posts + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const groupId = ""; +const conversationId = ""; +const threadId = ""; +const p = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).posts(); +``` + +## Get Group Conversation Thread Post by Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const conversationId = ""; +const threadId = ""; +const postId = ""; +const p = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).posts.getById(postId)(); +``` + +## Create/Update/Delete a Group Conversation Thread Post + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; +import { Post } from "@microsoft/microsoft-graph-types"; + +const graph = graphfi(...); + +const post: Post = { + body: { content: "This is a post" }, + from: { + emailAddress: { + address: "", + name: "", + }, + }, +}; + +const conversationId = ""; +const threadId = ""; +const p = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).posts.add(post); + +const postId = ""; +const update = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).posts.getById(postId) + .update({body: {content: "New Post Content"}}); +await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).posts.getById(postId).delete(); +``` + +## Reply to a Group Conversation Thread Post + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; +import { Post } from "@microsoft/microsoft-graph-types"; + +const graph = graphfi(...); + +const post: Post = { + body: { content: "This is a post" }, + from: { + emailAddress: { + address: "", + name: "", + }, + }, +}; + +const conversationId = ""; +const threadId = ""; +const reply = await graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).posts.getById(postId).reply(post); +``` + +## Forward a Group Conversation Thread Post + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/conversations"; +import { IPostForwardInfo } from "@pnp/graph/conversations"; + +const graph = graphfi(...); + +const postForwardInfo: IPostForwardInfo = { + toRecipients: [ + { + emailAddress: { + address: "", + name: "", + }, + }, + ], +}; + +const conversationId = ""; +const threadId = ""; +const post = graph.groups.getById(groupId).conversations.getById(conversationId).threads.getById(threadId).posts.getById(postId); +await post.forward(postForwardInfo); +``` + +## Group Conversation Thread Post Attachments + +See [Attachments](./attachments.md) diff --git a/docs/graph/groups.md b/docs/graph/groups.md index fd55aa7f6..9451bfd35 100644 --- a/docs/graph/groups.md +++ b/docs/graph/groups.md @@ -132,10 +132,6 @@ const endDate = new Date("2020-03-01"); const events = graph.groups.getById("7d2b9355-0891-47d3-84c8-bf2cd9c62177").getCalendarView(startDate, endDate); ``` -## Group Photo Operations - -See [Photos](./photos.md) - ## Group Membership Get the members and/or owners of a group. @@ -162,3 +158,11 @@ const graph = graphfi(...); const teamSite = await graph.groups.getById("7d2b9355-0891-47d3-84c8-bf2cd9c62177").sites.root(); const url = teamSite.webUrl ``` + +## Group Photo Operations + +See [Photos](./photos.md) + +## Group Conversation Operations + +See [Conversations](./conversations.md) diff --git a/docs/graph/outlook.md b/docs/graph/mail-categories.md similarity index 94% rename from docs/graph/outlook.md rename to docs/graph/mail-categories.md index 535b6e57d..7295607bb 100644 --- a/docs/graph/outlook.md +++ b/docs/graph/mail-categories.md @@ -1,6 +1,4 @@ -# @pnp/graph/outlook - -Represents the Outlook services available to a user. Currently, only interacting with categories is supported. +# Graph Mail Categories You can learn more by reading the [Official Microsoft Graph Documentation](https://docs.microsoft.com/en-us/graph/api/resources/outlookuser?view=graph-rest-1.0). diff --git a/docs/graph/mail-folders.md b/docs/graph/mail-folders.md new file mode 100644 index 000000000..2aeb5f85f --- /dev/null +++ b/docs/graph/mail-folders.md @@ -0,0 +1,166 @@ +# Graph Mail Folders + +More information can be found in the official Graph documentation: + +- [Mail Folder Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/mailfolder?view=graph-rest-1.0) + +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get Mail folder listing + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +// This can be any folder id or Well-known folder names +const currentUserInbox = await graph.me.mailFolders.getById("inbox")(); + +// Get folders +const folders = await graph.me.mailFolders(); + +// Get folders and include hidden folders +const allFolders = await graph.me.mailFolders.includeHidden(); +``` + +## Get Specific Folder by Id or Well0know folder name + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +// Get folder by Well-known folder names +const currentUserInbox = await graph.me.mailFolders.getById("inbox")(); + +// Get folders +const folders = await graph.me.mailFolders(); +// Get folder by folder id +const currentUserFolder = await graph.me.mailFolders.getById(folders[0].id)(); +``` + +## Get Folders - Delta + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; +import {IMailFolderDelta} from "@pnp/graph/mail" + +const graph = graphfi(...); + +const currentUser = graph.me; +const folders = await currentUser.mailFolders.delta(); + +const deltatoken = folders.deltaLink.substring(folder.deltaLink.indexOf("deltatoken=") + 11); +const deltaParameters: IMailFolderDelta = { + "$skiptoken": null, + "$deltatoken": deltatoken, +} +const deltaFolders = await currentUser.mailFolders.delta(deltaParameters); +``` + +## Add Folder or Search Folder + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +// Add Mail Folder +const draftFolder: IMailFolder = { + displayName: "PnP Test Folder", + isHidden: false, +}; + +const folder = await graph.users.getById(testUserName).mailFolders.add(draftFolder); + +// Add Child Folder + +const childFolder = await graph.users.getById(testUserName).mailFolders.getById({mailFolderId}).childFolders.add(draftFolder); + +// Add Search Folder +const currentUserInbox = await graph.me.mailFolders.getById("inbox")(); + +const draftSearchFolder: IMailSearchFolder = { + displayName: "PnP Test Search Folder", + sourceFolderIds: [currentUserInbox.id], + filterQuery: "{Your Query Goes Here}" +}; + +const searchFolder = await graph.users.getById(testUserName).mailFolders.getById(currentUserInbox.id).childFolders.add(draftSearchFolder); +``` + +## Update Folder + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +const folder = await graph.users.getById(testUserName).mailFolders.update({displayName: "New Display Name"}); +``` + +## Delete Folder + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +await graph.users.getById(testUserName).mailFolders.getById({mailFolderId}).delete(); +``` + +## Copy/Move Folder + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +const destinationFolderId = "..."; +// Move folder to destination folder +await graph.users.getById(testUserName).mailFolders.getById({mailFolderId}).move(destinationFolderId); +// Copy folder to destination folder +await graph.users.getById(testUserName).mailFolders.getById({mailFolderId}).copy(destinationFolderId); +``` + +## Get Child Folders + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +await graph.users.getById(testUserName).mailFolders.getById({mailFolderId}).childFolders(); +``` + +## Get Folder's Messages + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +await graph.users.getById(testUserName).mailFolders.getById({mailFolderId}).messages(); +``` + +## Messages + +For more information on [Messages](./mail-messages.md) diff --git a/docs/graph/mail-mailbox.md b/docs/graph/mail-mailbox.md new file mode 100644 index 000000000..5d7a829ea --- /dev/null +++ b/docs/graph/mail-mailbox.md @@ -0,0 +1,103 @@ +# Graph Mailbox + +More information can be found in the official Graph documentation: + +- [Outlook Mailbox Settings Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/mailboxsettings?view=graph-rest-1.0) +- [Manage Focused Inbox](https://learn.microsoft.com/en-us/graph/api/resources/manage-focused-inbox?view=graph-rest-1.0) + +## IMailboxSettings + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get User's Mailbox Setting + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/mailbox"; + +const graph = graphfi(...); + +const currentUser = graph.me; +const mailboxSettings = await currentUser.mailboxSettings(); +const automaticRepliesSetting = await currentUser.mailboxSettings.automaticRepliesSetting(); +const dateFormat = await currentUser.mailboxSettings.dateFormat(); +const language = await currentUser.mailboxSettings.language(); +const timeFormat = await currentUser.mailboxSettings.timeFormat(); +const timeZone = await currentUser.mailboxSettings.timeZone(); +const workingHours = await currentUser.mailboxSettings.workingHours(); +const userPurpose = await currentUser.mailboxSettings.userPurpose(); +``` + +## Get User's Focused Inbox Overrides + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/mailbox"; + +const graph = graphfi(...); + +const currentUser = graph.me; +const fio = await currentUser.focusedInboxOverrides(); +``` + +## Get User's Focused Inbox Override by Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/mailbox"; + +const graph = graphfi(...); + +const currentUser = graph.me; +const fio = await currentUser.focusedInboxOverrides.getById({fio id}); +``` + +## Add Focused Inbox Override + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/mailbox"; + +const graph = graphfi(...); + +const override: InferenceClassificationOverride = { + classifyAs: "focused", + senderEmailAddress: { + name: "Mary Smith", + address: "msmith@contoso.com", + }, + }; + +const currentUser = graph.me; +const fio = await currentUser.focusedInboxOverrides.add(override); +``` + +## Update Focused Inbox Override + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/mailbox"; + +const graph = graphfi(...); + +const currentUser = graph.me; +const fio = await currentUser.focusedInboxOverrides.update({ senderEmailAddress: { name: "marysmith@contoso.com" }}); +``` + +## Delete Focused Inbox Override + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/mailbox"; + +const graph = graphfi(...); + +const currentUser = graph.me; +const fio = await currentUser.focusedInboxOverrides.getById({fio id}).delete(); +``` diff --git a/docs/graph/mail-messages.md b/docs/graph/mail-messages.md new file mode 100644 index 000000000..06d48f5fc --- /dev/null +++ b/docs/graph/mail-messages.md @@ -0,0 +1,208 @@ +# Graph Mail Messages + +More information can be found in the official Graph documentation: + +- [Message Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/message?view=graph-rest-1.0) + +## IMessage, IMessages + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get User's Messages + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const graph = graphfi(...); + +const currentUser = graph.me; +const messages = await currentUser.messages(); +``` + +## Get User's Messages - Delta + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; +import {IMessageDelta} from "@pnp/graph/mail" + +const graph = graphfi(...); + +const currentUser = graph.me; +const messages = await currentUser.messages.delta(); + +const deltatoken = messages.deltaLink.substring(folder.deltaLink.indexOf("deltatoken=") + 11); +const deltaParameters: IMessageDelta = { + "$skiptoken": null, + "$deltatoken": deltatoken, + changeType: "created" +} +const deltaMessages = await currentUser.messages.delta(deltaParameters); +``` + +## Create Draft Message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const draftMessage: Message = { + subject: "PnPjs Test Message", + importance: "low", + body: { + contentType: "html", + content: "This is a test message!", + }, + toRecipients: [ + { + emailAddress: { + address: "AdeleV@contoso.onmicrosoft.com", + }, + }, + ], +}; + + +const graph = graphfi(...); +const currentUser = graph.me; +const draft = await currentUser.messages.add(m); +``` + +## Update Draft Message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const graph = graphfi(...); +const currentUser = graph.me; +const update = await currentUser.messages.getById(draft.id).update({ subject: "New Subject" }); +``` + +## Delete a Message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const graph = graphfi(...); +const currentUser = graph.me; +await currentUser.messages.getById({id}).delete(); +``` + +## Copy a Message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const graph = graphfi(...); +const currentUser = graph.me; +const messageId = ""; +const messageCopy = await currentUser.messages.getById(messageId).copy({Destination Folder Id}); +``` + +## Move a Message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const graph = graphfi(...); +const currentUser = graph.me; +const messageId = ""; +const messageCopy = await currentUser.messages.getById(messageId).move({Destination Folder Id}); +``` + +## Send Draft Message/Reply/ReplyAll + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const graph = graphfi(...); +const currentUser = graph.me; +const update = await currentUser.messages.getById(draft.id).send(); +``` + +## Send Message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; + +const draftMessage: Message = { + subject: "PnPjs Test Message", + importance: "low", + body: { + contentType: "html", + content: "This is a test message!", + }, + toRecipients: [ + { + emailAddress: { + address: "AdeleV@contoso.onmicrosoft.com", + }, + }, + ], +}; + + +const graph = graphfi(...); +const currentUser = graph.me; +const draft = await currentUser.sendMail(m); +``` + +## Create Draft Reply/ReplyAll/Forward for Message + +The payload for any of these methods take either no payload or one of the Options outlined in the example below. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail/messages"; +import {Message} from " + +//Option 1 +const draftMessage1: Message = { + subject: "PnPjs Test Message", + importance: "low", + body: { + contentType: "html", + content: "This is a test message!", + }, + toRecipients: [ + { + emailAddress: { + address: "AdeleV@contoso.onmicrosoft.com", + }, + }, + ], +}; + +//Option 2 +const draftMessage2 = { + comment: "This is my response" +} + +const graph = graphfi(...); +const messageId = ""; +const currentUser = graph.me; +const draftReply = await currentUser.messages.getById(messageId).createReply(draftMessage1); +const draftReplyAll = await currentUser.messages.getById(messageId).createReplyAll(draftMessage2); +const draftForward = await currentUser.messages.getById(messageId).createForward(); +``` + +## Message Attachments + +See [Attachments](./attachments.md) diff --git a/docs/graph/mail-rules.md b/docs/graph/mail-rules.md new file mode 100644 index 000000000..9d50095a9 --- /dev/null +++ b/docs/graph/mail-rules.md @@ -0,0 +1,103 @@ +# Graph Mail Rules + +More information can be found in the official Graph documentation: + +- [Rule Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/messagerule?view=graph-rest-1.0) + +## IMessageRule, IMessageRules + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get User's Message Rules for their Inbox + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +// This can be any folder id or Well-known folder names +const currentUserInbox = graph.me.mailFolders.getById("inbox"); +const rules = await currentUserInbox.messageRules(); +``` + +## Get a Message Rules for a User + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +// This can be any folder id or Well-known folder names +const currentUserInbox = graph.me.mailFolders.getById("inbox"); +const rule = await currentUserInbox.messageRules.getById({ruleId})(); +``` + +## Add a Message Rule + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; +import { MessageRule as IMessageRuleType } from "@microsoft/microsoft-graph-types"; + +const graph = graphfi(...); + +const draftRule: IMessageRuleType = { + displayName: "PnPjs Test Rule", + sequence: 2, + isEnabled: true, + conditions: { + senderContains: [ + "adele", + ], + }, + actions: { + forwardTo: [ + { + emailAddress: { + name: "Alex Wilbur", + address: "AlexW@contoso.onmicrosoft.com", + }, + }, + ], + stopProcessingRules: true, + }, + }; + +// This can be any folder id or Well-known folder names +const currentUserInbox = graph.me.mailFolders.getById("inbox"); +const rule = await currentUserInbox.messageRules.add(draftRule); +``` + +## Update a Message Rule + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +// This can be any folder id or Well-known folder names +const currentUserInbox = graph.me.mailFolders.getById("inbox"); +const newRuleName = "My Mail Rule"; +const rule = await currentUserInbox.messageRules.getById({ruleId}).update({ displayName: newRuleName }); +``` + +## Delete a Message Rule + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; + +const graph = graphfi(...); + +// This can be any folder id or Well-known folder names +const currentUserInbox = graph.me.mailFolders.getById("inbox"); +const rule = await currentUserInbox.messageRules.getById({ruleId}).delete(); +``` diff --git a/docs/graph/messages.md b/docs/graph/messages.md deleted file mode 100644 index 2516fc416..000000000 --- a/docs/graph/messages.md +++ /dev/null @@ -1,20 +0,0 @@ -# Graph Messages (Mail) - -More information can be found in the official Graph documentation: - -- [Message Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/message?view=graph-rest-1.0) - -[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) - -## Get User's Messages - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/users"; -import "@pnp/graph/messages"; - -const graph = graphfi(...); - -const currentUser = graph.me; -const messages = await currentUser.messages(); -``` diff --git a/mkdocs.yml b/mkdocs.yml index 9b00f5691..3b28d5e07 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -39,10 +39,12 @@ nav: - util: 'core/util.md' - graph: - graph: 'packages/#graph' + - attachments: 'graph/attachments.md' - behaviors: 'graph/behaviors.md' - bookings: 'graph/bookings.md' - columns: 'graph/columns.md' - 'content types': 'graph/content-types.md' + - conversations: 'graph/conversations.md' - groups: 'graph/groups.md' - insights: 'graph/insights.md' - contacts: 'graph/contacts.md' @@ -53,7 +55,12 @@ nav: - invitations: 'graph/invitations.md' - items: 'graph/items.md' - lists: 'graph/lists.md' - - messages: 'graph/messages.md' + - mail: + - 'categories': 'graph/mail-categories.md' + - 'folders': 'graph/mail-folders.md' + - 'mailbox': 'graph/mail-mailbox.md' + - 'messages': 'graph/mail-messages.md' + - 'rules': 'graph/mail-rules.md' - outlook: 'graph/outlook.md' - operations: 'graph/operations.md' - permissions: 'graph/permissions.md' diff --git a/package-lock.json b/package-lock.json index 16ae6bce0..9e4a09b90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -100,23 +100,22 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.12.1.tgz", - "integrity": "sha512-SsyWQ+T5MFQRX+M8H/66AlaI6HyCbQStGfFngx2fuiW+vKI2DkhtOvbYodPyf9fOe/ARLWWc3ohX54lQ5Kmaog==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.13.0.tgz", + "integrity": "sha512-a62aP/wppgmnfIkJLfcB4ssPBcH94WzrzPVJ3tlJt050zX4lfmtnvy95D3igDo3f31StO+9BgPrzvkj4aOxnoA==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", + "@azure/abort-controller": "^1.1.0", "@azure/core-auth": "^1.4.0", "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.3.0", "@azure/logger": "^1.0.0", - "form-data": "^4.0.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, "node_modules/@azure/core-tracing": { @@ -132,22 +131,23 @@ } }, "node_modules/@azure/core-util": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.5.0.tgz", - "integrity": "sha512-GZBpVFDtQ/15hW1OgBcRdT4Bl7AEpcEZqLfbAvOtm1CQUncKWiYapFHVD588hmlV27NbOOtSm3cnLF3lvoHi4g==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.6.1.tgz", + "integrity": "sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@azure/identity": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.3.0.tgz", "integrity": "sha512-gISa/dAAxrWt6F2WiDXZY0y2xY4MLlN2wkNW4cPuq5OgPQKLSkxLc4I2WR04puTfZyQZnpXbAapAMEj1b96fgg==", + "deprecated": "Please upgrade to the latest version of this package to get necessary fixes", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -184,21 +184,22 @@ } }, "node_modules/@azure/msal-browser": { - "version": "2.38.2", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.2.tgz", - "integrity": "sha512-71BeIn2we6LIgMplwCSaMq5zAwmalyJR3jFcVOZxNVfQ1saBRwOD+P77nLs5vrRCedVKTq8RMFhIOdpMLNno0A==", + "version": "2.38.3", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.3.tgz", + "integrity": "sha512-2WuLFnWWPR1IdvhhysT18cBbkXx1z0YIchVss5AwVA95g7CU5CpT3d+5BcgVGNXDXbUU7/5p0xYHV99V5z8C/A==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", "dev": true, "dependencies": { - "@azure/msal-common": "13.3.0" + "@azure/msal-common": "13.3.1" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.0.tgz", - "integrity": "sha512-/VFWTicjcJbrGp3yQP7A24xU95NiDMe23vxIU1U6qdRPFsprMDNUohMudclnd+WSHE4/McqkZs/nUU3sAKkVjg==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", + "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", "dev": true, "engines": { "node": ">=0.8.0" @@ -208,6 +209,7 @@ "version": "1.18.3", "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.3.tgz", "integrity": "sha512-lI1OsxNbS/gxRD4548Wyj22Dk8kS7eGMwD9GlBZvQmFV8FJUXoXySL1BiNzDsHUE96/DS/DHmA+F73p1Dkcktg==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", "dev": true, "dependencies": { "@azure/msal-common": "13.3.0", @@ -218,13 +220,22 @@ "node": "10 || 12 || 14 || 16 || 18" } }, + "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.0.tgz", + "integrity": "sha512-/VFWTicjcJbrGp3yQP7A24xU95NiDMe23vxIU1U6qdRPFsprMDNUohMudclnd+WSHE4/McqkZs/nUU3sAKkVjg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { @@ -312,9 +323,9 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -421,18 +432,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.0.tgz", - "integrity": "sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -462,12 +473,12 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -489,9 +500,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -543,9 +554,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -559,9 +570,9 @@ "dev": true }, "node_modules/@microsoft/microsoft-graph-types": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.38.0.tgz", - "integrity": "sha512-EXpTf/TFUb0EfBXiQ0rTmZf6fRgBn73lNfYdU2QKvqiMPQD/Cs2Gt+VmWVtK19F9Mf5Mt4bDTu5Ft0TGXOF8rA==", + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.40.0.tgz", + "integrity": "sha512-1fcPVrB/NkbNcGNfCy+Cgnvwxt6/sbIEEFgZHFBJ670zYLegENYJF8qMo7x3LqBjWX2/Eneq5BVVRCLTmlJN+g==", "dev": true }, "node_modules/@nodelib/fs.scandir": { @@ -801,9 +812,9 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", - "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "dependencies": { "@types/connect": "*", @@ -811,18 +822,18 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", - "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-U5tlMYa0U/2eFTmJgKcPWQOEICP173sJDa6OjHbj5Tv+NVaYcrq2xmdWpNXOwWYGwJu+jER/pfTLdoQ31q8PzA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.4.tgz", + "integrity": "sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==", "dev": true }, "node_modules/@types/chai": { @@ -841,18 +852,18 @@ } }, "node_modules/@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", - "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -866,9 +877,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.3", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", - "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", + "version": "8.44.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", + "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -876,9 +887,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", - "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -886,9 +897,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/expect": { @@ -898,9 +909,9 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.18", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", - "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -910,9 +921,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.37", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", - "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dev": true, "dependencies": { "@types/node": "*", @@ -931,9 +942,9 @@ } }, "node_modules/@types/glob-stream": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.0.tgz", - "integrity": "sha512-fxTWwdQmX9LWSHD7ZLlv3BHR992mKcVcDnT/2v+l/QZZo7TfDdyasqlSYVzOnMGWhRbrWeWkbj/mgezFjKynhw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==", "dev": true, "dependencies": { "@types/node": "*", @@ -953,45 +964,45 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", - "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "dev": true }, "node_modules/@types/http-proxy": { - "version": "1.17.12", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.12.tgz", - "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/micromatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.3.tgz", - "integrity": "sha512-QX1czv7QoLU76Asb1NSVSlu5zTMx/TFNswUDtQSbH9hgvCg+JHvIEoVvVSzBf1WNCT8XsK515W+p3wFOCuvhCg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.6.tgz", + "integrity": "sha512-2eulCHWqjEpk9/vyic4tBhI8a9qQEl6DaK2n/sF7TweX9YESlypgKyhXMDGt4DAOy/jhLPvVrZc8pTDAMsplJA==", "dev": true, "dependencies": { "@types/braces": "*" } }, "node_modules/@types/mime": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", - "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "node_modules/@types/minimist": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", - "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true }, "node_modules/@types/mocha": { @@ -1006,28 +1017,37 @@ "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", "dev": true }, + "node_modules/@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "node_modules/@types/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-Ejq9/KBsgfZZafGGdr9R7011EZhDzcAEMjoBl2W4eGNcZGhsUFMbUA0D+sHxjtAA1ldk3e6wapzXeyp0NSuM8Q==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.3.tgz", + "integrity": "sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==", "dev": true }, "node_modules/@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", - "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "node_modules/@types/retry": { @@ -1037,15 +1057,15 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "node_modules/@types/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", - "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -1053,18 +1073,18 @@ } }, "node_modules/@types/serve-index": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", - "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", - "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -1073,27 +1093,27 @@ } }, "node_modules/@types/sockjs": { - "version": "0.3.34", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", - "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/streamx": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/streamx/-/streamx-2.9.2.tgz", - "integrity": "sha512-HmO0hbPVLzr6HIcc86QQPjJRLpBDQmC+c/qd1jG3vpH1ZgGxl9R9xhofm19vh7Xm8wHUcKBek1Ef1OHrwipmiA==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@types/streamx/-/streamx-2.9.5.tgz", + "integrity": "sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/undertaker": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.9.tgz", - "integrity": "sha512-rOGGHtWFP4jsSKXvW2BJn+hYIAJ4cvsJi5wscbfbBHQ0yLQvTUXKvL+i72cv+8biktveFLEqbMpsKmJQxYVPQw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.11.tgz", + "integrity": "sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==", "dev": true, "dependencies": { "@types/node": "*", @@ -1102,15 +1122,15 @@ } }, "node_modules/@types/undertaker-registry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.2.tgz", - "integrity": "sha512-O9CqcXYnCsHUSd71+hohlhEaP57dThYQQ8/cDwskhTCJ1kA3E5CVaK1sbEnukP2eWlpSgae/8KqgJBw3w/DmoQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.4.tgz", + "integrity": "sha512-tW77pHh2TU4uebWXWeEM5laiw8BuJ7pyJYDh6xenOs75nhny2kVgwYbegJ4BoLMYsIrXaBpKYaPdYO3/udG+hg==", "dev": true }, "node_modules/@types/vinyl": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.8.tgz", - "integrity": "sha512-bls3EAsYVnVoPKoqgFC4Rtq7Kzte4MCk8xMA9UEPPVncJFsov9FJWYj0uxqJRwNEi9b4i4zX13FydaDrhadmHg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.11.tgz", + "integrity": "sha512-vPXzCLmRp74e9LsP8oltnWKTH+jBwt86WgRUb4Pc9Lf3pkMVGyvIo2gm9bODeGfCay2DBB/hAWDuvf07JcK4rw==", "dev": true, "dependencies": { "@types/expect": "^1.20.4", @@ -1118,9 +1138,9 @@ } }, "node_modules/@types/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-lh/EgJwJikII5ZvdcrwUcm1zoBOwVG8/Szo3Q4opb6HE8yYUPejiE5UDiDrhzgU2Zka8jKjEDPHblAvg8faMqw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.5.tgz", + "integrity": "sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==", "dev": true, "dependencies": { "@types/glob-stream": "*", @@ -1140,9 +1160,9 @@ } }, "node_modules/@types/ws": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", - "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { "@types/node": "*" @@ -1158,9 +1178,9 @@ } }, "node_modules/@types/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -1568,9 +1588,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1935,9 +1955,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.0.tgz", - "integrity": "sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -1954,9 +1974,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001539", - "electron-to-chromium": "^1.4.530", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -1988,13 +2008,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2052,9 +2073,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001541", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001541.tgz", - "integrity": "sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw==", + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", "dev": true, "funding": [ { @@ -2274,18 +2295,6 @@ "node": ">=0.1.90" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2586,15 +2595,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2696,9 +2696,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.535", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.535.tgz", - "integrity": "sha512-4548PpR4S5X5dlvX8NUIw0njH7btQtBoJWcgzpq7n2F9NQ5gMXOPP/6p6iVx6+YT3FVioNhEGa14WJj1k+2SfA==", + "version": "1.4.615", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", + "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", "dev": true }, "node_modules/emoji-regex": { @@ -2748,9 +2748,9 @@ } }, "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -2769,9 +2769,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, "node_modules/escalade": { @@ -3135,9 +3135,9 @@ } }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -3301,17 +3301,17 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { @@ -3361,20 +3361,6 @@ "node": ">=0.10.0" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -3432,10 +3418,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -3456,15 +3445,15 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3563,9 +3552,9 @@ } }, "node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3633,18 +3622,6 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3866,9 +3843,9 @@ } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" @@ -3993,12 +3970,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4338,22 +4315,22 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, "dependencies": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "shell-quote": "^1.8.1" } }, "node_modules/levn": { @@ -4497,12 +4474,12 @@ } }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { @@ -4901,6 +4878,7 @@ "version": "1.4.18", "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.18.tgz", "integrity": "sha512-QyWMWrZqpwtK6LEqhwtbikxIWqA1EOcdMvDeIDjIXdGU29wM4orwq538sPe1+JfKDIgPmJj1Fgi5B7luaw/IyA==", + "deprecated": "This package is no longer supported. Please use @azure/msal-browser instead.", "dev": true, "dependencies": { "tslib": "^1.9.3" @@ -5008,9 +4986,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-package-data": { @@ -5050,9 +5028,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5523,9 +5501,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -5765,9 +5743,9 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -5932,11 +5910,12 @@ "dev": true }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "dependencies": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { @@ -6251,9 +6230,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", - "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/spdy": { @@ -6449,9 +6428,9 @@ } }, "node_modules/terser": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz", - "integrity": "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7073,12 +7052,13 @@ } }, "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -7190,9 +7170,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", + "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/packages/graph/attachments/event.ts b/packages/graph/attachments/event.ts new file mode 100644 index 000000000..366ba0f0b --- /dev/null +++ b/packages/graph/attachments/event.ts @@ -0,0 +1,14 @@ +import { _Event } from "../calendars/types.js"; +import { addProp } from "@pnp/queryable"; +import { Attachments, IAttachments } from "./types.js"; + +declare module "../calendars/types" { + interface _Event { + readonly attachments: IAttachments; + } + interface IEvent { + readonly attachments: IAttachments; + } +} + +addProp(_Event, "attachments", Attachments); diff --git a/packages/graph/attachments/index.ts b/packages/graph/attachments/index.ts index eaa3e19b4..569d702c3 100644 --- a/packages/graph/attachments/index.ts +++ b/packages/graph/attachments/index.ts @@ -1,4 +1,6 @@ import "./conversations.js"; +import "./message.js"; +import "./event.js"; export { Attachment, diff --git a/packages/graph/attachments/message.ts b/packages/graph/attachments/message.ts new file mode 100644 index 000000000..6bc5c991d --- /dev/null +++ b/packages/graph/attachments/message.ts @@ -0,0 +1,14 @@ +import { _Message } from "../mail/messages.js"; +import { addProp } from "@pnp/queryable"; +import { Attachments, IAttachments } from "./types.js"; + +declare module "../mail/messages" { + interface _Message { + readonly attachments: IAttachments; + } + interface IMessage { + readonly attachments: IAttachments; + } +} + +addProp(_Message, "attachments", Attachments); diff --git a/packages/graph/attachments/types.ts b/packages/graph/attachments/types.ts index 2818fd31f..27c525e6b 100644 --- a/packages/graph/attachments/types.ts +++ b/packages/graph/attachments/types.ts @@ -1,14 +1,15 @@ import { Attachment as IAttachmentType } from "@microsoft/microsoft-graph-types"; import { body } from "@pnp/queryable"; -import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; -import { defaultPath, getById, IGetById } from "../decorators.js"; +import { GraphInstance, _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; +import { defaultPath, deleteable, getById, IDeleteable, IGetById } from "../decorators.js"; import { type } from "../utils/type.js"; /** * Attachment */ +@deleteable() export class _Attachment extends _GraphInstance { } -export interface IAttachment extends _Attachment { } +export interface IAttachment extends _Attachment, IDeleteable { } export const Attachment = graphInvokableFactory(_Attachment); /** @@ -18,6 +19,7 @@ export const Attachment = graphInvokableFactory(_Attachment); @getById(Attachment) export class _Attachments extends _GraphCollection { + // TODO: Adding attachments is not implemented correctly. I believe it requires updating the parent item but needs further investigation. /** * Add attachment to this collection * @@ -26,7 +28,7 @@ export class _Attachments extends _GraphCollection { */ public addFile(name: string, bytes: string | Blob): Promise { - return graphPost(this, body(type("#microsoft.graph.fileAttachment", { + return graphPost(GraphInstance(this), body(type("#microsoft.graph.fileAttachment", { contentBytes: bytes, name, }))); diff --git a/packages/graph/behaviors/paged.ts b/packages/graph/behaviors/paged.ts index 7cae1886b..3a06cf071 100644 --- a/packages/graph/behaviors/paged.ts +++ b/packages/graph/behaviors/paged.ts @@ -3,11 +3,12 @@ import { errorCheck, parseODataJSON } from "@pnp/queryable"; import { GraphCollection, IGraphQueryable, IGraphCollection } from "../graphqueryable.js"; import { ConsistencyLevel } from "./consistency-level.js"; -export interface IPagedResult { +export interface IPagedResult { count: number; - value: any | any[] | null; + value: T | T[] | null; hasNext: boolean; nextLink: string; + deltaLink: string; } /** @@ -23,7 +24,7 @@ export async function Count(col: IGraphCollection): Promise { q.query.set("$count", "true"); q.top(1); - const y: IPagedResult = await q(); + const y: IPagedResult = await q(); return y.count; } @@ -42,15 +43,18 @@ export function Paged(): TimelinePipe { const txt = await response.text(); const json = txt.replace(/\s/ig, "").length > 0 ? JSON.parse(txt) : {}; const nextLink = json["@odata.nextLink"]; + const deltaLink = json["@odata.deltaLink"]; const count = hOP(json, "@odata.count") ? parseInt(json["@odata.count"], 10) : -1; const hasNext = !stringIsNullOrEmpty(nextLink); + const hasDelta = !stringIsNullOrEmpty(deltaLink); result = { count, hasNext, nextLink: hasNext ? nextLink : null, + deltaLink: hasDelta ? deltaLink : null, value: parseODataJSON(json), }; diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index f2e221d42..c1c6f039a 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -194,7 +194,7 @@ export class _GraphCollection extends _GraphQueryable return { done: true, value: undefined }; } - const result: IPagedResult = await this._next(); + const result: IPagedResult = await this._next(); if (result.hasNext) { this._next = GraphCollection([this._next, result.nextLink]); diff --git a/packages/graph/outlook/types.ts b/packages/graph/mail/categories.ts similarity index 68% rename from packages/graph/outlook/types.ts rename to packages/graph/mail/categories.ts index 606524491..0d50b1ca8 100644 --- a/packages/graph/outlook/types.ts +++ b/packages/graph/mail/categories.ts @@ -1,8 +1,8 @@ import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; import { OutlookUser as IOutlookType, OutlookCategory as IOutlookCategoryType } from "@microsoft/microsoft-graph-types"; -import { defaultPath, deleteable, getById, IDeleteable, IGetById, IUpdateable, updateable } from "../decorators.js"; -import { graphPost } from "@pnp/graph"; -import { body } from "@pnp/queryable"; +import { addable, defaultPath, deleteable, getById, IAddable, IDeleteable, IGetById, IUpdateable, updateable } from "../decorators.js"; +// import { graphPost } from "@pnp/graph"; +// import { body } from "@pnp/queryable"; /** * Outlook @@ -31,23 +31,9 @@ export const OutlookCategory = graphInvokableFactory(_OutlookC */ @defaultPath("masterCategories") @getById(OutlookCategory) -export class _MasterCategories extends _GraphCollection { - - /** - * Adds a new event to the collection - * - * @param properties The set of properties used to create the event - */ - public async add(properties: IOutlookCategoryType): Promise { - - const data = await graphPost(this, body(properties)); - - return { - data, - }; - } -} -export interface IMasterCategories extends _MasterCategories, IGetById { } +@addable() +export class _MasterCategories extends _GraphCollection { } +export interface IMasterCategories extends _MasterCategories, IGetById, IAddable { } export const MasterCategories = graphInvokableFactory(_MasterCategories); /** diff --git a/packages/graph/mail/folders.ts b/packages/graph/mail/folders.ts new file mode 100644 index 000000000..d92ab32ce --- /dev/null +++ b/packages/graph/mail/folders.ts @@ -0,0 +1,108 @@ +import { + MailFolder as IMailFolderType, + MailSearchFolder as IMailSearchFolderType, +} from "@microsoft/microsoft-graph-types"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphGet, GraphQueryable, graphPost } from "../graphqueryable.js"; +import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; +import { body, InjectHeaders } from "@pnp/queryable/index.js"; +import { IMessageRules, IMessages, MessageRules, Messages } from "./messages.js"; +import { IPagedResult, Paged } from "../behaviors/paged.js"; + +/** + * Mail Folder or Mail Search Folder + */ +@updateable() +@deleteable() +export class _MailFolder extends _GraphInstance { + /** + * Gets the child folders in this mail folder + * + */ + public get childFolders(): IMailFolders { + return MailFolders(this, "childFolders"); + } + + /** + * Gets the messages in this mail folder + * + */ + public get messages(): IMessages { + return Messages(this); + } + + /** + * Gets the child folders in this mail folder + * + */ + public get messageRules(): IMessageRules { + return MessageRules(this); + } + + /** + * Copy the mail folder + * + * @param destinationFolderId The id of the destination folder to copy the message to + */ + public async copy(destinationFolderId: string): Promise { + return await graphPost(MailFolder(this, "copy"), body({ destinationId: destinationFolderId })); + } + + /** + * Move the mail folder + * + * @param destinationFolderId The id of the destination folder to copy the message to + */ + public async move(destinationFolderId: string): Promise { + return await graphPost(MailFolder(this, "move"), body({ destinationId: destinationFolderId })); + } +} +export interface IMailFolder extends _MailFolder, IUpdateable, IDeleteable { } +export const MailFolder = graphInvokableFactory(_MailFolder); + +/** + * Mail Folders or Mail Search Folders + */ +@defaultPath("mailFolders") +@getById(MailFolder) +@addable() +export class _MailFolders extends _GraphCollection { + public get includeHidden() { + const q = GraphQueryable(this); + q.query.set("includeHiddenFolders", "true"); + return q; + } + + /** + * Gets the delta for the current set of mail folders + * + * @param properties The set of properties used to retrieve specific types of messages + */ + public async delta(properties?: IMailFolderDelta, maxPageSize?: number): Promise> { + properties = properties || {}; + const querystring = Object.keys(properties)?.map(key => `${key}=${properties[key]}`).join("&") || ""; + const path = (querystring.length > 0) ? `delta?${querystring}` : "delta"; + const q = GraphQueryable(this, path); + if (maxPageSize) { + q.using(InjectHeaders({ + "Prefer": `odata.maxpagesize=${maxPageSize}`, + })); + } + return await graphGet(q.using(Paged())); + } + +} +export interface IMailFolders extends _MailFolders, IGetById, IAddable { } +export const MailFolders = graphInvokableFactory(_MailFolders); + +// export interface IDelta { +// nextLink: string; +// deltaLink: string; +// values: T[]; +// valuesCollection: IGraphQueryableCollection; +// } + + +export interface IMailFolderDelta { + "$skiptoken"?: string; + "$deltatoken"?: string; +} diff --git a/packages/graph/mail/funcs.ts b/packages/graph/mail/funcs.ts index 9e3fba5c8..3b306512f 100644 --- a/packages/graph/mail/funcs.ts +++ b/packages/graph/mail/funcs.ts @@ -1,15 +1,31 @@ -import { IGraphQueryable, GraphCollection, graphPost } from "../graphqueryable.js"; -import { body } from "@pnp/queryable"; +import { TimeZoneInformation, Message as IMessageType } from "@microsoft/microsoft-graph-types"; +import { graphPost, IGraphQueryable } from "../graphqueryable.js"; +import { InjectHeaders, body } from "@pnp/queryable/index.js"; +import { Message } from "./messages.js"; /** * Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, * from the user's default calendar, or from some other calendar of the user's * * @param this IGraphQueryable instance - * @param message - should roughly match Message type in @microsoft/microsoft-graph-types. - * Am not typing the property because attaching a file require the property "@odata.type": "#microsoft.graph.fileAttachment" - * which is not included the typing and therefore will make the function unusable in that scenario. + * @param type "reply" | "replyAll" | "createReply" | "createReplyAll" | "forward" | "createForward" + * @param response The body of the response message + * If using JSON provide either comment: string or message: IMessageType. + * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. + * @param timeZone (optional) The time zone to use when creating the draft. + * Only use when providing a JSON message. */ -export function mailSend(this: IGraphQueryable, message: any): Promise { - return graphPost(GraphCollection(this, "mailSend"), body(message)); +export async function mailResponse( + gq: IGraphQueryable, + type: "reply" | "replyAll" | "createReply" | "createReplyAll" | "forward" | "createForward", + response: any, + timeZone: TimeZoneInformation = null): Promise { + + const header = (timeZone != null) ? { "Prefer: outlook.timezone": timeZone.alias } : null; + const postBody = response; + const q = Message(gq, type); + if (header != null) { + q.using(InjectHeaders(header)); + } + return await graphPost(q, body(postBody)); } diff --git a/packages/graph/mail/groups.ts b/packages/graph/mail/groups.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/graph/mail/index.ts b/packages/graph/mail/index.ts index b9f93edaa..88f9dcc8e 100644 --- a/packages/graph/mail/index.ts +++ b/packages/graph/mail/index.ts @@ -1,5 +1,40 @@ import "./users.js"; -// export { +export { + Outlook, + IOutlook, + IMasterCategories, + MasterCategories, + IMasterCategoryAddResult, + OutlookCategory, + IOutlookCategory, +} from "./categories.js"; + +export { + IMailboxSettings, + MailboxSettings, + FocusedInboxOverrides, + IFocusedInboxOverrides, +} from "./mailbox.js"; + +export { + IMessage, + IMessages, + IMessageRule, + IMessageRules, + IMessageDelta, + Message, + Messages, + MessageRule, + MessageRules, +} from "./messages.js"; + +export { + IMailFolder, + IMailFolders, + MailFolder, + MailFolders, + IMailFolderDelta, +} from "./folders.js"; + -// } from "./types.js"; diff --git a/packages/graph/mail/mailbox.ts b/packages/graph/mail/mailbox.ts new file mode 100644 index 000000000..f793342b8 --- /dev/null +++ b/packages/graph/mail/mailbox.ts @@ -0,0 +1,104 @@ +import { + MailboxSettings as IMailboxSettingsType, + AutomaticRepliesSetting as IAutomaticRepliesSetting, + LocaleInfo as ILocaleInfo, + WorkingHours as IWorkingHours, + UserPurpose as IUserPurpose, + InferenceClassificationOverride as IInterfaceClassificationOverride, +} from "@microsoft/microsoft-graph-types"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphGet, GraphQueryable } from "../graphqueryable.js"; +import { defaultPath, getById, IGetById, addable, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; + +/** + * MailboxSettings + */ +@defaultPath("mailboxSettings") +@updateable() +export class _MailboxSettings extends _GraphInstance { + /** + * Get the automatic replies setting + * + */ + public async automaticRepliesSetting(): Promise { + return graphGet(GraphQueryable(this, "automaticRepliesSetting")); + } + + /** + * Get the mailbox settings date format + * + */ + public async dateFormat(): Promise { + return graphGet(GraphQueryable(this, "dateFormat")); + } + + /** + * Get the delegateMeetingMessageDeliveryOptions settings + * + */ + // DOCUMENTED BUT NOT IMPLEMENTED + // public async delegateMeetingMessageDeliveryOptions(): Promise { + // return graphGet(GraphQueryable(this, "delegateMeetingMessageDeliveryOptions")); + // } + + /** + * Get the delegateMeetingMessageDeliveryOptions settings + * + */ + public async language(): Promise { + return graphGet(GraphQueryable(this, "language")); + } + + /** + * Get the mailbox settings time format + * + */ + public async timeFormat(): Promise { + return graphGet(GraphQueryable(this, "timeFormat")); + } + + /** + * Get the mailbox settings time format + * + */ + public async timeZone(): Promise { + return graphGet(GraphQueryable(this, "timeZone")); + } + + /** + * Get the mailbox settings working hours + * + */ + public async workingHours(): Promise { + return graphGet(GraphQueryable(this, "workingHours")); + } + + /** + * Get the mailbox settings user purpose + * + */ + public async userPurpose(): Promise { + return graphGet(GraphQueryable(this, "userPurpose")); + } +} +export interface IMailboxSettings extends _MailboxSettings, IUpdateable { } +export const MailboxSettings = graphInvokableFactory(_MailboxSettings); + +/** + * Focused Inbox Override + */ +@defaultPath("inferenceClassification/overrides") +@updateable() +@deleteable() +export class _FocusedInboxOverride extends _GraphInstance {} +export interface IFocusedInboxOverride extends _FocusedInboxOverride, IUpdateable, IDeleteable { } +export const FocusedInboxOverride = graphInvokableFactory(_FocusedInboxOverride); + +/** + * Focused Inbox Overrides + */ +@defaultPath("inferenceClassification/overrides") +@getById(FocusedInboxOverride) +@addable() +export class _FocusedInboxOverrides extends _GraphCollection {} +export interface IFocusedInboxOverrides extends _FocusedInboxOverrides, IGetById, IAddable { } +export const FocusedInboxOverrides = graphInvokableFactory(_FocusedInboxOverrides); diff --git a/packages/graph/mail/messages.ts b/packages/graph/mail/messages.ts new file mode 100644 index 000000000..08373ad77 --- /dev/null +++ b/packages/graph/mail/messages.ts @@ -0,0 +1,178 @@ +import { + Message as IMessageType, + MessageRule as IMessageRuleType, + TimeZoneInformation, +} from "@microsoft/microsoft-graph-types"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphGet, GraphQueryable, graphPost } from "../graphqueryable.js"; +import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; +import { body, InjectHeaders } from "@pnp/queryable/index.js"; +import { mailResponse } from "./funcs.js"; +import { IPagedResult, Paged } from "../behaviors/paged.js"; + +/** + * Message + */ +@updateable() +@deleteable() +export class _Message extends _GraphInstance { + + /** + * Sends the message + * + */ + public async send(): Promise { + return await graphPost(Message(this, "send")); + } + + /** + * Copy the message + * + * @param destinationFolderId The id of the destination folder to copy the message to + */ + public async copy(destinationFolderId: string): Promise { + return await graphPost(Message(this, "copy"), body({ destinationId: destinationFolderId })); + } + + /** + * Move the message + * + * @param destinationFolderId The id of the destination folder to copy the message to + */ + public async move(destinationFolderId: string): Promise { + return await graphPost(Message(this, "move"), body({ destinationId: destinationFolderId })); + } + + /** + * Create a draft response + * + * @param response (optional) The body of the response message + * If using JSON provide either comment: string or message: IMessageType. + * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. + * @param timeZone (optional) The time zone to use when creating the draft. + * Only use when providing a JSON message. + */ + public async createReply(response?: any, timeZone?: TimeZoneInformation): Promise { + return (await mailResponse(this, "createReply", response, timeZone)) as IMessageType; + } + + /** + * Send a message response + * + * @param response (optional) The body of the response message + * If using JSON provide either comment: string or message: IMessageType. + * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. + * @param timeZone (optional) The time zone to use when creating the draft. + * Only use when providing a JSON message. + */ + public async reply(response?: any, timeZone?: TimeZoneInformation): Promise { + return (await mailResponse(this, "reply", response, timeZone)) as void; + } + + /** + * Create a draft response message to all + * + * @param response (optional) The body of the response message + * If using JSON provide either comment: string or message: IMessageType. + * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. + * @param timeZone (optional) The time zone to use when creating the draft. + * Only use when providing a JSON message. + */ + public async createReplyAll(response?: any, timeZone?: TimeZoneInformation): Promise { + return (await mailResponse(this, "createReplyAll", response, timeZone)) as IMessageType; + } + + /** + * Send a message response to all + * + * @param response (optional) The body of the response message + * If using JSON provide either comment: string or message: IMessageType. + * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. + * @param timeZone (optional) The time zone to use when creating the draft. + * Only use when providing a JSON message. + */ + public async replyAll(response?: any, timeZone?: TimeZoneInformation): Promise { + return (await mailResponse(this, "replyAll", response, timeZone)) as void; + } + + /** + * Create a draft forward message + * + * @param forward (optional) The body of the forward message + * If using JSON provide either comment: string or message: IMessageType. + * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. + * @param timeZone (optional) The time zone to use when creating the draft. + * Only use when providing a JSON message. + */ + public async createForward(forward?: any, timeZone?: TimeZoneInformation): Promise { + return (await mailResponse(this, "createForward", forward, timeZone)) as IMessageType; + } + + /** + * Forward a message + * + * @param forward (optional) The body of the forward message + * If using JSON provide either comment: string or message: IMessageType. + * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. + * @param timeZone (optional) The time zone to use when creating the draft. + * Only use when providing a JSON message. + */ + public async forward(forward?: any, timeZone?: TimeZoneInformation): Promise { + return (await mailResponse(this, "forward", forward, timeZone)) as void; + } +} +export interface IMessage extends _Message, IUpdateable, IDeleteable { } +export const Message = graphInvokableFactory(_Message); + +/** + * Messages + */ +@defaultPath("messages") +@getById(Message) +@addable() +export class _Messages extends _GraphCollection { + /** + * Gets the delta for the current set of messages + * + * @param properties The set of properties used to retrieve specific types of messages + */ + public async delta(properties?: IMessageDelta, maxPageSize?: number): Promise> { + properties = properties || {}; + const querystring = Object.keys(properties)?.map(key => `${key}=${properties[key]}`).join("&") || ""; + const path = (querystring.length > 0) ? `delta?${querystring}` : "delta"; + const q = GraphQueryable(this, path); + if (maxPageSize) { + q.using(InjectHeaders({ + "Prefer": `odata.maxpagesize=${maxPageSize}`, + })); + } + return await graphGet(q.using(Paged())); + } +} +export interface IMessages extends _Messages, IGetById, IAddable, IDeleteable { } +export const Messages = graphInvokableFactory(_Messages); + + +/** + * Message Rule + */ +@updateable() +@deleteable() +export class _MessageRule extends _GraphInstance {} +export interface IMessageRule extends _MessageRule, IUpdateable, IDeleteable { } +export const MessageRule = graphInvokableFactory(_MessageRule); + +/** + * Message Rules + */ +@defaultPath("messageRules") +@getById(MessageRule) +@addable() +export class _MessageRules extends _GraphCollection {} +export interface IMessageRules extends _MessageRules, IGetById, IAddable { } +export const MessageRules = graphInvokableFactory(_MessageRules); + +export interface IMessageDelta { + "$skiptoken"?: string; + "$deltatoken"?: string; + changeType?: string; +} diff --git a/packages/graph/mail/types.ts b/packages/graph/mail/types.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/graph/mail/users.ts b/packages/graph/mail/users.ts index 6349a3146..c452fcd7d 100644 --- a/packages/graph/mail/users.ts +++ b/packages/graph/mail/users.ts @@ -1,17 +1,65 @@ -import { _User } from "../users/types.js"; -import { mailSend } from "./funcs.js"; +import { _User, User } from "../users/types.js"; +import { IMessages, Messages, IMessage } from "./messages.js"; +import { IMailFolders, MailFolders } from "./folders.js"; +import { IOutlook, Outlook } from "./categories.js"; +import { FocusedInboxOverrides, IFocusedInboxOverrides, IMailboxSettings, MailboxSettings } from "./mailbox.js"; +import { addProp, body } from "@pnp/queryable"; +import { graphPost } from "../graphqueryable.js"; declare module "../users/types" { interface _User { - mailSend(message: any): void; + readonly messages: IMessages; + readonly mailboxSettings: IMailboxSettings; + readonly mailFolders: IMailFolders; + readonly outlook: IOutlook; + readonly focusedInboxOverrides: IFocusedInboxOverrides; + sendMail(message: IMessage): Promise; + translateExchangeIds(translateExchangeIds: ITranslateExchangeIds): Promise; } interface IUser { - mailSend(message: any): void; + readonly messages: IMessages; + readonly mailboxSettings: IMailboxSettings; + readonly mailFolders: IMailFolders; + readonly outlook: IOutlook; + readonly focusedInboxOverrides: IFocusedInboxOverrides; + sendMail(message: IMessage): Promise; + translateExchangeIds(translateExchangeIds: ITranslateExchangeIds): Promise; } } -// addProp(_User, "calendar", Calendar); -// addProp(_User, "calendars", Calendars); -// addProp(_User, "events", Events); +addProp(_User, "messages", Messages); +addProp(_User, "mailboxSettings", MailboxSettings); +addProp(_User, "mailFolders", MailFolders); +addProp(_User, "outlook", Outlook); +addProp(_User, "focusedInboxOverrides", FocusedInboxOverrides, "inferenceClassification/overrides"); -_User.prototype.mailSend = mailSend; +_User.prototype.sendMail = function (this: _User, message: IMessage): Promise { + return graphPost(User(this, "sendMail"), body(message)); +}; + +/** + * Translate identifiers of Outlook-related resources between formats. + * + */ +_User.prototype.translateExchangeIds = function (this: _User, translateExchangeIds: ITranslateExchangeIds): Promise { + return graphPost(User(this, "translateExchangeIds"), body(translateExchangeIds)); +}; + +export interface IExchangeIdFormat { + entryId: string; + ewsId: string; + immutableEntryId: string; + restId: string; + restImmutableEntryId: string; +} + +export interface ITranslateExchangeIds { + inputIds: string[]; + sourceIdType: IExchangeIdFormat; + targetIdType: IExchangeIdFormat; +} + +export interface ITranslateExchangeIdsResponse { + sourceId: string; + targetId: string; +} diff --git a/packages/graph/messages/index.ts b/packages/graph/messages/index.ts deleted file mode 100644 index 051dbe593..000000000 --- a/packages/graph/messages/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import "./users.js"; - -export { - IMailFolder, - IMessage, - IMailFolders, - IMailboxSettings, - IMessages, - MailFolder, - MailFolders, - MailboxSettings, - Message, - Messages, -} from "./types.js"; diff --git a/packages/graph/messages/types.ts b/packages/graph/messages/types.ts deleted file mode 100644 index 342e544ce..000000000 --- a/packages/graph/messages/types.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Message as IMessageType, MailFolder as IMailFolderType, MailboxSettings as IMailboxSettingsType } from "@microsoft/microsoft-graph-types"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; -import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable } from "../decorators.js"; - -/** - * Message - */ -export class _Message extends _GraphInstance { } -export interface IMessage extends _Message { } -export const Message = graphInvokableFactory(_Message); - -/** - * Messages - */ -@defaultPath("messages") -@getById(Message) -@addable() -export class _Messages extends _GraphCollection { } -export interface IMessages extends _Messages, IGetById, IAddable { } -export const Messages = graphInvokableFactory(_Messages); - -/** - * MailFolder - */ -export class _MailFolder extends _GraphInstance { } -export interface IMailFolder extends _MailFolder { } -export const MailFolder = graphInvokableFactory(_MailFolder); - -/** - * MailFolders - */ -@defaultPath("mailFolders") -@getById(MailFolder) -@addable() -export class _MailFolders extends _GraphCollection { } -export interface IMailFolders extends _MailFolders, IGetById, IAddable { } -export const MailFolders = graphInvokableFactory(_MailFolders); - -/** - * MailboxSettings - */ -@defaultPath("mailboxSettings") -@updateable() -export class _MailboxSettings extends _GraphInstance { } -export interface IMailboxSettings extends _MailboxSettings, IUpdateable { } -export const MailboxSettings = graphInvokableFactory(_MailboxSettings); diff --git a/packages/graph/messages/users.ts b/packages/graph/messages/users.ts deleted file mode 100644 index 281280c35..000000000 --- a/packages/graph/messages/users.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { addProp, body } from "@pnp/queryable"; -import { _User, User } from "../users/types.js"; -import { IMessages, Messages, IMailboxSettings, MailboxSettings, IMailFolders, MailFolders, IMessage } from "./types.js"; -import { graphPost } from "../graphqueryable.js"; - -declare module "../users/types" { - interface _User { - readonly messages: IMessages; - readonly mailboxSettings: IMailboxSettings; - readonly mailFolders: IMailFolders; - sendMail(message: IMessage): Promise; - } - interface IUser { - readonly messages: IMessages; - readonly mailboxSettings: IMailboxSettings; - readonly mailFolders: IMailFolders; - sendMail(message: IMessage): Promise; - } -} - -addProp(_User, "messages", Messages); -addProp(_User, "mailboxSettings", MailboxSettings); -addProp(_User, "mailFolders", MailFolders); - -_User.prototype.sendMail = function (this: _User, message: IMessage): Promise { - return graphPost(User(this, "sendMail"), body(message)); -}; diff --git a/packages/graph/outlook/index.ts b/packages/graph/outlook/index.ts deleted file mode 100644 index 8e9ee1f97..000000000 --- a/packages/graph/outlook/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import "./users.js"; - -export { - Outlook, - IOutlook, - IMasterCategories, - MasterCategories, - IMasterCategoryAddResult, - OutlookCategory, - IOutlookCategory, -} from "./types.js"; diff --git a/packages/graph/outlook/users.ts b/packages/graph/outlook/users.ts deleted file mode 100644 index ccf2de521..000000000 --- a/packages/graph/outlook/users.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { addProp } from "@pnp/queryable"; -import { _User } from "../users/types.js"; -import { Outlook, IOutlook } from "./types.js"; - -declare module "../users/types" { - interface _User { - readonly outlook: IOutlook; - } - interface IUser { - readonly outlook: IOutlook; - } -} - -addProp(_User, "outlook", Outlook); diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index 2edcc11ad..e7b213db4 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -9,7 +9,7 @@ import "../groups/index.js"; import "../insights/index.js"; import "../invitations/index.js"; import "../members/index.js"; -import "../messages/index.js"; +import "../mail/index.js"; import "../files/index.js"; import "../onenote/index.js"; import "../operations/index.js"; @@ -32,7 +32,7 @@ export * from "../groups/index.js"; export * from "../insights/index.js"; export * from "../invitations/index.js"; export * from "../members/index.js"; -export * from "../messages/index.js"; +export * from "../mail/index.js"; export * from "../files/index.js"; export * from "../onenote/index.js"; export * from "../operations/index.js"; diff --git a/test/graph/analytics.ts b/test/graph/analytics.ts index 24998a917..855c11fac 100644 --- a/test/graph/analytics.ts +++ b/test/graph/analytics.ts @@ -9,6 +9,7 @@ import { List } from "@microsoft/microsoft-graph-types"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { IAnalyticsOptions } from "@pnp/graph/analytics"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import { ListItem } from "@pnp/graph/list-item"; describe("Analytics", function () { let testUserName = ""; @@ -40,9 +41,7 @@ describe("Analytics", function () { const listResult = await site.lists.add(sampleList); listResultId = listResult.data.id; const listItemProps: any = { - fields: { - title: "Test Item", - }, + title: "Test Item", }; const listItem = await site.lists.getById(listResultId).items.add(listItemProps); listItemId = listItem.data.id; @@ -73,7 +72,8 @@ describe("Analytics", function () { return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); }); - it("Get List Item Analytics - Last Seven Days", async function () { + // Analytics is not working on list items, returning item not found error. + it.skip("Get List Item Analytics - Last Seven Days", async function () { if (stringIsNullOrEmpty(listItemId)) { this.skip(); } @@ -103,11 +103,13 @@ describe("Analytics", function () { return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); }); - it("Get List Item Analytics - All Time", async function () { + // Analytics is not working on list items, returning item not found error. + it.skip("Get List Item Analytics - All Time", async function () { if (stringIsNullOrEmpty(listItemId)) { this.skip(); } const options: IAnalyticsOptions = { timeRange: "allTime" }; + const item: ListItem = await site.lists.getById(listResultId).items.getById(listItemId)(); const analytics = await site.lists.getById(listResultId).items.getById(listItemId).analytics(options); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); }); diff --git a/test/graph/appCatalogs.ts b/test/graph/appCatalogs.ts index 39aa54dc7..10db8f088 100644 --- a/test/graph/appCatalogs.ts +++ b/test/graph/appCatalogs.ts @@ -3,7 +3,7 @@ import "@pnp/graph/teams"; import "@pnp/graph/appCatalog"; import { pnpTest } from "../pnp-test.js"; -describe.only("AppCatalog", function () { +describe("AppCatalog", function () { before(async function () { diff --git a/test/graph/attachments.ts b/test/graph/attachments.ts new file mode 100644 index 000000000..66dca8fc6 --- /dev/null +++ b/test/graph/attachments.ts @@ -0,0 +1,78 @@ +import { expect } from "chai"; +import getValidUser from "./utilities/getValidUser.js"; +import "@pnp/graph/users"; +import "@pnp/graph/teams"; +import "@pnp/graph/conversations"; +import "@pnp/graph/attachments"; +import { getRandomString } from "@pnp/core"; +import { Message } from "@microsoft/microsoft-graph-types"; + +describe.skip("Attachments", function () { + let testUserName = ""; + let groupId = ""; + let inboxFolder = null; + + const draftMessage: Message = { + subject: "PnPjs Test Message", + importance: "low", + body: { + contentType: "html", + content: "This is a test message!", + }, + toRecipients: [ + { + emailAddress: { + address: "AdeleV@contoso.onmicrosoft.com", + }, + }, + ], + }; + + before(async function () { + + if (!this.pnp.settings.enableWebTests) { + this.skip(); + } + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + inboxFolder = this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox"); + const groups = await this.pnp.graph.users.getById(testUserName).joinedTeams(); + if (groups.length > 0) { + groupId = groups[0].id; + } else { + this.skip(); + } + }); + + describe.skip("Post", function () { + it("post getById", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); + const threadPost = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads.getById(convThreads[0].id).posts(); + const post = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id) + .threads.getById(convThreads[0].id).posts.getById(threadPost[0].id)(); + return expect(post).to.have.property("id"); + }); + + // Remaining endpoints not supported by app permissions + }); + + describe.skip("Message", function () { + it("list", async function () { + const draft = await inboxFolder.messages.add(draftMessage); + const fileName = getRandomString(8) + ".txt"; + await inboxFolder.messages.getById(draft.id).attachments.addFile(fileName, "VGhpcyBpcyBhIGZpbGUgdG8gYmUgYXR0YWNoZWQu"); + const attachments = await inboxFolder.messages.getById(draft.id).attachments(); + return expect(attachments).to.have.length.greaterThan(0); + }); + + it("getById", async function () { + const draft = await inboxFolder.messages.add(draftMessage); + const fileName = getRandomString(8) + ".txt"; + const attachment = await inboxFolder.messages.getById(draft.id).attachments.addFile(fileName, "This is a test attachment"); + return expect(attachment).to.have.property("id"); + }); + + // Remaining endpoints not supported by app permissions + }); +}); diff --git a/test/graph/group-conversations.ts b/test/graph/group-conversations.ts new file mode 100644 index 000000000..f343b2206 --- /dev/null +++ b/test/graph/group-conversations.ts @@ -0,0 +1,126 @@ +import { expect } from "chai"; +import getValidUser from "./utilities/getValidUser.js"; +import "@pnp/graph/users"; +import "@pnp/graph/teams"; +import "@pnp/graph/conversations"; +import { IPostForwardInfo } from "@pnp/graph/conversations"; +import { + Post as IPostType, +} from "@microsoft/microsoft-graph-types"; +import { getRandomString } from "@pnp/core"; + +describe("Group Conversations", function () { + let testUserName = ""; + let groupId = ""; + + const draftPost: IPostType = { + body: { content: "This is a post" }, + from: { + emailAddress: { + address: "", + name: "", + }, + }, + }; + + const postForwardInfo: IPostForwardInfo = { + toRecipients: [ + { + emailAddress: { + address: "", + name: "", + }, + }, + ], + }; + + before(async function () { + + if (!this.pnp.settings.enableWebTests) { + this.skip(); + } + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + draftPost.from.emailAddress.address = userInfo.userPrincipalName; + draftPost.from.emailAddress.name = userInfo.displayName; + postForwardInfo.toRecipients[0].emailAddress.address = userInfo.userPrincipalName; + postForwardInfo.toRecipients[0].emailAddress.name = userInfo.displayName; + const groups = await this.pnp.graph.users.getById(testUserName).joinedTeams(); + if (groups.length > 0) { + groupId = groups[0].id; + } else { + this.skip(); + } + }); + + describe("Group Conversations", function () { + it("list conversations", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + return expect(conversations.length).to.be.greaterThan(0); + }); + + it("conversation getById", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const conversation = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id)(); + return expect(conversation).to.have.property("id"); + }); + + it("list threads", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); + return expect(convThreads).is.not.null; + }); + + it("thread getById", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); + const thread = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads.getById(convThreads[0].id)(); + return expect(thread).to.have.property("id"); + }); + + it("list posts", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); + let threadPost = null; + if (convThreads.length > 0) { + threadPost = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads.getById(convThreads[0].id).posts(); + } + return expect(threadPost).is.not.null; + }); + + it("post getById", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); + const threadPost = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads.getById(convThreads[0].id).posts(); + const post = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id) + .threads.getById(convThreads[0].id).posts.getById(threadPost[0].id)(); + return expect(post).to.have.property("id"); + }); + + it("post reply", async function () { + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); + const threadPost = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads.getById(convThreads[0].id).posts(); + const post = this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id) + .threads.getById(convThreads[0].id).posts.getById(threadPost[0].id); + const p = JSON.parse(JSON.stringify(draftPost)); + p.body.content = `Test Reply ${getRandomString(4)}`; + const reply = await post.reply(p); + return expect(reply).to.have.property("id"); + }); + + it("post forward", async function () { + let success = false; + const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); + const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); + const threadPost = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads.getById(convThreads[0].id).posts(); + const post = this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id) + .threads.getById(convThreads[0].id).posts.getById(threadPost[0].id); + await post.forward(postForwardInfo); + success = true; + return expect(success).to.be.true; + }); + + // Remaining endpoints not supported by app permissions + }); +}); diff --git a/test/graph/outlook.ts b/test/graph/mail-categories.ts similarity index 89% rename from test/graph/outlook.ts rename to test/graph/mail-categories.ts index 98635c397..468c041f4 100644 --- a/test/graph/outlook.ts +++ b/test/graph/mail-categories.ts @@ -1,11 +1,11 @@ import { expect } from "chai"; import "@pnp/graph/users"; -import "@pnp/graph/outlook"; +import "@pnp/graph/mail"; import { OutlookCategory } from "@microsoft/microsoft-graph-types"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; -describe("Outlook", function () { +describe("Mail: Categories", function () { let testUserName = ""; const testCategoryList: string[] = []; @@ -37,7 +37,7 @@ describe("Outlook", function () { return; }); - it("outlook", async function () { + it("Mail: Categories", async function () { const outlookUser = await this.pnp.graph.users.getById(testUserName).outlook(); return expect(outlookUser).is.not.null; }); @@ -56,7 +56,7 @@ describe("Outlook", function () { }; const addedCategory = await this.pnp.graph.users.getById(testUserName).outlook.masterCategories.add(testCategory); - testCategoryList.push(addedCategory.data.id); + testCategoryList.push(addedCategory.id); return expect(addedCategory).is.not.null; }); @@ -68,13 +68,13 @@ describe("Outlook", function () { }; const addedCategory = await this.pnp.graph.users.getById(testUserName).outlook.masterCategories.add(testCategory); - testCategoryList.push(addedCategory.data.id); + testCategoryList.push(addedCategory.id); const updateCategory: OutlookCategory = { color: "preset3", }; - const updatedCategory = this.pnp.graph.users.getById(testUserName).outlook.masterCategories.getById(addedCategory.data.id).update(updateCategory); + const updatedCategory = this.pnp.graph.users.getById(testUserName).outlook.masterCategories.getById(addedCategory.id).update(updateCategory); return expect(updatedCategory).to.eventually.be.fulfilled; }); @@ -87,7 +87,7 @@ describe("Outlook", function () { const addedCategory = await this.pnp.graph.users.getById(testUserName).outlook.masterCategories.add(testCategory); - const deleteCategory = this.pnp.graph.users.getById(testUserName).outlook.masterCategories.getById(addedCategory.data.id).delete(); + const deleteCategory = this.pnp.graph.users.getById(testUserName).outlook.masterCategories.getById(addedCategory.id).delete(); return expect(deleteCategory).to.eventually.be.fulfilled; }); diff --git a/test/graph/mail-folders.ts b/test/graph/mail-folders.ts new file mode 100644 index 000000000..0dce3e0d1 --- /dev/null +++ b/test/graph/mail-folders.ts @@ -0,0 +1,194 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import getValidUser from "./utilities/getValidUser.js"; +import { MailFolder as IMailFolder, MailSearchFolder as IMailSearchFolder } from "@microsoft/microsoft-graph-types"; + +describe("Mail: Folders", function () { + const testFolderName = "PnP Test Folder"; + let testUserName = ""; + let inboxFolder = null; + + const draftFolder: IMailFolder = { + displayName: testFolderName, + isHidden: false, + }; + + const draftSearchFolder: IMailSearchFolder = { + displayName: `${testFolderName} Search`, + sourceFolderIds: [], + }; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + inboxFolder = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox")(); + draftSearchFolder.sourceFolderIds.push(inboxFolder.id); + }); + + // Clean up testing folders + after(async function () { + if (!stringIsNullOrEmpty(testUserName)) { + const folders: IMailFolder[] = await this.pnp.graph.users.getById(testUserName).mailFolders(); + for(let i=0; i < folders.length; i++){ + if(folders[i].displayName.startsWith(testFolderName)){ + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folders[i].id).delete(); + } + } + } + return; + }); + + it("Mail: Folder List", async function () { + const folders = await this.pnp.graph.users.getById(testUserName).mailFolders(); + return expect(folders).is.not.null; + }); + + it("Mail: Folder List - Include Hidden", async function () { + const folders = await this.pnp.graph.users.getById(testUserName).mailFolders.includeHidden(); + return expect(folders).is.not.null; + }); + + it("Mail: Folder List - Delta", async function () { + const folders = await this.pnp.graph.users.getById(testUserName).mailFolders.delta(); + return expect(folders).has.property("deltaLink"); + }); + + it("Mail: Get Folder by Id (Add/Delete)", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.add(f); + let success = false; + if (folder !== null) { + const getFolder = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id)(); + if(getFolder !== null) { + success = (getFolder.displayName === f.displayName); + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Folder Add", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.add(f); + const success = (folder !== null); + if (success) { + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).delete(); + } + return expect(success).to.be.true; + }); + + it("Mail: Search Folder Add", async function () { + const f: IMailSearchFolder = JSON.parse(JSON.stringify(draftSearchFolder)); + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder.id).childFolders.add(f); + const success = (folder !== null); + if (success) { + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).delete(); + } + return expect(success).to.be.true; + }); + + it("Mail: Folder Update", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + const newDisplayName = `${testFolderName} ${getRandomString(8)}`; + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.add(f); + let success = false; + if (folder !== null) { + const update = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).update({ displayName: newDisplayName }); + if (update !== null) { + success = (update.displayName === newDisplayName); + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(update.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Folder Delete", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.add(f); + let success = false; + if (folder !== null) { + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).delete(); + try { + const found = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id)(); + if (found?.id === null) { + success = true; + } + } catch (e) { + success = true; + } + } + return expect(success).to.be.true; + }); + + it("Mail: Folder Copy", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.add(f); + let success = false; + if (folder !== null) { + const folderCopy = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).copy(inboxFolder.id); + if (folderCopy !== null) { + success = true; + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folderCopy.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Folder Move", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder: IMailFolder = await this.pnp.graph.users.getById(testUserName).mailFolders.add(f); + let success = false; + if (folder !== null) { + const folderMove = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).move("drafts"); + if (folderMove !== null) { + success = (folderMove.displayName === folder.displayName); + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folderMove.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Child Folder List", async function () { + const folders = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").childFolders(); + return expect(folders).is.not.null; + }); + + it("Mail: Child Folder Add", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").childFolders.add(f); + const success = (folder !== null); + if (success) { + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).delete(); + } + return expect(success).to.be.true; + }); + + it("Mail: Child Folder Messages List", async function () { + const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); + f.displayName = `${testFolderName} ${getRandomString(8)}`; + const folder = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").childFolders.add(f); + let success = false; + if (folder !== null) { + const messages = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).messages(); + success = (messages !== null); + await this.pnp.graph.users.getById(testUserName).mailFolders.getById(folder.id).delete(); + } + return expect(success).to.be.true; + }); +}); + diff --git a/test/graph/mail-mailbox.ts b/test/graph/mail-mailbox.ts new file mode 100644 index 000000000..e8229d37e --- /dev/null +++ b/test/graph/mail-mailbox.ts @@ -0,0 +1,157 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import getValidUser from "./utilities/getValidUser.js"; +import { InferenceClassificationOverride } from "@microsoft/microsoft-graph-types"; + +describe("Mail: Mailbox", function () { + const testName = "PnP Test Override"; + const testEmail = "!@contoso.onmicrosoft.com"; + let testUserName = ""; + + const override: InferenceClassificationOverride = { + classifyAs: "focused", + senderEmailAddress: { + name: testName, + address: testEmail, + }, + }; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + }); + + // Clean up testing folders + after(async function () { + if (!stringIsNullOrEmpty(testUserName)) { + // TBD + } + return; + }); + + it("Mailbox: Settings", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings(); + return expect(settings).is.not.null; + }); + + it("Mailbox: AutomaticRepliesSetting", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.automaticRepliesSetting(); + return expect(settings).is.not.null; + }); + + it("Mailbox: dateFormat setting", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.dateFormat(); + return expect(settings).is.not.null; + }); + + // DOCUMENTED BUT NOT IMPLEMENTED + it.skip("Mailbox: delegateMeetingMessageDeliveryOptions setting", async function () { + // const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.delegateMeetingMessageDeliveryOptions(); + // return expect(settings).is.not.null; + }); + + it("Mailbox: language setting", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.language(); + return expect(settings).is.not.null; + }); + + it("Mailbox: timeFormat setting", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.timeFormat(); + return expect(settings).is.not.null; + }); + + it("Mailbox: timeZone setting", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.timeZone(); + return expect(settings).is.not.null; + }); + + it("Mailbox: workingHours setting", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.workingHours(); + return expect(settings).is.not.null; + }); + + it("Mailbox: userPurpose setting", async function () { + const settings = await this.pnp.graph.users.getById(testUserName).mailboxSettings.userPurpose(); + return expect(settings).is.not.null; + }); + + it("Mailbox: Focused Inbox Overrides", async function () { + const fio = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides(); + return expect(fio).is.not.null; + }); + + it("Mailbox: Get Focused Inbox Override", async function () { + const f: InferenceClassificationOverride = JSON.parse(JSON.stringify(override)); + f.senderEmailAddress.name = `${testName} ${getRandomString(8)}`; + f.senderEmailAddress.address = testEmail.replace("!",getRandomString(8)); + const fio = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.add(f); + let success = false; + if (fio !== null) { + const getFIO = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.getById(fio.id)(); + if(getFIO !== null) { + success = (getFIO.senderEmailAddress.name === f.senderEmailAddress.name); + await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.getById(fio.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mailbox: Add Focused Inbox Override", async function () { + const f: InferenceClassificationOverride = JSON.parse(JSON.stringify(override)); + f.senderEmailAddress.name = `${testName} ${getRandomString(8)}`; + f.senderEmailAddress.address = testEmail.replace("!",getRandomString(8)); + const fio = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.add(f); + const success = (fio !== null); + if (success) { + await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.getById(fio.id).delete(); + } + return expect(success).to.be.true; + }); + + it("Mailbox: Update Focused Inbox Override", async function () { + const f: InferenceClassificationOverride = JSON.parse(JSON.stringify(override)); + f.senderEmailAddress.name = `${testName} ${getRandomString(8)}`; + f.senderEmailAddress.address = testEmail.replace("!",getRandomString(8)); + const fio = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.add(f); + const newName = `${testName} ${getRandomString(8)}`; + let success = false; + if (fio !== null) { + const update = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.getById(fio.id) + .update({ senderEmailAddress: { name: newName }}); + if (update !== null) { + success = (update.senderEmailAddress.name === newName); + await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.getById(update.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mailbox: Delete Focused Inbox Override", async function () { + const f: InferenceClassificationOverride = JSON.parse(JSON.stringify(override)); + f.senderEmailAddress.name = `${testName} ${getRandomString(8)}`; + f.senderEmailAddress.address = testEmail.replace("!",getRandomString(8)); + const fio = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.add(f); + let success = false; + if (fio !== null) { + await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.getById(fio.id).delete(); + try { + const found = await this.pnp.graph.users.getById(testUserName).focusedInboxOverrides.getById(fio.id)(); + if (found?.id === null) { + success = true; + } + } catch (e) { + success = true; + } + } + return expect(success).to.be.true; + }); +}); + diff --git a/test/graph/mail-messages.ts b/test/graph/mail-messages.ts new file mode 100644 index 000000000..47b9fe36f --- /dev/null +++ b/test/graph/mail-messages.ts @@ -0,0 +1,232 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import getValidUser from "./utilities/getValidUser.js"; +import { Message, MailFolder as IMailFolderType } from "@microsoft/microsoft-graph-types"; + +describe("Mail: Messages", function () { + let testUserName = ""; + let inboxFolder = null; + let draftFolder = null; + + const draftMessage: Message = { + subject: "PnPjs Test Message", + importance: "low", + body: { + contentType: "html", + content: "This is a test message!", + }, + toRecipients: [ + { + emailAddress: { + address: "AdeleV@contoso.onmicrosoft.com", + }, + }, + ], + }; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + draftMessage.toRecipients[0].emailAddress.address = testUserName; + const mailFolders: IMailFolderType[] = await this.pnp.graph.users.getById(testUserName).mailFolders(); + if (mailFolders.length >= 0) { + const inbox = mailFolders.find((f) => f.displayName === "Inbox"); + inboxFolder = inbox?.id || mailFolders[0].id; + const draft = mailFolders.find((f) => f.displayName === "Draft"); + draftFolder = draft?.id || mailFolders[0].id; + } + + if (inboxFolder === null || draftFolder === null) { + this.skip(); + } + }); + + // Clean up testing categories + after(async function () { + if (!stringIsNullOrEmpty(testUserName)) { + // TBD + } + return; + }); + + it("Mail: Message List", async function () { + const messages = await this.pnp.graph.users.getById(testUserName).messages(); + return expect(messages).is.not.null; + }); + + it("Mail: Message List (Delta)", async function () { + const messagesDelta = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.delta(); + return expect(messagesDelta).has.property("deltaLink"); + }); + + it("Mail: Create Draft Message", async function () { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + const success = (draft !== null); + if (success) { + await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + } + return expect(success).to.be.true; + }); + + it("Mail: Update Message", async function () { + const m = JSON.parse(JSON.stringify(draftMessage)); + const newSubject = `PnPjs Test Message ${getRandomString(8)}`; + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + let success = false; + if (draft !== null) { + const update = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).update({ subject: newSubject }); + if (update !== null) { + success = (update.subject === newSubject); + await this.pnp.graph.users.getById(testUserName).messages.getById(update.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Delete Message", async function () { + const m = JSON.parse(JSON.stringify(draftMessage)); + const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + let success = false; + if (draft !== null) { + await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + try { + const found = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id)(); + if (found?.id === null) { + success = true; + } + } catch (e) { + success = true; + } + } + return expect(success).to.be.true; + }); + + it("Mail: Copy Message", async function () { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + let success = false; + if (draft !== null) { + const messageCopy = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).copy(inboxFolder); + if (messageCopy !== null) { + success = true; + await this.pnp.graph.users.getById(testUserName).messages.getById(messageCopy.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Move Message", async function () { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + const draft: Message = await this.pnp.graph.users.getById(testUserName).messages.add(m); + let success = false; + if (draft !== null) { + const messageMove = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).move(inboxFolder); + if (messageMove !== null) { + success = (messageMove.subject === draft.subject); + await this.pnp.graph.users.getById(testUserName).messages.getById(messageMove.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Send Draft Message", async function () { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + if (draft !== null) { + await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).send(); + return true; + } else { + return false; + } + }); + + it("Mail: Send Message", async function () { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + let success = false; + try{ + await this.pnp.graph.users.getById(testUserName).sendMail(m); + success = true; + }catch(err){ + // do nothing + } + return success; + }); + + it("Mail: Create Draft Reply Message", async function () { + const inboxMessage = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.top(1)(); + if (inboxMessage.length === 1) { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + let success = false; + const draft = await this.pnp.graph.users.getById(testUserName).messages.getById(inboxMessage[0].id).createReply(m); + if (draft !== null) { + success = true; + await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + } + return success; + } else { + return false; + } + }); + + it.skip("Mail: Send Reply Message", async function () { + // Skipping because it would possibly send an email to someone who didn't expect it + }); + + it("Mail: Create Draft Reply-All Message", async function () { + const inboxMessage = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.top(1)(); + if (inboxMessage.length === 1) { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + let success = false; + const draft = await this.pnp.graph.users.getById(testUserName).messages.getById(inboxMessage[0].id).createReplyAll(m); + if (draft !== null) { + success = true; + await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + } + return success; + } else { + return false; + } + }); + + it.skip("Mail: Send Reply-All Message", async function () { + // Skipping because it would possibly send an email to someone who didn't expect it + }); + + it("Mail: Create Draft Forward Message", async function () { + const inboxMessage = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.top(1)(); + if (inboxMessage.length === 1) { + const m = JSON.parse(JSON.stringify(draftMessage)); + m.subject = `PnPjs Test Message ${getRandomString(8)}`; + let success = false; + const draft = await this.pnp.graph.users.getById(testUserName).messages.getById(inboxMessage[0].id).createForward(m); + if (draft !== null) { + success = true; + await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + } + return success; + } else { + return false; + } + }); + + it.skip("Mail: Forward Message", async function () { + // Skipping because it would possibly send an email to someone who didn't expect it + }); +}); diff --git a/test/graph/mail-rules.ts b/test/graph/mail-rules.ts new file mode 100644 index 000000000..aa98a6003 --- /dev/null +++ b/test/graph/mail-rules.ts @@ -0,0 +1,112 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/mail"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import getValidUser from "./utilities/getValidUser.js"; +import { MessageRule as IMessageRuleType } from "@microsoft/microsoft-graph-types"; + +describe("Mail: Rules", function () { + let testUserName = ""; + + const draftRule: IMessageRuleType = { + displayName: "PnPjs Test Rule", + sequence: 2, + isEnabled: true, + conditions: { + senderContains: [ + "adele", + ], + }, + actions: { + forwardTo: [ + { + emailAddress: { + name: "Alex Wilbur", + address: "AlexW@contoso.onmicrosoft.com", + }, + }, + ], + stopProcessingRules: true, + }, + }; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + }); + + it("Mail: Rules List", async function () { + const rules = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules(); + return expect(rules).is.not.null; + }); + + it("Mail: Rule Get", async function () { + const r = JSON.parse(JSON.stringify(draftRule)); + r.displayName = `PnPjs Test Rule ${getRandomString(8)}`; + const rule = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.add(r); + let success = false; + if (rule !== null) { + const getRule = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.getById(rule.id)(); + if(getRule !== null) { + success = (getRule.displayName === r.displayName); + await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.getById(rule.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Rule Add", async function () { + const r = JSON.parse(JSON.stringify(draftRule)); + r.displayName = `PnPjs Test Rule ${getRandomString(8)}`; + const rule = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.add(r); + const success = (rule !== null); + if (success) { + await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.getById(rule.id).delete(); + } + return expect(success).to.be.true; + }); + + it("Mail: Rule Update", async function () { + const r = JSON.parse(JSON.stringify(draftRule)); + r.displayName = `PnPjs Test Rule ${getRandomString(8)}`; + const rule = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.add(r); + const newRuleName = `PnPjs Test Rule ${getRandomString(8)}`; + let success = false; + if (rule !== null) { + const update = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox") + .messageRules.getById(rule.id).update({ displayName: newRuleName }); + if (update !== null) { + success = (update.displayName === newRuleName); + await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.getById(rule.id).delete(); + } + } + return expect(success).to.be.true; + }); + + it("Mail: Rule Delete", async function () { + const r = JSON.parse(JSON.stringify(draftRule)); + r.displayName = `PnPjs Test Rule ${getRandomString(8)}`; + const rule = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.add(r); + let success = false; + if (rule !== null) { + await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.getById(rule.id).delete(); + try { + const found = await this.pnp.graph.users.getById(testUserName).mailFolders.getById("inbox").messageRules.getById(rule.id)(); + if (found?.id === null) { + success = true; + } + } catch (e) { + success = true; + } + } + return expect(success).to.be.true; + }); + +}); + From 239ddee2351272f2c6b2701acdfbc14232f054d2 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 21 Dec 2023 15:35:11 +0000 Subject: [PATCH 056/171] Updates for tests and merge conflicts --- package-lock.json | 367 +++++++++++++++++++--------------- package.json | 2 +- packages/graph/package.json | 2 +- packages/logging/index.js | 97 +++++++++ packages/logging/listeners.js | 101 ++++++++++ test/graph/mail-messages.ts | 10 +- 6 files changed, 406 insertions(+), 173 deletions(-) create mode 100644 packages/logging/index.js create mode 100644 packages/logging/listeners.js diff --git a/package-lock.json b/package-lock.json index 9e4a09b90..15a1f12d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "devDependencies": { "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", - "@microsoft/microsoft-graph-types": "2.38.0", + "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.0-beta5", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", @@ -655,50 +655,6 @@ "node": ">=4.0" } }, - "node_modules/@pnp/buildsystem/node_modules/globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^1.0.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pnp/buildsystem/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pnp/buildsystem/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@pnp/buildsystem/node_modules/webpack": { "version": "5.89.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", @@ -877,9 +833,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", - "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -1330,6 +1286,35 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@typescript-eslint/utils": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.1.tgz", @@ -1709,6 +1694,15 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -1830,12 +1824,6 @@ "node": ">= 0.10" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2253,15 +2241,6 @@ "node": ">=0.10.0" } }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2525,6 +2504,20 @@ "node": ">= 10" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -2650,6 +2643,15 @@ "node": ">=8" } }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -3567,32 +3569,47 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", + "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@sindresorhus/merge-streams": "^1.0.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { @@ -3631,6 +3648,18 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -3655,6 +3684,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3700,6 +3741,36 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/html-entities": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", @@ -3929,6 +4000,15 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", @@ -4323,6 +4403,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/launch-editor": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", @@ -4506,15 +4595,6 @@ "node": ">=0.10.0" } }, - "node_modules/make-iterator/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4730,15 +4810,6 @@ "node": ">= 6" } }, - "node_modules/minimist-options/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mocha": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", @@ -4779,15 +4850,6 @@ "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -5351,12 +5413,15 @@ "dev": true }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pathval": { @@ -5658,26 +5723,19 @@ } }, "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6084,6 +6142,21 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -6102,15 +6175,6 @@ "node": ">=8" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6265,20 +6329,6 @@ "wbuf": "^1.7.3" } }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -6305,20 +6355,14 @@ "dev": true }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/string-replace-loader": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-3.1.0.tgz", @@ -6854,15 +6898,6 @@ "node": ">=14" } }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/webpack-dev-middleware": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", diff --git a/package.json b/package.json index 06209e047..c59875581 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "devDependencies": { "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", - "@microsoft/microsoft-graph-types": "2.38.0", + "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.0-beta5", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", diff --git a/packages/graph/package.json b/packages/graph/package.json index 7c9730e62..e7f0fc6b2 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -8,7 +8,7 @@ "postinstall": "node ./post-install.cjs" }, "dependencies": { - "@microsoft/microsoft-graph-types": "2.38.0", + "@microsoft/microsoft-graph-types": "2.40.0", "tslib": "2.6.2", "@pnp/core": "0.0.0-PLACEHOLDER", "@pnp/queryable": "0.0.0-PLACEHOLDER" diff --git a/packages/logging/index.js b/packages/logging/index.js new file mode 100644 index 000000000..84c854091 --- /dev/null +++ b/packages/logging/index.js @@ -0,0 +1,97 @@ +export * from "./listeners.js"; +/** + * A set of logging levels + */ +export var LogLevel; +(function (LogLevel) { + LogLevel[LogLevel["Verbose"] = 0] = "Verbose"; + LogLevel[LogLevel["Info"] = 1] = "Info"; + LogLevel[LogLevel["Warning"] = 2] = "Warning"; + LogLevel[LogLevel["Error"] = 3] = "Error"; + LogLevel[LogLevel["Off"] = 99] = "Off"; +})(LogLevel || (LogLevel = {})); +const _subscribers = []; +let _activeLogLevel = 2 /* Warning */; +/** + * Class used to subscribe ILogListener and log messages throughout an application + * + */ +export class Logger { + /** + * Gets or sets the active log level to apply for log filtering + */ + static get activeLogLevel() { + return _activeLogLevel; + } + static set activeLogLevel(value) { + _activeLogLevel = value; + } + /** + * Adds ILogListener instances to the set of subscribed listeners + * + * @param listeners One or more listeners to subscribe to this log + */ + static subscribe(...listeners) { + _subscribers.push(...listeners); + } + /** + * Clears the subscribers collection, returning the collection before modification + */ + static clearSubscribers() { + const s = _subscribers.slice(0); + _subscribers.length = 0; + return s; + } + /** + * Gets the current subscriber count + */ + static get count() { + return _subscribers.length; + } + /** + * Writes the supplied string to the subscribed listeners + * + * @param message The message to write + * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info) + */ + static write(message, level = 1 /* Info */) { + Logger.log({ level: level, message: message }); + } + /** + * Writes the supplied string to the subscribed listeners + * + * @param json The json object to stringify and write + * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info) + */ + static writeJSON(json, level = 1 /* Info */) { + Logger.write(JSON.stringify(json), level); + } + /** + * Logs the supplied entry to the subscribed listeners + * + * @param entry The message to log + */ + static log(entry) { + if (entry !== undefined && Logger.activeLogLevel <= entry.level) { + _subscribers.map(subscriber => subscriber.log(entry)); + } + } + /** + * Logs an error object to the subscribed listeners + * + * @param err The error object + */ + static error(err) { + Logger.log({ data: err, level: 3 /* Error */, message: err.message }); + } +} +export function PnPLogging(activeLevel) { + return (instance) => { + instance.on.log(function (message, level) { + if (activeLevel <= level) { + _subscribers.map(subscriber => subscriber.log({ level, message })); + } + }); + return instance; + }; +} diff --git a/packages/logging/listeners.js b/packages/logging/listeners.js new file mode 100644 index 000000000..fdc636b47 --- /dev/null +++ b/packages/logging/listeners.js @@ -0,0 +1,101 @@ +export function ConsoleListener(prefix, colors) { + return new _ConsoleListener(prefix, colors); +} +function withColor(msg, color, logMethod) { + if (typeof color === "undefined") { + logMethod(msg); + } + else { + logMethod(`%c${msg}`, `color:${color}`); + } +} +/** + * Formats the message + * + * @param entry The information to format into a string + */ +function entryToString(entry, prefix) { + const msg = []; + if (prefix.length > 0) { + msg.push(`${prefix} -`); + } + msg.push(entry.message); + if (entry.data !== undefined) { + try { + msg.push("Data: " + JSON.stringify(entry.data)); + } + catch (e) { + msg.push(`Data: Error in stringify of supplied data ${e}`); + } + } + return msg.join(" "); +} +// index order matters, this is a lookup table based on the corresponding LogLevel value +const colorProps = ["verbose", "info", "warning", "error"]; +/** + * Implementation of LogListener which logs to the console + * + */ +class _ConsoleListener { + /** + * Makes a new one + * + * @param prefix Optional text to include at the start of all messages (useful for filtering) + * @param colors Optional text color settings + */ + constructor(_prefix = "", _colors = {}) { + this._prefix = _prefix; + this._colors = _colors; + } + /** + * Any associated data that a given logging listener may choose to log or ignore + * + * @param entry The information to be logged + */ + log(entry) { + let logMethod = console.log; + switch (entry.level) { + case 3 /* Error */: + logMethod = console.error; + break; + case 2 /* Warning */: + logMethod = console.warn; + break; + case 0 /* Verbose */: + logMethod = console.debug; + break; + case 1 /* Info */: + logMethod = console.info; + break; + default: + logMethod = console.log; + } + withColor(entryToString(entry, this._prefix), this._colors[colorProps[entry.level]], logMethod); + } +} +export function FunctionListener(impl) { + return new _FunctionListener(impl); +} +/** + * Implementation of LogListener which logs to the supplied function + * + */ +class _FunctionListener { + /** + * Creates a new instance of the FunctionListener class + * + * @constructor + * @param method The method to which any logging data will be passed + */ + constructor(method) { + this.method = method; + } + /** + * Any associated data that a given logging listener may choose to log or ignore + * + * @param entry The information to be logged + */ + log(entry) { + this.method(entry); + } +} diff --git a/test/graph/mail-messages.ts b/test/graph/mail-messages.ts index 47b9fe36f..8ffd8fd8d 100644 --- a/test/graph/mail-messages.ts +++ b/test/graph/mail-messages.ts @@ -154,7 +154,7 @@ describe("Mail: Messages", function () { } }); - it("Mail: Send Message", async function () { + it.only("Mail: Send Message", async function () { const m = JSON.parse(JSON.stringify(draftMessage)); m.subject = `PnPjs Test Message ${getRandomString(8)}`; let success = false; @@ -167,7 +167,7 @@ describe("Mail: Messages", function () { return success; }); - it("Mail: Create Draft Reply Message", async function () { + it.only("Mail: Create Draft Reply Message", async function () { const inboxMessage = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.top(1)(); if (inboxMessage.length === 1) { const m = JSON.parse(JSON.stringify(draftMessage)); @@ -180,7 +180,7 @@ describe("Mail: Messages", function () { } return success; } else { - return false; + this.skip(); } }); @@ -201,7 +201,7 @@ describe("Mail: Messages", function () { } return success; } else { - return false; + this.skip(); } }); @@ -222,7 +222,7 @@ describe("Mail: Messages", function () { } return success; } else { - return false; + this.skip(); } }); From 788de5227fbfb938ac4ad6dee02a6999e5d44c46 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Fri, 22 Dec 2023 17:19:25 +0000 Subject: [PATCH 057/171] Clarify format for getByLoginName --- CHANGELOG.md | 1 + docs/sp/site-users.md | 2 +- packages/sp/site-users/types.ts | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 559f2627b..52b1e9ac4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - All GraphQueryable*, _GraphQueryable*, and IGraphQueryable* have been renamed to remove "Queryable" (ex: GraphQueryableCollection is now GraphCollection) - @pnp/graph/onedrive renamed to @pnp/graph/files - ISites.getByUrl is now async + - @pnp/graph/outlook is not in @pnp/graph/mail, included all mail endpoints - mailCategory.add() returns Microsoft Graph types OutlookCategory vs object with data property. - sp diff --git a/docs/sp/site-users.md b/docs/sp/site-users.md index 9403417f9..ae7b2c63a 100644 --- a/docs/sp/site-users.md +++ b/docs/sp/site-users.md @@ -93,7 +93,7 @@ const users = await sp.web.siteUsers; await users.add(user.data.LoginName); ``` -### Get user +### Get user by Id, Email, or LoginName ```TypeScript import { spfi } from "@pnp/sp"; diff --git a/packages/sp/site-users/types.ts b/packages/sp/site-users/types.ts index a30e3f451..283b313f7 100644 --- a/packages/sp/site-users/types.ts +++ b/packages/sp/site-users/types.ts @@ -37,6 +37,7 @@ export class _SiteUsers extends _SPCollection { * Gets a user from the collection by login name * * @param loginName The login name of the user to retrieve + * e.g. SharePoint Online: 'i:0#.f|membership|user@domain' */ public getByLoginName(loginName: string): ISiteUser { return SiteUser(this).concat(`('!@v::${loginName}')`); From 7cf357ce960fb064f6ed6d02487eabaa99f4eac0 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 27 Dec 2023 11:38:22 -0500 Subject: [PATCH 058/171] buildsystem cjs --- .vscode/launch.json | 2 +- buildsystem-config.ts | 33 ++++++++++++++----- tools/buildsystem/index.ts | 2 +- tools/buildsystem/package-lock.json | 18 +++++----- tools/buildsystem/package.json | 4 +-- .../src/behaviors/replace-version.ts | 16 +++++++-- tools/local-module-resolver/esm.ts | 2 +- 7 files changed, 52 insertions(+), 25 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 2301813a7..dcbf59852 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -54,7 +54,7 @@ "program": "${workspaceRoot}/tools/buildsystem/bin/buildsystem.ts", "args": [ "-n", - "build" + "package" ], "cwd": "${workspaceRoot}", "preLaunchTask": "build-buildsystem", diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 9c77626ad..1c84a727b 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -26,19 +26,36 @@ Logger.subscribe(ConsoleListener("", { const logLevel = LogLevel.Verbose; const distFolder = "./dist/packages"; -const commonPublishTags = ["--access", "public", "--provenance"]; +const commonPublishTags = ["--access", "public"]; -function PnPBuild(): (b: BuildTimeline) => BuildTimeline { +function PnPBuild(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { return (instance: BuildTimeline) => { - Build()(instance); + Build(buildFlags)(instance); ReplaceVersion(["sp/behaviors/telemetry.js", "graph/behaviors/telemetry.js"])(instance); return instance; } } +function PnPBuildCommonJS(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { + + if (!buildFlags) { + buildFlags = []; + } + + buildFlags.push("--module", "commonjs", "--outDir", "./buildcjs") + + return (instance: BuildTimeline) => { + + Build(buildFlags)(instance); + ReplaceVersion([resolve("./buildcjs/packages/sp/behaviors/telemetry.js"), resolve("./buildcjs/packages/graph/behaviors/telemetry.js")], { pathsResolved: true })(instance); + + return instance; + } +} + function PnPPackage(): (b: BuildTimeline) => BuildTimeline { return (instance: BuildTimeline) => { @@ -90,7 +107,7 @@ const commonBehaviors = [ PnPLogging(logLevel), ] -export default [{ +export default [{ name: "build", distFolder, targets: [ @@ -112,7 +129,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), ...commonBehaviors], + behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), ...commonBehaviors], }, { name: "publish", @@ -120,7 +137,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), PnPPublish(commonPublishTags), ...commonBehaviors], + behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), PnPPublish(commonPublishTags), ...commonBehaviors], }, { name: "publish-beta", @@ -128,7 +145,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), PnPPublish([...commonPublishTags, "--tag", "beta"]), ...commonBehaviors], + behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), PnPPublish([...commonPublishTags, "--tag", "beta"]), ...commonBehaviors], }, { name: "publish-v3nightly", @@ -144,5 +161,5 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPPackage(), PublishNightly([...commonPublishTags], "v4nightly"), ...commonBehaviors], + behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), PublishNightly([...commonPublishTags], "v4nightly"), ...commonBehaviors], }]; diff --git a/tools/buildsystem/index.ts b/tools/buildsystem/index.ts index 422bc1949..38095fb4d 100644 --- a/tools/buildsystem/index.ts +++ b/tools/buildsystem/index.ts @@ -4,7 +4,7 @@ export { CopyAssetFiles } from "./src/behaviors/copy-asset-files.js"; export { CopyPackageFiles } from "./src/behaviors/copy-package-files.js"; export { PublishNightly } from "./src/behaviors/publish-nightly.js"; export { Publish } from "./src/behaviors/publish.js"; -export { ReplaceVersion } from "./src/behaviors/replace-version.js"; +export { ReplaceVersion, IReplaceVersionOptions } from "./src/behaviors/replace-version.js"; export { Webpack } from "./src/behaviors/webpack.js"; export { WritePackageJSON } from "./src/behaviors/write-packagejson.js"; diff --git a/tools/buildsystem/package-lock.json b/tools/buildsystem/package-lock.json index 54fe8ced9..213de9055 100644 --- a/tools/buildsystem/package-lock.json +++ b/tools/buildsystem/package-lock.json @@ -1,15 +1,15 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta3", + "version": "4.0.0-beta5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pnp/buildsystem", - "version": "4.0.0-beta3", + "version": "4.0.0-beta5", "license": "MIT", "dependencies": { - "@pnp/core": "^3.21.0", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20231227", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", @@ -153,9 +153,9 @@ } }, "node_modules/@pnp/core": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.21.0.tgz", - "integrity": "sha512-4R+MGo7aitBPUQ4eapLbsiZwPFrMnFZ/6OB4lvXQrtl2IAdZC922gR+bB05O00iEplOcUW9EZJlitLfzTdNuTg==", + "version": "4.0.0-alpha0-v4nightly.20231227", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231227.tgz", + "integrity": "sha512-k3oS1swDBL582L7F7YISURVe6RB5U8kgC6E8vzVgbFE6mmW5KV1jP7HG6EhDc6yvAeryL0mPKXvz0OlKu51ntQ==", "dependencies": { "tslib": "2.4.1" }, @@ -2749,9 +2749,9 @@ } }, "@pnp/core": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.21.0.tgz", - "integrity": "sha512-4R+MGo7aitBPUQ4eapLbsiZwPFrMnFZ/6OB4lvXQrtl2IAdZC922gR+bB05O00iEplOcUW9EZJlitLfzTdNuTg==", + "version": "4.0.0-alpha0-v4nightly.20231227", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231227.tgz", + "integrity": "sha512-k3oS1swDBL582L7F7YISURVe6RB5U8kgC6E8vzVgbFE6mmW5KV1jP7HG6EhDc6yvAeryL0mPKXvz0OlKu51ntQ==", "requires": { "tslib": "2.4.1" } diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index fda9abbfb..d2bded099 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta5", + "version": "4.0.0-beta6", "bin": { "pnpbuild": "bin/buildsystem.js" }, @@ -9,7 +9,7 @@ "type": "module", "typings": "./index", "dependencies": { - "@pnp/core": "^3.21.0", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20231227", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index c483de01f..c530c89ad 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -4,7 +4,17 @@ import { readFile } from "fs/promises"; import buildWriteFile from "../lib/write-file.js"; import { resolve } from "path"; -export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/img): TimelinePipe { +export interface IReplaceVersionOptions { + versionMask?: string | RegExp; + pathsResolved?: boolean; +} + +export function ReplaceVersion(paths: string[], options: IReplaceVersionOptions): TimelinePipe { + + options = { + versionMask: /\$\$Version\$\$/img, + ...options, + } return (instance: BuildTimeline) => { @@ -16,10 +26,10 @@ export function ReplaceVersion(paths: string[], versionMask = /\$\$Version\$\$/i paths.forEach(async (path) => { - const resolvedPath = resolve(target.resolvedOutDir, path); + const resolvedPath = options?.pathsResolved ? path : resolve(target.resolvedOutDir, path); this.log(`Resolving path '${path}' to '${resolvedPath}'.`, 0); const file = await readFile(resolve(resolvedPath)); - await buildWriteFile(resolvedPath, file.toString().replace(versionMask, version)); + await buildWriteFile(resolvedPath, file.toString().replace(options.versionMask, version)); }); }); diff --git a/tools/local-module-resolver/esm.ts b/tools/local-module-resolver/esm.ts index 2c60f7e49..6398cef4a 100644 --- a/tools/local-module-resolver/esm.ts +++ b/tools/local-module-resolver/esm.ts @@ -18,7 +18,7 @@ export function createResolve(innerPath: string): ResolverFunc { return async function (specifier: string, context: ResolveContext, defaultResolve: ResolverFunc): Promise { - if (specifier.startsWith("@pnp")) { + if (specifier.startsWith("@pnp") && specifier !== "@pnp/buildsystem") { const modulePath = specifier.substring(4); From 6f7d9c56f8e8b4330977f945f810b449fc1cd34b Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 27 Dec 2023 11:42:13 -0500 Subject: [PATCH 059/171] Update package.json --- tools/buildsystem/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index fda9abbfb..273a8d262 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta5", + "version": "4.0.0-beta6", "bin": { "pnpbuild": "bin/buildsystem.js" }, From 973e2d05ce38ed4f5b258fbf102612c8662b0901 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 27 Dec 2023 11:47:33 -0500 Subject: [PATCH 060/171] Update package.json --- tools/buildsystem/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index d2bded099..a5a9d4126 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta6", + "version": "4.0.0-beta7", "bin": { "pnpbuild": "bin/buildsystem.js" }, From 51efbd8472de4f7df23338aeed8368b9ca97b864 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 27 Dec 2023 15:43:00 -0500 Subject: [PATCH 061/171] commonjs work --- buildsystem-config.ts | 58 ++++---- package-lock.json | 133 +++++++++--------- package.json | 3 +- packages/azidjsclient/tsconfig-commonjs.json | 12 ++ packages/core/tsconfig-commonjs.json | 10 ++ packages/graph/tsconfig-commonjs.json | 16 +++ packages/logging/tsconfig-commonjs.json | 7 + packages/msaljsclient/tsconfig-commonjs.json | 12 ++ packages/nodejs/tsconfig-commonjs.json | 28 ++++ packages/queryable/tsconfig-commonjs.json | 11 ++ packages/sp-admin/tsconfig-commonjs.json | 20 +++ packages/sp/tsconfig-commonjs.json | 16 +++ packages/tsconfig-commonjs.json | 38 +++++ packages/tsconfig.json | 2 +- tools/buildsystem/bin/buildsystem.ts | 3 +- tools/buildsystem/index.ts | 1 + tools/buildsystem/package.json | 2 +- tools/buildsystem/src/behaviors/build.ts | 2 +- .../src/behaviors/copy-package-files.ts | 3 +- .../create-resolution-package-files.ts | 43 ++++++ .../src/behaviors/replace-version.ts | 2 +- tools/buildsystem/src/types.ts | 2 + tools/buildsystem/tsconfig.json | 3 +- tools/local-module-resolver/esm-packages.ts | 2 +- tools/local-module-resolver/esm.ts | 9 +- tsconfig.buildsystem.json | 2 +- 26 files changed, 333 insertions(+), 107 deletions(-) create mode 100644 packages/azidjsclient/tsconfig-commonjs.json create mode 100644 packages/core/tsconfig-commonjs.json create mode 100644 packages/graph/tsconfig-commonjs.json create mode 100644 packages/logging/tsconfig-commonjs.json create mode 100644 packages/msaljsclient/tsconfig-commonjs.json create mode 100644 packages/nodejs/tsconfig-commonjs.json create mode 100644 packages/queryable/tsconfig-commonjs.json create mode 100644 packages/sp-admin/tsconfig-commonjs.json create mode 100644 packages/sp/tsconfig-commonjs.json create mode 100644 packages/tsconfig-commonjs.json create mode 100644 tools/buildsystem/src/behaviors/create-resolution-package-files.ts diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 1c84a727b..6fbd8f372 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -33,24 +33,7 @@ function PnPBuild(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { return (instance: BuildTimeline) => { Build(buildFlags)(instance); - ReplaceVersion(["sp/behaviors/telemetry.js", "graph/behaviors/telemetry.js"])(instance); - - return instance; - } -} - -function PnPBuildCommonJS(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { - - if (!buildFlags) { - buildFlags = []; - } - - buildFlags.push("--module", "commonjs", "--outDir", "./buildcjs") - - return (instance: BuildTimeline) => { - - Build(buildFlags)(instance); - ReplaceVersion([resolve("./buildcjs/packages/sp/behaviors/telemetry.js"), resolve("./buildcjs/packages/graph/behaviors/telemetry.js")], { pathsResolved: true })(instance); + ReplaceVersion(["sp/behaviors/telemetry.js", "graph/behaviors/telemetry.js"], {})(instance); return instance; } @@ -66,13 +49,11 @@ function PnPPackage(): (b: BuildTimeline) => BuildTimeline { CopyPackageFiles("built", ["**/*.d.ts", "**/*.js", "**/*.js.map", "**/*.d.ts.map"])(instance); WritePackageJSON((p) => { return Object.assign({}, p, { - funding: { - type: "individual", - url: "https://github.com/sponsors/patrick-rodgers/", - }, type: "module", + main: "./esm/index.js", + typings: "./esm/index", engines: { - node: ">=14.15.1" + node: ">=18.12.0" }, author: { name: "Microsoft and other contributors" @@ -85,7 +66,24 @@ function PnPPackage(): (b: BuildTimeline) => BuildTimeline { repository: { type: "git", url: "git:github.com/pnp/pnpjs" - } + }, + exports: { + ".": { + "import": { + "types": "./esm/index", + "default": "./esm/index.js" + }, + "require": { + "types": "./commonjs/index", + "default": "./commonjs/index.js" + }, + "default": "./esm/index.js" + } + }, + funding: { + type: "individual", + url: "https://github.com/sponsors/patrick-rodgers/", + }, }); })(instance); @@ -112,6 +110,7 @@ export default [{ distFolder, targets: [ resolve("./packages/tsconfig.json"), + resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), ...commonBehaviors], }, @@ -121,15 +120,16 @@ export default [{ targets: [ resolve("./debug/launch/tsconfig.json"), ], - behaviors: [Build(), ReplaceVersion(["packages/sp/behaviors/telemetry.js", "packages/graph/behaviors/telemetry.js"]), ...commonBehaviors], + behaviors: [Build(), ReplaceVersion(["packages/sp/behaviors/telemetry.js", "packages/graph/behaviors/telemetry.js"], {}), ...commonBehaviors], }, { name: "package", distFolder, targets: [ resolve("./packages/tsconfig.json"), + resolve("./packages/tsconfig-commonjs.json"), ], - behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), ...commonBehaviors], }, { name: "publish", @@ -137,7 +137,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), PnPPublish(commonPublishTags), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish(commonPublishTags), ...commonBehaviors], }, { name: "publish-beta", @@ -145,7 +145,7 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), PnPPublish([...commonPublishTags, "--tag", "beta"]), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), PnPPublish([...commonPublishTags, "--tag", "beta"]), ...commonBehaviors], }, { name: "publish-v3nightly", @@ -161,5 +161,5 @@ export default [{ targets: [ resolve("./packages/tsconfig.json"), ], - behaviors: [PnPBuild(), PnPBuildCommonJS(), PnPPackage(), PublishNightly([...commonPublishTags], "v4nightly"), ...commonBehaviors], + behaviors: [PnPBuild(), PnPPackage(), PublishNightly([...commonPublishTags], "v4nightly"), ...commonBehaviors], }]; diff --git a/package-lock.json b/package-lock.json index 16ae6bce0..0ebe60470 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta5", + "@pnp/buildsystem": "^4.0.0-beta7", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", @@ -30,6 +30,7 @@ "del-cli": "5.1.0", "eslint": "8.49.0", "findup-sync": "5.0.0", + "globby": "^14.0.0", "mocha": "10.2.0", "msal": "1.4.18", "node-fetch": "3.3.2", @@ -600,12 +601,12 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta5", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta5.tgz", - "integrity": "sha512-OhMFUkR/LeOJjqLXd/c6D59FjCmpvOndKuNFL27CnC70SnVlDLMxYu2RMkOBPWUgtRJ2ZJUO3r/rNrS2OxKBQw==", + "version": "4.0.0-beta7", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta7.tgz", + "integrity": "sha512-2TNJ/lFkf04ebkMUUVgNeDvLWBCK490/0TV88lCVJyin9N3e1SwD2hPusJGPqPqZ6EKW0AenCeFRLXzwBdgfpA==", "dev": true, "dependencies": { - "@pnp/core": "^3.21.0", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20231227", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", @@ -644,50 +645,6 @@ "node": ">=4.0" } }, - "node_modules/@pnp/buildsystem/node_modules/globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^1.0.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pnp/buildsystem/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pnp/buildsystem/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@pnp/buildsystem/node_modules/webpack": { "version": "5.89.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", @@ -736,9 +693,9 @@ } }, "node_modules/@pnp/core": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.21.0.tgz", - "integrity": "sha512-4R+MGo7aitBPUQ4eapLbsiZwPFrMnFZ/6OB4lvXQrtl2IAdZC922gR+bB05O00iEplOcUW9EZJlitLfzTdNuTg==", + "version": "4.0.0-alpha0-v4nightly.20231227", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231227.tgz", + "integrity": "sha512-k3oS1swDBL582L7F7YISURVe6RB5U8kgC6E8vzVgbFE6mmW5KV1jP7HG6EhDc6yvAeryL0mPKXvz0OlKu51ntQ==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -1310,6 +1267,35 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@typescript-eslint/utils": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.1.tgz", @@ -3578,32 +3564,47 @@ } }, "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", + "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@sindresorhus/merge-streams": "^1.0.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { diff --git a/package.json b/package.json index 06209e047..aedfc0acc 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta5", + "@pnp/buildsystem": "^4.0.0-beta7", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", @@ -26,6 +26,7 @@ "del-cli": "5.1.0", "eslint": "8.49.0", "findup-sync": "5.0.0", + "globby": "^14.0.0", "mocha": "10.2.0", "msal": "1.4.18", "node-fetch": "3.3.2", diff --git a/packages/azidjsclient/tsconfig-commonjs.json b/packages/azidjsclient/tsconfig-commonjs.json new file mode 100644 index 000000000..1f8940be1 --- /dev/null +++ b/packages/azidjsclient/tsconfig-commonjs.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts", + "../queryable/**/*.ts" + ], + "references": [ + { + "path": "../queryable/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/core/tsconfig-commonjs.json b/packages/core/tsconfig-commonjs.json new file mode 100644 index 000000000..733a3c9c7 --- /dev/null +++ b/packages/core/tsconfig-commonjs.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts" + ], + "compilerOptions": { + "esModuleInterop": true + }, + "references": [] +} \ No newline at end of file diff --git a/packages/graph/tsconfig-commonjs.json b/packages/graph/tsconfig-commonjs.json new file mode 100644 index 000000000..e449c844e --- /dev/null +++ b/packages/graph/tsconfig-commonjs.json @@ -0,0 +1,16 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts", + "../core/**/*.ts", + "../queryable/**/*.ts" + ], + "references": [ + { + "path": "../core/tsconfig-commonjs.json" + }, + { + "path": "../queryable/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/logging/tsconfig-commonjs.json b/packages/logging/tsconfig-commonjs.json new file mode 100644 index 000000000..141ccf4a2 --- /dev/null +++ b/packages/logging/tsconfig-commonjs.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts" + ], + "references": [] +} \ No newline at end of file diff --git a/packages/msaljsclient/tsconfig-commonjs.json b/packages/msaljsclient/tsconfig-commonjs.json new file mode 100644 index 000000000..1f8940be1 --- /dev/null +++ b/packages/msaljsclient/tsconfig-commonjs.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts", + "../queryable/**/*.ts" + ], + "references": [ + { + "path": "../queryable/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/nodejs/tsconfig-commonjs.json b/packages/nodejs/tsconfig-commonjs.json new file mode 100644 index 000000000..16332a169 --- /dev/null +++ b/packages/nodejs/tsconfig-commonjs.json @@ -0,0 +1,28 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts", + "../core/**/*.ts", + "../graph/**/*.ts", + "../queryable/**/*.ts", + "../logging/**/*.ts", + "../sp/**/*.ts" + ], + "references": [ + { + "path": "../core/tsconfig-commonjs.json" + }, + { + "path": "../graph/tsconfig-commonjs.json" + }, + { + "path": "../logging/tsconfig-commonjs.json" + }, + { + "path": "../queryable/tsconfig-commonjs.json" + }, + { + "path": "../sp/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/queryable/tsconfig-commonjs.json b/packages/queryable/tsconfig-commonjs.json new file mode 100644 index 000000000..aad0a4c72 --- /dev/null +++ b/packages/queryable/tsconfig-commonjs.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts" + ], + "references": [ + { + "path": "../core/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/sp-admin/tsconfig-commonjs.json b/packages/sp-admin/tsconfig-commonjs.json new file mode 100644 index 000000000..57b5a3fa3 --- /dev/null +++ b/packages/sp-admin/tsconfig-commonjs.json @@ -0,0 +1,20 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts", + "../core/**/*.ts", + "../queryable/**/*.ts", + "./presets/**/*.ts" + ], + "references": [ + { + "path": "../core/tsconfig-commonjs.json" + }, + { + "path": "../queryable/tsconfig-commonjs.json" + }, + { + "path": "../sp/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/sp/tsconfig-commonjs.json b/packages/sp/tsconfig-commonjs.json new file mode 100644 index 000000000..e449c844e --- /dev/null +++ b/packages/sp/tsconfig-commonjs.json @@ -0,0 +1,16 @@ +{ + "extends": "../tsconfig-commonjs.json", + "include": [ + "./**/*.ts", + "../core/**/*.ts", + "../queryable/**/*.ts" + ], + "references": [ + { + "path": "../core/tsconfig-commonjs.json" + }, + { + "path": "../queryable/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/tsconfig-commonjs.json b/packages/tsconfig-commonjs.json new file mode 100644 index 000000000..f638e5f58 --- /dev/null +++ b/packages/tsconfig-commonjs.json @@ -0,0 +1,38 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../build/packages/commonjs", + "module": "CommonJS" + }, + "include": [], + "references": [ + { + "path": "./azidjsclient/tsconfig-commonjs.json" + }, + { + "path": "./core/tsconfig-commonjs.json" + }, + { + "path": "./graph/tsconfig-commonjs.json" + }, + { + "path": "./logging/tsconfig-commonjs.json" + }, + { + "path": "./msaljsclient/tsconfig-commonjs.json" + }, + { + "path": "./nodejs/tsconfig-commonjs.json" + }, + { + "path": "./queryable/tsconfig-commonjs.json" + }, + { + "path": "./sp/tsconfig-commonjs.json" + }, + { + "path": "./sp-admin/tsconfig-commonjs.json" + } + ] +} \ No newline at end of file diff --git a/packages/tsconfig.json b/packages/tsconfig.json index be33142ea..995aac1eb 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -2,7 +2,7 @@ "extends": "../tsconfig.json", "compilerOptions": { "rootDir": ".", - "outDir": "../build/packages" + "outDir": "../build/packages/esm" }, "include": [], "references": [ diff --git a/tools/buildsystem/bin/buildsystem.ts b/tools/buildsystem/bin/buildsystem.ts index 682d6b7aa..a4ebdfc5d 100644 --- a/tools/buildsystem/bin/buildsystem.ts +++ b/tools/buildsystem/bin/buildsystem.ts @@ -33,7 +33,6 @@ BuildSystem.prepare({}, function (env) { context.version = pkg.version; - let name = (args.n || args.name); if (typeof name === "undefined" || name === null || name === "") { // default to build if no name is supplied @@ -84,6 +83,7 @@ BuildSystem.prepare({}, function (env) { resolvedPkgSrcRoot: dirname(resolve(tsconfigRoot, ref.path)), resolvedPkgOutRoot: resolve(resolvedOutDir, dirname(ref.path)), resolvedPkgDistRoot: resolve(context.distRoot, dirname(ref.path)), + relativePkgDistModulePath: resolvedOutDir.replace(dirname(resolvedOutDir), "").replace(/^\\|\//, ""), }))); } else { // we have a single package (debug for example) @@ -93,6 +93,7 @@ BuildSystem.prepare({}, function (env) { resolvedPkgSrcRoot: tsconfigRoot, resolvedPkgOutRoot: resolvedOutDir, resolvedPkgDistRoot: context.distRoot, + relativePkgDistModulePath: context.distRoot, }); } diff --git a/tools/buildsystem/index.ts b/tools/buildsystem/index.ts index 38095fb4d..f77389f8b 100644 --- a/tools/buildsystem/index.ts +++ b/tools/buildsystem/index.ts @@ -7,6 +7,7 @@ export { Publish } from "./src/behaviors/publish.js"; export { ReplaceVersion, IReplaceVersionOptions } from "./src/behaviors/replace-version.js"; export { Webpack } from "./src/behaviors/webpack.js"; export { WritePackageJSON } from "./src/behaviors/write-packagejson.js"; +export { CreateResolutionPackageFiles } from "./src/behaviors/create-resolution-package-files.js"; export { BuildObserver, diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index d2bded099..33bba9a1c 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta6", + "version": "4.0.0-beta8", "bin": { "pnpbuild": "bin/buildsystem.js" }, diff --git a/tools/buildsystem/src/behaviors/build.ts b/tools/buildsystem/src/behaviors/build.ts index d93bd0186..dbe88b055 100644 --- a/tools/buildsystem/src/behaviors/build.ts +++ b/tools/buildsystem/src/behaviors/build.ts @@ -1,7 +1,7 @@ import { TimelinePipe } from "@pnp/core"; import { exec } from "child_process"; import { resolve } from "path"; -import { BuildTimeline } from "src/build-timeline"; +import { BuildTimeline } from "../build-timeline.js"; const tscPath = resolve("./node_modules/.bin/tsc"); diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index 492fe7f0f..294d37a25 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -6,6 +6,7 @@ import buildCopyFile from "../lib/copy-file.js"; /** * Copies files from the target's directory based on the supplied patterns to the same directory in the dist folder + * @param source 'src' copies files from package src root to dist package root, 'built' copies files from built output to their relative to /packages path within the dist package root (esm/commonjs) * @param pattern glob patterns for files (see https://www.npmjs.com/package/globby) * @returns */ @@ -31,7 +32,7 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti a.push(...temp.map(t => ({ src: resolve(fileSourceRoot, t), - dest: resolve(pkg.resolvedPkgDistRoot, t), + dest: resolve(pkg.resolvedPkgDistRoot, source === "built" ? pkg.relativePkgDistModulePath : "", t), }))); return a; diff --git a/tools/buildsystem/src/behaviors/create-resolution-package-files.ts b/tools/buildsystem/src/behaviors/create-resolution-package-files.ts new file mode 100644 index 000000000..7b14fe798 --- /dev/null +++ b/tools/buildsystem/src/behaviors/create-resolution-package-files.ts @@ -0,0 +1,43 @@ +import { TimelinePipe } from "@pnp/core"; +import { resolve } from "path"; +import { BuildTimeline } from "../build-timeline.js"; +import buildWriteFile from "../lib/write-file.js"; + +/** + * Because the TypeScript team will not make a simple change we have to add package.json's to each package's module sub/folder to ensure the resolution works with just *.js extensions. + * + * It is stupid this has to exist, but well here we are. + * @returns + */ +export function CreateResolutionPackageFiles(): TimelinePipe { + + return (instance: BuildTimeline) => { + + instance.on.package(async function (this: BuildTimeline) { + + this.log("Creating Resolution package.json files.", 1); + + const { target } = this.context; + + const promises = []; + + target.packages.forEach((pkg) => { + + const filePath = resolve(pkg.resolvedPkgDistRoot, pkg.relativePkgDistModulePath, "package.json"); + + let pkgFile = { + name: pkg.name, + type: /commonjs/i.test(target.parsedTSConfig.compilerOptions.module) ? "commonjs" : "module", + } + + this.log(`Writing module resolution package.json for ${filePath} as ${pkgFile.type}`, 0); + + promises.push(buildWriteFile(filePath, JSON.stringify(pkgFile))); + }); + + await Promise.all(promises); + }); + + return instance; + } +} diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index c530c89ad..97a84b7fe 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -9,7 +9,7 @@ export interface IReplaceVersionOptions { pathsResolved?: boolean; } -export function ReplaceVersion(paths: string[], options: IReplaceVersionOptions): TimelinePipe { +export function ReplaceVersion(paths: string[], options?: IReplaceVersionOptions): TimelinePipe { options = { versionMask: /\$\$Version\$\$/img, diff --git a/tools/buildsystem/src/types.ts b/tools/buildsystem/src/types.ts index 754beeb23..eda33360f 100644 --- a/tools/buildsystem/src/types.ts +++ b/tools/buildsystem/src/types.ts @@ -20,6 +20,7 @@ export interface BuildSchema { export interface TSConfig { compilerOptions: { outDir: string; + module: string; }; references?: { path: string; @@ -43,6 +44,7 @@ export interface IBuildContext { resolvedPkgSrcRoot: string; resolvedPkgOutRoot: string; resolvedPkgDistRoot: string; + relativePkgDistModulePath: string; }[]; }; } diff --git a/tools/buildsystem/tsconfig.json b/tools/buildsystem/tsconfig.json index a06704fd4..8a21a49ac 100644 --- a/tools/buildsystem/tsconfig.json +++ b/tools/buildsystem/tsconfig.json @@ -32,7 +32,6 @@ "resolveJsonModule": true }, "include": [ - "./index.ts", - "./**/*.*" + "./**/*.ts" ] } \ No newline at end of file diff --git a/tools/local-module-resolver/esm-packages.ts b/tools/local-module-resolver/esm-packages.ts index b2d6b29e9..bfd6d94aa 100644 --- a/tools/local-module-resolver/esm-packages.ts +++ b/tools/local-module-resolver/esm-packages.ts @@ -1,2 +1,2 @@ import { createResolve} from "./esm.js"; -export const resolve = createResolve("/build/packages"); +export const resolve = createResolve("/build/packages/esm"); diff --git a/tools/local-module-resolver/esm.ts b/tools/local-module-resolver/esm.ts index 6398cef4a..53c7be86f 100644 --- a/tools/local-module-resolver/esm.ts +++ b/tools/local-module-resolver/esm.ts @@ -18,16 +18,23 @@ export function createResolve(innerPath: string): ResolverFunc { return async function (specifier: string, context: ResolveContext, defaultResolve: ResolverFunc): Promise { - if (specifier.startsWith("@pnp") && specifier !== "@pnp/buildsystem") { + if (specifier.startsWith("@pnp")) { const modulePath = specifier.substring(4); + log(`modulePath: ${modulePath}`); + if (cache.has(modulePath)) { return cache.get(modulePath)!; } let candidate = join(projectRoot, innerPath, modulePath); + // hack to enable debugging the buildsystem + if (modulePath === "/buildsystem") { + candidate = resolve("./build/build-system") + } + if (existsSync(candidate + ".js")) { candidate = candidate + ".js" diff --git a/tsconfig.buildsystem.json b/tsconfig.buildsystem.json index 128fa538d..3fc021c70 100644 --- a/tsconfig.buildsystem.json +++ b/tsconfig.buildsystem.json @@ -8,7 +8,7 @@ "declaration": false, "declarationMap": false, "sourceMap": false, - "allowSyntheticDefaultImports": true, + "allowSyntheticDefaultImports": true }, "include": [ "buildsystem-config.ts" From f2202a0d6bfb4a1a4404879da3f713bc7bb246ed Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 27 Dec 2023 16:03:07 -0500 Subject: [PATCH 062/171] setting up for first nightly build with both modules --- buildsystem-config.ts | 20 ++++++- package-lock.json | 120 ++---------------------------------------- package.json | 3 +- 3 files changed, 24 insertions(+), 119 deletions(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 6fbd8f372..a40d7e9a5 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -9,6 +9,7 @@ import { WritePackageJSON, Publish, PublishNightly, + CreateResolutionPackageFiles, } from "@pnp/buildsystem"; import { Logger, @@ -24,7 +25,7 @@ Logger.subscribe(ConsoleListener("", { warning: "yellow", })); -const logLevel = LogLevel.Verbose; +const logLevel = LogLevel.Info; const distFolder = "./dist/packages"; const commonPublishTags = ["--access", "public"]; @@ -47,6 +48,7 @@ function PnPPackage(): (b: BuildTimeline) => BuildTimeline { CopyAssetFiles(".", ["LICENSE"])(instance); CopyAssetFiles("./packages", ["readme.md"])(instance); CopyPackageFiles("built", ["**/*.d.ts", "**/*.js", "**/*.js.map", "**/*.d.ts.map"])(instance); + CreateResolutionPackageFiles()(instance), WritePackageJSON((p) => { return Object.assign({}, p, { type: "module", @@ -80,6 +82,22 @@ function PnPPackage(): (b: BuildTimeline) => BuildTimeline { "default": "./esm/index.js" } }, + maintainers: [ + { + name: "patrick-rodgers", + email: "patrick.rodgers@microsoft.com" + }, + { + name: "juliemturner", + email: "julie.turner@sympraxisconsulting.com", + url: "https://julieturner.net" + }, + { + name: "bcameron1231", + email: "beau@beaucameron.net", + url: "https://beaucameron.net" + }, + ], funding: { type: "individual", url: "https://github.com/sponsors/patrick-rodgers/", diff --git a/package-lock.json b/package-lock.json index 0ebe60470..7cfd32746 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,13 +12,12 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta7", + "@pnp/buildsystem": "^4.0.0-beta8", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", "@types/findup-sync": "4.0.2", - "@types/gulp": "4.0.13", "@types/mocha": "10.0.1", "@types/node": "16.11.7", "@types/webpack": "5.28.2", @@ -601,9 +600,9 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta7", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta7.tgz", - "integrity": "sha512-2TNJ/lFkf04ebkMUUVgNeDvLWBCK490/0TV88lCVJyin9N3e1SwD2hPusJGPqPqZ6EKW0AenCeFRLXzwBdgfpA==", + "version": "4.0.0-beta8", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta8.tgz", + "integrity": "sha512-y4K/RiYtwMy67O6iaj5ThY1S7oXDodhld8zngRxaAvcIcdP++3Y/PtWuQxnOnCwSqPetqbEkh1jhJiMBzxQkLw==", "dev": true, "dependencies": { "@pnp/core": "^4.0.0-alpha0-v4nightly.20231227", @@ -848,12 +847,6 @@ "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", "dev": true }, - "node_modules/@types/expect": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", - "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", - "dev": true - }, "node_modules/@types/express": { "version": "4.17.18", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", @@ -887,28 +880,6 @@ "@types/micromatch": "*" } }, - "node_modules/@types/glob-stream": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.0.tgz", - "integrity": "sha512-fxTWwdQmX9LWSHD7ZLlv3BHR992mKcVcDnT/2v+l/QZZo7TfDdyasqlSYVzOnMGWhRbrWeWkbj/mgezFjKynhw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/picomatch": "*", - "@types/streamx": "*" - } - }, - "node_modules/@types/gulp": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.13.tgz", - "integrity": "sha512-Ms20Q2tZ3MpThZGn4Ag6e7ifz/oQJFxsuiopqz5oHmhE6q2ohnELgafi5K/pKX/4ntlpidS61v/TXAguYsVcaA==", - "dev": true, - "dependencies": { - "@types/undertaker": ">=1.2.6", - "@types/vinyl-fs": "*", - "chokidar": "^3.3.1" - } - }, "node_modules/@types/http-errors": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", @@ -969,12 +940,6 @@ "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", "dev": true }, - "node_modules/@types/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-Ejq9/KBsgfZZafGGdr9R7011EZhDzcAEMjoBl2W4eGNcZGhsUFMbUA0D+sHxjtAA1ldk3e6wapzXeyp0NSuM8Q==", - "dev": true - }, "node_modules/@types/qs": { "version": "6.9.8", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", @@ -1038,53 +1003,6 @@ "@types/node": "*" } }, - "node_modules/@types/streamx": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/streamx/-/streamx-2.9.2.tgz", - "integrity": "sha512-HmO0hbPVLzr6HIcc86QQPjJRLpBDQmC+c/qd1jG3vpH1ZgGxl9R9xhofm19vh7Xm8wHUcKBek1Ef1OHrwipmiA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/undertaker": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.9.tgz", - "integrity": "sha512-rOGGHtWFP4jsSKXvW2BJn+hYIAJ4cvsJi5wscbfbBHQ0yLQvTUXKvL+i72cv+8biktveFLEqbMpsKmJQxYVPQw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/undertaker-registry": "*", - "async-done": "~1.3.2" - } - }, - "node_modules/@types/undertaker-registry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.2.tgz", - "integrity": "sha512-O9CqcXYnCsHUSd71+hohlhEaP57dThYQQ8/cDwskhTCJ1kA3E5CVaK1sbEnukP2eWlpSgae/8KqgJBw3w/DmoQ==", - "dev": true - }, - "node_modules/@types/vinyl": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.8.tgz", - "integrity": "sha512-bls3EAsYVnVoPKoqgFC4Rtq7Kzte4MCk8xMA9UEPPVncJFsov9FJWYj0uxqJRwNEi9b4i4zX13FydaDrhadmHg==", - "dev": true, - "dependencies": { - "@types/expect": "^1.20.4", - "@types/node": "*" - } - }, - "node_modules/@types/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-lh/EgJwJikII5ZvdcrwUcm1zoBOwVG8/Szo3Q4opb6HE8yYUPejiE5UDiDrhzgU2Zka8jKjEDPHblAvg8faMqw==", - "dev": true, - "dependencies": { - "@types/glob-stream": "*", - "@types/node": "*", - "@types/vinyl": "*" - } - }, "node_modules/@types/webpack": { "version": "5.28.2", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.2.tgz", @@ -1781,21 +1699,6 @@ "node": "*" } }, - "node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2711,15 +2614,6 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -6320,12 +6214,6 @@ "npm": ">=6" } }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", diff --git a/package.json b/package.json index aedfc0acc..0d29c52d6 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,12 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta7", + "@pnp/buildsystem": "^4.0.0-beta8", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", "@types/core-js": "2.5.6", "@types/findup-sync": "4.0.2", - "@types/gulp": "4.0.13", "@types/mocha": "10.0.1", "@types/node": "16.11.7", "@types/webpack": "5.28.2", From fb0985a2ddcdc602f26bbcf1ca297a124b2a7477 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Fri, 29 Dec 2023 07:41:29 -0500 Subject: [PATCH 063/171] updating buildsystem to single timeline --- tools/buildsystem/bin/buildsystem.ts | 54 +++++++++--------- tools/buildsystem/package-lock.json | 20 +++---- tools/buildsystem/package.json | 4 +- tools/buildsystem/src/behaviors/build.ts | 27 +++++---- .../src/behaviors/copy-asset-files.ts | 2 +- .../src/behaviors/copy-package-files.ts | 56 ++++++++++--------- .../create-resolution-package-files.ts | 23 ++++---- .../src/behaviors/publish-nightly.ts | 4 +- tools/buildsystem/src/behaviors/publish.ts | 4 +- .../src/behaviors/replace-version.ts | 19 ++++--- .../src/behaviors/write-packagejson.ts | 4 +- tools/buildsystem/src/build-timeline.ts | 7 +-- tools/buildsystem/src/types.ts | 4 +- 13 files changed, 117 insertions(+), 111 deletions(-) diff --git a/tools/buildsystem/bin/buildsystem.ts b/tools/buildsystem/bin/buildsystem.ts index a4ebdfc5d..ebf035513 100644 --- a/tools/buildsystem/bin/buildsystem.ts +++ b/tools/buildsystem/bin/buildsystem.ts @@ -51,22 +51,8 @@ BuildSystem.prepare({}, function (env) { // setup other context values from config context.distRoot = config[0].distFolder || "./dist/packages"; - const baseTimeline = new BuildTimeline(); - - // now we apply all our configs - if (activeConfig.behaviors) { - baseTimeline.using(...activeConfig.behaviors); - } - - // read in any moment defined observers - for (let key in BuildMoments) { - if (activeConfig[key]) { - baseTimeline.on[key](...activeConfig[key]); - } - } - // now we make an array of timelines 1/target - const timelines = config[0].targets.map(tsconfigPath => { + context.targets = config[0].targets.map(tsconfigPath => { const tsconfigRoot = resolve(dirname(tsconfigPath)); const parsedTSConfig: TSConfig = importJSON(tsconfigPath); @@ -93,22 +79,34 @@ BuildSystem.prepare({}, function (env) { resolvedPkgSrcRoot: tsconfigRoot, resolvedPkgOutRoot: resolvedOutDir, resolvedPkgDistRoot: context.distRoot, - relativePkgDistModulePath: context.distRoot, + relativePkgDistModulePath: context.distRoot, }); } - - return Object.assign({}, context, { - target: { - tsconfigPath, - tsconfigRoot, - parsedTSConfig, - resolvedOutDir, - packages, - } - }); - }).map(context => new BuildTimeline(baseTimeline, context)); + + return { + tsconfigPath, + tsconfigRoot, + parsedTSConfig, + resolvedOutDir, + packages, + }; + }) + + const timeline = new BuildTimeline(context); + + // now we apply all our configs + if (activeConfig.behaviors) { + timeline.using(...activeConfig.behaviors); + } + + // read in any moment defined observers + for (let key in BuildMoments) { + if (activeConfig[key]) { + timeline.on[key](...activeConfig[key]); + } + } // we start one timeline per target - await Promise.all(timelines.map(tl => tl.start())); + await timeline.start(); }); }); diff --git a/tools/buildsystem/package-lock.json b/tools/buildsystem/package-lock.json index 213de9055..cc1241abc 100644 --- a/tools/buildsystem/package-lock.json +++ b/tools/buildsystem/package-lock.json @@ -1,15 +1,15 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta5", + "version": "4.0.0-beta8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pnp/buildsystem", - "version": "4.0.0-beta5", + "version": "4.0.0-beta8", "license": "MIT", "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20231227", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20231229", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", @@ -153,14 +153,14 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20231227", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231227.tgz", - "integrity": "sha512-k3oS1swDBL582L7F7YISURVe6RB5U8kgC6E8vzVgbFE6mmW5KV1jP7HG6EhDc6yvAeryL0mPKXvz0OlKu51ntQ==", + "version": "4.0.0-alpha0-v4nightly.20231229", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231229.tgz", + "integrity": "sha512-3N58DjsoiqQTw3eablg4cO0HjL1RPTzV47DGYGBdeFS6p/IKWLLDG59jevuhKV6eoRVWpvaJguQoDMyiGlRNrg==", "dependencies": { "tslib": "2.4.1" }, "engines": { - "node": ">=14.15.1" + "node": ">=18.12.0" }, "funding": { "type": "individual", @@ -2749,9 +2749,9 @@ } }, "@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20231227", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231227.tgz", - "integrity": "sha512-k3oS1swDBL582L7F7YISURVe6RB5U8kgC6E8vzVgbFE6mmW5KV1jP7HG6EhDc6yvAeryL0mPKXvz0OlKu51ntQ==", + "version": "4.0.0-alpha0-v4nightly.20231229", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231229.tgz", + "integrity": "sha512-3N58DjsoiqQTw3eablg4cO0HjL1RPTzV47DGYGBdeFS6p/IKWLLDG59jevuhKV6eoRVWpvaJguQoDMyiGlRNrg==", "requires": { "tslib": "2.4.1" } diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 33bba9a1c..2e5bc17bc 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta8", + "version": "4.0.0-beta9", "bin": { "pnpbuild": "bin/buildsystem.js" }, @@ -9,7 +9,7 @@ "type": "module", "typings": "./index", "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20231227", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20231229", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", diff --git a/tools/buildsystem/src/behaviors/build.ts b/tools/buildsystem/src/behaviors/build.ts index dbe88b055..fc1af104d 100644 --- a/tools/buildsystem/src/behaviors/build.ts +++ b/tools/buildsystem/src/behaviors/build.ts @@ -17,23 +17,26 @@ export function Build(flags?: string[]): TimelinePipe { instance.on.build(async function (this: BuildTimeline) { - const { tsconfigPath } = this.context.target; + const { targets } = this.context; - this.log(`Starting Build for target "${tsconfigPath}"`, 1); + await Promise.all(targets.map((target) => { - return new Promise((res, reject) => { + this.log(`Starting Build for target "${target.tsconfigPath}"`, 1); - exec(`${tscPath} -b ${tsconfigPath} ${stringFlags}`, (error, stdout, _stderr) => { + return new Promise((res, reject) => { - if (error === null) { - this.log(`Completing Build for target "${tsconfigPath}"`, 1); - res(); - } else { - this.log(`Error in Build for target "${tsconfigPath}"`, 3); - reject(stdout); - } + exec(`${tscPath} -b ${target.tsconfigPath} ${stringFlags}`, (error, stdout, _stderr) => { + + if (error === null) { + this.log(`Completing Build for target "${target.tsconfigPath}"`, 1); + res(); + } else { + this.log(`Error in Build for target "${target.tsconfigPath}"`, 3); + reject(stdout); + } + }); }); - }); + })); }); return instance; diff --git a/tools/buildsystem/src/behaviors/copy-asset-files.ts b/tools/buildsystem/src/behaviors/copy-asset-files.ts index 071a21482..394bdb56e 100644 --- a/tools/buildsystem/src/behaviors/copy-asset-files.ts +++ b/tools/buildsystem/src/behaviors/copy-asset-files.ts @@ -27,7 +27,7 @@ export function CopyAssetFiles(path: string, pattern: string[]): TimelinePipe { this.log(`CopyAssetFiles found ${temp.length} files for pattern ${stringPattern} in path '${resolvedPath}'`); - const files = await this.context.target.packages.reduce((p, pkg) => { + const files = await this.context.targets[0].packages.reduce((p, pkg) => { return p.then(async (a) => { diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index 294d37a25..e2ace2858 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -18,33 +18,37 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti instance.on.package(async function (this: BuildTimeline) { - this.log(`Starting CopyPackageFiles with pattern ${stringPattern} on target '${this.context.target.tsconfigPath}'`); - - const files = await this.context.target.packages.reduce((p, pkg) => { - - const fileSourceRoot = resolve(source === "src" ? pkg.resolvedPkgSrcRoot : pkg.resolvedPkgOutRoot); - - return p.then(async (a) => { - - const temp = await (globby)(pattern, { - cwd: fileSourceRoot, + this.context.targets.forEach(async (target) => { + + this.log(`Starting CopyPackageFiles with pattern ${stringPattern} on target '${target.tsconfigPath}'`); + + const files = await target.packages.reduce((p, pkg) => { + + const fileSourceRoot = resolve(source === "src" ? pkg.resolvedPkgSrcRoot : pkg.resolvedPkgOutRoot); + + return p.then(async (a) => { + + const temp = await (globby)(pattern, { + cwd: fileSourceRoot, + }); + + a.push(...temp.map(t => ({ + src: resolve(fileSourceRoot, t), + dest: resolve(pkg.resolvedPkgDistRoot, source === "built" ? pkg.relativePkgDistModulePath : "", t), + }))); + + return a; }); - - a.push(...temp.map(t => ({ - src: resolve(fileSourceRoot, t), - dest: resolve(pkg.resolvedPkgDistRoot, source === "built" ? pkg.relativePkgDistModulePath : "", t), - }))); - - return a; - }); - - }, Promise.resolve<{ src: string, dest: string }[]>([])); - - this.log(`CopyPackageFiles found ${files.length} files for pattern ${stringPattern} in target '${this.context.target.tsconfigPath}'`); - - await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); - - this.log(`Completing CopyPackageFiles with pattern ${stringPattern} on target '${this.context.target.tsconfigPath}'`); + + }, Promise.resolve<{ src: string, dest: string }[]>([])); + + this.log(`CopyPackageFiles found ${files.length} files for pattern ${stringPattern} in target '${target.tsconfigPath}'`); + + await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); + + this.log(`Completing CopyPackageFiles with pattern ${stringPattern} on target '${target.tsconfigPath}'`); + + }); }); return instance; diff --git a/tools/buildsystem/src/behaviors/create-resolution-package-files.ts b/tools/buildsystem/src/behaviors/create-resolution-package-files.ts index 7b14fe798..984ee29af 100644 --- a/tools/buildsystem/src/behaviors/create-resolution-package-files.ts +++ b/tools/buildsystem/src/behaviors/create-resolution-package-files.ts @@ -13,26 +13,29 @@ export function CreateResolutionPackageFiles(): TimelinePipe { return (instance: BuildTimeline) => { - instance.on.package(async function (this: BuildTimeline) { + instance.on.package(async function (this: BuildTimeline) { this.log("Creating Resolution package.json files.", 1); - const { target } = this.context; + const { targets } = this.context; const promises = []; - target.packages.forEach((pkg) => { + targets.forEach((target) => { - const filePath = resolve(pkg.resolvedPkgDistRoot, pkg.relativePkgDistModulePath, "package.json"); + target.packages.forEach((pkg) => { - let pkgFile = { - name: pkg.name, - type: /commonjs/i.test(target.parsedTSConfig.compilerOptions.module) ? "commonjs" : "module", - } + const filePath = resolve(pkg.resolvedPkgDistRoot, pkg.relativePkgDistModulePath, "package.json"); - this.log(`Writing module resolution package.json for ${filePath} as ${pkgFile.type}`, 0); + let pkgFile = { + name: pkg.name, + type: /commonjs/i.test(target.parsedTSConfig.compilerOptions.module) ? "commonjs" : "module", + } - promises.push(buildWriteFile(filePath, JSON.stringify(pkgFile))); + this.log(`Writing module resolution package.json for ${filePath} as ${pkgFile.type}`, 0); + + promises.push(buildWriteFile(filePath, JSON.stringify(pkgFile))); + }); }); await Promise.all(promises); diff --git a/tools/buildsystem/src/behaviors/publish-nightly.ts b/tools/buildsystem/src/behaviors/publish-nightly.ts index d1eb7cada..2b9560053 100644 --- a/tools/buildsystem/src/behaviors/publish-nightly.ts +++ b/tools/buildsystem/src/behaviors/publish-nightly.ts @@ -21,14 +21,14 @@ export function PublishNightly(flags: string[], nightlyName: "v3nightly" | "v4ni // this updates all the package.json versions to the nightly pattern instance.on.prePublish(async function (this: BuildTimeline) { - const { target } = this.context; + const { targets } = this.context; const date = new Date(); const versionStr = `-${nightlyName}.${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, "0")}${date.getDate().toString().padStart(2, "0")}`; this.log(`Updating nightly package.json version to ${versionStr}`); - await Promise.all(target.packages.map(pkg => { + await Promise.all(targets[0].packages.map(pkg => { const packageJsonPath = resolve(pkg.resolvedPkgDistRoot, "package.json"); const packageJson = importJSON(packageJsonPath); diff --git a/tools/buildsystem/src/behaviors/publish.ts b/tools/buildsystem/src/behaviors/publish.ts index 089a93f8f..39d8a8b40 100644 --- a/tools/buildsystem/src/behaviors/publish.ts +++ b/tools/buildsystem/src/behaviors/publish.ts @@ -10,11 +10,11 @@ export function Publish(flags?: string[]): TimelinePipe { instance.on.publish(async function (this: BuildTimeline) { - const { target } = this.context; + const { targets } = this.context; const promises: Promise[] = []; - target.packages.forEach(pkg => { + targets[0].packages.forEach(pkg => { promises.push(new Promise((resolve, reject) => { diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index 97a84b7fe..f61e82d7b 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -20,17 +20,20 @@ export function ReplaceVersion(paths: string[], options?: IReplaceVersionOptions instance.on.postBuild(async function (this: BuildTimeline) { - const { version, target } = this.context; + const { version, targets } = this.context; - this.log(`Replacing package version for target "${target.tsconfigPath}"`, 1); + targets.forEach((target) => { - paths.forEach(async (path) => { + this.log(`Replacing package version for target "${target.tsconfigPath}"`, 1); - const resolvedPath = options?.pathsResolved ? path : resolve(target.resolvedOutDir, path); - this.log(`Resolving path '${path}' to '${resolvedPath}'.`, 0); - const file = await readFile(resolve(resolvedPath)); - await buildWriteFile(resolvedPath, file.toString().replace(options.versionMask, version)); - }); + paths.forEach(async (path) => { + + const resolvedPath = options?.pathsResolved ? path : resolve(target.resolvedOutDir, path); + this.log(`Resolving path '${path}' to '${resolvedPath}'.`, 0); + const file = await readFile(resolve(resolvedPath)); + await buildWriteFile(resolvedPath, file.toString().replace(options.versionMask, version)); + }); + }); }); return instance; diff --git a/tools/buildsystem/src/behaviors/write-packagejson.ts b/tools/buildsystem/src/behaviors/write-packagejson.ts index 54fbf115d..5dfb52feb 100644 --- a/tools/buildsystem/src/behaviors/write-packagejson.ts +++ b/tools/buildsystem/src/behaviors/write-packagejson.ts @@ -10,11 +10,11 @@ export function WritePackageJSON(transform?: (p: any) => typeof p): TimelinePipe instance.on.postBuild(async function (this: BuildTimeline) { - const { version, target } = this.context; + const { version, targets } = this.context; const promises = []; - target.packages.forEach((pkg) => { + targets[0].packages.forEach((pkg) => { let pkgFile = importJSON(resolve(pkg.resolvedPkgSrcRoot, "package.json")); diff --git a/tools/buildsystem/src/build-timeline.ts b/tools/buildsystem/src/build-timeline.ts index 3d53cb886..92a96d94f 100644 --- a/tools/buildsystem/src/build-timeline.ts +++ b/tools/buildsystem/src/build-timeline.ts @@ -28,13 +28,8 @@ export class BuildTimeline extends Timeline { protected InternalResolve = Symbol.for("Queryable_Resolve"); protected InternalReject = Symbol.for("Queryable_Reject"); - constructor(templateTimeline?: BuildTimeline, protected context?: Partial) { + constructor(protected context?: Partial) { super(BuildMoments); - - if (typeof templateTimeline !== "undefined") { - this.observers = templateTimeline.observers; - this._inheritingObservers = true; - } } public start(): Promise { diff --git a/tools/buildsystem/src/types.ts b/tools/buildsystem/src/types.ts index eda33360f..be564a754 100644 --- a/tools/buildsystem/src/types.ts +++ b/tools/buildsystem/src/types.ts @@ -33,7 +33,7 @@ export interface IBuildContext { version: string; configName: string; distRoot: string; - target: { + targets: { tsconfigPath: string; tsconfigRoot: string; parsedTSConfig: TSConfig; @@ -46,5 +46,5 @@ export interface IBuildContext { resolvedPkgDistRoot: string; relativePkgDistModulePath: string; }[]; - }; + }[]; } From ed02624a99a45d95a834bfcc0c23eeb232204fed Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Fri, 29 Dec 2023 07:50:01 -0500 Subject: [PATCH 064/171] bumping buildsystem to latest --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7cfd32746..0235a3fde 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta8", + "@pnp/buildsystem": "^4.0.0-beta9", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", @@ -600,12 +600,12 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta8", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta8.tgz", - "integrity": "sha512-y4K/RiYtwMy67O6iaj5ThY1S7oXDodhld8zngRxaAvcIcdP++3Y/PtWuQxnOnCwSqPetqbEkh1jhJiMBzxQkLw==", + "version": "4.0.0-beta9", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta9.tgz", + "integrity": "sha512-NBU6/HyEbcvePfS+sexR+pETVooZyo1G9XzQPkqgbV88yeiAROOtuAH9n7K/+EkLK7BXxH7RdpOTqmiV00D7/Q==", "dev": true, "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20231227", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20231229", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", @@ -692,15 +692,15 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20231227", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231227.tgz", - "integrity": "sha512-k3oS1swDBL582L7F7YISURVe6RB5U8kgC6E8vzVgbFE6mmW5KV1jP7HG6EhDc6yvAeryL0mPKXvz0OlKu51ntQ==", + "version": "4.0.0-alpha0-v4nightly.20231229", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231229.tgz", + "integrity": "sha512-3N58DjsoiqQTw3eablg4cO0HjL1RPTzV47DGYGBdeFS6p/IKWLLDG59jevuhKV6eoRVWpvaJguQoDMyiGlRNrg==", "dev": true, "dependencies": { "tslib": "2.4.1" }, "engines": { - "node": ">=14.15.1" + "node": ">=18.12.0" }, "funding": { "type": "individual", diff --git a/package.json b/package.json index 0d29c52d6..3a5dc9f42 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta8", + "@pnp/buildsystem": "^4.0.0-beta9", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", From 1c2be24b5d61ceee29a52494fbe28f4d8fa32a2c Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 22 Dec 2023 08:32:57 -0500 Subject: [PATCH 065/171] Places Add New Places module New Tests Updated Docs --- docs/graph/places.md | 77 +++++++++++++++++++++++++++++++ packages/graph/places/index.ts | 23 ++++++++++ packages/graph/places/types.ts | 83 ++++++++++++++++++++++++++++++++++ test/graph/places.ts | 61 +++++++++++++++++++++++++ 4 files changed, 244 insertions(+) create mode 100644 docs/graph/places.md create mode 100644 packages/graph/places/index.ts create mode 100644 packages/graph/places/types.ts create mode 100644 test/graph/places.ts diff --git a/docs/graph/places.md b/docs/graph/places.md new file mode 100644 index 000000000..37868766c --- /dev/null +++ b/docs/graph/places.md @@ -0,0 +1,77 @@ +# @pnp/graph/places + +This module allows you to work with Exchange resources such as rooms and roomLists. + +## IPlaces, Places, IPlace, Place + +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Get all rooms in a Tenant + +This example shows how to retrieve all rooms in a tenant + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/places"; + +const graph = graphfi(...); +const rooms = graph.places.rooms(); +``` +## Get all roomlists in a tenant + +This example shows how to retrieve all roomlists in a tenant + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/places"; + +const graph = graphfi(...); +const roomLists = graph.places.roomlists(); + +``` +## Get Rooms in room list + +This example shows how to retrieve all rooms in a roomlist + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/places"; + +const graph = graphfi(...); +const roomsByList = await graph.places.roomLists.getById("05fb1ae2-6de6-4fa8-b852-fb0cf671b896").rooms(); + +``` +## Get Place by Id + +This example shows how to retrieve a place (room, roomlist) by id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/places"; + +const graph = graphfi(...); + +const roomById = await graph.places.getById("05fb1ae2-6de6-4fa8-b852-fb0cf671b896")(); + +``` +## Update a place + +This example shows how to update a place (room, roomlist) + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/places"; + +const graph = graphfi(...); + +var updatedRoom = await graph.places.getById("05fb1ae2-6de6-4fa8-b852-fb0cf671b896").update( + { + '@odata.type': "microsoft.graph.room", + "nickname": "Conf Room", + "building": "1", + "label": "100", + "capacity": 50, + "isWheelChairAccessible": false, + }); + +``` diff --git a/packages/graph/places/index.ts b/packages/graph/places/index.ts new file mode 100644 index 000000000..9aaae3cb7 --- /dev/null +++ b/packages/graph/places/index.ts @@ -0,0 +1,23 @@ +import { GraphFI } from "../fi.js"; +import { IPlaces, Places } from "./types.js"; + +export { + Places, + IPlaces, + Place, + IPlace, +} from "./types.js"; + +declare module "../fi" { + interface GraphFI { + readonly places: IPlaces; + } +} + +Reflect.defineProperty(GraphFI.prototype, "places", { + configurable: true, + enumerable: true, + get: function (this: GraphFI) { + return this.create(Places); + }, +}); diff --git a/packages/graph/places/types.ts b/packages/graph/places/types.ts new file mode 100644 index 000000000..35df3b9c1 --- /dev/null +++ b/packages/graph/places/types.ts @@ -0,0 +1,83 @@ +import { defaultPath, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; +import { _GraphCollection, _GraphInstance, graphInvokableFactory } from "../graphqueryable.js"; +import { Room as IRoomType, RoomList as IRoomListType, Place as IPlaceType } from "@microsoft/microsoft-graph-types"; + +/** + * Place + */ +@updateable() +export class _Place extends _GraphInstance { } +export interface IPlace extends _Place, IUpdateable { } +export const Place = graphInvokableFactory(_Place); + +/** + * Places + */ +@defaultPath("places") +@getById(Place) +export class _Places extends _GraphInstance { + + /** + * Gets all rooms in a tenant + */ + public get rooms(): IRooms { + return Rooms(this); + } + + /** + * Gets all roomLists in a tenant + */ + public get roomLists(): IRoomlists { + return RoomLists(this); + } +} +export interface IPlaces extends _Places, IGetById { } +export const Places = graphInvokableFactory(_Places); + +/** + * RoomList + */ +export class _RoomList extends _GraphInstance { + /** + * Gets all rooms in a roomList + */ + public get rooms(): IRooms { + return Rooms(this, "rooms"); + } +} +export interface IRoomlist extends _RoomList {} +export const RoomList = graphInvokableFactory(_RoomList); + +/** + * RoomLists + */ +@defaultPath("microsoft.graph.roomList") +@getById(RoomList) +export class _RoomLists extends _GraphCollection {} +export interface IRoomlists extends _RoomLists, IGetById { } +export const RoomLists = graphInvokableFactory(_RoomLists); + +/** + * Room + */ +export class _Room extends _GraphInstance {} +export interface IRoom extends _Rooms { } +export const Room = graphInvokableFactory(_Room); + +/** + * Rooms + */ +@defaultPath("microsoft.graph.room") +@getById(Room) +export class _Rooms extends _GraphCollection {} +export interface IRooms extends _Rooms, IGetById { } +export const Rooms = graphInvokableFactory(_Rooms); + +export interface IPlacesType { + readonly rooms: IRoomType[]; + readonly roomLists: IRoomListType[]; +} + +export interface IUpdatePlaceProps extends IRoomType, IRoomListType { + "@odata.type": string; +} diff --git a/test/graph/places.ts b/test/graph/places.ts new file mode 100644 index 000000000..2812c3f0e --- /dev/null +++ b/test/graph/places.ts @@ -0,0 +1,61 @@ +import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; +import "@pnp/graph/places"; +import { getRandomString } from "@pnp/core"; + +describe("Places", function () { + + before(async function () { + + if (!this.pnp.settings.enableWebTests) { + this.skip(); + } + }); + + it("get rooms", pnpTest("7b9a74f6-22f3-4859-bae2-ddb3cba99324", async function () { + const rooms = await this.pnp.graph.places.rooms(); + return expect(rooms).to.be.an("array"); + })); + + it("get roomlists", pnpTest("25f24e27-420f-4641-b69d-962597528fdd", async function () { + const roomLists = await this.pnp.graph.places.roomLists(); + return expect(roomLists).to.be.an("array"); + })); + + it("get room in roomlist", pnpTest("25f24e27-420f-4641-b69d-962597528fdd", async function () { + const roomLists = await this.pnp.graph.places.roomLists(); + if(roomLists.length > 0){ + const rooms = await this.pnp.graph.places.roomLists.getById(roomLists[0].id).rooms(); + return expect(rooms).to.be.an("array"); + } + this.skip(); + })); + + it("get place - getById()", pnpTest("b4307200-c208-4246-a571-4ebe06c54f70", async function () { + const rooms = await this.pnp.graph.places.rooms(); + if(rooms.length > 0){ + const room = await this.pnp.graph.places.getById(rooms[0].id)(); + return expect(room).to.haveOwnProperty("id"); + } + this.skip(); + })); + + it.skip("update place", pnpTest("7c3f4418-f1b7-46bf-8944-ee7c7cf896ff", async function () { + const rooms = await this.pnp.graph.places.rooms(); + const randomName = `Conf Room_${getRandomString(4)}`; + if(rooms.length > 0){ + const room = await this.pnp.graph.places.getById(rooms[0].id)(); + const update = await this.pnp.graph.places.getById(room.id).update( + { + "@odata.type": "microsoft.graph.room", + "nickname": randomName, + "building": "1", + "label": "100", + "capacity": 50, + "isWheelChairAccessible": false, + }); + return expect(update.nickname).to.be(randomName); + } + this.skip(); + })); +}); From 42c2ce9c95c8abef7796bb656f7b08513c46df6f Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 29 Dec 2023 14:13:01 -0700 Subject: [PATCH 066/171] Update docs --- docs/graph/places.md | 2 +- packages/graph/places/index.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/graph/places.md b/docs/graph/places.md index 37868766c..c95e9aa29 100644 --- a/docs/graph/places.md +++ b/docs/graph/places.md @@ -2,7 +2,7 @@ This module allows you to work with Exchange resources such as rooms and roomLists. -## IPlaces, Places, IPlace, Place +## IPlaces, Places, IPlace, Place, IRoom, Room, IRoomList, RoomList, IRoomLists, RoomLists [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/packages/graph/places/index.ts b/packages/graph/places/index.ts index 9aaae3cb7..a4380f7af 100644 --- a/packages/graph/places/index.ts +++ b/packages/graph/places/index.ts @@ -6,6 +6,12 @@ export { IPlaces, Place, IPlace, + Room, + IRoom, + RoomList, + IRoomlist, + RoomLists, + IRoomlists } from "./types.js"; declare module "../fi" { From e6de448c9698e54d13f823ead4fd3480431607e6 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 29 Dec 2023 14:14:59 -0700 Subject: [PATCH 067/171] Fix Eslint --- packages/graph/places/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/graph/places/index.ts b/packages/graph/places/index.ts index a4380f7af..2bd10ef77 100644 --- a/packages/graph/places/index.ts +++ b/packages/graph/places/index.ts @@ -11,7 +11,7 @@ export { RoomList, IRoomlist, RoomLists, - IRoomlists + IRoomlists, } from "./types.js"; declare module "../fi" { From 4ab168893087b9acf2e91c5a5251cfa52eca8396 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 18 Dec 2023 11:45:57 -0500 Subject: [PATCH 068/171] WIP Adding Taxonomy to Graph Removing Taxonomy from SP Updating Docs Updating Interfaces Updating Tests --- docs/graph/taxonomy.md | 442 ++++++++++++++++++++ docs/sp/column-defaults.md | 11 +- docs/sp/taxonomy.md | 470 --------------------- packages/{sp => graph}/taxonomy/index.ts | 34 +- packages/graph/taxonomy/sites.ts | 13 + packages/graph/taxonomy/types.ts | 124 ++++++ packages/sp/presets/all.ts | 2 - packages/sp/taxonomy/types.ts | 507 ----------------------- test/{sp => graph}/taxonomy.ts | 47 +-- 9 files changed, 611 insertions(+), 1039 deletions(-) create mode 100644 docs/graph/taxonomy.md delete mode 100644 docs/sp/taxonomy.md rename packages/{sp => graph}/taxonomy/index.ts (50%) create mode 100644 packages/graph/taxonomy/sites.ts create mode 100644 packages/graph/taxonomy/types.ts delete mode 100644 packages/sp/taxonomy/types.ts rename test/{sp => graph}/taxonomy.ts (69%) diff --git a/docs/graph/taxonomy.md b/docs/graph/taxonomy.md new file mode 100644 index 000000000..79055a5c3 --- /dev/null +++ b/docs/graph/taxonomy.md @@ -0,0 +1,442 @@ +# @pnp/graph/taxonomy + +Provides access to the v1.0 api term store + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +![Batching Not Supported Banner](https://img.shields.io/badge/Batching%20Not%20Supported-important.svg) + +## Term Store + +Access tenant termstore + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermStore } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get term store data +const info: ITermStore = await graph.termStore(); +``` + +Access site specific termstore + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get term store data +const info: ITermStoreInfo = await graph.sites.getById("contoso.sharepoint.com,91dd2418-8fb9-4e0e-919d-c1b31e938386,285cc5a1-cf50-4e4d-8d93-5ba5a8e76e01").termStore(); + +``` +### SearchTerm + +Search for terms starting with provided label under entire termStore or a termSet or a parent term. + +The following properties are valid for the supplied query: `label: string`, `setId?: string`, `parentTermId?: string`, `languageTag?: string`, `stringMatchOption?: "ExactMatch" | "StartsWith"`. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// minimally requires the label +const results1 = await graph.termStore.searchTerm({ + label: "test", +}); + +// other properties can be included as needed +const results2 = await graph.termStore.searchTerm({ + label: "test", + setId: "{guid}", +}); + +// other properties can be included as needed +const results3 = await graph.termStore.searchTerm({ + label: "test", + setId: "{guid}", + stringMatchOption: "ExactMatch", +}); +``` + +### Update + +Allows you to update language setttings for the store + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +await graph.termStore.update({ + defaultLanguageTag: "en-US", + languageTags: ["en-US", "en-IE", "de-DE"], +}); +``` + +## Term Groups + +Access term group information + +### List + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermGroupInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get term groups +const info: ITermGroupInfo[] = await graph.termStore.groups(); +``` + +### Get By Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermGroupInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get term groups data +const info: ITermGroupInfo = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72")(); +``` + +### Add + +Allows you to add a term group to a store. + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermGroupInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); +const groupInfo: ITermGroupInfo = await graph.termStore.groups.add({ + displayName: "Accounting", + description: "Term Group for Accounting", + name: "accounting1", + scope: "global", +}); +``` + +## Term Group + +### Delete + +Allows you to add a term group to a store. + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermGroupInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").delete(); +``` + +## Term Sets + +Access term set information + +### List + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermSetInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get set info +const info: ITermSetInfo[] = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets(); +``` + +### Get By Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermSetInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get term set data by group id then by term set id +const info: ITermSetInfo = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72")(); + +// get term set data by term set id +const infoByTermSetId: ITermSetInfo = await graph.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72")(); +``` + +### Add + +Allows you to add a term set. + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermGroupInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// when adding a set directly from the root .sets property, you must include the "parentGroup" property +const setInfo = await graph.termStore.sets.add({ + parentGroup: { + id: "338666a8-1111-2222-3333-f72471314e72" + }, + contact: "steve", + description: "description", + isAvailableForTagging: true, + isOpen: true, + localizedNames: [{ + name: "MySet", + languageTag: "en-US", + }], + properties: [{ + key: "key1", + value: "value1", + }] +}); + +// when adding a termset through a group's sets property you do not specify the "parentGroup" property +const setInfo2 = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.add({ + contact: "steve", + description: "description", + isAvailableForTagging: true, + isOpen: true, + localizedNames: [{ + name: "MySet2", + languageTag: "en-US", + }], + properties: [{ + key: "key1", + value: "value1", + }] +}); +``` + +### getAllChildrenAsOrderedTree + +This method will get all of a set's child terms in an ordered array. It is a costly method in terms of requests so we suggest you cache the results as taxonomy trees seldom change. + +> Starting with version 2.6.0 you can now include an optional param to retrieve all of the term's properties and localProperties in the tree. Default is false. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermInfo } from "@pnp/graph/taxonomy"; +import { dateAdd, PnPClientStorage } from "@pnp/core"; + +const graph = graphfi(...); + +// here we get all the children of a given set +const childTree = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getAllChildrenAsOrderedTree(); + +// here we show caching the results using the PnPClientStorage class, there are many caching libraries and options available +const store = new PnPClientStorage(); + +// our tree likely doesn't change much in 30 minutes for most applications +// adjust to be longer or shorter as needed +const cachedTree = await store.local.getOrPut("myKey", () => { + return graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getAllChildrenAsOrderedTree(); +}, dateAdd(new Date(), "minute", 30)); + +// you can also get all the properties and localProperties +const set = graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72"); +const childTree = await set.getAllChildrenAsOrderedTree({ retrieveProperties: true }); +``` + +## TermSet + +Access term set information + +### Update + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermGroupInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +const termSetInfo = await graph.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").update({ + properties: [{ + key: "MyKey2", + value: "MyValue2", + }], +}); + +const termSetInfo2 = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").update({ + properties: [{ + key: "MyKey3", + value: "MyValue3", + }], +}); +``` + +### Delete + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermGroupInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +await graph.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").delete(); + +await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").delete(); +``` + +## Terms + +Access term set information + +### List + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// list all the terms that are direct children of this set +const infos: ITermInfo[] = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").children(); +``` + +### List (terms) + +You can use the terms property to get a flat list of all terms in the set. These terms do not contain parent/child relationship information. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// list all the terms available in this term set by group id then by term set id +const infos: ITermInfo[] = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").terms(); + +// list all the terms available in this term set by term set id +const infosByTermSetId: ITermInfo[] = await graph.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").terms(); +``` + +### Get By Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get term set data +const info: ITermInfo = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72")(); +``` + +### Add + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; +import { ITermInfo } from "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +const newTermInfo = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").children.add({ + labels: [ + { + isDefault: true, + languageTag: "en-us", + name: "New Term", + } + ] +}); + +const newTermInfo = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").children.add({ + labels: [ + { + isDefault: true, + languageTag: "en-us", + name: "New Term 2", + } + ] +}); +``` + +## Term + +### Update + +> Note that when updating a Term if you update the `properties` it replaces the collection, so a merge of existing + new needs to be handled by your application. + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +const termInfo = await graph.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").update({ + properties: [{ + key: "something", + value: "a value 2", + }], +}); + +const termInfo2 = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").update({ + properties: [{ + key: "something", + value: "a value", + }], +}); +``` + +### Delete + +_Added in 3.10.0_ + +```TypeScript +import { graphfi, SPFxToken, SPFx } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +const termInfo = await graph.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").delete(); + +const termInfo2 = await graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").delete(); +``` + +## Get Term Parent + +The server API changed again, resulting in the removal of the "parent" property from ITerm as it is not longer supported as a path property. You now must use "expand" to load a term's parent information. The side affect of this is that the parent is no longer chainable, meaning you need to load a new term instance to work with the parent term. An approach for this is shown below. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/taxonomy"; + +const graph = graphfi(...); + +// get a ref to the set +const set = graph.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72"); + +// get a term's information and expand parent to get the parent info as well +const w = await set.getTermById("338666a8-1111-2222-3333-f72471314e72").expand("parent")(); + +// get a ref to the parent term +const parent = set.getTermById(w.parent.id); + +// make a request for the parent term's info - this data currently match the results in the expand call above, but this +// is to demonstrate how to gain a ref to the parent and select its data +const parentInfo = await parent.select("Id", "Descriptions")(); +``` diff --git a/docs/sp/column-defaults.md b/docs/sp/column-defaults.md index 9a3d61180..ee99ac2ad 100644 --- a/docs/sp/column-defaults.md +++ b/docs/sp/column-defaults.md @@ -216,23 +216,16 @@ import { spfi } from "@pnp/sp"; import "@pnp/sp/webs"; import "@pnp/sp/folders"; import "@pnp/sp/column-defaults"; -import "@pnp/sp/taxonomy"; const sp = spfi(...); -// get the term's info we want to use as the default -const term = await sp.termStore.sets.getById("ea6fc521-d293-4f3d-9e84-f3a5bc0936ce").getTermById("775c9cf6-c3cd-4db9-8cfa-fc0aeefad93a")(); - -// get the default term label -const defLabel = term.labels.find(v => v.isDefault); - // set the default value using -1, the term id, and the term's default label name await sp.web.lists.getByTitle("MetaDataDocLib").rootFolder.setDefaultColumnValues([{ name: "MetaDataColumnInternalName", value: { wssId: "-1", - termId: term.id, - termName: defLabel.name, + termId: "{term Id}", + termName: "{term Label}", } }]) diff --git a/docs/sp/taxonomy.md b/docs/sp/taxonomy.md deleted file mode 100644 index 224b489b3..000000000 --- a/docs/sp/taxonomy.md +++ /dev/null @@ -1,470 +0,0 @@ -# @pnp/sp/taxonomy - -Provides access to the v2.1 api term store - -### Docs updated with v2.0.9 release as the underlying API changed - -> NOTE: This API may change so please be aware updates to the taxonomy module will not trigger a major version bump in PnPjs even if they are breaking. Once things stabilize this note will be removed. - -[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) - -![Batching Not Supported Banner](https://img.shields.io/badge/Batching%20Not%20Supported-important.svg) - -## Term Store - -Access term store data from the root sp object as shown below. - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermStoreInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// get term store data -const info: ITermStoreInfo = await sp.termStore(); -``` - -### searchTerm - -_Added in 3.3.0_ - -Search for terms starting with provided label under entire termStore or a termSet or a parent term. - -The following properties are valid for the supplied query: `label: string`, `setId?: string`, `parentTermId?: string`, `languageTag?: string`, `stringMatchOption?: "ExactMatch" | "StartsWith"`. - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// minimally requires the label -const results1 = await sp.termStore.searchTerm({ - label: "test", -}); - -// other properties can be included as needed -const results2 = await sp.termStore.searchTerm({ - label: "test", - setId: "{guid}", -}); - -// other properties can be included as needed -const results3 = await sp.termStore.searchTerm({ - label: "test", - setId: "{guid}", - stringMatchOption: "ExactMatch", -}); -``` - -### update - -_Added in 3.10.0_ - -Allows you to update language setttings for the store - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -await sp.termStore.update({ - defaultLanguageTag: "en-US", - languageTags: ["en-US", "en-IE", "de-DE"], -}); -``` - -## Term Groups - -Access term group information - -### List - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermGroupInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// get term groups -const info: ITermGroupInfo[] = await sp.termStore.groups(); -``` - -### Get By Id - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermGroupInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// get term groups data -const info: ITermGroupInfo = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72")(); -``` - -### Add - -_Added in 3.10.0_ - -Allows you to add a term group to a store. - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermGroupInfo } from "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); -const groupInfo: ITermGroupInfo = await sp.termStore.groups.add({ - displayName: "Accounting", - description: "Term Group for Accounting", - name: "accounting1", - scope: "global", -}); -``` - -## Term Group - -### Delete - -_Added in 3.10.0_ - -Allows you to add a term group to a store. - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermGroupInfo } from "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); - -await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").delete(); -``` - -## Term Sets - -Access term set information - -### List - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermSetInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// get set info -const info: ITermSetInfo[] = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets(); -``` - -### Get By Id - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermSetInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// get term set data by group id then by term set id -const info: ITermSetInfo = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72")(); - -// get term set data by term set id -const infoByTermSetId: ITermSetInfo = await sp.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72")(); -``` - -### Add - -_Added in 3.10.0_ - -Allows you to add a term set. - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermGroupInfo } from "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); - -// when adding a set directly from the root .sets property, you must include the "parentGroup" property -const setInfo = await sp.termStore.sets.add({ - parentGroup: { - id: "338666a8-1111-2222-3333-f72471314e72" - }, - contact: "steve", - description: "description", - isAvailableForTagging: true, - isOpen: true, - localizedNames: [{ - name: "MySet", - languageTag: "en-US", - }], - properties: [{ - key: "key1", - value: "value1", - }] -}); - -// when adding a termset through a group's sets property you do not specify the "parentGroup" property -const setInfo2 = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.add({ - contact: "steve", - description: "description", - isAvailableForTagging: true, - isOpen: true, - localizedNames: [{ - name: "MySet2", - languageTag: "en-US", - }], - properties: [{ - key: "key1", - value: "value1", - }] -}); -``` - -### getAllChildrenAsOrderedTree - -This method will get all of a set's child terms in an ordered array. It is a costly method in terms of requests so we suggest you cache the results as taxonomy trees seldom change. - -> Starting with version 2.6.0 you can now include an optional param to retrieve all of the term's properties and localProperties in the tree. Default is false. - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermInfo } from "@pnp/sp/taxonomy"; -import { dateAdd, PnPClientStorage } from "@pnp/core"; - -const sp = spfi(...); - -// here we get all the children of a given set -const childTree = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getAllChildrenAsOrderedTree(); - -// here we show caching the results using the PnPClientStorage class, there are many caching libraries and options available -const store = new PnPClientStorage(); - -// our tree likely doesn't change much in 30 minutes for most applications -// adjust to be longer or shorter as needed -const cachedTree = await store.local.getOrPut("myKey", () => { - return sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getAllChildrenAsOrderedTree(); -}, dateAdd(new Date(), "minute", 30)); - -// you can also get all the properties and localProperties -const set = sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72"); -const childTree = await set.getAllChildrenAsOrderedTree({ retrieveProperties: true }); -``` - -## TermSet - -Access term set information - -### Update - -_Added in 3.10.0_ - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermGroupInfo } from "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); - -const termSetInfo = await sp.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").update({ - properties: [{ - key: "MyKey2", - value: "MyValue2", - }], -}); - -const termSetInfo2 = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").update({ - properties: [{ - key: "MyKey3", - value: "MyValue3", - }], -}); -``` - -### Delete - -_Added in 3.10.0_ - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermGroupInfo } from "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); - -await sp.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").delete(); - -await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").delete(); -``` - -## Terms - -Access term set information - -### List - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// list all the terms that are direct children of this set -const infos: ITermInfo[] = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").children(); -``` - -### List (terms) - -You can use the terms property to get a flat list of all terms in the set. These terms do not contain parent/child relationship information. - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// list all the terms available in this term set by group id then by term set id -const infos: ITermInfo[] = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").terms(); - -// list all the terms available in this term set by term set id -const infosByTermSetId: ITermInfo[] = await sp.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").terms(); -``` - -### Get By Id - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermInfo } from "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// get term set data -const info: ITermInfo = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72")(); -``` - -### Add - -_Added in 3.10.0_ - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; -import { ITermInfo } from "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); - -const newTermInfo = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").children.add({ - labels: [ - { - isDefault: true, - languageTag: "en-us", - name: "New Term", - } - ] -}); - -const newTermInfo = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").children.add({ - labels: [ - { - isDefault: true, - languageTag: "en-us", - name: "New Term 2", - } - ] -}); -``` - -## Term - -### Update - -> Note that when updating a Term if you update the `properties` it replaces the collection, so a merge of existing + new needs to be handled by your application. - -_Added in 3.10.0_ - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); - -const termInfo = await sp.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").update({ - properties: [{ - key: "something", - value: "a value 2", - }], -}); - -const termInfo2 = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").update({ - properties: [{ - key: "something", - value: "a value", - }], -}); -``` - -### Delete - -_Added in 3.10.0_ - -```TypeScript -import { spfi, SPFxToken, SPFx } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; - -// NOTE: Because this endpoint requires a token and does not work with cookie auth you must create an instance of SPFI that includes an auth token. -// We've included a new behavior to support getting a token for sharepoint called `SPFxToken` -const sp = spfi().using(SPFx(context), SPFxToken(context)); - -const termInfo = await sp.termStore.sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").delete(); - -const termInfo2 = await sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72").getTermById("338666a8-1111-2222-3333-f72471314e72").delete(); -``` - -## Get Term Parent - -_Behavior Change in 2.1.0_ - -The server API changed again, resulting in the removal of the "parent" property from ITerm as it is not longer supported as a path property. You now must use "expand" to load a term's parent information. The side affect of this is that the parent is no longer chainable, meaning you need to load a new term instance to work with the parent term. An approach for this is shown below. - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/taxonomy"; - -const sp = spfi(...); - -// get a ref to the set -const set = sp.termStore.groups.getById("338666a8-1111-2222-3333-f72471314e72").sets.getById("338666a8-1111-2222-3333-f72471314e72"); - -// get a term's information and expand parent to get the parent info as well -const w = await set.getTermById("338666a8-1111-2222-3333-f72471314e72").expand("parent")(); - -// get a ref to the parent term -const parent = set.getTermById(w.parent.id); - -// make a request for the parent term's info - this data currently match the results in the expand call above, but this -// is to demonstrate how to gain a ref to the parent and select its data -const parentInfo = await parent.select("Id", "Descriptions")(); -``` diff --git a/packages/sp/taxonomy/index.ts b/packages/graph/taxonomy/index.ts similarity index 50% rename from packages/sp/taxonomy/index.ts rename to packages/graph/taxonomy/index.ts index 8d5700a42..4e1faffb8 100644 --- a/packages/sp/taxonomy/index.ts +++ b/packages/graph/taxonomy/index.ts @@ -1,50 +1,40 @@ -import { SPFI } from "../fi.js"; +import { GraphFI } from "../fi.js"; import { ITermStore, TermStore } from "./types.js"; +import { Endpoint } from "../behaviors/endpoint.js"; + +import "./sites.js"; export { ITermStore, TermStore, - ITaxonomyUserInfo, ITermGroup, - ITermGroupInfo, ITermGroups, - ITermSetInfo, ITermSets, - ITermStoreInfo, TermGroup, TermGroups, TermSets, - ITaxonomyProperty, - ITermInfo, ITermSet, TermSet, - // IRelation, - IRelationInfo, - IRelations, + ITerms, + Terms, ITerm, - // Relation, - Relations, Term, + Relations, + IRelations, Children, IChildren, - IOrderedTermInfo, - ITermSortOrderInfo, - ITerms, - Terms, - IGetOrderedTreeProps, - ITaxonomyLocalProperty, } from "./types.js"; declare module "../fi" { - interface SPFI { + interface GraphFI { readonly termStore: ITermStore; } } -Reflect.defineProperty(SPFI.prototype, "termStore", { +Reflect.defineProperty(GraphFI.prototype, "termStore", { configurable: true, enumerable: true, - get: function (this: SPFI) { - return this.create(TermStore); + get: function (this: GraphFI) { + return this.create(TermStore, "termStore").using(Endpoint("beta")); }, }); diff --git a/packages/graph/taxonomy/sites.ts b/packages/graph/taxonomy/sites.ts new file mode 100644 index 000000000..fd1340f26 --- /dev/null +++ b/packages/graph/taxonomy/sites.ts @@ -0,0 +1,13 @@ +import { addProp } from "@pnp/queryable"; +import { _Site } from "../sites/types.js"; +import { ITermStore, TermStore } from "./types.js"; + +declare module "../sites/types" { + interface _Site { + readonly termStore: ITermStore; + } + interface ISite { + readonly termStore: ITermStore; + } +} +addProp(_Site, "termStore", TermStore); diff --git a/packages/graph/taxonomy/types.ts b/packages/graph/taxonomy/types.ts new file mode 100644 index 000000000..5ed609e09 --- /dev/null +++ b/packages/graph/taxonomy/types.ts @@ -0,0 +1,124 @@ +import { IAddable, IDeleteable, IGetById, IUpdateable, addable, defaultPath, deleteable, getById, updateable } from "../../graph/decorators.js"; +import { _GraphInstance, graphInvokableFactory, _GraphCollection } from "../graphqueryable.js"; +import { TermStore as ITermStoreType } from "@microsoft/microsoft-graph-types"; + +/** + * Describes a collection of Form objects + * + */ +@defaultPath("termstore") +@updateable() +export class _TermStore extends _GraphInstance { + + /** + * Gets the term groups associated with this tenant + */ + public get groups(): ITermGroups { + return TermGroups(this); + } + + /** + * Gets the term sets associated with this tenant + */ + public get sets(): ITermSets { + return TermSets(this); + } +} + +export interface ITermStore extends _TermStore, IUpdateable>> { } +export const TermStore = graphInvokableFactory(_TermStore); + +@deleteable() +export class _TermGroup extends _GraphInstance { + + /** + * Gets the term sets associated with this tenant + */ + public get sets(): ITermSets { + return TermSets(this, "sets"); + } +} +export interface ITermGroup extends _TermGroup, IDeleteable { } +export const TermGroup = graphInvokableFactory(_TermGroup); + + +@defaultPath("groups") +@getById(TermGroup) +@addable() +export class _TermGroups extends _GraphCollection { } +export interface ITermGroups extends _TermGroups, IAddable, IGetById { } +export const TermGroups = graphInvokableFactory(_TermGroups); + +@deleteable() +@updateable() +export class _TermSet extends _GraphInstance { + + /** + * Gets all the terms in this set + */ + public get terms(): ITerms { + return Terms(this); + } + + public get parentGroup(): ITermGroup { + return TermGroup(this, "parentGroup"); + } + + public get children(): IChildren { + return Children(this); + } + + public get relations(): IRelations { + return Relations(this); + } + + public getTermById(id: string): ITerm { + return Term(this, `terms/${id}`); + } +} +export interface ITermSet extends _TermSet, IUpdateable, IDeleteable { } +export const TermSet = graphInvokableFactory(_TermSet); + +@defaultPath("sets") +@getById(TermSet) +@addable() +export class _TermSets extends _GraphCollection { } +export interface ITermSets extends _TermSets, IAddable>, IGetById { } +export const TermSets = graphInvokableFactory(_TermSets); + +@defaultPath("children") +@addable() +export class _Children extends _GraphCollection { } +export interface IChildren extends _Children, IAddable> { } +export const Children = graphInvokableFactory(_Children); + +@updateable() +@deleteable() +export class _Term extends _GraphInstance { + + public get children(): IChildren { + return Children(this); + } + + public get relations(): IRelations { + return Relations(this); + } + + public get set(): ITermSet { + return TermSet(this, "set"); + } +} +export interface ITerm extends _Term, IUpdateable>>, IDeleteable { } +export const Term = graphInvokableFactory(_Term); + +@defaultPath("terms") +@getById(Term) +export class _Terms extends _GraphCollection { } +export interface ITerms extends _Terms, IGetById { } +export const Terms = graphInvokableFactory(_Terms); + +@defaultPath("relations") +@addable() +export class _Relations extends _GraphCollection { } +export interface IRelations extends _Relations, IAddable> { } +export const Relations = graphInvokableFactory(_Relations); diff --git a/packages/sp/presets/all.ts b/packages/sp/presets/all.ts index 521e74de1..c1fb87c74 100644 --- a/packages/sp/presets/all.ts +++ b/packages/sp/presets/all.ts @@ -29,7 +29,6 @@ import "../sites/index.js"; import "../social/index.js"; import "../sputilities/index.js"; import "../subscriptions/index.js"; -import "../taxonomy/index.js"; import "../user-custom-actions/index.js"; import "../views/index.js"; import "../webparts/index.js"; @@ -67,7 +66,6 @@ export * from "../sites/index.js"; export * from "../social/index.js"; export * from "../sputilities/index.js"; export * from "../subscriptions/index.js"; -export * from "../taxonomy/index.js"; export * from "../user-custom-actions/index.js"; export * from "../views/index.js"; export * from "../webparts/index.js"; diff --git a/packages/sp/taxonomy/types.ts b/packages/sp/taxonomy/types.ts deleted file mode 100644 index 219fa49e8..000000000 --- a/packages/sp/taxonomy/types.ts +++ /dev/null @@ -1,507 +0,0 @@ -import { isArray } from "@pnp/core"; -import { body } from "@pnp/queryable"; -import { defaultPath } from "../decorators.js"; -import { _SPInstance, spInvokableFactory, _SPCollection, spDelete, spPatch, spPost } from "../spqueryable.js"; -import { encodePath } from "../utils/encode-path-str.js"; - -/** - * Describes a collection of Form objects - * - */ -@defaultPath("_api/v2.1/termstore") -export class _TermStore extends _SPInstance { - - /** - * Gets the term groups associated with this tenant - */ - public get groups(): ITermGroups { - return TermGroups(this); - } - - /** - * Gets the term sets associated with this tenant - */ - public get sets(): ITermSets { - return TermSets(this); - } - - /** - * Allows you to locate terms within the termStore - * - * @param params Search parameters used to locate the terms, label is required - * @returns Array of terms including set information for each term - */ - public async searchTerm(params: ISearchTermParams): Promise>[]> { - - const query = Reflect.ownKeys(params).reduce((c, prop: string) => { - c.push(`${prop}='${encodePath(params[prop])}'`); - return c; - }, []).join(","); - - return TermStore(this, `searchTerm(${query})`).expand("set")(); - } - - /** - * Update settings for TermStore - * - * @param props The set or properties to update - * @returns The updated term store information - */ - public update(props: Partial>): Promise { - - return spPatch(this, body(props)); - } -} -export interface ITermStore extends _TermStore { } -export const TermStore = spInvokableFactory(_TermStore); - -@defaultPath("groups") -export class _TermGroups extends _SPCollection { - - /** - * Gets a term group by id - * - * @param id Id of the term group to access - */ - public getById(id: string): ITermGroup { - return TermGroup(this, id); - } - - /** - * Adds a new term group to this store - * @param props The set of properties - * @returns The information on the create group - */ - public add(props: Partial>): Promise { - - return spPost(this, body(props)); - } -} -export interface ITermGroups extends _TermGroups { } -export const TermGroups = spInvokableFactory(_TermGroups); - -export class _TermGroup extends _SPInstance { - - /** - * Gets the term sets associated with this tenant - */ - public get sets(): ITermSets { - return TermSets(this, "sets"); - } - - /** - * Deletes this group - * - * @returns void - */ - public delete(): Promise { - return spDelete(this); - } -} -export interface ITermGroup extends _TermGroup { } -export const TermGroup = spInvokableFactory(_TermGroup); - - -@defaultPath("sets") -export class _TermSets extends _SPCollection { - - /** - * Gets a term group by id - * - * @param id Id of the term group to access - */ - public getById(id: string): ITermSet { - return TermSet(this, id); - } - - /** - * Adds a new term set to this collection - * @param props The set of properties - * @returns The information on the created set - */ - public add(props: Partial): Promise { - return spPost(this, body(props)); - } -} -export interface ITermSets extends _TermSets { } -export const TermSets = spInvokableFactory(_TermSets); - -export class _TermSet extends _SPInstance { - - /** - * Gets all the terms in this set - */ - public get terms(): ITerms { - return Terms(this); - } - - public get parentGroup(): ITermGroup { - return TermGroup(this, "parentGroup"); - } - - public get children(): IChildren { - return Children(this); - } - - public get relations(): IRelations { - return Relations(this); - } - - public getTermById(id: string): ITerm { - return Term(this, `terms/${id}`); - } - - /** - * Update settings for TermSet - * - * @param props The set or properties to update - * @returns The updated term set information - */ - public update(props: Partial>): Promise { - - return spPatch(this, body(props)); - } - - /** - * Deletes this group - * - * @returns void - */ - public delete(): Promise { - return spDelete(this); - } - - /** - * Gets all the terms in this termset in an ordered tree using the appropriate sort ordering - * ** This is an expensive operation and you should strongly consider caching the results ** - * - * @param props Optional set of properties controlling how the tree is retrieved. - */ - public async getAllChildrenAsOrderedTree(props: Partial = {}): Promise { - - const selects = ["*", "customSortOrder"]; - if (props.retrieveProperties) { - selects.push("properties", "localProperties"); - } - - const setInfo = await this.select(...selects)(); - const tree: IOrderedTermInfo[] = []; - const childIds = []; - - const ensureOrder = (terms: IOrderedTermInfo[], sorts: ITermSortOrderInfo[], setSorts?: string[]): IOrderedTermInfo[] => { - - // handle no custom sort information present - if (!isArray(sorts) && !isArray(setSorts)) { - return terms; - } - - let ordering: string[] = null; - if (sorts === null && setSorts.length > 0) { - ordering = [...setSorts]; - } else { - const index = sorts.findIndex(v => v.setId === setInfo.id); - if (index >= 0) { - ordering = [...sorts[index].order]; - } - } - - if (ordering !== null) { - const orderedChildren = []; - ordering.forEach(o => { - const found = terms.find(ch => o === ch.id); - if (found) { - orderedChildren.push(found); - } - }); - // we have a case where if a set is ordered and a term is added to that set - // AND the ordering information hasn't been updated in the UI the new term will not have - // any associated ordering information. See #1547 which reported this. So here we - // append any terms remaining in "terms" not in "orderedChildren" to the end of "orderedChildren" - orderedChildren.push(...terms.filter(info => ordering.indexOf(info.id) < 0)); - - return orderedChildren; - } - return terms; - }; - - const visitor = async (source: any, parent: IOrderedTermInfo[]) => { - - const children = await source(); - - for (let i = 0; i < children.length; i++) { - - const child = children[i]; - childIds.push(child.id); - - const orderedTerm: Partial = { - children: [], - defaultLabel: child.labels.find(l => l.isDefault).name, - ...child, - }; - - if (child.childrenCount > 0) { - await visitor(this.getTermById(children[i].id).children.select(...selects), orderedTerm.children); - orderedTerm.children = ensureOrder(orderedTerm.children, child.customSortOrder); - } - - parent.push(>orderedTerm); - } - }; - - // There is a series of issues where users expect that copied terms appear in the result of this method call. Copied terms are not "children" so we need - // to get all the children + all the "/terms" and filter out the children. This is expensive but this method call is already indicated to be used with caching - await visitor(this.children.select(...selects), tree); - await visitor(async () => { - - const terms = await Terms(this).select(...selects)(); - return terms.filter((t) => childIds.indexOf(t.id) < 0); - - }, tree); - - return ensureOrder(tree, null, setInfo.customSortOrder); - } -} -export interface ITermSet extends _TermSet { } -export const TermSet = spInvokableFactory(_TermSet); - -@defaultPath("children") -export class _Children extends _SPCollection { - /** - * Adds a new term set to this collection - * @param props The set of properties - * @returns The information on the create group - */ - public add(props: Pick): Promise { - - return spPost(this, body(props)); - } -} -export interface IChildren extends _Children { } -export const Children = spInvokableFactory(_Children); - -@defaultPath("terms") -export class _Terms extends _SPCollection { - /** - * Gets a term group by id - * - * @param id Id of the term group to access - */ - public getById(id: string): ITerm { - return Term(this, id); - } -} -export interface ITerms extends _Terms { } -export const Terms = spInvokableFactory(_Terms); - -export class _Term extends _SPInstance { - - public get children(): IChildren { - return Children(this); - } - - public get relations(): IRelations { - return Relations(this); - } - - public get set(): ITermSet { - return TermSet(this, "set"); - } - - /** - * Update settings for TermSet - * - * @param props The set or properties to update - * @returns The updated term set information - */ - public update(props: Partial>): Promise { - - return spPatch(this, body(props)); - } - - /** - * Deletes this group - * - * @returns void - */ - public delete(): Promise { - return spDelete(this); - } -} -export interface ITerm extends _Term { } -export const Term = spInvokableFactory(_Term); - - -@defaultPath("relations") -export class _Relations extends _SPCollection { - /** - * Adds a new relation to this term - * @param props The set of properties - * @returns The information on the created relation - */ - public add(props: Omit): Promise { - - return spPost(this, body(props)); - } -} -export interface IRelations extends _Relations { } -export const Relations = spInvokableFactory(_Relations); - -// export class _Relation extends _SPInstance { - -// public get fromTerm(): ITerm { -// return Term(this, "fromTerm"); -// } - -// public get toTerm(): ITerm { -// return Term(this, "toTerm"); -// } - -// public get set(): ITermSet { -// return TermSet(this, "set"); -// } -// } -// export interface IRelation extends _Relation { } -// export const Relation = spInvokableFactory(_Relation); - -export interface ITermStoreInfo { - id: string; - name: string; - defaultLanguageTag: string; - languageTags: string[]; - administrators?: ITaxonomyUserInfo; -} - -export interface ITermGroupInfo { - id: string; - description: string; - name: string; - displayName: string; - createdDateTime: string; - lastModifiedDateTime: string; - type: string; - scope: "global" | "system" | "siteCollection"; -} - -export interface ITermSetInfo { - id: string; - localizedNames: { name: string; languageTag: string }[]; - description: string; - createdDateTime: string; - customSortOrder: string[]; - properties?: ITaxonomyProperty[]; - childrenCount: number; - groupId: string; - isOpen: boolean; - isAvailableForTagging: boolean; - contact: string; -} - -export interface ITermSetCreateParams { - localizedNames: { name: string; languageTag: string }[]; - description?: string; - properties?: ITaxonomyProperty[]; - /** - * When adding a term set using ITermStore.sets parentGroup is required, when adding from ITermGroup.sets parentGroup is not needed - */ - parentGroup?: { - id: string; - }; - isOpen?: boolean; - isAvailableForTagging?: boolean; - contact?: string; -} - -export interface ITermInfo { - childrenCount: number; - id: string; - labels: { name: string; isDefault: boolean; languageTag: string }[]; - createdDateTime: string; - customSortOrder?: ITermSortOrderInfo[]; - lastModifiedDateTime: string; - descriptions: { description: string; languageTag: string }[]; - properties?: ITaxonomyProperty[]; - localProperties?: ITaxonomyLocalProperty[]; - isDeprecated: boolean; - isAvailableForTagging: { setId: string; isAvailable: boolean }[]; - topicRequested?: boolean; - parent?: ITermInfo; - set?: ITermSetInfo; - relations?: IRelationInfo[]; - children?: ITermInfo[]; -} - -export interface ISearchTermParams { - /** - * The term label to search for. - */ - label: string; - /** - * The setId to scope down the search under a termSet. - */ - setId?: string; - /** - * The parentTermId to scope down the search under a termSet, under a parent term. - */ - parentTermId?: string; - /** - * The languageTag to scope down the search to a specific language. - */ - languageTag?: string; - /** - * Indicates what type of string matching should be performed when searching. - */ - stringMatchOption?: "ExactMatch" | "StartsWith"; -} - -type SearchTermPickedProps = "childrenCount" | "createdDateTime" | "descriptions" | "id" | "isAvailableForTagging" | "isDeprecated" | "labels" | "lastModifiedDateTime" | "set"; - -export interface ITermSortOrderInfo { - setId: string; - order: string[]; -} - -export interface IOrderedTermInfo extends ITermInfo { - children: ITermInfo[]; - defaultLabel: string; -} - -export interface IRelationInfo { - id: string; - relationType: string; -} - -export interface IRelationCreateInfo { - id: string; - relationship: "pin" | "reuse"; - fromTerm: { - id: string; - }; - toTerm: { - id: string; - }; - set: { - id: string; - }; -} - -export interface ITaxonomyUserInfo { - user: { - displayName: string; - email: string; - id: string; - }; -} - -export interface ITaxonomyProperty { - key: string; - value: string; -} - -export interface ITaxonomyLocalProperty { - setId: string; - properties: ITaxonomyProperty[]; -} - -export interface IGetOrderedTreeProps { - retrieveProperties: boolean; -} diff --git a/test/sp/taxonomy.ts b/test/graph/taxonomy.ts similarity index 69% rename from test/sp/taxonomy.ts rename to test/graph/taxonomy.ts index 9da671152..9099110c7 100644 --- a/test/sp/taxonomy.ts +++ b/test/graph/taxonomy.ts @@ -1,6 +1,7 @@ import { expect } from "chai"; -import "@pnp/sp/taxonomy"; -import { ITermSet } from "@pnp/sp/taxonomy"; +import "@pnp/graph/sites"; +import "@pnp/graph/taxonomy"; +import { ITermSet } from "@pnp/graph/taxonomy"; describe("Taxonomy", function () { @@ -14,12 +15,12 @@ describe("Taxonomy", function () { describe("TermStore", function () { it("-invoke", async function () { - const info = await this.pnp.sp.termStore(); + const info = await this.pnp.graph.termStore(); return expect(info).has.property("id"); }); it("groups", async function () { - const info = await this.pnp.sp.termStore.groups(); + const info = await this.pnp.graph.termStore.groups(); if (info === undefined || info.length < 1) { return expect(info).to.be.an("Array"); @@ -30,9 +31,9 @@ describe("Taxonomy", function () { // TODO: sets gives API not found error on termStore... need to remove/or fix. it.skip(".sets", async function () { - const url = this.pnp.sp.termStore.sets.toRequestUrl(); + const url = this.pnp.graph.termStore.sets.toRequestUrl(); console.log(`Sets: ${url}`); - const info = await this.pnp.sp.termStore.sets(); + const info = await this.pnp.graph.termStore.sets(); if (info === undefined || info.length < 1) { return expect(info).to.be.an("Array"); } @@ -42,13 +43,13 @@ describe("Taxonomy", function () { it("groups.getById", async function () { - const info = await this.pnp.sp.termStore.groups(); + const info = await this.pnp.graph.termStore.groups(); if (info === undefined || info.length < 1) { return expect(info).to.be.an("Array"); } - const group = await this.pnp.sp.termStore.groups.getById(info[0].id)(); + const group = await this.pnp.graph.termStore.groups.getById(info[0].id)(); return expect(group).has.property("id"); }); @@ -56,13 +57,13 @@ describe("Taxonomy", function () { // TODO: sets gives API not found error on termStore... need to remove/or fix. it.skip(".sets.getById", async function () { - const info = await this.pnp.sp.termStore.sets(); + const info = await this.pnp.graph.termStore.sets(); if (info === undefined || info.length < 1) { return expect(info).to.be.an("Array"); } - const set = await this.pnp.sp.termStore.sets.getById(info[0].id)(); + const set = await this.pnp.graph.termStore.sets.getById(info[0].id)(); return expect(set).has.property("id"); }); }); @@ -73,19 +74,19 @@ describe("Taxonomy", function () { let termset: ITermSet = null; before(async function () { - const groups = await this.pnp.sp.termStore.groups(); + const groups = await this.pnp.graph.termStore.groups(); if (groups === undefined || groups?.length < 1) { this.skip(); } const groupId = groups[0].id; - const sets = await this.pnp.sp.termStore.groups.getById(groupId).sets(); + const sets = await this.pnp.graph.termStore.groups.getById(groupId).sets(); if (sets === undefined || sets?.length < 1) { this.skip(); } const termsetId = sets[0].id; - termset = this.pnp.sp.termStore.groups.getById(groupId).sets.getById(termsetId); + termset = this.pnp.graph.termStore.groups.getById(groupId).sets.getById(termsetId); }); it("terms", async function () { @@ -117,18 +118,6 @@ describe("Taxonomy", function () { const termById = await termset.getTermById(terms[0].id)(); return expect(termById).has.property("id"); }); - it("getAllChildrenAsOrderedTree", async function () { - const tree = await termset.getAllChildrenAsOrderedTree(); - return expect(tree).to.be.an("Array"); - }); - it("getAllChildrenAsOrderedTree-retreiveProperties", async function () { - const tree = await termset.getAllChildrenAsOrderedTree({ retrieveProperties: true }); - if (tree.length < 1) { - return; - } - const term = tree[0]; - return expect(term).has.property("localProperties"); - }); }); /** @@ -138,26 +127,26 @@ describe("Taxonomy", function () { let term = null; before(async function () { - const groups = await this.pnp.sp.termStore.groups(); + const groups = await this.pnp.graph.termStore.groups(); if (groups === undefined || groups?.length < 1) { this.skip(); } const groupId = groups[0].id; - const sets = await this.pnp.sp.termStore.groups.getById(groupId).sets(); + const sets = await this.pnp.graph.termStore.groups.getById(groupId).sets(); if (sets === undefined || sets?.length < 1) { this.skip(); } const setId = sets[0].id; - const terms = await this.pnp.sp.termStore.groups.getById(groupId).sets.getById(setId).terms(); + const terms = await this.pnp.graph.termStore.groups.getById(groupId).sets.getById(setId).terms(); if (terms === undefined || terms?.length < 1) { this.skip(); } const termId = terms[0].id; - term = this.pnp.sp.termStore.groups.getById(groupId).sets.getById(setId).terms.getById(termId); + term = this.pnp.graph.termStore.groups.getById(groupId).sets.getById(setId).terms.getById(termId); }); it("getById", async function () { From ed14091128ac333aecc3a2ff936b410afb5fb87b Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Wed, 3 Jan 2024 16:55:23 -0700 Subject: [PATCH 069/171] Updating docs to include links to Graph resources --- docs/graph/analytics.md | 6 +++++- docs/graph/appCatalog.md | 4 ++++ docs/graph/bookings.md | 2 +- docs/graph/cloud-communications.md | 2 +- docs/graph/files.md | 4 ++++ docs/graph/groups.md | 2 +- docs/graph/insights.md | 5 +++++ docs/graph/invitations.md | 4 ++++ docs/graph/items.md | 5 +++++ docs/graph/lists.md | 1 + docs/graph/operations.md | 5 +++++ docs/graph/outlook.md | 4 +++- docs/graph/photos.md | 3 ++- docs/graph/planner.md | 4 ++++ docs/graph/search.md | 5 +++++ docs/graph/shares.md | 4 ++++ docs/graph/sites.md | 4 ++++ docs/graph/subscriptions.md | 4 ++++ docs/graph/teams.md | 5 +++++ docs/graph/users.md | 4 +++- 20 files changed, 70 insertions(+), 7 deletions(-) diff --git a/docs/graph/analytics.md b/docs/graph/analytics.md index e6ed76af0..d3dc3dd96 100644 --- a/docs/graph/analytics.md +++ b/docs/graph/analytics.md @@ -2,7 +2,11 @@ The ability to get analytics for OneDrive and SharePoint drive items, SharePoint sites, and SharePoint list items. -## IInvitations +More information can be found in the official Graph documentation: + +- [Analytics Resource Type](https://docs.microsoft.com/en-us/graph/api/itemanalytics-get?view=graph-rest-1.0) + +## IAnalyticsOptions [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/appCatalog.md b/docs/graph/appCatalog.md index 9d664fcad..ac920245c 100644 --- a/docs/graph/appCatalog.md +++ b/docs/graph/appCatalog.md @@ -2,6 +2,10 @@ The ability to use Teams App Catalog +More information can be found in the official Graph documentation: + +- [App Catalogs Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/teamsapp?view=graph-rest-1.0) + ## AppCatalog, IAppCatalog [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/bookings.md b/docs/graph/bookings.md index 1c009507b..51a67e141 100644 --- a/docs/graph/bookings.md +++ b/docs/graph/bookings.md @@ -2,7 +2,7 @@ Represents the Bookings services available to a user. -You can learn more by reading the [Official Microsoft Graph Documentation](https://docs.microsoft.com/en-us/graph/api/resources/booking-api-overview?view=graph-rest-1.0). +You can learn more by reading the [Bookings Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/booking-api-overview?view=graph-rest-1.0). ## IBookingCurrencies, IBookingCurrency, IBookingBusinesses, IBookingBusiness, IBookingAppointments, IBookingAppointment, IBookingCustomers, IBookingCustomer, IBookingServices, IBookingService, IBookingStaffMembers, IBookingStaffMember, IBookingCustomQuestions, IBookingCustomQuestion diff --git a/docs/graph/cloud-communications.md b/docs/graph/cloud-communications.md index bdfd38f31..468d0b58f 100644 --- a/docs/graph/cloud-communications.md +++ b/docs/graph/cloud-communications.md @@ -4,7 +4,7 @@ The ability to retrieve information about a user's presence, including their ava More information can be found in the official Graph documentation: -- [Presence Type](https://docs.microsoft.com/en-us/graph/api/resources/presence?view=graph-rest-1.0) +- [Cloud Communications Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/presence?view=graph-rest-1.0) ## IPresence diff --git a/docs/graph/files.md b/docs/graph/files.md index d1e0896a8..f6b14da73 100644 --- a/docs/graph/files.md +++ b/docs/graph/files.md @@ -3,6 +3,10 @@ The ability to manage drives and drive items in Onedrive is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described you can manage drives and drive items in Onedrive. +More information can be found in the official Graph documentation: + +- [Drive/Files Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/onedrive?view=graph-rest-1.0) + ## IInvitations [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/groups.md b/docs/graph/groups.md index fd55aa7f6..3575e7b0e 100644 --- a/docs/graph/groups.md +++ b/docs/graph/groups.md @@ -4,7 +4,7 @@ Groups are collections of users and other principals who share access to resourc Note: Groups can only be created through work or school accounts. Personal Microsoft accounts don't support groups. -You can learn more about Microsoft Graph Groups by reading the [Official Microsoft Graph Documentation](https://docs.microsoft.com/en-us/graph/api/resources/groups-overview). +You can learn more about Microsoft Graph Groups by reading the [Groups Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/groups-overview). ## IGroup, IGroups diff --git a/docs/graph/insights.md b/docs/graph/insights.md index f66a747a1..99646e3d1 100644 --- a/docs/graph/insights.md +++ b/docs/graph/insights.md @@ -2,6 +2,11 @@ This module helps you get Insights in form of ***Trending***, ***Used*** and ***Shared***. The results are based on relationships calculated using advanced analytics and machine learning techniques. +More information can be found in the official Graph documentation: + +- [Insights Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/officegraphinsights?view=graph-rest-1.0) + + ## IInsights [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/invitations.md b/docs/graph/invitations.md index 437fd6535..90c6ca745 100644 --- a/docs/graph/invitations.md +++ b/docs/graph/invitations.md @@ -2,6 +2,10 @@ The ability invite an external user via the invitation manager +More information can be found in the official Graph documentation: + +- [Invitations Resource Type](https://docs.microsoft.com/en-us/graph/api/invitation-post?view=graph-rest-1.0) + ## IInvitations [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/items.md b/docs/graph/items.md index 949cb0787..20114a06a 100644 --- a/docs/graph/items.md +++ b/docs/graph/items.md @@ -1,5 +1,10 @@ # @pnp/graph/items +More information can be found in the official Graph documentation: + +- [List Item Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/listitem?view=graph-rest-1.0) + +## IListItems, IListItem, IListItemAddResult, IDocumentSetVersion, IDocumentSetVersions IDocumentSetVersionAddResult, [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ### Get list items diff --git a/docs/graph/lists.md b/docs/graph/lists.md index 4123082c5..6922ec8f6 100644 --- a/docs/graph/lists.md +++ b/docs/graph/lists.md @@ -4,6 +4,7 @@ More information can be found in the official Graph documentation: - [List Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/list?view=graph-rest-1.0) +## IList, ILists, IListAddResult [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ## Get Lists diff --git a/docs/graph/operations.md b/docs/graph/operations.md index d0d6f0afb..0a1bfe5b1 100644 --- a/docs/graph/operations.md +++ b/docs/graph/operations.md @@ -2,6 +2,11 @@ Provides capabilities related to rich long-running operations. +More information can be found in the official Graph documentation: + +- [Operations Resource Type](https://docs.microsoft.com/en-us/graph/api/site-list-operations?view=graph-rest-1.0) + + [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ## list site operations diff --git a/docs/graph/outlook.md b/docs/graph/outlook.md index 535b6e57d..62a175d93 100644 --- a/docs/graph/outlook.md +++ b/docs/graph/outlook.md @@ -2,7 +2,9 @@ Represents the Outlook services available to a user. Currently, only interacting with categories is supported. -You can learn more by reading the [Official Microsoft Graph Documentation](https://docs.microsoft.com/en-us/graph/api/resources/outlookuser?view=graph-rest-1.0). +More information can be found in the official Graph documentation: + +- [Outlook Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/outlookuser?view=graph-rest-1.0) ## IUsers, IUser, IPeople diff --git a/docs/graph/photos.md b/docs/graph/photos.md index a208ac843..40979b709 100644 --- a/docs/graph/photos.md +++ b/docs/graph/photos.md @@ -2,8 +2,9 @@ A profile photo of a user, group or an Outlook contact accessed from Exchange Online or Azure Active Directory (AAD). It's binary data not encoded in base-64. -You can learn more about Microsoft Graph users by reading the [Official Microsoft Graph Documentation](https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0). +More information can be found in the official Graph documentation: +- [Photos Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/profilephoto?view=graph-rest-1.0) ## IPhoto [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/planner.md b/docs/graph/planner.md index b850df567..dd24ee8e3 100644 --- a/docs/graph/planner.md +++ b/docs/graph/planner.md @@ -3,6 +3,10 @@ The ability to manage plans and tasks in Planner is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described you can add, update and delete items in Planner. +More information can be found in the official Graph documentation: + +- [Planner Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/plannertask?view=graph-rest-1.0) + ## IInvitations [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/search.md b/docs/graph/search.md index 8097fc4d2..c721d71d1 100644 --- a/docs/graph/search.md +++ b/docs/graph/search.md @@ -2,6 +2,11 @@ The search module allows you to access the Microsoft Graph Search API. You can read full details of using the API, for library examples please see below. +More information can be found in the official Graph documentation: + +- [Search Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/search-api-overview?view=graph-rest-1.0) + + [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ## Call graph.query diff --git a/docs/graph/shares.md b/docs/graph/shares.md index fd3bc2060..40f7703b8 100644 --- a/docs/graph/shares.md +++ b/docs/graph/shares.md @@ -2,6 +2,10 @@ The shares module allows you to access shared files, or any file in the tenant using encoded file urls. +More information can be found in the official Graph documentation: + +- [Shares Resource Type](https://docs.microsoft.com/en-us/graph/api/shares-get?view=graph-rest-1.0) + [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ## Access a Share by Id diff --git a/docs/graph/sites.md b/docs/graph/sites.md index f03603f09..ea2e6673c 100644 --- a/docs/graph/sites.md +++ b/docs/graph/sites.md @@ -2,6 +2,10 @@ The search module allows you to access the Microsoft Graph Sites API. +More information can be found in the official Graph documentation: + +- [Sites Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/site?view=graph-rest-1.0) + [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ## sites diff --git a/docs/graph/subscriptions.md b/docs/graph/subscriptions.md index 99e5d96c7..eae8df230 100644 --- a/docs/graph/subscriptions.md +++ b/docs/graph/subscriptions.md @@ -8,6 +8,10 @@ The ability to manage subscriptions is a capability introduced in version 1.2.9 * Users and Groups from Azure Active Directory. * Alerts from the Microsoft Graph Security API. +More information can be found in the official Graph documentation: + +- [Subscriptions Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/subscription?view=graph-rest-1.0) + ## Get all of the Subscriptions Using the subscriptions(). If successful this method returns a 200 OK response code and a list of subscription objects in the response body. diff --git a/docs/graph/teams.md b/docs/graph/teams.md index 8052ce95d..64c50b110 100644 --- a/docs/graph/teams.md +++ b/docs/graph/teams.md @@ -3,6 +3,11 @@ The ability to manage Team is a capability introduced in the 1.2.7 of @pnp/graph. Through the methods described you can add, update and delete items in Teams. +More information can be found in the official Graph documentation: + +- [Teams Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/team?view=graph-rest-1.0) +- [Joined Teams Resource Type](https://docs.microsoft.com/en-us/graph/api/user-list-joinedteams?view=graph-rest-1.0) + ## Teams ### Teams the user is a member of diff --git a/docs/graph/users.md b/docs/graph/users.md index f863a0c90..d7b10243d 100644 --- a/docs/graph/users.md +++ b/docs/graph/users.md @@ -2,7 +2,9 @@ Users are Azure Active Directory objects representing users in the organizations. They represent the single identity for a person across Microsoft 365 services. -You can learn more about Microsoft Graph users by reading the [Official Microsoft Graph Documentation](https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0). +More information can be found in the official Graph documentation: + +- [Teams Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.) ## IUsers, IUser, IPeople From 7ec50558f535a1ebc94f652e3d70eb31d975c64a Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Wed, 3 Jan 2024 17:02:34 -0700 Subject: [PATCH 070/171] Update Photos --- docs/graph/photos.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/graph/photos.md b/docs/graph/photos.md index 40979b709..30ece2c0f 100644 --- a/docs/graph/photos.md +++ b/docs/graph/photos.md @@ -61,12 +61,12 @@ await graph.me.photo.setContent(file); ```TypeScript import { graphfi } from "@pnp/graph"; -import "@pnp/graph/users"; +import "@pnp/graph/groups"; import "@pnp/graph/photos"; const graph = graphfi(...); const input = document.getElementById("thefileinput"); const file = input.files[0]; -await graph.me.photo.setContent(file); +await graph.groups.getById("7d2b9355-0891-47d3-84c8-bf2cd9c62177").photo.setContent(file); ``` From a81acb0b0664aecf99aead2152b5af5cb1ccf487 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Thu, 4 Jan 2024 10:59:12 -0700 Subject: [PATCH 071/171] Fixing inheritence and clean up --- packages/graph/places/types.ts | 9 +-- packages/logging/index.js | 97 +++++++++++++++++++++++++++++++ packages/logging/listeners.js | 101 +++++++++++++++++++++++++++++++++ 3 files changed, 200 insertions(+), 7 deletions(-) create mode 100644 packages/logging/index.js create mode 100644 packages/logging/listeners.js diff --git a/packages/graph/places/types.ts b/packages/graph/places/types.ts index 35df3b9c1..e9695a553 100644 --- a/packages/graph/places/types.ts +++ b/packages/graph/places/types.ts @@ -61,7 +61,7 @@ export const RoomLists = graphInvokableFactory(_RoomLists); * Room */ export class _Room extends _GraphInstance {} -export interface IRoom extends _Rooms { } +export interface IRoom extends _Room { } export const Room = graphInvokableFactory(_Room); /** @@ -69,15 +69,10 @@ export const Room = graphInvokableFactory(_Room); */ @defaultPath("microsoft.graph.room") @getById(Room) -export class _Rooms extends _GraphCollection {} +export class _Rooms extends _GraphCollection {} export interface IRooms extends _Rooms, IGetById { } export const Rooms = graphInvokableFactory(_Rooms); -export interface IPlacesType { - readonly rooms: IRoomType[]; - readonly roomLists: IRoomListType[]; -} - export interface IUpdatePlaceProps extends IRoomType, IRoomListType { "@odata.type": string; } diff --git a/packages/logging/index.js b/packages/logging/index.js new file mode 100644 index 000000000..84c854091 --- /dev/null +++ b/packages/logging/index.js @@ -0,0 +1,97 @@ +export * from "./listeners.js"; +/** + * A set of logging levels + */ +export var LogLevel; +(function (LogLevel) { + LogLevel[LogLevel["Verbose"] = 0] = "Verbose"; + LogLevel[LogLevel["Info"] = 1] = "Info"; + LogLevel[LogLevel["Warning"] = 2] = "Warning"; + LogLevel[LogLevel["Error"] = 3] = "Error"; + LogLevel[LogLevel["Off"] = 99] = "Off"; +})(LogLevel || (LogLevel = {})); +const _subscribers = []; +let _activeLogLevel = 2 /* Warning */; +/** + * Class used to subscribe ILogListener and log messages throughout an application + * + */ +export class Logger { + /** + * Gets or sets the active log level to apply for log filtering + */ + static get activeLogLevel() { + return _activeLogLevel; + } + static set activeLogLevel(value) { + _activeLogLevel = value; + } + /** + * Adds ILogListener instances to the set of subscribed listeners + * + * @param listeners One or more listeners to subscribe to this log + */ + static subscribe(...listeners) { + _subscribers.push(...listeners); + } + /** + * Clears the subscribers collection, returning the collection before modification + */ + static clearSubscribers() { + const s = _subscribers.slice(0); + _subscribers.length = 0; + return s; + } + /** + * Gets the current subscriber count + */ + static get count() { + return _subscribers.length; + } + /** + * Writes the supplied string to the subscribed listeners + * + * @param message The message to write + * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info) + */ + static write(message, level = 1 /* Info */) { + Logger.log({ level: level, message: message }); + } + /** + * Writes the supplied string to the subscribed listeners + * + * @param json The json object to stringify and write + * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info) + */ + static writeJSON(json, level = 1 /* Info */) { + Logger.write(JSON.stringify(json), level); + } + /** + * Logs the supplied entry to the subscribed listeners + * + * @param entry The message to log + */ + static log(entry) { + if (entry !== undefined && Logger.activeLogLevel <= entry.level) { + _subscribers.map(subscriber => subscriber.log(entry)); + } + } + /** + * Logs an error object to the subscribed listeners + * + * @param err The error object + */ + static error(err) { + Logger.log({ data: err, level: 3 /* Error */, message: err.message }); + } +} +export function PnPLogging(activeLevel) { + return (instance) => { + instance.on.log(function (message, level) { + if (activeLevel <= level) { + _subscribers.map(subscriber => subscriber.log({ level, message })); + } + }); + return instance; + }; +} diff --git a/packages/logging/listeners.js b/packages/logging/listeners.js new file mode 100644 index 000000000..fdc636b47 --- /dev/null +++ b/packages/logging/listeners.js @@ -0,0 +1,101 @@ +export function ConsoleListener(prefix, colors) { + return new _ConsoleListener(prefix, colors); +} +function withColor(msg, color, logMethod) { + if (typeof color === "undefined") { + logMethod(msg); + } + else { + logMethod(`%c${msg}`, `color:${color}`); + } +} +/** + * Formats the message + * + * @param entry The information to format into a string + */ +function entryToString(entry, prefix) { + const msg = []; + if (prefix.length > 0) { + msg.push(`${prefix} -`); + } + msg.push(entry.message); + if (entry.data !== undefined) { + try { + msg.push("Data: " + JSON.stringify(entry.data)); + } + catch (e) { + msg.push(`Data: Error in stringify of supplied data ${e}`); + } + } + return msg.join(" "); +} +// index order matters, this is a lookup table based on the corresponding LogLevel value +const colorProps = ["verbose", "info", "warning", "error"]; +/** + * Implementation of LogListener which logs to the console + * + */ +class _ConsoleListener { + /** + * Makes a new one + * + * @param prefix Optional text to include at the start of all messages (useful for filtering) + * @param colors Optional text color settings + */ + constructor(_prefix = "", _colors = {}) { + this._prefix = _prefix; + this._colors = _colors; + } + /** + * Any associated data that a given logging listener may choose to log or ignore + * + * @param entry The information to be logged + */ + log(entry) { + let logMethod = console.log; + switch (entry.level) { + case 3 /* Error */: + logMethod = console.error; + break; + case 2 /* Warning */: + logMethod = console.warn; + break; + case 0 /* Verbose */: + logMethod = console.debug; + break; + case 1 /* Info */: + logMethod = console.info; + break; + default: + logMethod = console.log; + } + withColor(entryToString(entry, this._prefix), this._colors[colorProps[entry.level]], logMethod); + } +} +export function FunctionListener(impl) { + return new _FunctionListener(impl); +} +/** + * Implementation of LogListener which logs to the supplied function + * + */ +class _FunctionListener { + /** + * Creates a new instance of the FunctionListener class + * + * @constructor + * @param method The method to which any logging data will be passed + */ + constructor(method) { + this.method = method; + } + /** + * Any associated data that a given logging listener may choose to log or ignore + * + * @param entry The information to be logged + */ + log(entry) { + this.method(entry); + } +} From 178d3de405bf6f63d62f7656dcae9a83eb9bb184 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 22 Dec 2023 09:17:09 -0500 Subject: [PATCH 072/171] SubjectRightsRequests Updating Docs Updating Tests Fix Linting --- docs/graph/compliance.md | 152 +++++++++++++++++++++++++++++ packages/graph/compliance/index.ts | 27 +++++ packages/graph/compliance/types.ts | 74 ++++++++++++++ test/graph/compliance.ts | 14 +++ 4 files changed, 267 insertions(+) create mode 100644 docs/graph/compliance.md create mode 100644 packages/graph/compliance/index.ts create mode 100644 packages/graph/compliance/types.ts create mode 100644 test/graph/compliance.ts diff --git a/docs/graph/compliance.md b/docs/graph/compliance.md new file mode 100644 index 000000000..a1ca892bf --- /dev/null +++ b/docs/graph/compliance.md @@ -0,0 +1,152 @@ +# @pnp/graph/compliance + +The ability to interact with Microsoft Graph compliance and privacy APIs. + +More information can be found in the official Graph documentation: + +- [Compliance Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/complianceapioverview?view=graph-rest-1.0) + +## ICompliance, ISubjectRightsRequests, ISubjectRightsRequest, INotes + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Subject rights request + +### Get all Subject rights requests + +Gets a list of Subject rights requests from Purview + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const requests = await graph.compliance.subjectRightsRequests(); + +``` +### Get Subject rights request by id + +Gets a Subject rights request by id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const request = await graph.compliance.subjectRightsRequests.getById('efee1b77-fb3b-4f65-99d6-274c11914d12')(); + +``` +### Create a Subject rights request + +Creates a new Subject rights request + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const requestAdd = await graph.compliance.subjectRightsRequests.add({ + "type": "export", + "contentQuery": "((\"Diego Siciliani\" OR \"Diego.Siciliani@contoso.com\") OR (participants:\"Diego.Siciliani@contoso.com\"))", + "dataSubjectType": "customer", + "externalId": "F53BF2DA-607D-412A-B568-FAA0F023AC0B", + "displayName": "Export report for customer Id: 12345", + "description": "This is a export request", + "includeAllVersions": false, + "includeAuthoredContent": true, + "internalDueDateTime": "2022-07-20T22:42:28Z", + "dataSubject": { + "firstName": "Diego", + "lastName": "Siciliani", + "email": "Diego.Siciliani@contoso.com", + "residency": "USA" + }, + "mailboxLocations": null, + "pauseAfterEstimate": true, + "regulations": [ + "CCPA" + ], + "siteLocations": { + "@odata.type": "microsoft.graph.subjectRightsRequestAllSiteLocation" + } +}); + +``` +### Update Subject rights request + +Updates a Subject rights request + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const requestUpdate = await graph.compliance.subjectRightsRequests.getById('efee1b77-fb3b-4f65-99d6-274c11914d12').update({ + description:"Updated description of request", + displayName:"Updated name of request", + internalDueDateTime:"2024-08-20T22:42:28Z" +}); + +``` +### Get Subject rights request notes + +Retrieves Subject rights request notes + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const notes = await graph.compliance.subjectRightsRequests.getById('efee1b77-fb3b-4f65-99d6-274c11914d12').notes(); + +``` +### Create new Subject rights request note + +Creates a new Subject rights request note + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const notes = await graph.compliance.subjectRightsRequests.getById('efee1b77-fb3b-4f65-99d6-274c11914d12').notes.add( +{ + "content": { + "content": "Please take a look at the files tagged with follow up 1", + "contentType": "text" + } +}); + +``` +### Get final report + +Get the final report for a Subject rights request. The report is a text file that contains information about the files that were included by the privacy administrator. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const finalReport = await graph.compliance.subjectRightsRequests.getById('efee1b77-fb3b-4f65-99d6-274c11914d12').finalReport(); + +``` +### Get final attachment + +Get the final attachment for a Subject rights request. The attachment is a zip file that contains all the files that were included by the privacy administrator. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/compliance" + +const graph = graphfi(...); + +const finalAttachment = await graph.compliance.subjectRightsRequests.getById('efee1b77-fb3b-4f65-99d6-274c11914d12').finalAttachment(); + +``` \ No newline at end of file diff --git a/packages/graph/compliance/index.ts b/packages/graph/compliance/index.ts new file mode 100644 index 000000000..12f124a17 --- /dev/null +++ b/packages/graph/compliance/index.ts @@ -0,0 +1,27 @@ +import { GraphFI } from "../fi.js"; +import { Compliance, ICompliance} from "./types.js"; + +export { + Compliance, + ICompliance, + Notes, + INotes, + SubjectRightsRequests, + ISubjectRightsRequests, + SubjectRightsRequest, + ISubjectRightsRequest, +} from "./types.js"; + +declare module "../fi" { + interface GraphFI { + readonly compliance: ICompliance; + } +} + +Reflect.defineProperty(GraphFI.prototype, "compliance", { + configurable: true, + enumerable: true, + get: function (this: GraphFI) { + return this.create(Compliance); + }, +}); diff --git a/packages/graph/compliance/types.ts b/packages/graph/compliance/types.ts new file mode 100644 index 000000000..5322aef60 --- /dev/null +++ b/packages/graph/compliance/types.ts @@ -0,0 +1,74 @@ +import { + Privacy as IPrivacyType, + SubjectRightsRequest as ISubjectRightsRequestType, + AuthoredNote as IAuthoredNoteType, + ItemBody as ItemBodyType } from "@microsoft/microsoft-graph-types"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphGet, _GraphQueryable, GraphQueryable } from "../graphqueryable.js"; +import { IAddable, IGetById, IUpdateable, addable, defaultPath, getById, updateable } from "../decorators.js"; +import { BlobParse } from "@pnp/queryable/index.js"; + +/** + * Compliance + */ +@defaultPath("security") +export class _Compliance extends _GraphQueryable { + /** + * Get subject rights requests + * + */ + public get subjectRightsRequests(): ISubjectRightsRequests { + return SubjectRightsRequests(this); + } + +} +export interface ICompliance extends _Compliance {} +export const Compliance = graphInvokableFactory(_Compliance); + +/** + * SubjectRightsRequest + */ +@defaultPath("/") +@updateable() +export class _SubjectRightsRequest extends _GraphInstance { + /** + * Get the final report for a subject rights request as a Blob + */ + public async finalReport(): Promise{ + return graphGet(GraphQueryable(this, "getFinalReport").using(BlobParse())); + } + + /** + * Get the final attachment for a subject rights request as a Blob + */ + public async finalAttachment(): Promise{ + return graphGet(GraphQueryable(this, "getFinalAttachment").using(BlobParse())); + } + + /** + * Get the list of authored notes assoicated with a subject rights request. + */ + public get notes(): INotes { + return Notes(this); + } +} +export interface ISubjectRightsRequest extends _SubjectRightsRequest, IUpdateable { } +export const SubjectRightsRequest = graphInvokableFactory(_SubjectRightsRequest); + +/** + * SubjectRightsRequests + */ +@defaultPath("subjectRightsRequests") +@getById(SubjectRightsRequest) +@addable() +export class _SubjectRightsRequests extends _GraphCollection {} +export interface ISubjectRightsRequests extends _SubjectRightsRequests, IGetById, IAddable {} +export const SubjectRightsRequests = graphInvokableFactory(_SubjectRightsRequests); + +/** + * Notes + */ +@defaultPath("notes") +@addable() +export class _Notes extends _GraphCollection {} +export interface INotes extends _Notes, IAddable {} +export const Notes = graphInvokableFactory(_Notes); diff --git a/test/graph/compliance.ts b/test/graph/compliance.ts new file mode 100644 index 000000000..27cd754f7 --- /dev/null +++ b/test/graph/compliance.ts @@ -0,0 +1,14 @@ +import "@pnp/graph/teams"; +import "@pnp/graph/compliance"; + +describe("Compliance", function () { + + before(async function () { + // currently not supported for app only. Keeping this test here for a placeholder. + this.skip(); + + if (!this.pnp.settings.enableWebTests) { + this.skip(); + } + }); +}); From 2e9a6a7e0cb3322edc59e58a056bbb7a18be148b Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Fri, 5 Jan 2024 10:29:14 -0500 Subject: [PATCH 073/171] Update buildsystem-config.ts --- buildsystem-config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index a40d7e9a5..4e3b97e78 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -27,7 +27,7 @@ Logger.subscribe(ConsoleListener("", { const logLevel = LogLevel.Info; const distFolder = "./dist/packages"; -const commonPublishTags = ["--access", "public"]; +const commonPublishTags = [".", "--access", "public"]; function PnPBuild(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { From 50b7a7f677fbf7ecef2990482776a40be182b303 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 8 Jan 2024 10:31:54 -0500 Subject: [PATCH 074/171] Update buildsystem-config.ts --- buildsystem-config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 4e3b97e78..d1759f8f7 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -27,7 +27,7 @@ Logger.subscribe(ConsoleListener("", { const logLevel = LogLevel.Info; const distFolder = "./dist/packages"; -const commonPublishTags = [".", "--access", "public"]; +const commonPublishTags = ["--access", "public", "--dry-run"]; function PnPBuild(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { From 1feec645fbe59640534f3ab963dd2dc92b6e65c6 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 8 Jan 2024 13:26:32 -0500 Subject: [PATCH 075/171] build system updates --- buildsystem-config.ts | 4 ++-- tools/buildsystem/package-lock.json | 18 +++++++++--------- tools/buildsystem/package.json | 4 ++-- .../src/behaviors/copy-package-files.ts | 4 ++-- .../src/behaviors/publish-nightly.ts | 2 +- tools/buildsystem/src/behaviors/publish.ts | 7 ++++--- .../src/behaviors/replace-version.ts | 2 +- .../src/behaviors/write-packagejson.ts | 2 ++ 8 files changed, 23 insertions(+), 20 deletions(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 4e3b97e78..69fb43aea 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -25,9 +25,9 @@ Logger.subscribe(ConsoleListener("", { warning: "yellow", })); -const logLevel = LogLevel.Info; +const logLevel = LogLevel.Verbose; const distFolder = "./dist/packages"; -const commonPublishTags = [".", "--access", "public"]; +const commonPublishTags = ["--access", "public", "--dry-run"]; function PnPBuild(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { diff --git a/tools/buildsystem/package-lock.json b/tools/buildsystem/package-lock.json index cc1241abc..9a437bc6d 100644 --- a/tools/buildsystem/package-lock.json +++ b/tools/buildsystem/package-lock.json @@ -1,15 +1,15 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta8", + "version": "4.0.0-beta9", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pnp/buildsystem", - "version": "4.0.0-beta8", + "version": "4.0.0-beta9", "license": "MIT", "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20231229", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20240105", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", @@ -153,9 +153,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20231229", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231229.tgz", - "integrity": "sha512-3N58DjsoiqQTw3eablg4cO0HjL1RPTzV47DGYGBdeFS6p/IKWLLDG59jevuhKV6eoRVWpvaJguQoDMyiGlRNrg==", + "version": "4.0.0-alpha0-v4nightly.20240105", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240105.tgz", + "integrity": "sha512-AdjLkyHZu5+ynwdxHwtD/hJzi6MIoSkmbh8MfIsf7FQ6hq/87YQhJjOKHPkt8nw2TUjHp7F4+nLoVUUouT/E9g==", "dependencies": { "tslib": "2.4.1" }, @@ -2749,9 +2749,9 @@ } }, "@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20231229", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231229.tgz", - "integrity": "sha512-3N58DjsoiqQTw3eablg4cO0HjL1RPTzV47DGYGBdeFS6p/IKWLLDG59jevuhKV6eoRVWpvaJguQoDMyiGlRNrg==", + "version": "4.0.0-alpha0-v4nightly.20240105", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240105.tgz", + "integrity": "sha512-AdjLkyHZu5+ynwdxHwtD/hJzi6MIoSkmbh8MfIsf7FQ6hq/87YQhJjOKHPkt8nw2TUjHp7F4+nLoVUUouT/E9g==", "requires": { "tslib": "2.4.1" } diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 2e5bc17bc..3831780a6 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta9", + "version": "4.0.0-beta10", "bin": { "pnpbuild": "bin/buildsystem.js" }, @@ -9,7 +9,7 @@ "type": "module", "typings": "./index", "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20231229", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20240105", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index e2ace2858..c8de6da66 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -20,7 +20,7 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti this.context.targets.forEach(async (target) => { - this.log(`Starting CopyPackageFiles with pattern ${stringPattern} on target '${target.tsconfigPath}'`); + this.log(`Starting CopyPackageFiles with pattern ${stringPattern} on target '${target.tsconfigPath}'`, 1); const files = await target.packages.reduce((p, pkg) => { @@ -46,7 +46,7 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); - this.log(`Completing CopyPackageFiles with pattern ${stringPattern} on target '${target.tsconfigPath}'`); + this.log(`Completing CopyPackageFiles with pattern ${stringPattern} on target '${target.tsconfigPath}'`, 1); }); }); diff --git a/tools/buildsystem/src/behaviors/publish-nightly.ts b/tools/buildsystem/src/behaviors/publish-nightly.ts index 2b9560053..ee1db7579 100644 --- a/tools/buildsystem/src/behaviors/publish-nightly.ts +++ b/tools/buildsystem/src/behaviors/publish-nightly.ts @@ -26,7 +26,7 @@ export function PublishNightly(flags: string[], nightlyName: "v3nightly" | "v4ni const versionStr = `-${nightlyName}.${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, "0")}${date.getDate().toString().padStart(2, "0")}`; - this.log(`Updating nightly package.json version to ${versionStr}`); + this.log(`Updating nightly package.json version to ${versionStr}`, 1); await Promise.all(targets[0].packages.map(pkg => { diff --git a/tools/buildsystem/src/behaviors/publish.ts b/tools/buildsystem/src/behaviors/publish.ts index 39d8a8b40..de3c8d38c 100644 --- a/tools/buildsystem/src/behaviors/publish.ts +++ b/tools/buildsystem/src/behaviors/publish.ts @@ -18,15 +18,16 @@ export function Publish(flags?: string[]): TimelinePipe { promises.push(new Promise((resolve, reject) => { - this.log(`Publishing ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`); + this.log(`Publishing ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`, 1); exec(`npm publish ${stringFlags}`, { cwd: pkg.resolvedPkgDistRoot, - }, (error, _stdout, _stderr) => { + }, (error, stdout, _stderr) => { if (error === null) { - this.log(`Published ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`); + this.log(`Published ${pkg.resolvedPkgDistRoot} with flags ${stringFlags}`, 1); + this.log(stdout); resolve(); } else { this.log(`${error}`, 3); diff --git a/tools/buildsystem/src/behaviors/replace-version.ts b/tools/buildsystem/src/behaviors/replace-version.ts index f61e82d7b..325394c97 100644 --- a/tools/buildsystem/src/behaviors/replace-version.ts +++ b/tools/buildsystem/src/behaviors/replace-version.ts @@ -29,7 +29,7 @@ export function ReplaceVersion(paths: string[], options?: IReplaceVersionOptions paths.forEach(async (path) => { const resolvedPath = options?.pathsResolved ? path : resolve(target.resolvedOutDir, path); - this.log(`Resolving path '${path}' to '${resolvedPath}'.`, 0); + this.log(`Resolving path '${path}' to '${resolvedPath}'.`); const file = await readFile(resolve(resolvedPath)); await buildWriteFile(resolvedPath, file.toString().replace(options.versionMask, version)); }); diff --git a/tools/buildsystem/src/behaviors/write-packagejson.ts b/tools/buildsystem/src/behaviors/write-packagejson.ts index 5dfb52feb..0142a73e0 100644 --- a/tools/buildsystem/src/behaviors/write-packagejson.ts +++ b/tools/buildsystem/src/behaviors/write-packagejson.ts @@ -18,6 +18,8 @@ export function WritePackageJSON(transform?: (p: any) => typeof p): TimelinePipe let pkgFile = importJSON(resolve(pkg.resolvedPkgSrcRoot, "package.json")); + this.log(`Updating package version at ${pkgFile} to ${version}`, 1); + pkgFile.version = version; // update our peer dependencies and dependencies placeholder if needed From 5a2b695d963c76092dfc02357a6a2443f5392ab6 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 8 Jan 2024 13:49:10 -0500 Subject: [PATCH 076/171] updating package.json and buildsystem config --- buildsystem-config.ts | 11 +++-------- package-lock.json | 16 ++++++++-------- package.json | 2 +- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 69fb43aea..e715939aa 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -154,6 +154,7 @@ export default [{ distFolder, targets: [ resolve("./packages/tsconfig.json"), + resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), PnPPackage(), PnPPublish(commonPublishTags), ...commonBehaviors], }, @@ -162,22 +163,16 @@ export default [{ distFolder, targets: [ resolve("./packages/tsconfig.json"), + resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), PnPPackage(), PnPPublish([...commonPublishTags, "--tag", "beta"]), ...commonBehaviors], }, -{ - name: "publish-v3nightly", - distFolder, - targets: [ - resolve("./packages/tsconfig.json"), - ], - behaviors: [PnPBuild(), PnPPackage(), PublishNightly([...commonPublishTags], "v3nightly"), ...commonBehaviors], -}, { name: "publish-v4nightly", distFolder, targets: [ resolve("./packages/tsconfig.json"), + resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), PnPPackage(), PublishNightly([...commonPublishTags], "v4nightly"), ...commonBehaviors], }]; diff --git a/package-lock.json b/package-lock.json index 0235a3fde..2a86b9881 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta9", + "@pnp/buildsystem": "^4.0.0-beta10", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", @@ -600,12 +600,12 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta9", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta9.tgz", - "integrity": "sha512-NBU6/HyEbcvePfS+sexR+pETVooZyo1G9XzQPkqgbV88yeiAROOtuAH9n7K/+EkLK7BXxH7RdpOTqmiV00D7/Q==", + "version": "4.0.0-beta10", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta10.tgz", + "integrity": "sha512-9x0xL3CmJRZYrVMhECmj4PSARStr4O+4ZtJO/vQsLpEhtitHtfvciXSH8wIY24OfKSG/FBgffRNBu475TMtvSw==", "dev": true, "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20231229", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20240105", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", @@ -692,9 +692,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20231229", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20231229.tgz", - "integrity": "sha512-3N58DjsoiqQTw3eablg4cO0HjL1RPTzV47DGYGBdeFS6p/IKWLLDG59jevuhKV6eoRVWpvaJguQoDMyiGlRNrg==", + "version": "4.0.0-alpha0-v4nightly.20240108", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240108.tgz", + "integrity": "sha512-6WG11kf9lLckNjlkx005ldDOqBhyqjWYNixZdXoUXS/1WT35Omv93YNYy8hV3Xvd4dGnLiL0RmIbbx0LLr3zXg==", "dev": true, "dependencies": { "tslib": "2.4.1" diff --git a/package.json b/package.json index 3a5dc9f42..5edbc7616 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@azure/identity": "3.3.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", - "@pnp/buildsystem": "^4.0.0-beta9", + "@pnp/buildsystem": "^4.0.0-beta10", "@pnp/logging": "^3.21.0", "@types/chai": "4.3.6", "@types/chai-as-promised": "7.1.6", From 18ca1a3c36a3c695e78e5ec8a065c8fa2d6226d6 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 8 Jan 2024 13:50:54 -0500 Subject: [PATCH 077/171] Update buildsystem-config.ts --- buildsystem-config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildsystem-config.ts b/buildsystem-config.ts index e715939aa..1e2b5449e 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -27,7 +27,7 @@ Logger.subscribe(ConsoleListener("", { const logLevel = LogLevel.Verbose; const distFolder = "./dist/packages"; -const commonPublishTags = ["--access", "public", "--dry-run"]; +const commonPublishTags = ["--access", "public"]; function PnPBuild(buildFlags?: string[]): (b: BuildTimeline) => BuildTimeline { From 89edbb8c5e53d868038ed8537bf2e1bfa033dd28 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Thu, 4 Jan 2024 16:39:13 -0700 Subject: [PATCH 078/171] V4 Onenote Adding full Notes functionality Adding Tests Adding Documentation --- docs/graph/onenote.md | 453 +++++++++++++++++++++++++++ packages/graph/onenote/groups.ts | 14 + packages/graph/onenote/index.ts | 9 +- packages/graph/onenote/sites.ts | 14 + packages/graph/onenote/types.ts | 237 +++++++++++--- packages/graph/operations/onenote.ts | 14 + test/graph/onenote.ts | 219 +++++++++++++ 7 files changed, 917 insertions(+), 43 deletions(-) create mode 100644 docs/graph/onenote.md create mode 100644 packages/graph/onenote/groups.ts create mode 100644 packages/graph/onenote/sites.ts create mode 100644 packages/graph/operations/onenote.ts create mode 100644 test/graph/onenote.ts diff --git a/docs/graph/onenote.md b/docs/graph/onenote.md new file mode 100644 index 000000000..87712ade0 --- /dev/null +++ b/docs/graph/onenote.md @@ -0,0 +1,453 @@ +# Graph OneNote (Notes) +Provides capabilities of working with OneNote files. + +Most of the following methods are available on users, groups, and sites. There may be exceptions, so please refer to the link below for more information. Most of the samples here will be using the .me endpoint for reference. + +More information can be found in the official Graph documentation: + +- [OneNote Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/onenote-api-overview?view=graph-rest-1.0) + + +## Notebook, INoteBook, Notebooks, INotebooks, OneNote, IOneNote, Page, IPage, Pages, IPages, Section, ISection, Sections, ISections, Resources, IResources +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Notebooks + +### Get Users Notebooks +Retrieves a list of notebooks for a user. +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const notebooks = await graph.me.onenote.notebooks() +``` +### Get Group Notebooks +Retrieves a list of notebooks for a group +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const notebooks = await graph.groups.getById('3dfbeaa7-a097-4032-8965-cd387a79537f').onenote.notebooks() +``` +### Get Site Notebooks +Retrieves a list of notebooks for a site +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/sites"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const notebooks = await graph.sites.getById('contoso.sharepoint.com,91dd2418-8fb9-4e0e-919d-c1b31e938386,285cc5a1-cf50-4e4d-8d93-5ba5a8e76e01').onenote.notebooks() +``` +### Get User's most recent Notebooks +Retrieves the most recent notebooks for the logged in user. Not available on Sites or Groups. +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const notebooks = await graph.me.onenote.notebooks.recent(); +``` +### Create a Notebook +Create a new new notebook + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const userNotebookAdd = await graph.me.onenote.notebooks.add("New Notebook"); + +``` +### Get a Notebook +Retrieve the properties of a notebook by id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const noteBook = await graph.me.onenote.notebooks.getById('eddc09e2-2d4f-4ca3-aadb-89e9a7305d83')(); + +``` +### Copy a Notebook +Copies a notebook to the Notebooks folder in the Documents library of a User or Group. The folder is created if it doesn't exist. + +Available for Users and Groups (not Sites). + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +// copy user notebook +const copyOperation = await graph.me.onenote.notebooks.getById('eddc09e2-2d4f-4ca3-aadb-89e9a7305d83').copy({renameAs: "New Notebook Name"}); + +``` +## Sections +### List sections in OneNote +Retrieves a list of OneNote section objects + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sections = await graph.me.onenote.sections(); + +``` +### List sections in a Notebook +Retrieve a list of section objects from specified notebook + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sections = await graph.me.onenote.notebooks.getById('eddc09e2-2d4f-4ca3-aadb-89e9a7305d83').sections(); + +``` +### Get a Section +Retrieve a specified Section + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const section = await graph.me.onenote.sections.getById('107542cd-a4da-4bf6-8afc-5cbeb3f9a517')(); + +``` + +### Create a new section in a Notebook +Creates a new section in a specified notebook + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const section = await graph.me.onenote.notebooks.getById('eddc09e2-2d4f-4ca3-aadb-89e9a7305d83').sections.add("New Section"); + +``` +### Copy a section to a Notebook +Copies a section to a specified notebook. +For Copy operations, you follow an asynchronous calling pattern: First call the Copy action, and then poll the operation endpoint for the result. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const notebookIdToCopyTo = '1742ad48-23cb-4106-b8ab-8e214283d61a'; + +const copyOperation = await graph.me.onenote.sections.getById('107542cd-a4da-4bf6-8afc-5cbeb3f9a517').copyToNotebook({id:notebookIdToCopyTo, renameAs:'New Section' }); + +``` +### Copy a section to a Section Group +Copies a section to a specified Section Group. +For Copy operations, you follow an asynchronous calling pattern: First call the Copy action, and then poll the operation endpoint for the result. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sectionGroupToCopyTo = 'ea12ea17-ac6c-478b-bb6c-76fde6142892'; + +const copyOperation = await graph.me.onenote.sections.getById('107542cd-a4da-4bf6-8afc-5cbeb3f9a517').copyToSectionGroup({id:sectionGroupToCopyTo, renameAs:'New Section' }); + +``` + +## Section Groups +### List section groups +Retrieves a list of OneNote sectionGroup objects + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sectionGroups = await graph.me.onenote.sectionsGroups(); + +``` +### List section groups in a Notebook +Retrieves a list of OneNote sectionGroup objects + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sectionGroups = await graph.me.onenote.notebooks.getById('eddc09e2-2d4f-4ca3-aadb-89e9a7305d83').sectionsGroups(); + +``` +### Get a Section Group +Retrieves a section group by id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sectionGroup = await graph.me.onenote.sectionsGroups.getById('15ef5f24-ca07-4d74-80c9-a4b7cb1cd7a4')(); + +``` +### Create a Section Group in a Notebook +Creates a new Section Group in a specified Notebook + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const section = await graph.me.onenote.notebooks.getById('eddc09e2-2d4f-4ca3-aadb-89e9a7305d83').sections.add('New Section Group'); + +``` +### List Sections in a Section Group +Retrieves a list of sections in a specified Section Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sections = await graph.me.onenote.sectionGroups.getById('15ef5f24-ca07-4d74-80c9-a4b7cb1cd7a4').sections(); + +``` +### Create a Section in a Section Group +Creates a new section in a specified Section Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const section = await graph.me.onenote.sectionGroups.getById('15ef5f24-ca07-4d74-80c9-a4b7cb1cd7a4').sections.add("New Section"); + +``` +## Pages +### List Pages in default OneNote +Retrieves a list of OneNote page objects + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const pages = await graph.me.onenote.pages(); + +``` +### List Pages in a Section +Retrieves a list of OneNote pages in a specified Section + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const pages = await graph.me.onenote.sections.getById('107542cd-a4da-4bf6-8afc-5cbeb3f9a517').pages(); + +``` + +### Get a Page +Retrieve a specified Page + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const page = await graph.me.onenote.pages.getById('107542cd-a4da-4bf6-8afc-5cbeb3f9a517')(); + +``` +### Get Contents of a Page +Retrieves HTML content from a specified page. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const pageHtml = await graph.me.onenote.pages.getById('107542cd-a4da-4bf6-8afc-5cbeb3f9a517').content(); + +``` + +### Create a page +Create a new OneNote page in the default section of the default notebook. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + + var pageData =` + + + + A page with <i>rendered</i> images and an <b>attached</b> file + + + +

Here's an image from an online source:

+ an image on the page +

Here's an image uploaded as binary data:

+ an image on the page +

Here's a file attachment:

+ + + `; + +const page = await graph.me.onenote.pages.add(pageData); + +``` +### Create a page in a Section +Create a new OneNote page in a specified section + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + + var pageData =` + + + + A page with <i>rendered</i> images and an <b>attached</b> file + + + +

Here's an image from an online source:

+ an image on the page +

Here's an image uploaded as binary data:

+ an image on the page +

Here's a file attachment:

+ + + `; + +const page = await graph.me.onenote.sections.getById('107542cd-a4da-4bf6-8afc-5cbeb3f9a517').pages.add(pageData); + +``` +### Copy a page to a Section +Copy a page to specified section +For copy operations, you follow an asynchronous calling pattern: First call the Copy action, and then poll the operation endpoint for the result. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const sectionToCopyTo = 'ea12ea17-ac6c-478b-bb6c-76fde6142892'; +await graph.me.onenote.pages.getById('6bd3eace-14a2-4859-8855-02724f3e4539').copyToSection({id:sectionToCopyTo, renameAs:'New Copied Page'}); + +``` + +### Update a page +Update the content of a OneNote page. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +const oneNotePageUpdate = await graph.me.onenote.pages.getById('6bd3eace-14a2-4859-8855-02724f3e4539').update( + [ + { + 'target':'#para-id', + 'action':'Insert', + 'position':'Before', + 'content':'image-alt-text' + }, + { + 'target':'#list-id', + 'action':'Append', + 'content':'
  • new-page-content
  • ' + } + ] +); + +``` +### Delete a page +Delete a OneNote page. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +await graph.me.onenote.pages.getById('6bd3eace-14a2-4859-8855-02724f3e4539').delete() + +``` +## Resources +### Get a Resource +Retrieve the binary data of a file or image resource object. Returned as a Blob + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; + +const graph = graphfi(...); + +// Example of getting a resource +const resourceBlob = await graph.me.onenote.resources.getById('1-b2bce3f55b5d4864be426d7cce66b239!1-5137fae1-07eb-4383-bc8b-0c0c6cf0af39')(); + +``` diff --git a/packages/graph/onenote/groups.ts b/packages/graph/onenote/groups.ts new file mode 100644 index 000000000..4dd91ae06 --- /dev/null +++ b/packages/graph/onenote/groups.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _Group } from "../groups/types.js"; +import { IOneNote, OneNote } from "./types.js"; + +declare module "../groups/types" { + interface _Group { + readonly onenote: IOneNote; + } + interface IGroup { + readonly onenote: IOneNote; + } +} + +addProp(_Group, "onenote", OneNote); diff --git a/packages/graph/onenote/index.ts b/packages/graph/onenote/index.ts index 5580cd60b..dec8f5774 100644 --- a/packages/graph/onenote/index.ts +++ b/packages/graph/onenote/index.ts @@ -1,16 +1,21 @@ +import "./groups.js"; import "./users.js"; +import "./sites.js"; export { INotebook, - INotebookAddResult, INotebooks, IOneNote, + IPages, + IResources, ISection, - ISectionAddResult, ISections, Notebook, Notebooks, OneNote, + Page, + Pages, + Resources, Section, Sections, } from "./types.js"; diff --git a/packages/graph/onenote/sites.ts b/packages/graph/onenote/sites.ts new file mode 100644 index 000000000..42615d692 --- /dev/null +++ b/packages/graph/onenote/sites.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _Site } from "../sites/types.js"; +import { IOneNote, OneNote } from "./types.js"; + +declare module "../sites/types" { + interface _Site { + readonly onenote: IOneNote; + } + interface ISite { + readonly onenote: IOneNote; + } +} + +addProp(_Site, "onenote", OneNote); diff --git a/packages/graph/onenote/types.ts b/packages/graph/onenote/types.ts index 491041a7c..3162fcfc4 100644 --- a/packages/graph/onenote/types.ts +++ b/packages/graph/onenote/types.ts @@ -1,15 +1,27 @@ -import { body } from "@pnp/queryable"; -import { Notebook as INotebookType, Onenote as IOnenoteType, OnenoteSection as ISectionType, OnenotePage as IOnenotePageType } from "@microsoft/microsoft-graph-types"; +import { BlobParse, InjectHeaders, TextParse, body } from "@pnp/queryable"; +import { + Notebook as INotebookType, + Onenote as IOnenoteType, + OnenoteSection as IOnenoteSectionType, + OnenotePage as IOnenotePageType, + SectionGroup as ISectionGroupType, + RecentNotebook as IRecentNotebookType, + Operation as IOperationType, + OnenotePatchContentCommand as IOnenotePatchContentCommand, +} from "@microsoft/microsoft-graph-types"; import { - GraphCollection, _GraphInstance, _GraphCollection, - IGraphCollection, + _GraphQueryable, graphInvokableFactory, + GraphQueryable, graphPost, + graphGet, + graphPatch, } from "../graphqueryable.js"; -import { defaultPath, getById, IGetById } from "../decorators.js"; +import { defaultPath, deleteable, getById, IDeleteable, IGetById } from "../decorators.js"; +type Combine = T & U; /** * Represents a onenote entity */ @@ -20,28 +32,47 @@ export class _OneNote extends _GraphInstance { return Notebooks(this); } - public get sections(): ISections { + public get pages(): IPages { + return Pages(this); + } + + public get resources(): IResources { + return Resources(this); + } + + public get sections(): Combine<_GraphCollection, Omit> { return Sections(this); } - public get pages(): IGraphCollection { - return GraphCollection(this, "pages"); + public get sectionGroups(): Combine<_GraphCollection, Omit> { + return SectionGroups(this); } } -export interface IOneNote extends _OneNote {} +export interface IOneNote extends _OneNote { } export const OneNote = graphInvokableFactory(_OneNote); - /** * Describes a notebook instance * */ export class _Notebook extends _GraphInstance { - public get sections(): ISections { + public get sections(): Combine<_GraphCollection, Pick> { return Sections(this); } + + public get sectionGroups(): Combine<_GraphCollection, Pick> { + return SectionGroups(this); + } + + /** + * Copy notebook + * @param props of type ICopyProps. groupId (id of group to copy to. Use only when copying to M365 group), renameAs name of the copy. + */ + public async copy(props: ICopyProps): Promise { + return graphPost(GraphQueryable(this, "copyNoteBook"), body(props)); + } } -export interface INotebook extends _Notebook {} +export interface INotebook extends _Notebook { } export const Notebook = graphInvokableFactory(_Notebook); /** @@ -56,64 +87,188 @@ export class _Notebooks extends _GraphCollection { * * @param displayName Notebook display name */ - public async add(displayName: string): Promise { - - const data = await graphPost(this, body({ displayName })); + public async add(displayName: string): Promise { + return graphPost(this, body({ displayName })); + } - return { - data, - notebook: (this).getById(data.id), - }; + /** + * Get a list of recent notebooks for the sign-in user + * @param includePersonalNotebooks Include notebooks owned by the user. Set to true to include notebooks owned by the user; otherwise, set to false. + */ + public async recent(includePersonalNotebooks = false): Promise { + return graphGet(GraphQueryable(this, `getRecentNotebooks(includePersonalNotebooks=${includePersonalNotebooks})`)); } } -export interface INotebooks extends _Notebooks, IGetById {} +export interface INotebooks extends _Notebooks, IGetById { } export const Notebooks = graphInvokableFactory(_Notebooks); - /** - * Describes a sections instance + * Describes a OneNote sections instance */ -export class _Section extends _GraphInstance { } +export class _Section extends _GraphInstance { + + public get pages(): IPages { + return Pages(this); + } + + /** + * Copy section to notebook + * @param props of type ICopySectionProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook, renameAs name of the copy. + */ + public async copyToNotebook(props: ICopySectionProps): Promise { + return graphPost(GraphQueryable(this, "copyToNoteBook"), body(props)); + } + + /** + * Copy section group + * @param props of type ICopySectionProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook, renameAs name of the copy. + */ + public async copyToSectionGroup(props: ICopySectionProps): Promise { + return graphPost(GraphQueryable(this, "copyToNoteBook"), body(props)); + } +} export interface ISection extends _Section { } export const Section = graphInvokableFactory(_Section); /** - * Describes a collection of Sections objects + * Describes a collection of onenote sections objects * */ @defaultPath("sections") @getById(Section) -export class _Sections extends _GraphCollection { +export class _Sections extends _GraphCollection { /** * Adds a new section * * @param displayName New section display name */ - public async add(displayName: string): Promise { + public async add(displayName: string): Promise { + return graphPost(this, body({ displayName })); + } +} +export interface ISections extends _Sections, IGetById { } +export const Sections = graphInvokableFactory(_Sections); + +/** + * Describes a root onenote sections group instance + */ +export class _SectionGroup extends _GraphInstance { + public get sections(): ISections { + return Sections(this); + } +} +export interface ISectionGroup extends _SectionGroup { } +export const SectionGroup = graphInvokableFactory(_SectionGroup); + +/** + * Describes a collection of Sections objects + * + */ +@defaultPath("sectiongroups") +@getById(SectionGroup) +export class _SectionGroups extends _GraphCollection { + /** + * Adds a new section group + * @param displayName New section group display name + */ + public async add(displayName: string): Promise { + return graphPost(this, body({ displayName })); + } + + public get sections(): ISections { + return Sections(this); + } +} +export interface ISectionGroups extends _SectionGroups, IGetById { } +export const SectionGroups = graphInvokableFactory(_SectionGroups); + +/** + * Describes a page instance + * + */ +@deleteable() +export class _Page extends _GraphInstance { + /** + * Copy page to section + * @param props of type ICopyPageProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook + */ + public async copyToSection(props: ICopyPageProps): Promise { + return graphPost(GraphQueryable(this, "copyToSection"), body(props)); + } - const data = await graphPost(this, body({ displayName })); + /** + * Gets contents of a page + * + * @param includeIDs page html body + */ + public async content(includeIDs = false): Promise { + return Page(this, `content?includeIDs=${includeIDs}`).using(TextParse())(); + } - return { - data, - section: (this).getById(data.id), - }; + /** + * Copy page to section + * @param props of type IOnenotePatchContentCommand. + */ + public async update(props: IOnenotePatchContentCommand[]): Promise { + return graphPatch(GraphQueryable(this, "content"), body(props)); } } -export interface ISections extends _Sections, IGetById {} -export const Sections = graphInvokableFactory(_Sections); +export interface IPage extends _Page, IDeleteable { } +export const Page = graphInvokableFactory(_Page); /** - * INotebookAddResult + * Describes a collection of page objects + * */ -export interface INotebookAddResult { - data: any; - notebook: INotebook; +@defaultPath("pages") +@getById(Page) +export class _Pages extends _GraphCollection { + /** + * Create a new page as specified in the request body. + * + * @param html page html body + */ + public async add(html: string): Promise { + const q = GraphQueryable(this); + q.using(InjectHeaders({ + "Content-Type": "text/html", + })); + + return graphPost(q, { body: html }); + } } +export interface IPages extends _Pages, IGetById { } +export const Pages = graphInvokableFactory(_Pages); /** - * ISectionAddResult + * Describes a resources + * */ -export interface ISectionAddResult { - data: any; - section: ISection; +@defaultPath("resources") +export class _Resources extends _GraphInstance { + /** + * getById returns a Blob. API does not support getting JSON representation. + * @param id id of the resource in a OneNote page + * @returns Blob of the resource from a OneNote page + */ + public getById(id: string): _GraphQueryable { + return GraphQueryable(this, `${id}/content`).using(BlobParse()); + } +} +export interface IResources extends _Resources { } +export const Resources = graphInvokableFactory(_Resources); + + +export interface ICopyProps { + groupId?: string; + renameAs?: string; +} + +export interface ICopySectionProps extends ICopyProps { + id: string; +} + +export interface ICopyPageProps { + groupId?: string; + id: string; } diff --git a/packages/graph/operations/onenote.ts b/packages/graph/operations/onenote.ts new file mode 100644 index 000000000..37c3bdd23 --- /dev/null +++ b/packages/graph/operations/onenote.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _OneNote } from "../onenote/types.js"; +import { IOperations, Operations } from "./types.js"; + +declare module "../onenote/types" { + interface _OneNote { + readonly operations: IOperations; + } + interface IOneNote { + readonly operations: IOperations; + } +} + +addProp(_OneNote, "operations", Operations); diff --git a/test/graph/onenote.ts b/test/graph/onenote.ts new file mode 100644 index 000000000..a5be833e3 --- /dev/null +++ b/test/graph/onenote.ts @@ -0,0 +1,219 @@ +import { expect } from "chai"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import { pnpTest } from "../pnp-test.js"; +import "@pnp/graph/groups"; +import "@pnp/graph/sites"; +import "@pnp/graph/users"; +import "@pnp/graph/onenote"; +import { Notebook } from "@microsoft/microsoft-graph-types"; +import getValidUser from "./utilities/getValidUser.js"; + +describe("OneNote", function () { + let notebook: Notebook; + let testUserName: string; + + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + notebook = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.add(getRandomString(10)); + + if(!notebook.id){ + this.skip(); + } + }); + + it("onenote - list notebooks", pnpTest("9d0fe4b3-dc62-4699-be83-cc6f72daa62", async function () { + const oneNoteNoteBooks = await this.pnp.graph.users.getById(testUserName).onenote.notebooks(); + return expect(oneNoteNoteBooks).to.be.an("array"); + })); + + it.skip("onenote - list recent notebooks", pnpTest("769fbaf2-d92b-47aa-a2f5-6fccfc569b4d", async function () { + const oneNoteNoteBooks = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.recent(); + return expect(oneNoteNoteBooks).to.be.an("array"); + })); + + it("onenote - notebooks getById()", pnpTest("9e75f0cf-9940-4988-b05f-2aff019e8296", async function () { + const notebookById = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id)(); + return expect(notebookById.id).is.not.null; + })); + + it("onenote - add notebook", pnpTest("81c342d9-d943-4a18-a8c3-828ef090d447", async function () { + const oneNodeNotebooksAdd = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.add(getRandomString(10)); + return expect(oneNodeNotebooksAdd.id).is.not.null; + })); + + it("onenote - list sections", pnpTest("ca8871f8-c90e-48e4-8909-39f42884ea2c", async function () { + const sections = await this.pnp.graph.users.getById(testUserName).onenote.sections(); + return expect(sections).to.be.an("array"); + })); + + it("onenote - notebook copy", pnpTest("aa57039b-4c75-437d-92ae-bb2a06c7b802", async function () { + const notebooks = await this.pnp.graph.users.getById(testUserName).onenote.notebooks(); + if(notebooks.length > 0){ + const copy = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebooks[0].id).copy({renameAs:getRandomString(10)}); + return expect(copy.id).is.not.null; + } + this.skip(); + })); + + it("onenote - section copyToNotebook()", pnpTest("b5cc2f9b-0a19-4d42-a041-1a68a2cfd915", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); + if(section){ + const copy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).copyToNotebook({id:notebook.id, renameAs:getRandomString(10)}); + return expect(copy.id).is.not.null; + } + this.skip(); + })); + + it("onenote - section copyToSectionGroup()", pnpTest("b48e5d00-7806-4bde-96fe-1650dea1e1e4", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); + const group = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sectionGroups.add(getRandomString(10)); + if(section.id && group.id){ + const copy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).copyToSectionGroup({id:group.id, renameAs:getRandomString(5)}); + return expect(copy.id).is.not.null; + } + this.skip(); + })); + + // doesn't work well with large onenotes. + it.skip("onenote - list pages", pnpTest("77d47760-0371-4045-898d-6a95d8e42cca", async function () { + const pages = await this.pnp.graph.users.getById(testUserName).onenote.pages(); + return expect(pages).to.be.an("array"); + })); + + // doesn't work well with large onenotes. + it.skip("onenote - pages getById()", pnpTest("fcd78bde-69a0-4331-8aa4-389bba222963", async function () { + const pages = await this.pnp.graph.users.getById(testUserName).onenote.pages(); + if(pages.length > 0){ + const page = await this.pnp.graph.users.getById(testUserName).onenote.pages.getById(pages[0].id)(); + return expect(page.id).is.not.null; + } + this.skip(); + })); + + it("onenote - pages copyToSection", pnpTest("e8c21973-8d90-4bc4-947f-ef39198832dd", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); + const pages = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages(); + if(section.id && pages.length > 0) { + const pageCopy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages.getById(pages[0].id).copyToSection({id:section.id}); + return expect(pageCopy).to.be.fulfilled; + } + + this.skip(); + })); + + it("onenote - add page", pnpTest("60a4fd91-3f6b-4f6f-a5bb-e11f57186eaf", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); + if(section.id){ + const pageData =` + + + A page with <i>rendered</i> images and an <b>attached</b> file + + + +

    Here's an image from an online source:

    + an image on the page +

    Here's an image uploaded as binary data:

    + an image on the page +

    Here's a file attachment:

    + + + `; + const page = await this.pnp.graph.users.getById(testUserName).onenote.pages.add(pageData); + return expect(page.id).is.not.null; + } + this.skip(); + })); + + it("onenote - sections list pages", pnpTest("5f44bc04-6119-432e-ac92-602085c4dc91", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); + if(section.id){ + const pages = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages(); + return expect(pages).to.be.an("array"); + } + this.skip(); + })); + + + it("onenote - sections add page", pnpTest("48744c5a-999a-40fb-9ab8-9d06e0b544a2", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); + if(section.id){ + const pageData =` + + + A page with <i>rendered</i> images and an <b>attached</b> file + + + +

    Here's an image from an online source:

    + an image on the page +

    Here's an image uploaded as binary data:

    + an image on the page +

    Here's a file attachment:

    + + + `; + const page = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages.add(pageData); + return expect(page.id).is.not.null; + } + this.skip(); + })); + + it("onenote - list section groups", pnpTest("df461253-a206-4ebf-b993-5b7a76d2ee5b", async function () { + const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); + return expect(sectionGroups).to.be.an("array"); + })); + + it("onenote - sectionGroups getById()", pnpTest("4dd65bad-d8db-4b05-984a-ec06cd650c62", async function () { + const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); + if(sectionGroups.length > 0){ + const section = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups.getById(sectionGroups[0].id)(); + return expect(section.id).is.not.null; + } + this.skip(); + })); + + it("onenote - list section groups sections", pnpTest("ef961253-a206-4ebf-b993-5a1a76d2ff5b", async function () { + const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); + if(sectionGroups.length > 0){ + const sections = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups.getById(sectionGroups[0].id).sections(); + return expect(sections).to.be.an("array"); + } + this.skip(); + })); + + it("onenote - create section in section group", pnpTest("4959895e-404f-4068-bf5f-85b0d2db9bcf", async function () { + const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); + if(sectionGroups.length > 0){ + const section = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups.getById(sectionGroups[0].id).sections.add(getRandomString(10)); + return expect(section.id).is.not.null; + } + this.skip(); + })); + + it("notebook - list sections", pnpTest("b746d08e-f07d-4df2-82a3-7e1c7522bef8", async function () { + const sections = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections(); + return expect(sections).to.be.an("array"); + })); + + it("notebook - add section", pnpTest("1298ee0d-0566-4144-ab56-d8e3c89654c7", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); + return expect(section.id).is.not.null; + })); + + it("notebook - list section groups", pnpTest("66f3aeaa-e9d2-4b26-8894-6ed226e1f180", async function () { + const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sectionGroups(); + return expect(sectionGroups).to.be.an("array"); + })); + + it("notebook - add section group", pnpTest("cb1d6d80-d5dc-4879-ac5a-288a5f0249ba", async function () { + const sectionGroup = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sectionGroups.add(getRandomString(10)); + return expect(sectionGroup.id).is.not.null; + })); +}); From a7143dbb817e25da3632f78bd92aefb7d188b95b Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 8 Jan 2024 20:22:44 -0700 Subject: [PATCH 079/171] Clean up extra interfaces --- packages/graph/onenote/types.ts | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/packages/graph/onenote/types.ts b/packages/graph/onenote/types.ts index 3162fcfc4..94f4e12dc 100644 --- a/packages/graph/onenote/types.ts +++ b/packages/graph/onenote/types.ts @@ -68,7 +68,7 @@ export class _Notebook extends _GraphInstance { * Copy notebook * @param props of type ICopyProps. groupId (id of group to copy to. Use only when copying to M365 group), renameAs name of the copy. */ - public async copy(props: ICopyProps): Promise { + public async copy(props: Pick): Promise { return graphPost(GraphQueryable(this, "copyNoteBook"), body(props)); } } @@ -113,17 +113,17 @@ export class _Section extends _GraphInstance { /** * Copy section to notebook - * @param props of type ICopySectionProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook, renameAs name of the copy. + * @param props of type ICopyProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook, renameAs name of the copy. */ - public async copyToNotebook(props: ICopySectionProps): Promise { + public async copyToNotebook(props: ICopyProps): Promise { return graphPost(GraphQueryable(this, "copyToNoteBook"), body(props)); } /** * Copy section group - * @param props of type ICopySectionProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook, renameAs name of the copy. + * @param props of type ICopyProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook, renameAs name of the copy. */ - public async copyToSectionGroup(props: ICopySectionProps): Promise { + public async copyToSectionGroup(props: ICopyProps): Promise { return graphPost(GraphQueryable(this, "copyToNoteBook"), body(props)); } } @@ -192,7 +192,7 @@ export class _Page extends _GraphInstance { * Copy page to section * @param props of type ICopyPageProps. groupId (id of group to copy to. Use only when copying to M365 group), id of destination notebook */ - public async copyToSection(props: ICopyPageProps): Promise { + public async copyToSection(props: Pick): Promise { return graphPost(GraphQueryable(this, "copyToSection"), body(props)); } @@ -258,17 +258,8 @@ export class _Resources extends _GraphInstance { export interface IResources extends _Resources { } export const Resources = graphInvokableFactory(_Resources); - export interface ICopyProps { groupId?: string; renameAs?: string; -} - -export interface ICopySectionProps extends ICopyProps { - id: string; -} - -export interface ICopyPageProps { - groupId?: string; id: string; } From 9b37ea355a898ec2feacbbfdb15d1f0ba82977b9 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Tue, 9 Jan 2024 16:20:14 -0700 Subject: [PATCH 080/171] Todo Initial --- packages/graph/to-do/types.ts | 213 ++++++++++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 packages/graph/to-do/types.ts diff --git a/packages/graph/to-do/types.ts b/packages/graph/to-do/types.ts new file mode 100644 index 000000000..29248dab9 --- /dev/null +++ b/packages/graph/to-do/types.ts @@ -0,0 +1,213 @@ +import { Todo as ITodoType. TodoTaskList as ITodoTaskListType, TodoTask as ITodoTaskType, AttachmentBase as ITodoAttachmentType, AttachmentSession as IAttachmentSessionType, AttachmentInfo as IAttachmentInfoType, ChecklistItem as IChecklistItemType, LinkedResource as ILinkedResourceType } from "@microsoft/microsoft-graph-types"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, IGraphCollection, GraphCollection, graphPost } from "../graphqueryable.js"; +import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; +import { cancelableScope, errorCheck } from "@pnp/queryable"; + +/** + * Todo + */ +@defaultPath("todo") +export class _Todo extends _GraphInstance { + public get lists(): ITaskLists{ + return TaskLists(this); + } +} +export interface ITodo extends _Todo{ } +export const Todo = graphInvokableFactory(_Todo); + +/** + * TaskList + */ +@deleteable() +@updateable() +export class _TaskList extends _GraphInstance { + public get tasks(): ITasks{ + return Tasks(this); + } + /** + * Get changes since optional change token + * @param token - string (Optional) + * change token + * @returns IDeltaItems + */ + public delta(token?: string): IGraphCollection { + const path = `delta${(token) ? `(token=${token})` : ""}`; + + const query: IGraphCollection = GraphCollection(this, path); + query.on.parse.replace(errorCheck); + query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { + + const json = await response.json(); + const nextLink = json["@odata.nextLink"]; + const deltaLink = json["@odata.deltaLink"]; + + result = { + // TODO:: update docs to show how to load next with async iterator + next: () => (nextLink ? GraphCollection([this, nextLink]) : null), + delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), + values: json.value, + }; + + return [url, response, result]; + }); + + return query; + } + //TODO Create Open Extension. Wait for it to be built as part of extensions module + //TODO Get Open Extension. Wait for it to be built as part of extensions module +} +export interface ITaskList extends _TaskList, IUpdateable, IDeleteable { } +export const TaskList = graphInvokableFactory(_TaskList); + +/** + * TaskLists + */ +@defaultPath("lists") +@getById(TaskList) +@addable() +export class _TaskLists extends _GraphCollection { } +export interface ITaskLists extends _TaskLists, IGetById, IAddable{ } +export const TaskLists = graphInvokableFactory(_TaskLists); + + +/** + * Task + */ +@deleteable() +@updateable() +export class _Task extends _GraphInstance { + + public get attachments(): IAttachments{ + return Attachments(this); + } + + public get checklistItems(): IChecklistItems{ + return ChecklistItems(this); + } + + public get resources(): ILinkedResources{ + return LinkedResource(this); + } + /** + * Get changes since optional change token + * @param token - string (Optional) + * change token + * @returns IDeltaItems + */ + public delta(token?: string): IGraphCollection { + const path = `delta${(token) ? `(token=${token})` : ""}`; + + const query: IGraphCollection = GraphCollection(this, path); + query.on.parse.replace(errorCheck); + query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { + + const json = await response.json(); + const nextLink = json["@odata.nextLink"]; + const deltaLink = json["@odata.deltaLink"]; + + result = { + // TODO:: update docs to show how to load next with async iterator + next: () => (nextLink ? GraphCollection([this, nextLink]) : null), + delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), + values: json.value, + }; + + return [url, response, result]; + }); + + return query; + } + //TODO Create Open Extension. Wait for it to be built as part of extensions module + //TODO Get Open Extension. Wait for it to be built as part of extensions module +} +export interface ITask extends _Tasks, IUpdateable, IDeleteable{ } +export const Task = graphInvokableFactory(_Task); + +/** + * Tasks + */ +@defaultPath("tasks") +@getById(Task) +@addable() +export class _Tasks extends _GraphCollection { } +export interface ITasks extends _Tasks, IGetById, IAddable{ } +export const Tasks = graphInvokableFactory(_Tasks); + +/** + * Attachment + */ +@deleteable() +export class _Attachment extends _GraphInstance { + + public get attachments(): IAttachments{ + return Attachments(this); + } +} +export interface IAttachment extends _Attachments, IDeleteable{ } +export const Attachment = graphInvokableFactory(_Attachment); + +/** + * Attachments + */ +@defaultPath("attachments") +@getById(Attachment) +@addable() +export class _Attachments extends _GraphCollection { + + // maybe we should fix this so they just pass a file, instead of an attachment info object. + @cancelableScope + public async addChunked(attachmentInfo: IAttachmentInfoType): Promise{ + // const response:IAttachmentSessionType = await graphPost(this, body(attachmentInfo)); + return null; + } + } +export interface IAttachments extends _Attachments, IGetById, IAddable{ } +export const Attachments = graphInvokableFactory(_Attachments); + +/** + * Checklist + */ +@deleteable() +@updateable() +export class _Checklist extends _GraphInstance { } +export interface IChecklist extends _ChecklistItems, IUpdateable, IDeleteable{ } +export const Checklist = graphInvokableFactory(_Checklist); + +/** + * ChecklistItems + */ +@defaultPath("checklistItems") +@getById(Checklist) +@addable() +export class _ChecklistItems extends _GraphCollection { } +export interface IChecklistItems extends _ChecklistItems, IGetById, IAddable{ } +export const ChecklistItems = graphInvokableFactory(_ChecklistItems); + +/** + * LinkedResource + */ +@deleteable() +@updateable() +export class _LinkedResource extends _GraphInstance { } +export interface ILinkedResource extends _LinkedResource, IUpdateable, IDeleteable{ } +export const LinkedResource = graphInvokableFactory(_LinkedResource); + +/** + * LinkedResources + */ +@defaultPath("linkedResources") +@getById(LinkedResource) +@addable() +export class _LinkedResources extends _GraphCollection { } +export interface ILinkedResources extends _LinkedResources, IGetById, IAddable{ } +export const LinkedResources = graphInvokableFactory(_LinkedResources); + +export interface IAddTaskListOptions{ + displayName: string; +} + +export interface IDeltaItems { + next: IGraphCollection; + delta: IGraphCollection; + values: any[]; +} From 510af531ee559ca5d4f1e52504dd7070315975db Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Tue, 9 Jan 2024 19:35:32 -0700 Subject: [PATCH 081/171] WIP - Interfaces, Tests --- packages/graph/todo/index.ts | 19 ++++ packages/graph/{to-do => todo}/types.ts | 44 ++++---- packages/graph/todo/user.ts | 14 +++ test/graph/todo.ts | 133 ++++++++++++++++++++++++ 4 files changed, 188 insertions(+), 22 deletions(-) create mode 100644 packages/graph/todo/index.ts rename packages/graph/{to-do => todo}/types.ts (90%) create mode 100644 packages/graph/todo/user.ts create mode 100644 test/graph/todo.ts diff --git a/packages/graph/todo/index.ts b/packages/graph/todo/index.ts new file mode 100644 index 000000000..323a16642 --- /dev/null +++ b/packages/graph/todo/index.ts @@ -0,0 +1,19 @@ +import "./user.js"; + +export { + IAttachment, + IAttachments, + IChecklistItem, + IChecklistItems, + ITask, + ITaskList, + ITaskLists, + ITodo, + Attachment, + Attachments, + ChecklistItem, + ChecklistItems, + Tasks, + TaskList, + TaskLists, +} from "./types.js"; diff --git a/packages/graph/to-do/types.ts b/packages/graph/todo/types.ts similarity index 90% rename from packages/graph/to-do/types.ts rename to packages/graph/todo/types.ts index 29248dab9..a03a6ddcb 100644 --- a/packages/graph/to-do/types.ts +++ b/packages/graph/todo/types.ts @@ -1,5 +1,5 @@ -import { Todo as ITodoType. TodoTaskList as ITodoTaskListType, TodoTask as ITodoTaskType, AttachmentBase as ITodoAttachmentType, AttachmentSession as IAttachmentSessionType, AttachmentInfo as IAttachmentInfoType, ChecklistItem as IChecklistItemType, LinkedResource as ILinkedResourceType } from "@microsoft/microsoft-graph-types"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory, IGraphCollection, GraphCollection, graphPost } from "../graphqueryable.js"; +import { Todo as ITodoType, TodoTaskList as ITodoTaskListType, TodoTask as ITodoTaskType, AttachmentBase as ITodoAttachmentType, AttachmentSession as IAttachmentSessionType, AttachmentInfo as IAttachmentInfoType, ChecklistItem as IChecklistItemType, LinkedResource as ILinkedResourceType } from "@microsoft/microsoft-graph-types"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, IGraphCollection, GraphCollection } from "../graphqueryable.js"; import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; import { cancelableScope, errorCheck } from "@pnp/queryable"; @@ -66,10 +66,9 @@ export const TaskList = graphInvokableFactory(_TaskList); @getById(TaskList) @addable() export class _TaskLists extends _GraphCollection { } -export interface ITaskLists extends _TaskLists, IGetById, IAddable{ } +export interface ITaskLists extends _TaskLists, IGetById, IAddable{ } export const TaskLists = graphInvokableFactory(_TaskLists); - /** * Task */ @@ -86,8 +85,21 @@ export class _Task extends _GraphInstance { } public get resources(): ILinkedResources{ - return LinkedResource(this); + return LinkedResources(this); } + //TODO Create Open Extension. Wait for it to be built as part of extensions module + //TODO Get Open Extension. Wait for it to be built as part of extensions module +} +export interface ITask extends _Task, IUpdateable, IDeleteable{ } +export const Task = graphInvokableFactory(_Task); + +/** + * Tasks + */ +@defaultPath("tasks") +@getById(Task) +@addable() +export class _Tasks extends _GraphCollection { /** * Get changes since optional change token * @param token - string (Optional) @@ -117,20 +129,8 @@ export class _Task extends _GraphInstance { return query; } - //TODO Create Open Extension. Wait for it to be built as part of extensions module - //TODO Get Open Extension. Wait for it to be built as part of extensions module } -export interface ITask extends _Tasks, IUpdateable, IDeleteable{ } -export const Task = graphInvokableFactory(_Task); - -/** - * Tasks - */ -@defaultPath("tasks") -@getById(Task) -@addable() -export class _Tasks extends _GraphCollection { } -export interface ITasks extends _Tasks, IGetById, IAddable{ } +export interface ITasks extends _Tasks, IGetById, IAddable{ } export const Tasks = graphInvokableFactory(_Tasks); /** @@ -169,15 +169,15 @@ export const Attachments = graphInvokableFactory(_Attachments); */ @deleteable() @updateable() -export class _Checklist extends _GraphInstance { } -export interface IChecklist extends _ChecklistItems, IUpdateable, IDeleteable{ } -export const Checklist = graphInvokableFactory(_Checklist); +export class _ChecklistItem extends _GraphInstance { } +export interface IChecklistItem extends _ChecklistItems, IUpdateable, IDeleteable{ } +export const ChecklistItem = graphInvokableFactory(_ChecklistItem); /** * ChecklistItems */ @defaultPath("checklistItems") -@getById(Checklist) +@getById(ChecklistItem) @addable() export class _ChecklistItems extends _GraphCollection { } export interface IChecklistItems extends _ChecklistItems, IGetById, IAddable{ } diff --git a/packages/graph/todo/user.ts b/packages/graph/todo/user.ts new file mode 100644 index 000000000..f92278bbd --- /dev/null +++ b/packages/graph/todo/user.ts @@ -0,0 +1,14 @@ +import { addProp } from "@pnp/queryable"; +import { _User } from "../users/types.js"; +import { ITodo, Todo } from "./types.js"; + +declare module "../users/types" { + interface _User { + todo: ITodo; + } + interface IUser { + todo: ITodo; + } +} + +addProp(_User, "todo", Todo); diff --git a/test/graph/todo.ts b/test/graph/todo.ts new file mode 100644 index 000000000..28855e733 --- /dev/null +++ b/test/graph/todo.ts @@ -0,0 +1,133 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; +import { pnpTest } from "../pnp-test.js"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import { TodoTask, TodoTaskList } from "@microsoft/microsoft-graph-types"; + +describe("Todo", function () { + let taskList: TodoTaskList; + let todoTask: TodoTask; + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + taskList = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ + displayName: "Travel items" + getRandomString(5) + }); + + todoTask = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList?.id).tasks.add( + { + title:"A new task", + categories: ["Important"], + linkedResources:[ + { + "webUrl":"https://pnp.github.io/pnpjs/", + "applicationName":"PnPjs", + "displayName":"PnPjs" + }, + ]}, + ); + if(!taskList || !todoTask){ + this.skip(); + } + + }); + + it("lists", pnpTest("8de75582-6257-4e2a-b753-7c8be1cf0a38", async function () { + const lists = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists(); + return expect(lists).to.be.an("array") && expect(lists[0]).to.haveOwnProperty("id"); + })); + + it("lists - getById()", pnpTest("50650ae3-8192-4767-b4b3-9af7a586c11b", async function () { + const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id)(); + return expect(list.id).is.not.null; + })); + + it("lists - add", pnpTest("2548a740-4267-4868-8663-e5bf5ae44ae2", async function () { + let passed = false; + const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ + displayName: "Test" + getRandomString(5) + }); + + if(list){ + passed = true; + await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).delete(); + } + return expect(passed).is.true; + })); + + it("lists - update", pnpTest("9017c7b8-fb00-4a00-9ef0-51af695679a6", async function () { + const displayName = "Test " + getRandomString(5); + const updated = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).update({ + displayName: displayName + }); + return expect(updated.id).is.not.null && expect(updated.displayName).equal(displayName); + })); + + it("lists - delete", pnpTest("ef561648-4380-4629-89bb-9834934e78d1", async function () { + const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ + displayName: "Test" + getRandomString(5) + }); + if(list){ + const deleted = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).delete(); + return expect(deleted).to.be(void 0); + } + this.skip(); + })); + + it("lists - delta", pnpTest("70cb936e-9ee5-4630-a3c7-6fdf60bbd6fe", async function () { + const delta = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).delta(); + return expect(delta).is.an("array"); + })); + + it("tasks", pnpTest("87475a79-f33a-44ff-a998-a5024ad77e13", async function () { + const tasks = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks(); + return expect(tasks).to.be.an("array") && expect(tasks[0]).to.haveOwnProperty("id"); + })); + + it("tasks - getById()", pnpTest("59d5dd98-1730-40fb-898e-4cd56e5b8260", async function () { + const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(todoTask.id)(); + return expect(task.id).is.not.null; + })); + + it("tasks - add", pnpTest("71958133-bd13-4bde-83c3-b8ea8871a466", async function () { + let passed = false; + const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.add({ + title: "Test" + getRandomString(5) + }); + + if(task){ + passed = true; + await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(task.id).delete(); + } + return expect(passed).is.true; + })); + + it("tasks - update", pnpTest("c2071fbb-55d0-4837-a0d8-9a8bc6640f60", async function () { + const title = "Test " + getRandomString(5); + const updated = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(todoTask.id).update({ + title: title + }); + return expect(updated.id).is.not.null && expect(updated.title).equal(title); + })); + + it("tasks - delete", pnpTest("104adde8-6514-4b84-b711-ae360e971519", async function () { + const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.add({ + title: "Test" + getRandomString(5) + }); + if(task){ + const deleted = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(task.id).delete(); + return expect(deleted).to.be(void 0); + } + this.skip(); + })); + + it("tasks - delta", pnpTest("8167699b-acd8-4e03-b14c-e5a347b0a131", async function () { + const delta = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.delta(); + return expect(delta).is.an("array"); + })); + +}); From 760122d6dd43aa1d163a791c183c0ceb6cc68700 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Fri, 12 Jan 2024 17:28:03 +0000 Subject: [PATCH 082/171] fix package-lock from merge. --- package-lock.json | 182 ++++++++++++++++++++++++---------------------- 1 file changed, 96 insertions(+), 86 deletions(-) diff --git a/package-lock.json b/package-lock.json index a943bf68c..4a0c2f384 100644 --- a/package-lock.json +++ b/package-lock.json @@ -473,13 +473,13 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -500,9 +500,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -554,9 +554,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -703,9 +703,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240108", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240108.tgz", - "integrity": "sha512-6WG11kf9lLckNjlkx005ldDOqBhyqjWYNixZdXoUXS/1WT35Omv93YNYy8hV3Xvd4dGnLiL0RmIbbx0LLr3zXg==", + "version": "4.0.0-alpha0-v4nightly.20240112", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240112.tgz", + "integrity": "sha512-XP8vi0zqBlbXQnY5H+7D01+IISBIKnCnNl1ntz0QTltkgcZhFcVGP41DNgykcBJqwHFZs7qMkSH1iNEn2xHXXg==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -833,9 +833,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -946,9 +946,9 @@ "dev": true }, "node_modules/@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -961,9 +961,9 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", "dev": true }, "node_modules/@types/range-parser": { @@ -1492,9 +1492,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1687,9 +1687,9 @@ } }, "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "node_modules/array-slice": { @@ -1807,13 +1807,11 @@ "dev": true }, "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -1965,9 +1963,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "dev": true, "funding": [ { @@ -2069,6 +2067,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -2556,12 +2566,6 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -2602,9 +2606,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", + "version": "1.4.629", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.629.tgz", + "integrity": "sha512-5UUkr3k3CZ/k+9Sw7vaaIMyOzMC0XbPyprKI3n0tbKDqkzTDOjK4izm7DxlkueRMim6ZZQ1ja9F7hoFVplHihA==", "dev": true }, "node_modules/emoji-regex": { @@ -2780,18 +2784,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -2961,12 +2953,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -3010,6 +2996,18 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3218,9 +3216,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "dev": true, "funding": [ { @@ -3389,15 +3387,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { @@ -3495,6 +3493,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -6367,16 +6377,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -6401,9 +6411,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -6666,9 +6676,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "dev": true, "engines": { "node": ">= 8" @@ -7082,9 +7092,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", - "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" From 73ada866421299f8949a494e741b0f75660c6e7c Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Fri, 12 Jan 2024 18:07:31 +0000 Subject: [PATCH 083/171] Merge in bcameron1231-v4-Admin --- docs/graph/admin.md | 312 +++++++++++++++++++ docs/graph/analytics.md | 2 +- packages/graph/admin/index.ts | 42 +++ packages/graph/admin/people.ts | 49 +++ packages/graph/admin/serviceAnnouncements.ts | 179 +++++++++++ packages/graph/admin/sharepoint.ts | 24 ++ packages/graph/decorators.ts | 23 ++ packages/queryable/queryable.ts | 1 + test/graph/admin.ts | 181 +++++++++++ test/queryable/invokable.ts | 1 + 10 files changed, 813 insertions(+), 1 deletion(-) create mode 100644 docs/graph/admin.md create mode 100644 packages/graph/admin/index.ts create mode 100644 packages/graph/admin/people.ts create mode 100644 packages/graph/admin/serviceAnnouncements.ts create mode 100644 packages/graph/admin/sharepoint.ts create mode 100644 test/graph/admin.ts diff --git a/docs/graph/admin.md b/docs/graph/admin.md new file mode 100644 index 000000000..ffc6b2fb1 --- /dev/null +++ b/docs/graph/admin.md @@ -0,0 +1,312 @@ +# @pnp/graph/admin + +The ability to work with Microsoft Graph Admin APIs + +## Admin, IAdmin, SharePointSettings, ISharePointSettings, ServiceAnnouncements, IServiceAccouncements, PeopleAdmin, IPeopleAdmin + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + + +## SharePoint Settings +### Get SharePoint Tenant Settings + +Using sharePointSettings() you can retrieve the SharePoint Tenant Settings + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const settings = await graph.admin.sharepoint.settings(); + +``` +### Update SharePoint Tenant Settings + +Update SharePoint Tenant Settings + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const settings = await graph.admin.sharepoint.settings.update({deletedUserPersonalSiteRetentionPeriodInDays: 5, isCommentingOnSitePagesEnabled: true}); + +``` + +## People + +### Get People Settings + +Represents a setting to control people-related admin settings in the tenant. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const peopleSettings = await graph.admin.people(); + +``` +### Get People Pronoun Settings + +Represents the settings that manage the support of pronouns in an organization. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const pronounSettings = await graph.admin.people.pronounSettings(); + +``` +### Update People Pronoun Settings + +Update Pronoun Settings in an organization + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const pronounSettings = await graph.admin.people.pronounSettings.update({ + isEnabledInOrganization:true +}); + +``` +### Profile Card Properties + +Gets a collection profile card properties for an organization + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const profileCardProperties = await graph.admin.people.profileCardProperties(); + +``` +### Add Profile Card Property + +Add a profile card property. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const profileCardProperty = await graph.admin.people.profileCardProperties.add({ + directoryPropertyName: "CustomAttribute1", + annotations: [{ + displayName: "Cost Center", + localizations: [ + { + languageTag: "ru-RU", + displayName: "центр затрат" + } + ] + }] +}); + +``` +### Get Profile Card Property + +Retrieve the properties of a profile card property. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const profileCardProperty = await graph.admin.people.profileCardProperties.getById("CustomAttribute1")(); + +``` +### Update Profile Card Property + +Updates the properties of a profile card property. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const profileCardProperty = await graph.admin.people.profileCardProperties.getById("CustomAttribute1").update({ + directoryPropertyName: "CustomAttribute1", + annotations: [{ + displayName: "Cost Center 2", + localizations: [ + { + languageTag: "ru-RU", + displayName: "центр затрат" + } + ] + }] +}); + +``` +### Delete Profile Card Property + +Delete a property of a profile card + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +await graph.admin.people.profileCardProperties.getById("CustomAttribute1").delete(); + +``` +## Service Announcements + +### Get Health overviews + +Retrieves the service health report for a tenant + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const healthOverviews = await graph.admin.serviceAnnouncements.healthOverviews(); + +``` +### Get Service Health By Name + +Retrieves the service health report for a tenant + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const serviceHealth = await graph.admin.serviceAnnouncements.healthOverviews.getByName("Microsoft 365 suite")(); + +``` +### Get Health Issues + +Retrieves the service health issues for a tenant + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const issues = await graph.admin.serviceAnnouncements.issues(); + +``` +### Get Health Messages + +Retrieves the service health messages for a tenant + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const messages = await graph.admin.serviceAnnouncements.messages(); + +``` +### Get Specific Service Health Message + +Retrieves a specific service health message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const message = await graph.admin.serviceAnnouncements.messages.getById("MC172851"); + +``` + +### Archive/unarchive Service Health Messages + +Archive the specified service health messages + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +//archive +await graph.admin.serviceAnnouncements.messages.archive(["MC172851","MC172333"]); + +//unarchive +await graph.admin.serviceAnnouncements.messages.unarchive(["MC172851","MC172333"]); + +``` +### Favorite/unfavorite Service Health Messages + +Favorites the specified service health messages + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +//favorite +await graph.admin.serviceAnnouncements.messages.favorite(["MC172851","MC172333"]); + +//unfavorite +await graph.admin.serviceAnnouncements.messages.unfavorite(["MC172851","MC172333"]); + +``` +### Mark as read / Mark unread Service Health Messages + +Marks the specified service health messages as read or unread + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +//mark as read +await graph.admin.serviceAnnouncements.messages.markRead(["MC172851","MC172333"]); + +//mark as unread +await graph.admin.serviceAnnouncements.messages.markUnread(["MC172851","MC172333"]); + +``` +### Get Attachments of Service Health Message + +Get attachments of Service Health Message + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const attachments = await graph.admin.serviceAnnouncements.messages.getById("MC172851").attachments(); + +``` +### Get Attachment of Service Health Message by id + +Get the specified attachment by id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/admin"; + +const graph = graphfi(...); + +const attachment = await graph.admin.serviceAnnouncements.messages.getById("MC172851").attachments.getById("30356a46-ffad-47e1-acf6-40a99b1538c1") + +``` \ No newline at end of file diff --git a/docs/graph/analytics.md b/docs/graph/analytics.md index d3dc3dd96..21f409591 100644 --- a/docs/graph/analytics.md +++ b/docs/graph/analytics.md @@ -17,7 +17,7 @@ Using analytics() you get the Item Analytics for a Drive Item ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; -import "@pnp/graph/drive"; +import "@pnp/graph/files"; import "@pnp/graph/analytics"; import { IAnalyticsOptions } from "@pnp/graph/analytics"; diff --git a/packages/graph/admin/index.ts b/packages/graph/admin/index.ts new file mode 100644 index 000000000..198d1ae6d --- /dev/null +++ b/packages/graph/admin/index.ts @@ -0,0 +1,42 @@ +import { defaultPath } from "../decorators.js"; +import { GraphFI } from "../fi.js"; +import { _GraphQueryable, graphInvokableFactory } from "../graphqueryable.js"; +import { IPeopleAdmin, PeopleAdmin } from "./people.js"; +import { IServiceAccouncements, ServiceAnnouncements} from "./serviceAnnouncements.js"; +import { SharePointAdmin, ISharePointAdmin } from "./sharepoint.js"; + +declare module "../fi" { + interface GraphFI { + readonly admin: IAdmin; + } +} + +defaultPath("admin"); +class _Admin extends _GraphQueryable { + public get people(){ + return PeopleAdmin(this); + } + public get sharepoint() { + return SharePointAdmin(this); + } + public get serviceAnnouncements() { + return ServiceAnnouncements(this); + } +} + +export interface IAdmin { + readonly people: IPeopleAdmin; + readonly sharepoint: ISharePointAdmin; + readonly serviceAnnouncements: IServiceAccouncements; +} + +export const Admin: IAdmin = graphInvokableFactory(_Admin); + + +Reflect.defineProperty(GraphFI.prototype, "admin", { + configurable: true, + enumerable: true, + get: function (this: GraphFI) { + return this.create(Admin, "admin"); + }, +}); diff --git a/packages/graph/admin/people.ts b/packages/graph/admin/people.ts new file mode 100644 index 000000000..b8151c512 --- /dev/null +++ b/packages/graph/admin/people.ts @@ -0,0 +1,49 @@ +import { graphInvokableFactory, _GraphInstance, _GraphCollection } from "../graphqueryable.js"; +import { defaultPath, updateable, IUpdateable, addable, getById, IAddable, deleteable, IDeleteable, IGetById } from "../decorators.js"; +import { ProfileCardProperty as IProfileCardPropertyType, PeopleAdminSettings as IPeopleAdminSettingsType } from "@microsoft/microsoft-graph-types"; + +@defaultPath("people") +export class _PeopleAdmin extends _GraphInstance { + public get profileCardProperties(): IProfileCardProperties { + return ProfileCardProperties(this); + } + public get pronounSettings(): IPronounSettings { + return PronounSettings(this); + } +} + +export interface IPeopleAdmin extends _PeopleAdmin { } +export const PeopleAdmin = graphInvokableFactory(_PeopleAdmin); + +/** +* People Pronoun Settings +*/ +@defaultPath("pronouns") +@updateable() +export class _PronounSettings extends _GraphInstance { } +export interface IPronounSettings extends _PronounSettings, IUpdateable { } +export const PronounSettings = graphInvokableFactory(_PronounSettings); + +/** +* Profilecard Property +*/ +@defaultPath("profileCardProperty") +@deleteable() +@updateable() +export class _ProfileCardProperty extends _GraphInstance { } +export interface IProfileCardProperty extends _ProfileCardProperty, IDeleteable, IUpdateable { } +export const ProfileCardProperty = graphInvokableFactory(_ProfileCardProperty); + +/** +* Profilecard properties +*/ +@defaultPath("profileCardProperties") +@getById(ProfileCardProperty) +@addable() +export class _ProfileCardProperties extends _GraphCollection { } +export interface IProfileCardProperties extends _ProfileCardProperties, IAddable, IGetById { } +export const ProfileCardProperties = graphInvokableFactory(_ProfileCardProperties); + +export interface IPronounSettingsType{ + isEnabledInOrganization: boolean; +} diff --git a/packages/graph/admin/serviceAnnouncements.ts b/packages/graph/admin/serviceAnnouncements.ts new file mode 100644 index 000000000..1c159ec03 --- /dev/null +++ b/packages/graph/admin/serviceAnnouncements.ts @@ -0,0 +1,179 @@ +import { GraphQueryable, _GraphCollection, _GraphInstance, graphGet, graphInvokableFactory, graphPost } from "../graphqueryable.js"; +import { + ServiceAnnouncement as IServiceAnnouncementType, + ServiceHealth as IServiceHealthType, + ServiceAnnouncementAttachment as IServiceAccountAttachmentType, + ServiceHealthIssue as IServiceHealthIssueType, + ServiceUpdateMessage as IServiceMessageType, +} from "@microsoft/microsoft-graph-types"; +import { IGetById, IGetByName, defaultPath, getById, getByName } from "../decorators.js"; +import { body } from "@pnp/queryable"; + +/** + * Tenant Service Announcements + */ +@defaultPath("serviceAnnouncement") +export class _ServiceAnnouncements extends _GraphInstance { + public get healthOverviews(): IHealthOverviews { + return HealthOverviews(this); + } + public get issues(): IHealthIssues { + return HealthIssues(this); + } + public get messages(): IServiceMessages { + return ServiceMessages(this); + } +} + +export interface IServiceAccouncements extends _ServiceAnnouncements { } +export const ServiceAnnouncements = graphInvokableFactory(_ServiceAnnouncements); + +/** + * Service Health Report + */ +export class _ServiceHealth extends _GraphInstance { } +export interface IServiceHealth extends _ServiceHealth { } +export const ServiceHealth = graphInvokableFactory(_ServiceHealth); + +/** + * Service Health reports + */ +@defaultPath("healthOverviews") +@getByName(ServiceHealth) +export class _HealthOverviews extends _GraphCollection { } +export interface IHealthOverviews extends _HealthOverviews, IGetByName { } +export const HealthOverviews = graphInvokableFactory(_HealthOverviews); + +/** + * Health Issue + */ +export class _HealthIssue extends _GraphInstance { } +export interface IHealthIssue extends _HealthIssue { } +export const HealthIssue = graphInvokableFactory(_HealthIssue); + +/** + * Health issues + */ +@defaultPath("issues") +@getById(HealthIssue) +export class _HealthIssues extends _GraphCollection { + /** + * Get incident report. The operation returns an error if the specified issue doesn't exist for the tenant or if PIR document does not exist for the issue. + */ + public get incidentReport(): any { + return graphGet(GraphQueryable(this, "issueReport")); + } +} +export interface IHealthIssues extends _HealthIssues { } +export const HealthIssues = graphInvokableFactory(_HealthIssues); + + +/** + * Service Announcements Messages + */ +export class _ServiceMessage extends _GraphInstance { + /** + * Get message attachment + */ + public get attachments(): any { + return ServiceMessageAttachments(this); + } +} +export interface IServiceMessage extends _ServiceMessage { } +export const ServiceMessage = graphInvokableFactory(_ServiceMessage); + +/** + * Service Announcements Messages + */ +@defaultPath("messages") +@getById(ServiceMessage) +export class _ServiceMessages extends _GraphCollection { + /** + * Archive a list of service messages as read for signed-in user + * + * @param messageIds List of message IDs to mark as read. + */ + public archive(messageIds: string[]): Promise { + return graphPost(ServiceMessages(this, "archive"), body({ + messageIds: messageIds, + })); + } + + /** + * Unarchive a list of service messages as read for signed-in user + * + * @param messageIds List of message IDs to mark as read. + */ + public unarchive(messageIds: string[]): Promise { + return graphPost(ServiceMessages(this, "unarchive"), body({ + messageIds: messageIds, + })); + } + + /** + * Favorite a list of service messages as read for signed-in user + * + * @param messageIds List of message IDs to mark as read. + */ + public favorite(messageIds: string[]): Promise { + return graphPost(ServiceMessages(this, "favorite"), body({ + messageIds: messageIds, + })); + } + + /** + * Unfavorite a list of service messages as read for signed-in user + * + * @param messageIds List of message IDs to mark as read. + */ + public unfavorite(messageIds: string[]): Promise { + return graphPost(ServiceMessages(this, "unfavorite"), body({ + messageIds: messageIds, + })); + } + + /** + * Mark a list of service messages as read for signed-in user + * + * @param messageIds List of message IDs to mark as read. + */ + public markRead(messageIds: string[]): Promise { + return graphPost(ServiceMessages(this, "markRead"), body({ + messageIds: messageIds, + })); + } + + /** + * Mark a list of service messages as unread for signed-in user + * + * @param messageIds List of message IDs to mark as read. + */ + public markUnread(messageIds: string[]): Promise { + return graphPost(ServiceMessages(this, "markUnread"), body({ + messageIds: messageIds, + })); + } +} +export interface IServiceMessages extends _ServiceMessages, IGetById { } +export const ServiceMessages = graphInvokableFactory(_ServiceMessages); + +/** + * Service Announcements Message + */ +export class _ServiceMessageAttachment extends _GraphInstance { } +export interface IServiceMessageAttachment extends _ServiceMessageAttachment { } +export const ServiceMessageAttachment = graphInvokableFactory(_ServiceMessageAttachment); + +/** + * Service Announcements Message + */ +@defaultPath("attachments") +@getById(ServiceMessageAttachment) +export class _ServiceMessageAttachments extends _GraphCollection { } +export interface IServiceMessageAttachments extends _ServiceMessageAttachments { } +export const ServiceMessageAttachments = graphInvokableFactory(_ServiceMessageAttachments); + + +export interface IServiceMessageUpdate { + value: boolean; +} diff --git a/packages/graph/admin/sharepoint.ts b/packages/graph/admin/sharepoint.ts new file mode 100644 index 000000000..bcd1a8216 --- /dev/null +++ b/packages/graph/admin/sharepoint.ts @@ -0,0 +1,24 @@ +import { graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; +import { defaultPath, updateable, IUpdateable } from "../decorators.js"; +import { SharepointSettings as ISharePointSettingsType } from "@microsoft/microsoft-graph-types"; + +@defaultPath("sharepoint") +export class _SharePointAdmin extends _GraphInstance { + public get settings(): ISharePointSettings { + return SharePointSettings(this); + } +} + +export interface ISharePointAdmin extends _SharePointAdmin { + readonly settings: ISharePointSettings; +} +export const SharePointAdmin = graphInvokableFactory(_SharePointAdmin); + +/** + * SharePoint Tenant Settings + */ +@defaultPath("settings") +@updateable() +export class _SharePointSettings extends _GraphInstance { } +export interface ISharePointSettings extends _SharePointSettings, IUpdateable { } +export const SharePointSettings = graphInvokableFactory(_SharePointSettings); diff --git a/packages/graph/decorators.ts b/packages/graph/decorators.ts index f1b42a861..e83f9de78 100644 --- a/packages/graph/decorators.ts +++ b/packages/graph/decorators.ts @@ -161,3 +161,26 @@ export interface IGetById { */ getById(id: T): R; } + +/** + * Adds the getByName method to a collection + */ +export function getByName(factory: (...args: any[]) => R) { + // eslint-disable-next-line @typescript-eslint/ban-types + return function (target: T) { + + return class extends target { + public getByName(this: IGraphQueryable, name: string): R { + return factory(this, name); + } + }; + }; +} +export interface IGetByName { + /** + * Adds a new item to this collection + * + * @param props properties used to create the new thread + */ + getByName(name: T): R; +} diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index 20a6028a2..0a372afb7 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import { combine, getGUID, Timeline, asyncReduce, reduce, broadcast, request, isArray, TimelinePipe, lifecycle, stringIsNullOrEmpty } from "@pnp/core"; import { IInvokable, invokable } from "./invokable.js"; diff --git a/test/graph/admin.ts b/test/graph/admin.ts new file mode 100644 index 000000000..6dd5bc495 --- /dev/null +++ b/test/graph/admin.ts @@ -0,0 +1,181 @@ +import { expect } from "chai"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import { pnpTest } from "../pnp-test.js"; +import "@pnp/graph/admin"; + +describe("Admin", function () { + const customUserProperty = "CustomAttribute1"; + let propertyId = ""; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + // Get a sample property + try { + const property = await this.pnp.graph.admin.people.profileCardProperties.add({ + directoryPropertyName: customUserProperty, + annotations: [{ + displayName: "Cost Center", + localizations: [ + { + languageTag: "ru-RU", + displayName: "центр затрат", + }, + ], + }], + }); + propertyId = property.id; + } catch (err) { + console.log("Could not set test values for Admin"); + } + }); + + describe("SharePoint", function () { + it("Get SharePoint Settings", pnpTest("923c1bd6-8621-41d2-9ea9-004a4a735c9f", async function () { + const sharePointSettings = await this.pnp.graph.admin.sharepoint.settings(); + return expect(sharePointSettings.availableManagedPathsForSiteCreation.length > 0).is.true; + })); + + it("Update SharePoint Settings", pnpTest("bbf52535-3a7e-452b-b0eb-9940832163aa", async function () { + const sharePointSettings = await this.pnp.graph.admin.sharepoint.settings.update({ deletedUserPersonalSiteRetentionPeriodInDays: 30 }); + return expect(sharePointSettings.deletedUserPersonalSiteRetentionPeriodInDays === 30).is.true; + })); + }); + + describe("People", function () { + it("Get People Settings", pnpTest("9bd5a022-65d3-4a34-b8c4-c74381b98551", async function () { + const settings = await this.pnp.graph.admin.people(); + return expect(settings.profileCardProperties).is.not.null; + })); + + it("Get Pronoun Settings", pnpTest("bbc0e5af-3620-4164-9120-556ac534db39", async function () { + const settings = await this.pnp.graph.admin.people.pronounSettings(); + return expect(settings.isEnabledInOrganization).to.be.an("boolean"); + })); + + it.skip("Update Pronoun Settings", pnpTest("830c2b41-5642-40d6-8585-3e26207e3f13", async function () { + const settings = await this.pnp.graph.admin.people.pronounSettings.update({ + isEnabledInOrganization: true, + }); + return expect(settings.isEnabledInOrganization).is.true; + })); + + it.skip("Add Profile Card Property", pnpTest("49b98899-0af3-4b8b-8f66-3748410420b7", async function () { + const property = await this.pnp.graph.admin.people.profileCardProperties.add({ + directoryPropertyName: "CustomAttribute2", + annotations: [{ + displayName: "Cost Center", + localizations: [ + { + languageTag: "ru-RU", + displayName: "центр затрат", + }, + ], + }], + }); + return expect(property.id).is.not.null; + })); + + it.skip("Get Profile Card Property", pnpTest("05d8f50a-1b47-4631-9576-2aa3c5efcf75", async function () { + const property = await this.pnp.graph.admin.people.profileCardProperties.getById(customUserProperty)(); + return expect(property.id).is.not.null; + })); + + it.skip("Update Profile Card Property", pnpTest("04fb914e-41c6-4b8e-a326-63c41e6672a4", async function () { + const displayName = getRandomString(5) + "Cost Center"; + const property = await this.pnp.graph.admin.people.profileCardProperties.getById(customUserProperty).update({ + directoryPropertyName: this.customUserProperty, + annotations: [{ + displayName: getRandomString(5) + "Cost Center", + localizations: [ + { + languageTag: "ru-RU", + displayName: "центр затрат", + }, + ], + }], + }); + return expect(property.annotations[0]?.displayName).equals(displayName); + })); + + it.skip("Delete Profile Card Property", pnpTest("fbfae956-d776-4bd7-8ad2-3db384ec02c3", async function () { + const property = await this.pnp.graph.admin.people.profileCardProperties.add({ + directoryPropertyName: getRandomString(5) + "CustomAttribute2", + annotations: [{ + displayName: "Cost Center", + localizations: [ + { + languageTag: "ru-RU", + displayName: "центр затрат", + }, + ], + }], + }); + const response = await this.pnp.graph.admin.people.profileCardProperties.getById(property.id).delete(); + return expect(response).is.ok; + })); + }); + + describe("Service Health", function () { + it("Get Health Overviews", pnpTest("79f7392b-053d-44a0-87f6-a1c2332d6841", async function () { + const healthOverviews = await this.pnp.graph.admin.serviceAnnouncements.healthOverviews(); + return expect(healthOverviews).to.be.an("array"); + })); + + it("Get Health By Service Name", pnpTest("f06cd76b-3a61-4728-ba5e-f97bb6e718a8", async function () { + const serviceHealth = await this.pnp.graph.admin.serviceAnnouncements.healthOverviews.getByName("Microsoft 365 suite")(); + return expect(serviceHealth).has.property("id"); + })); + + it("Get Health Issues", pnpTest("6b04e99e-dcbb-48ee-87c2-4d17b1fad12d", async function () { + const issues = await this.pnp.graph.admin.serviceAnnouncements.issues(); + return expect(issues).to.be.an("array"); + })); + + it("Get Health Messages", pnpTest("d06cd76b-3a61-4728-ba5e-f97bb6e718a8", async function () { + const messages = await this.pnp.graph.admin.serviceAnnouncements.messages(); + return expect(messages).to.be.an("array"); + })); + + it("Get Health Message by ID", pnpTest("2cc3edd5-b7af-4967-b8b4-840d161f1b61", async function () { + const messages = await this.pnp.graph.admin.serviceAnnouncements.messages(); + + const messageById = await this.pnp.graph.admin.serviceAnnouncements.messages.getById(messages[0]?.id)(); + return expect(messageById).is.not.null; + })); + + it("Get Health Message Attachments", pnpTest("2e26b2a1-5ce8-4cf9-a0dc-4decddba5641", async function () { + const messages = await this.pnp.graph.admin.serviceAnnouncements.messages(); + + const attachments = await this.pnp.graph.admin.serviceAnnouncements.messages.getById(messages[0]?.id).attachments(); + return expect(attachments).to.be.an("array"); + })); + + it("Get Health Message Attachments by Id", pnpTest("2cef2a70-31c9-4180-91bf-f0bab86e3501", async function () { + const messages = await this.pnp.graph.admin.serviceAnnouncements.messages(); + const attachments = await this.pnp.graph.admin.serviceAnnouncements.messages.getById(messages[0]?.id).attachments(); + const attachmentById = await this.pnp.graph.admin.serviceAnnouncements.messages.getById(attachments[0]?.id)(); + + return expect(attachmentById).is.ok; + })); + }); + + + after(async function () { + + if (!stringIsNullOrEmpty(propertyId)) { + try { + + await this.pnp.graph.admin.people.profileCardProperties.getById(propertyId).delete(); + + } catch (err) { + console.error(`Cannot clean up test property: ${propertyId}`); + } + } + return; + }); +}); diff --git a/test/queryable/invokable.ts b/test/queryable/invokable.ts index 22b801982..92c1a34f7 100644 --- a/test/queryable/invokable.ts +++ b/test/queryable/invokable.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import { expect } from "chai"; import { invokable, From 3b879fcb3cf9b02f56af74eb68967cde2915bcee Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Fri, 12 Jan 2024 18:20:30 +0000 Subject: [PATCH 084/171] Merge datyin-version-4 branch fixing merge conflicts --- debug/serve/main.ts | 6 +- docs/concepts/auth-browser.md | 40 +--------- docs/concepts/auth-spfx.md | 25 ++++--- docs/msaljsclient/index.md | 43 +++++++---- package-lock.json | 52 ++++++------- package.json | 2 +- packages/msaljsclient/index.ts | 114 +++++++++++++++++++++++++---- packages/msaljsclient/package.json | 4 +- 8 files changed, 175 insertions(+), 111 deletions(-) diff --git a/debug/serve/main.ts b/debug/serve/main.ts index 492e9d21a..f9ad2ef42 100644 --- a/debug/serve/main.ts +++ b/debug/serve/main.ts @@ -1,4 +1,4 @@ -import { MSAL } from "@pnp/msaljsclient/index.js"; +import { MSAL, MSALOptions } from "@pnp/msaljsclient/index.js"; import { spfi, SPBrowser } from "@pnp/sp"; import "@pnp/sp/webs"; import { settings } from "../../settings.js"; @@ -31,8 +31,8 @@ document.onreadystatechange = async () => { // Make sure to add `https://localhost:8080/spa.html` as a Redirect URI in your testing's AAD App Registration const sp = spfi().using( SPBrowser({ baseUrl: settings.testing.sp.url}), - MSAL(settings.testing.sp.msal.init, {scopes: settings.testing.sp.msal.scopes}) - ); + MSAL({configuration:settings.testing.sp.msal.init, authParams: {scopes: settings.testing.sp.msal.scopes}}) + ); const r = await sp.web(); diff --git a/docs/concepts/auth-browser.md b/docs/concepts/auth-browser.md index 88420ec1a..383fd5804 100644 --- a/docs/concepts/auth-browser.md +++ b/docs/concepts/auth-browser.md @@ -1,42 +1,6 @@ # Authentication in a custom browser based application We support MSAL for both browser and nodejs by providing a thin wrapper around the official libraries. We won't document the fully possible MSAL configuration, but any parameters supplied are passed through to the underlying implementation. To use the browser MSAL package you'll need to install the @pnp/msaljsclient package which is deployed as a standalone due to the large MSAL dependency. +This library provides a thin wrapper around the [@azure/msal-browser](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser/docs) library to make it easy to integrate MSAL authentication in the browser. -`npm install @pnp/msaljsclient --save` - -At this time we're using version 1.x of the `msal` library which uses Implicit Flow. For more informaiton on the msal library please see the [AzureAD/microsoft-authentication-library-for-js](https://github.com/AzureAD/microsoft-authentication-library-for-js#readme). - -Each of the following samples reference a MSAL configuration that utilizes an Azure AD App Registration, these are samples that show the typings for those objects: - -```TypeScript -import { Configuration, AuthenticationParameters } from "msal"; - -const configuration: Configuration = { - auth: { - authority: "https://login.microsoftonline.com/{tenant Id}/", - clientId: "{AAD Application Id/Client Id}" - } -}; - -const authParams: AuthenticationParameters = { - scopes: ["https://graph.microsoft.com/.default"] -}; -``` - -## MSAL + Browser - -```TypeScript -import { spfi, SPBrowser } from "@pnp/sp"; -import { graphfi, GraphBrowser } from "@pnp/graph"; -import { MSAL } from "@pnp/msaljsclient"; -import "@pnp/sp/webs"; -import "@pnp/graph/users"; - -const sp = spfi("https://tenant.sharepoint.com/sites/dev").using(SPBrowser(), MSAL(configuration, authParams)); - -// within a webpart, application customizer, or adaptive card extension where the context object is available -const graph = graphfi().using(GraphBrowser(), MSAL(configuration, authParams)); - -const webData = await sp.web(); -const meData = await graph.me(); -``` +Please see more scenarios in the [authentication article](../msaljsclient/index.md). diff --git a/docs/concepts/auth-spfx.md b/docs/concepts/auth-spfx.md index 3163b2146..38904a1ce 100644 --- a/docs/concepts/auth-spfx.md +++ b/docs/concepts/auth-spfx.md @@ -51,25 +51,26 @@ Each of the following samples reference a MSAL configuration that utilizes an Az ```TypeScript import { SPFx as graphSPFx, graphfi } from "@pnp/graph"; import { SPFx as spSPFx, spfi } from "@pnp/sp"; -import { MSAL } from "@pnp/msaljsclient"; -import { Configuration, AuthenticationParameters } from "msal"; +import { MSAL, MSALOptions } from "@pnp/msaljsclient"; + import "@pnp/graph/users"; import "@pnp/sp/webs"; -const configuration: Configuration = { - auth: { - authority: "https://login.microsoftonline.com/{tenant Id}/", - clientId: "{AAD Application Id/Client Id}" + const configuration: MSALOptions = { + configuration:{ + auth: { + authority: "https://login.microsoftonline.com/{tenant Id}/", + clientId: "{AAD Application Id/Client Id}" + }, + }, + authParams: { + scopes: ["https://graph.microsoft.com/.default"] } }; -const authParams: AuthenticationParameters = { - scopes: ["https://graph.microsoft.com/.default"] -}; - // within a webpart, application customizer, or adaptive card extension where the context object is available -const graph = graphfi().using(graphSPFx(this.context), MSAL(configuration, authParams)); -const sp = spfi().using(spSPFx(this.context), MSAL(configuration, authParams)); +const graph = graphfi().using(graphSPFx(this.context), MSAL(configuration)); +const sp = spfi().using(spSPFx(this.context), MSAL(configuration)); const meData = await graph.me(); const webData = await sp.web(); diff --git a/docs/msaljsclient/index.md b/docs/msaljsclient/index.md index 9df5e8465..1ca13eb9f 100644 --- a/docs/msaljsclient/index.md +++ b/docs/msaljsclient/index.md @@ -1,33 +1,48 @@ # @pnp/msaljsclient -This library provides a thin wrapper around the [msal](https://github.com/AzureAD/microsoft-authentication-library-for-js) library to make it easy to integrate MSAL authentication in the browser. +This library provides a thin wrapper around the [@azure/msal-browser](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser/docs) library to make it easy to integrate MSAL authentication in the browser. You will first need to install the package: `npm install @pnp/msaljsclient --save` -The configuration and authParams +You may also need to install the MSAL library in typescript for future development with full type support: + +`npm install @azure/msal-browser --save-dev` + +The configuration ```TypeScript +import type { MSALOptions } from "@pnp/msaljsclient"; import { spfi, SPBrowser } from "@pnp/sp"; -import { MSAL } from "@pnp/msaljsclient"; +import { MSAL, getMSAL } from "@pnp/msaljsclient"; import "@pnp/sp/webs"; - -const configuation = { - auth: { - authority: "https://login.microsoftonline.com/common", - clientId: "{client id}", +import "@pnp/sp/site-users/web"; + +const options: MSALOptions = { + configuration: { + auth: { + authority: "https://login.microsoftonline.com/{tanent_id}/", + clientId: "{client id}", + }, + cache: { + cacheLocation: "localStorage" // in order to avoid re-login after page refresh + } + }, + authParams: { + forceRefresh: false, + scopes: ["https://{tenant}.sharepoint.com/.default"], } }; -const authParams = { - scopes: ["https://{tenant}.sharepoint.com/.default"], -}; +const sp = spfi("https://tenant.sharepoint.com/sites/dev").using(SPBrowser(), MSAL(options)); -const sp = spfi("https://tenant.sharepoint.com/sites/dev").using(SPBrowser(), MSAL(configuration, authParams)); +const user = await sp.web.currentUser(); -const webData = await sp.web(); +// For logout later on +const msalInstance = getMSAL(); +const currentAccount = msalInstance.getActiveAccount(); +msalInstance.logoutPopup({ account: currentAccount }); ``` Please see more scenarios in the [authentication article](../concepts/authentication.md). - diff --git a/package-lock.json b/package-lock.json index 4a0c2f384..dc81dd906 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "devDependencies": { "@azure/identity": "3.3.0", + "@azure/msal-browser": "3.5.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.0-beta10", @@ -31,7 +32,6 @@ "findup-sync": "5.0.0", "globby": "^14.0.0", "mocha": "10.2.0", - "msal": "1.4.18", "node-fetch": "3.3.2", "prettyjson": "1.2.5", "string-replace-loader": "3.1.0", @@ -171,6 +171,19 @@ "node": ">=14.0.0" } }, + "node_modules/@azure/identity/node_modules/@azure/msal-browser": { + "version": "2.38.3", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.3.tgz", + "integrity": "sha512-2WuLFnWWPR1IdvhhysT18cBbkXx1z0YIchVss5AwVA95g7CU5CpT3d+5BcgVGNXDXbUU7/5p0xYHV99V5z8C/A==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", + "dev": true, + "dependencies": { + "@azure/msal-common": "13.3.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@azure/logger": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", @@ -184,18 +197,26 @@ } }, "node_modules/@azure/msal-browser": { - "version": "2.38.3", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.3.tgz", - "integrity": "sha512-2WuLFnWWPR1IdvhhysT18cBbkXx1z0YIchVss5AwVA95g7CU5CpT3d+5BcgVGNXDXbUU7/5p0xYHV99V5z8C/A==", - "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.5.0.tgz", + "integrity": "sha512-2NtMuel4CI3UEelCPKkNRXgKzpWEX48fvxIvPz7s0/sTcCaI08r05IOkH2GkXW+czUOtuY6+oGafJCpumnjRLg==", "dev": true, "dependencies": { - "@azure/msal-common": "13.3.1" + "@azure/msal-common": "14.4.0" }, "engines": { "node": ">=0.8.0" } }, + "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.4.0.tgz", + "integrity": "sha512-ffCymScQuMKVj+YVfwNI52A5Tu+uiZO2eTf+c+3TXxdAssks4nokJhtr+uOOMxH0zDi6d1OjFKFKeXODK0YLSg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@azure/msal-common": { "version": "13.3.1", "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", @@ -4829,25 +4850,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/msal": { - "version": "1.4.18", - "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.18.tgz", - "integrity": "sha512-QyWMWrZqpwtK6LEqhwtbikxIWqA1EOcdMvDeIDjIXdGU29wM4orwq538sPe1+JfKDIgPmJj1Fgi5B7luaw/IyA==", - "deprecated": "This package is no longer supported. Please use @azure/msal-browser instead.", - "dev": true, - "dependencies": { - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", diff --git a/package.json b/package.json index 885708b3a..3ba1fc596 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "description": "A JavaScript library for SharePoint & Graph development.", "devDependencies": { "@azure/identity": "3.3.0", + "@azure/msal-browser": "3.5.0", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.0-beta10", @@ -27,7 +28,6 @@ "findup-sync": "5.0.0", "globby": "^14.0.0", "mocha": "10.2.0", - "msal": "1.4.18", "node-fetch": "3.3.2", "prettyjson": "1.2.5", "string-replace-loader": "3.1.0", diff --git a/packages/msaljsclient/index.ts b/packages/msaljsclient/index.ts index 0bb9a2a47..5ecefba52 100644 --- a/packages/msaljsclient/index.ts +++ b/packages/msaljsclient/index.ts @@ -1,32 +1,89 @@ -import { AuthenticationParameters, Configuration, UserAgentApplication } from "msal"; +import type { Configuration, SilentRequest, PopupRequest } from "@azure/msal-browser"; +import { PublicClientApplication } from "@azure/msal-browser"; import { Queryable } from "@pnp/queryable"; -export function MSAL(config: Configuration, authParams: AuthenticationParameters = { scopes: ["https://graph.microsoft.com/.default"] }): (instance: Queryable) => Queryable { +export interface MSALOptions { + /** + * The name of the MSAL instance to use + * @default "main" + */ + name?: string; - const app = new UserAgentApplication(config); + /** + * The configuration for the PCA + */ + configuration: Configuration; + + /** + * The authentication parameters to use + */ + authParams: SilentRequest & PopupRequest; + + /** + * Whether or not to log errors to the console + * @default false + */ + logErrors?: boolean; +} + +/** + * Store for MSAL instances in order to have full power over the PCA + * @internal + */ +const instances = new Map(); + +/** + * MSAL behavior for PnPjs + * @param options The options to use when configuring MSAL + * @returns Instance of the behavior + * + * @see https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/README.md#advanced-topics + */ +export function MSAL(options: MSALOptions): (instance: Queryable) => Queryable { + + const name = options.name || "main"; return (instance: Queryable) => { instance.on.auth.replace(async (url: URL, init: RequestInit) => { + let app = instances.get(name) as PublicClientApplication; + + if (!app) { + instances.set(name, new PublicClientApplication(options.configuration)); + app = instances.get(name)!; + await app.initialize(); + } - let accessToken: string; + let accessToken = ""; try { + // Attempt to get the token silently + const tokenResponse = await app.acquireTokenSilent(options.authParams); + accessToken = tokenResponse.accessToken; + }catch (authError) { + // If silent token acquisition fails with InteractionRequiredAuthError, + // attempt to get the token interactively + const loginResponse = await app.loginPopup(options.authParams).catch((loginError) => { - // see if we have already the idtoken saved - const resp = await app.acquireTokenSilent(authParams); - accessToken = resp.accessToken; + if (options.logErrors) { + console.error(loginError); + } - } catch (e) { + throw loginError; + }); - // per examples we fall back to popup - const resp = await app.loginPopup(authParams); - if (resp.idToken) { - const resp2 = await app.acquireTokenSilent(authParams); - accessToken = resp2.accessToken; - } else { - // throw the error that brought us here - throw e; + if (loginResponse.accessToken) { + accessToken = loginResponse.accessToken; + app.setActiveAccount(loginResponse.account); + } + + if (!accessToken) { + + if (options.logErrors) { + console.error(authError); + } + + throw authError; } } @@ -38,3 +95,28 @@ export function MSAL(config: Configuration, authParams: AuthenticationParameters return instance; }; } + +/** + * Get an MSAL instance by name + * @param name The name of the instance to get (@default "main") + * @returns The MSAL instance if found, otherwise throws an error + * + * @see https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/README.md#advanced-topics + * + * @example Log out of an MSAL instance + * ```ts + * const msalInstance = getMSAL(); + * const currentAccount = msalInstance.getActiveAccount(); + * msalInstance.logoutRedirect({ account: currentAccount }); + * ``` + */ +export function getMSAL(name = "main"): PublicClientApplication { + + const pca = instances.get(name); + + if (!pca) { + throw Error(`No MSAL instance found with name '${name}'`); + } + + return pca; +} diff --git a/packages/msaljsclient/package.json b/packages/msaljsclient/package.json index 993e5d6f2..56068e95b 100644 --- a/packages/msaljsclient/package.json +++ b/packages/msaljsclient/package.json @@ -5,8 +5,8 @@ "main": "./index.js", "typings": "./index", "dependencies": { + "@azure/msal-browser": "3.5.0", "@pnp/queryable": "0.0.0-PLACEHOLDER", - "msal": "1.4.17", "tslib": "2.4.1" } -} \ No newline at end of file +} From 3e5626873783dc85fee648ec0a6301970c6d4844 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 12 Jan 2024 13:05:03 -0700 Subject: [PATCH 085/171] Adding logging --- package-lock.json | 40 ++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 41 insertions(+) diff --git a/package-lock.json b/package-lock.json index 2fb455b73..2484a78a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@azure/msal-node": "1.18.4", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.0-beta10", + "@pnp/logging": "^3.21.0", "@types/chai": "4.3.11", "@types/chai-as-promised": "7.1.8", "@types/core-js": "2.5.8", @@ -612,6 +613,28 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, + "node_modules/@pnp/logging": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", + "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", + "dev": true, + "dependencies": { + "tslib": "2.4.1" + }, + "engines": { + "node": ">=14.15.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" + } + }, + "node_modules/@pnp/logging/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, "node_modules/@sindresorhus/merge-streams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", @@ -6933,6 +6956,23 @@ } } }, + "@pnp/logging": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.21.0.tgz", + "integrity": "sha512-ELisAFH1CRBwFrxpJFNUvO8BbDktvFVG4TMyZWcAvv4qlTQo+B35UXW2Iw2zyNErWUSXV71ZGw71NXzSQ9D4qA==", + "dev": true, + "requires": { + "tslib": "2.4.1" + }, + "dependencies": { + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + } + } + }, "@sindresorhus/merge-streams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", diff --git a/package.json b/package.json index 6402e5465..4c9d958d5 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@azure/msal-node": "1.18.4", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.0-beta10", + "@pnp/logging":"^3.21.0", "@types/chai": "4.3.11", "@types/chai-as-promised": "7.1.8", "@types/core-js": "2.5.8", From 66ac59eded5438de50d6ae7675cd8febaaf71521 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 12 Jan 2024 13:10:05 -0700 Subject: [PATCH 086/171] Eslint fix --- packages/graph/directory-objects/types.ts | 2 +- packages/graph/files/types.ts | 2 +- packages/msaljsclient/index.ts | 2 +- test/graph/analytics.ts | 2 -- test/graph/paging.ts | 2 +- 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/graph/directory-objects/types.ts b/packages/graph/directory-objects/types.ts index 88a306ab5..bd8270102 100644 --- a/packages/graph/directory-objects/types.ts +++ b/packages/graph/directory-objects/types.ts @@ -90,4 +90,4 @@ export enum DirectoryObjectTypes { * Device */ device, -} \ No newline at end of file +} diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index 7808a00eb..a6571281a 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -472,4 +472,4 @@ export interface IDeltaItems { next: IGraphCollection; delta: IGraphCollection; values: any[]; -} \ No newline at end of file +} diff --git a/packages/msaljsclient/index.ts b/packages/msaljsclient/index.ts index 5ecefba52..1af8ac515 100644 --- a/packages/msaljsclient/index.ts +++ b/packages/msaljsclient/index.ts @@ -50,7 +50,7 @@ export function MSAL(options: MSALOptions): (instance: Queryable) => Queryable { if (!app) { instances.set(name, new PublicClientApplication(options.configuration)); - app = instances.get(name)!; + app = instances.get(name); await app.initialize(); } diff --git a/test/graph/analytics.ts b/test/graph/analytics.ts index 855c11fac..74b8f1757 100644 --- a/test/graph/analytics.ts +++ b/test/graph/analytics.ts @@ -9,7 +9,6 @@ import { List } from "@microsoft/microsoft-graph-types"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { IAnalyticsOptions } from "@pnp/graph/analytics"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; -import { ListItem } from "@pnp/graph/list-item"; describe("Analytics", function () { let testUserName = ""; @@ -109,7 +108,6 @@ describe("Analytics", function () { this.skip(); } const options: IAnalyticsOptions = { timeRange: "allTime" }; - const item: ListItem = await site.lists.getById(listResultId).items.getById(listItemId)(); const analytics = await site.lists.getById(listResultId).items.getById(listItemId).analytics(options); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); }); diff --git a/test/graph/paging.ts b/test/graph/paging.ts index 50d9aa3ad..49b3b601b 100644 --- a/test/graph/paging.ts +++ b/test/graph/paging.ts @@ -88,4 +88,4 @@ describe("Groups", function () { // items doesn't support count, should be zero expect(count).to.eq(-1); }); -}); \ No newline at end of file +}); From f889a11c82f8c6643ab0b07cc3afc21b7408aa8d Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 12 Jan 2024 13:11:53 -0700 Subject: [PATCH 087/171] Test Fix --- test/graph/places.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/graph/places.ts b/test/graph/places.ts index 2812c3f0e..aba1f0c1f 100644 --- a/test/graph/places.ts +++ b/test/graph/places.ts @@ -22,7 +22,7 @@ describe("Places", function () { return expect(roomLists).to.be.an("array"); })); - it("get room in roomlist", pnpTest("25f24e27-420f-4641-b69d-962597528fdd", async function () { + it("get room in roomlist", pnpTest("476b8d49-69b5-42e0-857d-f75eb03191ca", async function () { const roomLists = await this.pnp.graph.places.roomLists(); if(roomLists.length > 0){ const rooms = await this.pnp.graph.places.roomLists.getById(roomLists[0].id).rooms(); From ff96e0ec8012110a5208e2f645b39439119616be Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 12 Jan 2024 13:15:35 -0700 Subject: [PATCH 088/171] FIx tex guids --- test/sp/fields.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/sp/fields.ts b/test/sp/fields.ts index 817e5a8f7..facfebcbb 100644 --- a/test/sp/fields.ts +++ b/test/sp/fields.ts @@ -74,13 +74,13 @@ describe("Fields", function () { return expect(field.data.Title).to.be.equal(testFieldNameRand); })); - it("addImageField", pnpTest("5f3f2ba5-d467-4ebb-8161-3589c35f62c4", async function () { + it("addImageField", pnpTest("76b940f7-2113-4adb-adad-230e119b5450", async function () { const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; const field = await this.pnp.sp.web.fields.addImageField(testFieldNameRand, { Group: testFieldGroup}); return expect(field.data.Title).to.be.equal(testFieldNameRand); })); - it("addNumber", pnpTest("1ebfde07-317d-4107-bd42-addd4846cc0a", async function () { + it("addNumber", pnpTest("5f3f2ba5-d467-4ebb-8161-3589c35f62c4", async function () { const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; const field = await this.pnp.sp.web.fields.addNumber(testFieldNameRand, { Group: testFieldGroup }); return expect(field.data.Title).to.be.equal(testFieldNameRand); From 419e85d9d4314201f9af73556e41426bab55a77f Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 15 Jan 2024 13:07:32 -0700 Subject: [PATCH 089/171] WIP --- packages/graph/decorators.ts | 50 +++++++- packages/graph/todo/index.ts | 2 +- packages/graph/todo/types.ts | 165 +++++++++++++------------- test/graph/todo.ts | 216 +++++++++++++++++++++++++++++------ 4 files changed, 304 insertions(+), 129 deletions(-) diff --git a/packages/graph/decorators.ts b/packages/graph/decorators.ts index f1b42a861..1f207759f 100644 --- a/packages/graph/decorators.ts +++ b/packages/graph/decorators.ts @@ -1,5 +1,5 @@ -import { IGraphQueryable, graphDelete, graphPatch, graphPost } from "./graphqueryable.js"; -import { body, headers } from "@pnp/queryable"; +import { GraphCollection, IGraphCollection, IGraphQueryable, graphDelete, graphPatch, graphPost } from "./graphqueryable.js"; +import { body, errorCheck, headers } from "@pnp/queryable"; /** * Decorator used to specify the default path for Queryable objects @@ -161,3 +161,49 @@ export interface IGetById { */ getById(id: T): R; } + +export function deltaEnabled() { + // eslint-disable-next-line @typescript-eslint/ban-types + return function (target: T) { + + return class extends target { + public delta(this: IGraphQueryable, token?: string): Promise> { + const path = `delta${(token) ? `(token=${token})` : ""}`; + + const query: IGraphCollection = GraphCollection(this, path); + query.on.parse.replace(errorCheck); + query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { + + const json = await response.json(); + const nextLink = json["@odata.nextLink"]; + const deltaLink = json["@odata.deltaLink"]; + + result = { + // TODO:: update docs to show how to load next with async iterator + next: () => (nextLink ? GraphCollection([this, nextLink]) : null), + delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), + values: json.value, + }; + + return [url, response, result]; + }); + + return query(); + } + }; + }; +} + +export interface IDeltaEnabled { + /** + * Gets the delta of the queryable + * + */ + delta(): Promise; +} + +export interface IDeltaItems { + next: IGraphCollection; + delta: IGraphCollection; + values: any[]; +} diff --git a/packages/graph/todo/index.ts b/packages/graph/todo/index.ts index 323a16642..b7182b626 100644 --- a/packages/graph/todo/index.ts +++ b/packages/graph/todo/index.ts @@ -15,5 +15,5 @@ export { ChecklistItems, Tasks, TaskList, - TaskLists, + TaskLists, } from "./types.js"; diff --git a/packages/graph/todo/types.ts b/packages/graph/todo/types.ts index a03a6ddcb..1973d4f8f 100644 --- a/packages/graph/todo/types.ts +++ b/packages/graph/todo/types.ts @@ -1,7 +1,16 @@ -import { Todo as ITodoType, TodoTaskList as ITodoTaskListType, TodoTask as ITodoTaskType, AttachmentBase as ITodoAttachmentType, AttachmentSession as IAttachmentSessionType, AttachmentInfo as IAttachmentInfoType, ChecklistItem as IChecklistItemType, LinkedResource as ILinkedResourceType } from "@microsoft/microsoft-graph-types"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory, IGraphCollection, GraphCollection } from "../graphqueryable.js"; -import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; -import { cancelableScope, errorCheck } from "@pnp/queryable"; +import { + Todo as ITodoType, + TodoTaskList as ITodoTaskListType, + TodoTask as ITodoTaskType, + AttachmentBase as ITodoAttachmentType, + AttachmentInfo as IAttachmentInfo, + AttachmentSession as IAttachmentSession, + ChecklistItem as IChecklistItemType, + LinkedResource as ILinkedResourceType, +} from "@microsoft/microsoft-graph-types"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost, GraphQueryable } from "../graphqueryable.js"; +import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable, deltaEnabled, IDeltaEnabled } from "../decorators.js"; +import { body } from "@pnp/queryable/index.js"; /** * Todo @@ -20,41 +29,13 @@ export const Todo = graphInvokableFactory(_Todo); */ @deleteable() @updateable() -export class _TaskList extends _GraphInstance { +export class _TaskList extends _GraphInstance { public get tasks(): ITasks{ return Tasks(this); } - /** - * Get changes since optional change token - * @param token - string (Optional) - * change token - * @returns IDeltaItems - */ - public delta(token?: string): IGraphCollection { - const path = `delta${(token) ? `(token=${token})` : ""}`; - - const query: IGraphCollection = GraphCollection(this, path); - query.on.parse.replace(errorCheck); - query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { - - const json = await response.json(); - const nextLink = json["@odata.nextLink"]; - const deltaLink = json["@odata.deltaLink"]; - - result = { - // TODO:: update docs to show how to load next with async iterator - next: () => (nextLink ? GraphCollection([this, nextLink]) : null), - delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), - values: json.value, - }; - - return [url, response, result]; - }); - - return query; - } - //TODO Create Open Extension. Wait for it to be built as part of extensions module - //TODO Get Open Extension. Wait for it to be built as part of extensions module + + // TODO Create Open Extension. Wait for it to be built as part of extensions module + // TODO Get Open Extension. Wait for it to be built as part of extensions module } export interface ITaskList extends _TaskList, IUpdateable, IDeleteable { } export const TaskList = graphInvokableFactory(_TaskList); @@ -65,8 +46,9 @@ export const TaskList = graphInvokableFactory(_TaskList); @defaultPath("lists") @getById(TaskList) @addable() +@deltaEnabled() export class _TaskLists extends _GraphCollection { } -export interface ITaskLists extends _TaskLists, IGetById, IAddable{ } +export interface ITaskLists extends _TaskLists, IGetById, IAddable, IDeltaEnabled { } export const TaskLists = graphInvokableFactory(_TaskLists); /** @@ -74,7 +56,7 @@ export const TaskLists = graphInvokableFactory(_TaskLists); */ @deleteable() @updateable() -export class _Task extends _GraphInstance { +export class _Task extends _GraphInstance { public get attachments(): IAttachments{ return Attachments(this); @@ -87,8 +69,8 @@ export class _Task extends _GraphInstance { public get resources(): ILinkedResources{ return LinkedResources(this); } - //TODO Create Open Extension. Wait for it to be built as part of extensions module - //TODO Get Open Extension. Wait for it to be built as part of extensions module + // TODO Create Open Extension. Wait for it to be built as part of extensions module + // TODO Get Open Extension. Wait for it to be built as part of extensions module } export interface ITask extends _Task, IUpdateable, IDeleteable{ } export const Task = graphInvokableFactory(_Task); @@ -99,45 +81,16 @@ export const Task = graphInvokableFactory(_Task); @defaultPath("tasks") @getById(Task) @addable() -export class _Tasks extends _GraphCollection { - /** - * Get changes since optional change token - * @param token - string (Optional) - * change token - * @returns IDeltaItems - */ - public delta(token?: string): IGraphCollection { - const path = `delta${(token) ? `(token=${token})` : ""}`; - - const query: IGraphCollection = GraphCollection(this, path); - query.on.parse.replace(errorCheck); - query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { - - const json = await response.json(); - const nextLink = json["@odata.nextLink"]; - const deltaLink = json["@odata.deltaLink"]; - - result = { - // TODO:: update docs to show how to load next with async iterator - next: () => (nextLink ? GraphCollection([this, nextLink]) : null), - delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), - values: json.value, - }; - - return [url, response, result]; - }); - - return query; - } -} -export interface ITasks extends _Tasks, IGetById, IAddable{ } +@deltaEnabled() +export class _Tasks extends _GraphCollection { } +export interface ITasks extends _Tasks, IGetById, IAddable, IDeltaEnabled { } export const Tasks = graphInvokableFactory(_Tasks); /** * Attachment */ @deleteable() -export class _Attachment extends _GraphInstance { +export class _Attachment extends _GraphInstance { public get attachments(): IAttachments{ return Attachments(this); @@ -151,17 +104,55 @@ export const Attachment = graphInvokableFactory(_Attachment); */ @defaultPath("attachments") @getById(Attachment) -@addable() export class _Attachments extends _GraphCollection { - // maybe we should fix this so they just pass a file, instead of an attachment info object. - @cancelableScope - public async addChunked(attachmentInfo: IAttachmentInfoType): Promise{ - // const response:IAttachmentSessionType = await graphPost(this, body(attachmentInfo)); - return null; + public async addChunked(attachmentInfo: IAttachmentInfo, contentBytes: string): Promise{ + const session = graphPost(GraphQueryable(this, "createUploadSession"), body(attachmentInfo)); + /* + const chunkSize = 4 * 1024 * 1024; + const chunks = []; + for (let i = 0; i < contentBytes.length; i += chunkSize) { + const chunk = contentBytes.slice(i, i + chunkSize); + chunks.push(chunk); + } + let startByte = 0; + for (const chunk of chunks) { + // Calculate endByte for the Content-Range header + const endByte = startByte + chunk.length - 1; + + // Upload the chunk to the upload session + const response = await fetch(session.uploadUrl, { + method: "PUT", + headers: { + "Content-Type": "application/octet-stream", + "Content-Length": chunk.length.toString(), + "Content-Range": `bytes ${startByte}-${endByte}/${binaryFileContent.length}`, + }, + body: chunk, + }); + + if (!response.ok) { + console.error(`Failed to upload chunk for file "${fileName}"`); + return; + } + + // Update startByte for the next chunk + startByte += chunk.length; + } + */ + } - } -export interface IAttachments extends _Attachments, IGetById, IAddable{ } + + public async add(attachmentInfo: IAddAttachmentOptions): Promise{ + + const postBody = { + "@odata.type": "#microsoft.graph.taskFileAttachment", + ...attachmentInfo, + }; + return graphPost(this, body(postBody)); + } +} +export interface IAttachments extends _Attachments, IGetById { } export const Attachments = graphInvokableFactory(_Attachments); /** @@ -180,7 +171,7 @@ export const ChecklistItem = graphInvokableFactory(_ChecklistIte @getById(ChecklistItem) @addable() export class _ChecklistItems extends _GraphCollection { } -export interface IChecklistItems extends _ChecklistItems, IGetById, IAddable{ } +export interface IChecklistItems extends _ChecklistItems, IGetById, IAddable{ } export const ChecklistItems = graphInvokableFactory(_ChecklistItems); /** @@ -199,15 +190,13 @@ export const LinkedResource = graphInvokableFactory(_LinkedReso @getById(LinkedResource) @addable() export class _LinkedResources extends _GraphCollection { } -export interface ILinkedResources extends _LinkedResources, IGetById, IAddable{ } +export interface ILinkedResources extends _LinkedResources, IGetById, IAddable{ } export const LinkedResources = graphInvokableFactory(_LinkedResources); export interface IAddTaskListOptions{ displayName: string; } -export interface IDeltaItems { - next: IGraphCollection; - delta: IGraphCollection; - values: any[]; -} +export interface IAddAttachmentOptions extends ITodoAttachmentType{ + contentBytes: string; +} \ No newline at end of file diff --git a/test/graph/todo.ts b/test/graph/todo.ts index 28855e733..980aa9e68 100644 --- a/test/graph/todo.ts +++ b/test/graph/todo.ts @@ -3,37 +3,34 @@ import "@pnp/graph/users"; import "@pnp/graph/todo"; import { pnpTest } from "../pnp-test.js"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; -import { TodoTask, TodoTaskList } from "@microsoft/microsoft-graph-types"; +import { ChecklistItem } from "@microsoft/microsoft-graph-types"; +import { IDeltaItems } from "@pnp/graph/decorators.js"; +import { ITaskList, ITask } from "@pnp/graph/todo"; describe("Todo", function () { - let taskList: TodoTaskList; - let todoTask: TodoTask; + let taskList: ITaskList; + let todoTask: ITask; before(async function () { if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { this.skip(); } - taskList = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ - displayName: "Travel items" + getRandomString(5) + const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ + displayName: getRandomString(5), }); - todoTask = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList?.id).tasks.add( + const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).tasks.add( { title:"A new task", - categories: ["Important"], - linkedResources:[ - { - "webUrl":"https://pnp.github.io/pnpjs/", - "applicationName":"PnPjs", - "displayName":"PnPjs" - }, - ]}, + }, ); - if(!taskList || !todoTask){ + taskList = this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id); + todoTask = taskList.tasks.getById(task.id); + + if(!list || !task){ this.skip(); } - }); it("lists", pnpTest("8de75582-6257-4e2a-b753-7c8be1cf0a38", async function () { @@ -42,14 +39,14 @@ describe("Todo", function () { })); it("lists - getById()", pnpTest("50650ae3-8192-4767-b4b3-9af7a586c11b", async function () { - const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id)(); + const list = await taskList(); return expect(list.id).is.not.null; })); it("lists - add", pnpTest("2548a740-4267-4868-8663-e5bf5ae44ae2", async function () { let passed = false; const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ - displayName: "Test" + getRandomString(5) + displayName: "Test" + getRandomString(5), }); if(list){ @@ -61,73 +58,216 @@ describe("Todo", function () { it("lists - update", pnpTest("9017c7b8-fb00-4a00-9ef0-51af695679a6", async function () { const displayName = "Test " + getRandomString(5); - const updated = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).update({ - displayName: displayName + const updated = await taskList.update({ + displayName: displayName, }); return expect(updated.id).is.not.null && expect(updated.displayName).equal(displayName); })); it("lists - delete", pnpTest("ef561648-4380-4629-89bb-9834934e78d1", async function () { const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ - displayName: "Test" + getRandomString(5) + displayName: "Test" + getRandomString(5), }); if(list){ - const deleted = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).delete(); - return expect(deleted).to.be(void 0); + return expect(this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).delete()).to.eventually.be.fulfilled; } this.skip(); })); it("lists - delta", pnpTest("70cb936e-9ee5-4630-a3c7-6fdf60bbd6fe", async function () { - const delta = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).delta(); - return expect(delta).is.an("array"); + const delta: IDeltaItems = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.delta(); + return expect(delta.values).is.an("array"); })); it("tasks", pnpTest("87475a79-f33a-44ff-a998-a5024ad77e13", async function () { - const tasks = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks(); + const tasks = await taskList.tasks(); return expect(tasks).to.be.an("array") && expect(tasks[0]).to.haveOwnProperty("id"); })); it("tasks - getById()", pnpTest("59d5dd98-1730-40fb-898e-4cd56e5b8260", async function () { - const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(todoTask.id)(); + const task = await todoTask(); return expect(task.id).is.not.null; })); it("tasks - add", pnpTest("71958133-bd13-4bde-83c3-b8ea8871a466", async function () { let passed = false; - const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.add({ - title: "Test" + getRandomString(5) + const task = await taskList.tasks.add({ + title: "Test" + getRandomString(5), }); if(task){ passed = true; - await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(task.id).delete(); + await taskList.tasks.getById(task.id).delete(); } return expect(passed).is.true; })); it("tasks - update", pnpTest("c2071fbb-55d0-4837-a0d8-9a8bc6640f60", async function () { const title = "Test " + getRandomString(5); - const updated = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(todoTask.id).update({ - title: title + const updated = await todoTask.update({ + title: title, }); return expect(updated.id).is.not.null && expect(updated.title).equal(title); })); it("tasks - delete", pnpTest("104adde8-6514-4b84-b711-ae360e971519", async function () { - const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.add({ - title: "Test" + getRandomString(5) + const task = await taskList.tasks.add({ + title: "Test" + getRandomString(5), }); if(task){ - const deleted = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.getById(task.id).delete(); - return expect(deleted).to.be(void 0); + return expect(taskList.tasks.getById(task.id).delete()).to.eventually.be.fulfilled; } this.skip(); })); it("tasks - delta", pnpTest("8167699b-acd8-4e03-b14c-e5a347b0a131", async function () { - const delta = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(taskList.id).tasks.delta(); - return expect(delta).is.an("array"); + const delta: IDeltaItems = await taskList.tasks.delta(); + return expect(delta.values).is.an("array"); + })); + + it("fileAttachments", pnpTest("a4fedae2-3116-4488-a743-03253f59a579", async function () { + const attachments = await todoTask.attachments(); + return expect(attachments).is.an("array"); + })); + + it("fileAttachments add small", pnpTest("1515ae48-15c4-4b0c-81a7-3afd4b83e601", async function () { + const attachment = await todoTask.attachments.add( + { + "name": getRandomString(10), + "contentBytes": "VGVzdA==", + "contentType": "text/plain", + } + ); + return expect(attachment.id).is.not.null; + })); + + it("fileAttachments delete", pnpTest("6ab1d551-c0ef-4b6c-a444-ce3f49b777e6", async function () { + const attachment = await todoTask.attachments.add( + { + "name": getRandomString(10), + "contentBytes": "VGVzdA==", + "contentType": "text/plain", + } + ); + if(attachment){ + return expect(todoTask.attachments.getById((await attachment).id).delete()).to.eventually.be.fulfilled; + } + this.skip(); + })); + + it("checklistItems", pnpTest("e79a1dd1-765b-4740-82c9-9b57e202b034", async function () { + const checklistItems = await todoTask.checklistItems(); + return expect(checklistItems).to.be.an("array"); + })); + + it("checklistItems - getById()", pnpTest("b2a55a7d-1af2-427a-a506-0a015fe7ad43", async function () { + const newItem = await todoTask.checklistItems.add({ + displayName:getRandomString(10), + }); + const item: ChecklistItem = await todoTask.checklistItems.getById(newItem.id)(); + return expect(item.id).is.not.null; + })); + + it("checklistItems - add", pnpTest("be7b039f-2de9-446a-8a3c-e3b8ea5ec237", async function () { + let passed = false; + const newItem = await todoTask.checklistItems.add({ + displayName:getRandomString(10), + }); + + if(newItem){ + passed = true; + await todoTask.checklistItems.getById(newItem.id).delete(); + } + return expect(passed).is.true; + })); + + it("checklistItems - update", pnpTest("9568305d-afea-43b1-89ad-5c3f5273383f", async function () { + const title = "Test " + getRandomString(5); + const newItem = await todoTask.checklistItems.add({ + displayName:getRandomString(10), + }); + + const updated = await todoTask.checklistItems.getById(newItem.id).update({ + displayName: title, + }); + return expect(updated.id).is.not.null && expect(updated.displayName).equal(title); + })); + + it("checklistItems - delete", pnpTest("ff66aa6c-72e9-402e-9937-3a59fd61257f", async function () { + const newItem = await todoTask.checklistItems.add({ + displayName:getRandomString(10), + }); + if(newItem){ + return expect(todoTask.checklistItems.getById(newItem.id).delete()).to.eventually.be.fulfilled; + } + this.skip(); + })); + it("linkedResources", pnpTest("200bb895-b956-4120-b3c5-a111d074285f", async function () { + const resources = await todoTask.resources(); + return expect(resources).to.be.an("array"); + })); + + it("linkedResources - getById()", pnpTest("88a91401-5851-4aea-a3d8-81adf37cabab", async function () { + const resource = await todoTask.resources.add({ + displayName:getRandomString(10), + applicationName: "PnPjs" + getRandomString(5), + }); + const item = await todoTask.resources.getById(resource.id)(); + return expect(item.id).is.not.null; + })); + + it("linkedResources - add", pnpTest("e7656849-41f0-4d8c-87a2-69591585ad73", async function () { + let passed = false; + const task = await taskList.tasks.add({title: getRandomString(5)}); + const resource = await taskList.tasks.getById(task.id).resources.add({ + applicationName: "PnPjs" + getRandomString(10), + displayName: getRandomString(5), + }); + + if(resource){ + passed = true; + await taskList.tasks.getById(task.id).resources.getById(resource.id).delete(); + } + return expect(passed).is.true; + })); + + it("linkedResources - update", pnpTest("106acffe-5b35-408b-8879-8d420bbf30c3", async function () { + const title = "Test " + getRandomString(5); + const task = await taskList.tasks.add({title: getRandomString(5)}); + const resource = await taskList.tasks.getById(task.id).resources.add({ + applicationName: "PnPjs" + getRandomString(10), + displayName: getRandomString(5), + }); + + const updated = await taskList.tasks.getById(task.id).resources.getById(resource.id).update({ + displayName: title, + }); + return expect(updated.id).is.not.null && expect(updated.displayName).equal(title); })); + it("linkedResources - delete", pnpTest("f5be23bd-972b-4c87-86f7-98de738c1257", async function () { + const task = await taskList.tasks.add({title: getRandomString(5)}); + const resource = await taskList.tasks.getById(task.id).resources.add({ + applicationName: "PnPjs" + getRandomString(10), + displayName: getRandomString(5), + }); + if(resource){ + return expect(taskList.tasks.getById(task.id).resources.getById(resource.id).delete()).to.eventually.be.fulfilled; + } + this.skip(); + })); + + // Remove the test data we created + after(async function () { + const list = await taskList(); + if (!stringIsNullOrEmpty(list.id)) { + try { + await taskList.delete(); + } catch (err) { + console.error(`Cannot clean up test taskList: ${list.id}`); + } + } + return; + }); + }); From 8157d3d7ecaf36671600be798f5a70886e64a6a3 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 15 Jan 2024 14:45:32 -0700 Subject: [PATCH 090/171] Docs and Renaming --- docs/graph/to-do.md | 360 ++++++++++++++++++++++++ packages/graph/{todo => to-do}/index.ts | 4 + packages/graph/{todo => to-do}/types.ts | 45 +-- packages/graph/{todo => to-do}/user.ts | 0 test/graph/{todo.ts => to-do.ts} | 16 +- 5 files changed, 381 insertions(+), 44 deletions(-) create mode 100644 docs/graph/to-do.md rename packages/graph/{todo => to-do}/index.ts (77%) rename packages/graph/{todo => to-do}/types.ts (75%) rename packages/graph/{todo => to-do}/user.ts (100%) rename test/graph/{todo.ts => to-do.ts} (95%) diff --git a/docs/graph/to-do.md b/docs/graph/to-do.md new file mode 100644 index 000000000..9015878a5 --- /dev/null +++ b/docs/graph/to-do.md @@ -0,0 +1,360 @@ +# @pnp/graph/to-do + +The todo module allows you to access the Microsoft Graph Todo API. + +More information can be found in the official Graph documentation: + +- [To-do Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/todo-overview?view=graph-rest-1.0) + +[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## taskLists + +### List Task Lists +Retrieve a list of task lists +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +//current user +const lists = await graph.me.todo.lists(); + +//for a user +const taskLists = await graph.users.getById('{user id}').todo.lists(); +``` + +### Get a Task List by Id +Get a task list by id +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const list = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8')(); + +``` +### Add a new Task List +Add a new task list to ToDo. +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const list = await graph.me.todo.lists.add({ + displayName: 'My Task List' +}); + +``` +### Update a Task List +Update a task list +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const list = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').update({ + displayName: 'My New Task List' +}); + +``` +### Delete a Task List +Delete a task list +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').delete(); + +``` +### Get Task List Delta +Gets a set of task lists that have been added, deleted or removed +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const delta: IDeltaItems = await graph.me.todo.lists.delta(); + +``` +## Tasks +### List Tasks +Retrieve a list of tasks +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const tasks = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks(); + +``` +### Get a Task by Id +Get a task by id +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const task = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55')(); + +``` +### Add a new Task +Adds a new task to a task list +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const task = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.add({ + title: 'New task' +}); + +``` +### Update a Task +Updates a task in a task list +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const task = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').update({ + title: 'New task name' +}); + +``` +### Delete a Task +Deletes a task from a task list +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').delete(); + +``` +### Get Tasks Delta +Retrieves a set of tasks that ahve been added, deleted, or updated in a task list. +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const delta: IDeltaItems = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').delta(); + +``` +## File Attachments + +### List Attachments +Retrieve a list of file attachments from a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const files = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').attachments(); + +``` +### Get Attachment by Id +Get a file attachment by id. +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const attachment = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').attachments.getById('07f8c5e9-e20f-4b0a-8d26-5aae58ef121b')(); + +``` +### Add a new Attachment +Adds a new attachment to a task. +This operation limits the size of the attachment you can add to under 3 MB. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const attachment = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').attachments.add({ + { + "name": "Task Attachment", + "contentBytes": "VGVzdA==", + "contentType": "text/plain", + } +}) + +``` +### Update an Attachment + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').attachments.getById('07f8c5e9-e20f-4b0a-8d26-5aae58ef121b').delete(); + +``` +## Checklist Items + +### List Checklist Items +Retrieve a list of checklist items from a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const checklistItems = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').checklistItems(); + +``` +### Get Checklist Item by Id +Get a checklist item by id +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const item = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').checklistItems.getById('78216476-778e-4ecd-8b08-bea6aa06eae8')(); + +``` +### Add a new Checklist Item +Adds a new checklist item to a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const item = graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').checklistItems.add({ + displayName: 'New Item' +}); + +``` +### Update a Checklist Item +Updates a checklist item in a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const item = graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').checklistItems.update({ + displayName: 'New Item Display Name' +}); + +``` +### Delete a Checklist Item +Deletes a checklist from a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').checklistItems.getById('78216476-778e-4ecd-8b08-bea6aa06eae8').delete(); +``` + +## Linked Resources +### List Linked Resources +Retrieve a list of resources from a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const resources = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').resources(); + +``` +### Get a Linked Resource by Id +Get a linked resource by id +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const resource = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').resources.getById('264f7cd2-5c27-408a-b6b0-be386e522ea4')(); + +``` +### Add a Linked Resource +Adds a new linked resource to a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const resource = graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').resources.add({ + displayName: 'New Resource', + applicationName: 'PnpJs' +}); + +``` +### Update a Linked Resource +Updates a linked resource in a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +const item = graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').resources.getById('264f7cd2-5c27-408a-b6b0-be386e522ea4').update({ + displayName: 'New Resource Name', + applicationName: 'PnpJs' +}); + +``` +### Delete a Linked Resource +Deletes a checklist from a task +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/todo"; + +const graph = graphfi(...); + +graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').resources.getById('264f7cd2-5c27-408a-b6b0-be386e522ea4').delete(); + +``` \ No newline at end of file diff --git a/packages/graph/todo/index.ts b/packages/graph/to-do/index.ts similarity index 77% rename from packages/graph/todo/index.ts rename to packages/graph/to-do/index.ts index b7182b626..9862db43f 100644 --- a/packages/graph/todo/index.ts +++ b/packages/graph/to-do/index.ts @@ -5,6 +5,8 @@ export { IAttachments, IChecklistItem, IChecklistItems, + ILinkedResource, + ILinkedResources, ITask, ITaskList, ITaskLists, @@ -13,6 +15,8 @@ export { Attachments, ChecklistItem, ChecklistItems, + LinkedResource, + LinkedResources, Tasks, TaskList, TaskLists, diff --git a/packages/graph/todo/types.ts b/packages/graph/to-do/types.ts similarity index 75% rename from packages/graph/todo/types.ts rename to packages/graph/to-do/types.ts index 1973d4f8f..40e93c91a 100644 --- a/packages/graph/todo/types.ts +++ b/packages/graph/to-do/types.ts @@ -3,12 +3,10 @@ import { TodoTaskList as ITodoTaskListType, TodoTask as ITodoTaskType, AttachmentBase as ITodoAttachmentType, - AttachmentInfo as IAttachmentInfo, - AttachmentSession as IAttachmentSession, ChecklistItem as IChecklistItemType, LinkedResource as ILinkedResourceType, } from "@microsoft/microsoft-graph-types"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost, GraphQueryable } from "../graphqueryable.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable, deltaEnabled, IDeltaEnabled } from "../decorators.js"; import { body } from "@pnp/queryable/index.js"; @@ -96,7 +94,7 @@ export class _Attachment extends _GraphInstance { return Attachments(this); } } -export interface IAttachment extends _Attachments, IDeleteable{ } +export interface IAttachment extends _Attachment, IDeleteable{ } export const Attachment = graphInvokableFactory(_Attachment); /** @@ -106,43 +104,6 @@ export const Attachment = graphInvokableFactory(_Attachment); @getById(Attachment) export class _Attachments extends _GraphCollection { - public async addChunked(attachmentInfo: IAttachmentInfo, contentBytes: string): Promise{ - const session = graphPost(GraphQueryable(this, "createUploadSession"), body(attachmentInfo)); - /* - const chunkSize = 4 * 1024 * 1024; - const chunks = []; - for (let i = 0; i < contentBytes.length; i += chunkSize) { - const chunk = contentBytes.slice(i, i + chunkSize); - chunks.push(chunk); - } - let startByte = 0; - for (const chunk of chunks) { - // Calculate endByte for the Content-Range header - const endByte = startByte + chunk.length - 1; - - // Upload the chunk to the upload session - const response = await fetch(session.uploadUrl, { - method: "PUT", - headers: { - "Content-Type": "application/octet-stream", - "Content-Length": chunk.length.toString(), - "Content-Range": `bytes ${startByte}-${endByte}/${binaryFileContent.length}`, - }, - body: chunk, - }); - - if (!response.ok) { - console.error(`Failed to upload chunk for file "${fileName}"`); - return; - } - - // Update startByte for the next chunk - startByte += chunk.length; - } - */ - - } - public async add(attachmentInfo: IAddAttachmentOptions): Promise{ const postBody = { @@ -199,4 +160,4 @@ export interface IAddTaskListOptions{ export interface IAddAttachmentOptions extends ITodoAttachmentType{ contentBytes: string; -} \ No newline at end of file +} diff --git a/packages/graph/todo/user.ts b/packages/graph/to-do/user.ts similarity index 100% rename from packages/graph/todo/user.ts rename to packages/graph/to-do/user.ts diff --git a/test/graph/todo.ts b/test/graph/to-do.ts similarity index 95% rename from test/graph/todo.ts rename to test/graph/to-do.ts index 980aa9e68..94935bfe4 100644 --- a/test/graph/todo.ts +++ b/test/graph/to-do.ts @@ -5,9 +5,9 @@ import { pnpTest } from "../pnp-test.js"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { ChecklistItem } from "@microsoft/microsoft-graph-types"; import { IDeltaItems } from "@pnp/graph/decorators.js"; -import { ITaskList, ITask } from "@pnp/graph/todo"; +import { ITaskList, ITask } from "@pnp/graph/to-do"; -describe("Todo", function () { +describe("To-do", function () { let taskList: ITaskList; let todoTask: ITask; before(async function () { @@ -130,6 +130,18 @@ describe("Todo", function () { return expect(attachments).is.an("array"); })); + it("fileAttachments getById", pnpTest("e14085f3-c3a2-498c-a781-c269b565ce73", async function () { + const add = await todoTask.attachments.add( + { + "name": getRandomString(10), + "contentBytes": "VGVzdA==", + "contentType": "text/plain", + } + ); + const attachment = await todoTask.attachments.getById(add.id)(); + return expect(attachment.id).is.not.null; + })); + it("fileAttachments add small", pnpTest("1515ae48-15c4-4b0c-81a7-3afd4b83e601", async function () { const attachment = await todoTask.attachments.add( { From 6286a3308898bad70c2d3d5b072eb91863bf5952 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Tue, 16 Jan 2024 21:01:46 -0700 Subject: [PATCH 091/171] Updates Todo Update, Delta Decorator Update to use Delta implementation from Mail Updating existing modules that use Delta to use Decorator Updating Tests Updating Docs --- docs/graph/files.md | 14 ++++++---- docs/graph/mail-folders.md | 15 ++++++----- docs/graph/mail-messages.md | 16 +++++++----- docs/graph/to-do.md | 21 +++++++++++++-- packages/graph/behaviors/paged.ts | 2 +- packages/graph/decorators.ts | 35 +++++++++++++++++-------- packages/graph/files/index.ts | 1 - packages/graph/files/types.ts | 43 +++---------------------------- packages/graph/mail/folders.ts | 42 +++++------------------------- packages/graph/mail/index.ts | 2 +- packages/graph/mail/messages.ts | 35 +++++-------------------- packages/graph/to-do/types.ts | 10 +++---- test/graph/mail-folders.ts | 4 +-- test/graph/mail-messages.ts | 4 +-- test/graph/to-do.ts | 11 ++++---- 15 files changed, 104 insertions(+), 151 deletions(-) diff --git a/docs/graph/files.md b/docs/graph/files.md index b9c2f4a8f..87fba26d2 100644 --- a/docs/graph/files.md +++ b/docs/graph/files.md @@ -571,16 +571,20 @@ Track changes in a driveItem and its children over time. import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/files"; -import { IDeltaItems } from "@pnp/graph/ondrive"; const graph = graphfi(...); // Get the changes for the drive items from inception -const delta: IDeltaItems = await graph.me.drive.root.delta()(); -const delta: IDeltaItems = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.delta()(); +const delta = await graph.me.drive.root.delta()(); +const delta = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.delta()(); + +//You can also loop through the delta changes using the async iterator +const driveItems = graph.me.drive.root.delta(); +for await (const items of driveItems) { + // array of changes + console.log(item); +} -// Get the changes for the drive items from token -const delta: IDeltaItems = await graph.me.drive.root.delta("{token}")(); ``` ## Get Drive Item Analytics diff --git a/docs/graph/mail-folders.md b/docs/graph/mail-folders.md index 2aeb5f85f..2491d4ae4 100644 --- a/docs/graph/mail-folders.md +++ b/docs/graph/mail-folders.md @@ -54,14 +54,17 @@ import {IMailFolderDelta} from "@pnp/graph/mail" const graph = graphfi(...); const currentUser = graph.me; -const folders = await currentUser.mailFolders.delta(); -const deltatoken = folders.deltaLink.substring(folder.deltaLink.indexOf("deltatoken=") + 11); -const deltaParameters: IMailFolderDelta = { - "$skiptoken": null, - "$deltatoken": deltatoken, +// retrieve a list of mail folder changes +const folders = await currentUser.mailFolders.delta()(); + +//You can also loop through the delta changes using the async iterator +const folders = currentUser.mailFolders.delta(); +for await (const f of folders) { + // array of changes + console.log(f); } -const deltaFolders = await currentUser.mailFolders.delta(deltaParameters); + ``` ## Add Folder or Search Folder diff --git a/docs/graph/mail-messages.md b/docs/graph/mail-messages.md index 06d48f5fc..809f9b58a 100644 --- a/docs/graph/mail-messages.md +++ b/docs/graph/mail-messages.md @@ -32,15 +32,17 @@ import {IMessageDelta} from "@pnp/graph/mail" const graph = graphfi(...); const currentUser = graph.me; -const messages = await currentUser.messages.delta(); -const deltatoken = messages.deltaLink.substring(folder.deltaLink.indexOf("deltatoken=") + 11); -const deltaParameters: IMessageDelta = { - "$skiptoken": null, - "$deltatoken": deltatoken, - changeType: "created" +//get a list of messages changes (changeType is an optional parameter. See Graph docs) +const messages = await currentUser.mailFolders.getById(`{mailFolderId}`).messages.delta({changeType: "updated"})(); + +//You can also loop through the delta changes using the async iterator. +const messages = currentUser.mailFolders.getById(`{mailFolderId}`).messages.delta({changeType: "updated"}); +for await (const m of messages) { + // array of changes + console.log(m); } -const deltaMessages = await currentUser.messages.delta(deltaParameters); + ``` ## Create Draft Message diff --git a/docs/graph/to-do.md b/docs/graph/to-do.md index 9015878a5..449810e37 100644 --- a/docs/graph/to-do.md +++ b/docs/graph/to-do.md @@ -6,6 +6,7 @@ More information can be found in the official Graph documentation: - [To-do Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/todo-overview?view=graph-rest-1.0) +## IAttachment, IAttachments, IChecklistItem, IChecklistItems, ILinkedResource, ILinkedResources, ITask, ITaskList, ITaskLists, ITodo [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ## taskLists @@ -87,7 +88,15 @@ import "@pnp/graph/todo"; const graph = graphfi(...); -const delta: IDeltaItems = await graph.me.todo.lists.delta(); +// retrieve a list of delta changes +const taskLists = await graph.me.todo.lists.delta()(); + +//You can also loop through the delta changes using the async iterator +const tasklists = graph.me.todo.lists.delta(); +for await (const lists of tasklists) { + // array of tasklist changes + console.log(lists); +} ``` ## Tasks @@ -164,7 +173,15 @@ import "@pnp/graph/todo"; const graph = graphfi(...); -const delta: IDeltaItems = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').delta(); +//retrieve a list of changes +const taskChanges = await graph.me.todo.lists.getById('e650db1d-48c6-4950-89a5-74e504ee91a8').tasks.getById('8914aa93-445d-4413-bfa3-38a84b56cc55').delta()(); + +//You can also loop through the delta changes using the async iterator +const taskChanges = graph.me.todo.lists.delta(); +for await (const tasks of taskChanges) { + // array of task changes + console.log(tasks); +} ``` ## File Attachments diff --git a/packages/graph/behaviors/paged.ts b/packages/graph/behaviors/paged.ts index 1ac2ed87c..c2d813483 100644 --- a/packages/graph/behaviors/paged.ts +++ b/packages/graph/behaviors/paged.ts @@ -5,7 +5,7 @@ import { ConsistencyLevel } from "./consistency-level.js"; export interface IPagedResult { count: number; - value: T | T[] | null; + value: T[] | null; hasNext: boolean; nextLink: string; deltaLink: string; diff --git a/packages/graph/decorators.ts b/packages/graph/decorators.ts index ae436f846..53ec5b0be 100644 --- a/packages/graph/decorators.ts +++ b/packages/graph/decorators.ts @@ -1,5 +1,5 @@ import { GraphCollection, IGraphCollection, IGraphQueryable, graphDelete, graphPatch, graphPost } from "./graphqueryable.js"; -import { body, errorCheck, headers } from "@pnp/queryable"; +import { InjectHeaders, body, errorCheck, headers } from "@pnp/queryable"; /** * Decorator used to specify the default path for Queryable objects @@ -186,15 +186,23 @@ export interface IGetByName { } -export function deltaEnabled() { +export function hasDelta() { // eslint-disable-next-line @typescript-eslint/ban-types return function (target: T) { return class extends target { - public delta(this: IGraphQueryable, token?: string): Promise> { - const path = `delta${(token) ? `(token=${token})` : ""}`; + public delta(this: IGraphQueryable, properties: IDeltaProps = {}): IGraphCollection> { + const querystring = Object.keys(properties)?.map(key => `${key}=${properties[key]}`).join("&") || ""; + const path = (querystring.length > 0) ? `delta?${querystring}` : "delta"; const query: IGraphCollection = GraphCollection(this, path); + + if(properties?.maxPageSize){ + query.using(InjectHeaders({ + "Prefer": `odata.maxpagesize=${properties.maxPageSize}`, + })); + } + query.on.parse.replace(errorCheck); query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { @@ -203,7 +211,6 @@ export function deltaEnabled() { const deltaLink = json["@odata.deltaLink"]; result = { - // TODO:: update docs to show how to load next with async iterator next: () => (nextLink ? GraphCollection([this, nextLink]) : null), delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), values: json.value, @@ -212,22 +219,28 @@ export function deltaEnabled() { return [url, response, result]; }); - return query(); + return query; } }; }; } -export interface IDeltaEnabled { +export interface IHasDelta { /** * Gets the delta of the queryable * */ - delta(): Promise; + delta(properties?: T): IGraphCollection>; } -export interface IDeltaItems { +export interface IDeltaItems { next: IGraphCollection; delta: IGraphCollection; - values: any[]; -} \ No newline at end of file + values: R[]; +} + +export interface IDeltaProps { + deltatoken?: string; + token?: string; + maxPageSize?: number; +} diff --git a/packages/graph/files/index.ts b/packages/graph/files/index.ts index 9f93e61a6..bbff601f2 100644 --- a/packages/graph/files/index.ts +++ b/packages/graph/files/index.ts @@ -28,7 +28,6 @@ export { Root, ISharingWithMeOptions, IItemOptions as IItemReferenceOptions, - IDeltaItems, IPreviewOptions, IFileOptions, } from "./types.js"; diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index a6571281a..221b34d6c 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -13,8 +13,8 @@ import { } from "../graphqueryable.js"; import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo } from "@microsoft/microsoft-graph-types"; import { combine } from "@pnp/core"; -import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable } from "../decorators.js"; -import { body, BlobParse, CacheNever, errorCheck, InjectHeaders } from "@pnp/queryable"; +import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable, hasDelta, IHasDelta, IDeltaProps } from "../decorators.js"; +import { body, BlobParse, CacheNever, InjectHeaders } from "@pnp/queryable"; import { driveItemUpload } from "./funcs.js"; /** @@ -115,6 +115,7 @@ export const Drives = graphInvokableFactory(_Drives); * */ @defaultPath("root") +@hasDelta() export class _Root extends _GraphInstance { /** @@ -142,36 +143,6 @@ export class _Root extends _GraphInstance { return GraphCollection(this, "thumbnails"); } - /** - * Get changes since optional change token - * @param token - string (Optional) - * change token - * @returns IDeltaItems - */ - public delta(token?: string): IGraphCollection { - const path = `delta${(token) ? `(token=${token})` : ""}`; - - const query: IGraphCollection = GraphCollection(this, path); - query.on.parse.replace(errorCheck); - query.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { - - const json = await response.json(); - const nextLink = json["@odata.nextLink"]; - const deltaLink = json["@odata.deltaLink"]; - - result = { - // TODO:: update docs to show how to load next with async iterator - next: () => (nextLink ? GraphCollection([this, nextLink]) : null), - delta: () => (deltaLink ? GraphCollection([query, deltaLink])() : null), - values: json.value, - }; - - return [url, response, result]; - }); - - return query; - } - /** * Method for uploading a new file, or updating the contents of an existing file. * @param fileOptions - IFileOptions @@ -186,7 +157,7 @@ export class _Root extends _GraphInstance { return Reflect.apply(driveItemUpload, this, [fileOptions]); } } -export interface IRoot extends _Root { } +export interface IRoot extends _Root, IHasDelta, IDriveItemType> { } export const Root = graphInvokableFactory(_Root); /** @@ -467,9 +438,3 @@ export interface IPreviewOptions { page?: string | number; zoom?: number; } - -export interface IDeltaItems { - next: IGraphCollection; - delta: IGraphCollection; - values: any[]; -} diff --git a/packages/graph/mail/folders.ts b/packages/graph/mail/folders.ts index d92ab32ce..204e9ce87 100644 --- a/packages/graph/mail/folders.ts +++ b/packages/graph/mail/folders.ts @@ -2,11 +2,10 @@ import { MailFolder as IMailFolderType, MailSearchFolder as IMailSearchFolderType, } from "@microsoft/microsoft-graph-types"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphGet, GraphQueryable, graphPost } from "../graphqueryable.js"; -import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; -import { body, InjectHeaders } from "@pnp/queryable/index.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, GraphQueryable, graphPost } from "../graphqueryable.js"; +import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable, hasDelta, IHasDelta, IDeltaProps } from "../decorators.js"; +import { body } from "@pnp/queryable/index.js"; import { IMessageRules, IMessages, MessageRules, Messages } from "./messages.js"; -import { IPagedResult, Paged } from "../behaviors/paged.js"; /** * Mail Folder or Mail Search Folder @@ -65,44 +64,17 @@ export const MailFolder = graphInvokableFactory(_MailFolder); @defaultPath("mailFolders") @getById(MailFolder) @addable() +@hasDelta() export class _MailFolders extends _GraphCollection { public get includeHidden() { const q = GraphQueryable(this); q.query.set("includeHiddenFolders", "true"); return q; } - - /** - * Gets the delta for the current set of mail folders - * - * @param properties The set of properties used to retrieve specific types of messages - */ - public async delta(properties?: IMailFolderDelta, maxPageSize?: number): Promise> { - properties = properties || {}; - const querystring = Object.keys(properties)?.map(key => `${key}=${properties[key]}`).join("&") || ""; - const path = (querystring.length > 0) ? `delta?${querystring}` : "delta"; - const q = GraphQueryable(this, path); - if (maxPageSize) { - q.using(InjectHeaders({ - "Prefer": `odata.maxpagesize=${maxPageSize}`, - })); - } - return await graphGet(q.using(Paged())); - } - } -export interface IMailFolders extends _MailFolders, IGetById, IAddable { } +export interface IMailFolders extends _MailFolders, IGetById, IAddable, IHasDelta { } export const MailFolders = graphInvokableFactory(_MailFolders); -// export interface IDelta { -// nextLink: string; -// deltaLink: string; -// values: T[]; -// valuesCollection: IGraphQueryableCollection; -// } - - -export interface IMailFolderDelta { - "$skiptoken"?: string; - "$deltatoken"?: string; +export interface IMailFolderDelta extends Omit { + changeType?: string; } diff --git a/packages/graph/mail/index.ts b/packages/graph/mail/index.ts index 88f9dcc8e..0206cb90b 100644 --- a/packages/graph/mail/index.ts +++ b/packages/graph/mail/index.ts @@ -32,9 +32,9 @@ export { export { IMailFolder, IMailFolders, + IMailFolderDelta, MailFolder, MailFolders, - IMailFolderDelta, } from "./folders.js"; diff --git a/packages/graph/mail/messages.ts b/packages/graph/mail/messages.ts index 08373ad77..4e569fd1f 100644 --- a/packages/graph/mail/messages.ts +++ b/packages/graph/mail/messages.ts @@ -3,11 +3,10 @@ import { MessageRule as IMessageRuleType, TimeZoneInformation, } from "@microsoft/microsoft-graph-types"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphGet, GraphQueryable, graphPost } from "../graphqueryable.js"; -import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable } from "../decorators.js"; -import { body, InjectHeaders } from "@pnp/queryable/index.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; +import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable, hasDelta, IHasDelta, IDeltaProps } from "../decorators.js"; +import { body } from "@pnp/queryable/index.js"; import { mailResponse } from "./funcs.js"; -import { IPagedResult, Paged } from "../behaviors/paged.js"; /** * Message @@ -129,29 +128,11 @@ export const Message = graphInvokableFactory(_Message); @defaultPath("messages") @getById(Message) @addable() -export class _Messages extends _GraphCollection { - /** - * Gets the delta for the current set of messages - * - * @param properties The set of properties used to retrieve specific types of messages - */ - public async delta(properties?: IMessageDelta, maxPageSize?: number): Promise> { - properties = properties || {}; - const querystring = Object.keys(properties)?.map(key => `${key}=${properties[key]}`).join("&") || ""; - const path = (querystring.length > 0) ? `delta?${querystring}` : "delta"; - const q = GraphQueryable(this, path); - if (maxPageSize) { - q.using(InjectHeaders({ - "Prefer": `odata.maxpagesize=${maxPageSize}`, - })); - } - return await graphGet(q.using(Paged())); - } -} -export interface IMessages extends _Messages, IGetById, IAddable, IDeleteable { } +@hasDelta() +export class _Messages extends _GraphCollection { } +export interface IMessages extends _Messages, IGetById, IAddable, IDeleteable, IHasDelta { } export const Messages = graphInvokableFactory(_Messages); - /** * Message Rule */ @@ -171,8 +152,6 @@ export class _MessageRules extends _GraphCollection {} export interface IMessageRules extends _MessageRules, IGetById, IAddable { } export const MessageRules = graphInvokableFactory(_MessageRules); -export interface IMessageDelta { - "$skiptoken"?: string; - "$deltatoken"?: string; +export interface IMessageDelta extends Omit { changeType?: string; } diff --git a/packages/graph/to-do/types.ts b/packages/graph/to-do/types.ts index 40e93c91a..645151a25 100644 --- a/packages/graph/to-do/types.ts +++ b/packages/graph/to-do/types.ts @@ -7,7 +7,7 @@ import { LinkedResource as ILinkedResourceType, } from "@microsoft/microsoft-graph-types"; import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; -import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable, deltaEnabled, IDeltaEnabled } from "../decorators.js"; +import { defaultPath, getById, addable, IGetById, IAddable, updateable, IUpdateable, IDeleteable, deleteable, hasDelta, IHasDelta, IDeltaProps } from "../decorators.js"; import { body } from "@pnp/queryable/index.js"; /** @@ -44,9 +44,9 @@ export const TaskList = graphInvokableFactory(_TaskList); @defaultPath("lists") @getById(TaskList) @addable() -@deltaEnabled() +@hasDelta() export class _TaskLists extends _GraphCollection { } -export interface ITaskLists extends _TaskLists, IGetById, IAddable, IDeltaEnabled { } +export interface ITaskLists extends _TaskLists, IGetById, IAddable, IHasDelta, ITodoTaskListType> { } export const TaskLists = graphInvokableFactory(_TaskLists); /** @@ -79,9 +79,9 @@ export const Task = graphInvokableFactory(_Task); @defaultPath("tasks") @getById(Task) @addable() -@deltaEnabled() +@hasDelta() export class _Tasks extends _GraphCollection { } -export interface ITasks extends _Tasks, IGetById, IAddable, IDeltaEnabled { } +export interface ITasks extends _Tasks, IGetById, IAddable, IHasDelta, ITodoTaskType> { } export const Tasks = graphInvokableFactory(_Tasks); /** diff --git a/test/graph/mail-folders.ts b/test/graph/mail-folders.ts index 0dce3e0d1..22db3b6e0 100644 --- a/test/graph/mail-folders.ts +++ b/test/graph/mail-folders.ts @@ -57,8 +57,8 @@ describe("Mail: Folders", function () { }); it("Mail: Folder List - Delta", async function () { - const folders = await this.pnp.graph.users.getById(testUserName).mailFolders.delta(); - return expect(folders).has.property("deltaLink"); + const folders = await this.pnp.graph.users.getById(testUserName).mailFolders.delta()(); + return expect(folders).haveOwnProperty("values"); }); it("Mail: Get Folder by Id (Add/Delete)", async function () { diff --git a/test/graph/mail-messages.ts b/test/graph/mail-messages.ts index 8ffd8fd8d..1cf3f11fc 100644 --- a/test/graph/mail-messages.ts +++ b/test/graph/mail-messages.ts @@ -63,8 +63,8 @@ describe("Mail: Messages", function () { }); it("Mail: Message List (Delta)", async function () { - const messagesDelta = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.delta(); - return expect(messagesDelta).has.property("deltaLink"); + const messagesDelta = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.delta()(); + return expect(messagesDelta).haveOwnProperty("values"); }); it("Mail: Create Draft Message", async function () { diff --git a/test/graph/to-do.ts b/test/graph/to-do.ts index 94935bfe4..7aa3e9230 100644 --- a/test/graph/to-do.ts +++ b/test/graph/to-do.ts @@ -1,10 +1,9 @@ import { expect } from "chai"; import "@pnp/graph/users"; -import "@pnp/graph/todo"; +import "@pnp/graph/to-do"; import { pnpTest } from "../pnp-test.js"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { ChecklistItem } from "@microsoft/microsoft-graph-types"; -import { IDeltaItems } from "@pnp/graph/decorators.js"; import { ITaskList, ITask } from "@pnp/graph/to-do"; describe("To-do", function () { @@ -75,8 +74,8 @@ describe("To-do", function () { })); it("lists - delta", pnpTest("70cb936e-9ee5-4630-a3c7-6fdf60bbd6fe", async function () { - const delta: IDeltaItems = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.delta(); - return expect(delta.values).is.an("array"); + const delta = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.delta()(); + return expect(delta).haveOwnProperty("values"); })); it("tasks", pnpTest("87475a79-f33a-44ff-a998-a5024ad77e13", async function () { @@ -121,8 +120,8 @@ describe("To-do", function () { })); it("tasks - delta", pnpTest("8167699b-acd8-4e03-b14c-e5a347b0a131", async function () { - const delta: IDeltaItems = await taskList.tasks.delta(); - return expect(delta.values).is.an("array"); + const delta = await taskList.tasks.delta()(); + return expect(delta).haveOwnProperty("values"); })); it("fileAttachments", pnpTest("a4fedae2-3116-4488-a743-03253f59a579", async function () { From f7b05ad20cfe692e083878cd52b7e1cc153399ec Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 17 Jan 2024 10:26:07 -0500 Subject: [PATCH 092/171] some updates --- .gitignore | 4 +- packages/azidjsclient/index.ts | 4 +- packages/graph/appCatalog/types.ts | 2 +- .../behaviors/diagnostics-jwt-decode.ts | 24 ----------- packages/queryable/behaviors/resolvers.ts | 2 +- packages/queryable/index.ts | 5 --- packages/queryable/invokable.ts | 40 ------------------ packages/queryable/queryable.ts | 42 ++++++++++++++++++- packages/sp-admin/tenant.ts | 5 +-- 9 files changed, 49 insertions(+), 79 deletions(-) delete mode 100644 packages/queryable/behaviors/diagnostics-jwt-decode.ts delete mode 100644 packages/queryable/invokable.ts diff --git a/.gitignore b/.gitignore index 96b9ce18a..0373e3f7f 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,6 @@ site # Optional npm cache directory .npm - .idea # allow folks to add things to the debug /launch and /serve folder, but don't include them in git @@ -55,3 +54,6 @@ settings.js # don't save the locally produced .js of the buildsystem config buildsystem-config.js + +# never accidentally include any .js files that are generated in the main package source tree +packages/**/*.js diff --git a/packages/azidjsclient/index.ts b/packages/azidjsclient/index.ts index 70e219f60..cc6e6d0ac 100644 --- a/packages/azidjsclient/index.ts +++ b/packages/azidjsclient/index.ts @@ -1,5 +1,5 @@ -import { PnPClientStorage, getHashCode } from "@pnp/core/index.js"; -import { Queryable } from "@pnp/queryable/index.js"; +import { PnPClientStorage, getHashCode } from "@pnp/core"; +import { Queryable } from "@pnp/queryable"; import { AccessToken, AuthorizationCodeCredential, diff --git a/packages/graph/appCatalog/types.ts b/packages/graph/appCatalog/types.ts index cad91a185..f60090537 100644 --- a/packages/graph/appCatalog/types.ts +++ b/packages/graph/appCatalog/types.ts @@ -5,7 +5,7 @@ import { TeamworkBot as ITeamworkBot } from "@microsoft/microsoft-graph-types"; import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost, graphDelete, graphGet } from "../graphqueryable.js"; import { IGetById, defaultPath, getById } from "../decorators.js"; -import { InjectHeaders } from "@pnp/queryable/index.js"; +import { InjectHeaders } from "@pnp/queryable"; /** * AppCatalogs diff --git a/packages/queryable/behaviors/diagnostics-jwt-decode.ts b/packages/queryable/behaviors/diagnostics-jwt-decode.ts deleted file mode 100644 index 1371ee6cd..000000000 --- a/packages/queryable/behaviors/diagnostics-jwt-decode.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { stringIsNullOrEmpty } from "@pnp/core"; -import { Queryable } from "../queryable"; - -export function Diagnostics_JWTDecoder() { - - return (instance: Queryable) => { - - instance.on.auth(async function (url: URL, init: RequestInit) { - - // eslint-disable-next-line @typescript-eslint/dot-notation - if (!stringIsNullOrEmpty(init.headers["Authorization"])) { - - // eslint-disable-next-line @typescript-eslint/dot-notation - const parts = (init.headers["Authorization"]).split("."); - - this.log(JSON.stringify(JSON.parse(atob(parts[1])), null, 2), 1); - } - - return [url, init]; - }); - - return instance; - }; -} diff --git a/packages/queryable/behaviors/resolvers.ts b/packages/queryable/behaviors/resolvers.ts index b50267bb3..b7f917ec3 100644 --- a/packages/queryable/behaviors/resolvers.ts +++ b/packages/queryable/behaviors/resolvers.ts @@ -1,4 +1,4 @@ -import { TimelinePipe } from "../../core/timeline.js"; +import { TimelinePipe } from "@pnp/core"; import { Queryable } from "../queryable.js"; export function ResolveOnData(): TimelinePipe { diff --git a/packages/queryable/index.ts b/packages/queryable/index.ts index 2a97f9efb..c0b73bae0 100644 --- a/packages/queryable/index.ts +++ b/packages/queryable/index.ts @@ -1,6 +1,5 @@ import { jsS } from "@pnp/core"; -export * from "./invokable.js"; export * from "./queryable.js"; /** @@ -16,10 +15,6 @@ export * from "./behaviors/parsers.js"; export * from "./behaviors/timeout.js"; export * from "./behaviors/resolvers.js"; - -// testing -export * from "./behaviors/diagnostics-jwt-decode.js"; - /** * Adds a property to a target instance * diff --git a/packages/queryable/invokable.ts b/packages/queryable/invokable.ts deleted file mode 100644 index c7a52272e..000000000 --- a/packages/queryable/invokable.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { get, op } from "./queryable.js"; -import { isFunc } from "@pnp/core"; - -/** - * Allows a decorated object to be invoked as a function, optionally providing an implementation for that action - * - * @param invokeableAction Optional. The logic to execute upon invoking the object as a function. - * @returns Decorator which applies the invokable logic to the tagged class - */ -export function invokable(invokeableAction?: (this: any, init?: RequestInit) => Promise) { - - return (target: any) => { - - return new Proxy(target, { - - construct(clz, args, newTarget: any) { - - const invokableInstance = Object.assign(function (init?: RequestInit) { - - if (!isFunc(invokeableAction)) { - invokeableAction = function (this: any, init?: RequestInit) { - return op(this, get, init); - }; - } - - return Reflect.apply(invokeableAction, invokableInstance, [init]); - - }, Reflect.construct(clz, args, newTarget)); - - Reflect.setPrototypeOf(invokableInstance, newTarget.prototype); - - return invokableInstance; - }, - }); - }; -} - -export interface IInvokable { - (init?: RequestInit): Promise; -} diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index 20a6028a2..9c88809b7 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -1,5 +1,4 @@ -import { combine, getGUID, Timeline, asyncReduce, reduce, broadcast, request, isArray, TimelinePipe, lifecycle, stringIsNullOrEmpty } from "@pnp/core"; -import { IInvokable, invokable } from "./invokable.js"; +import { combine, getGUID, Timeline, asyncReduce, reduce, broadcast, request, isArray, TimelinePipe, lifecycle, stringIsNullOrEmpty, isFunc } from "@pnp/core"; export type QueryableConstructObserver = (this: IQueryableInternal, init: QueryableInit, path?: string) => void; @@ -30,6 +29,7 @@ const DefaultMoments = { export type QueryableInit = Queryable | string | [Queryable, string]; @invokable() +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export class Queryable extends Timeline implements IQueryableInternal { // tracks any query parameters which will be appended to the request url @@ -285,3 +285,41 @@ export function queryableFactory( return instance; }; } + +/** + * Allows a decorated object to be invoked as a function, optionally providing an implementation for that action + * + * @param invokeableAction Optional. The logic to execute upon invoking the object as a function. + * @returns Decorator which applies the invokable logic to the tagged class + */ +export function invokable(invokeableAction?: (this: any, init?: RequestInit) => Promise) { + + return (target: any) => { + + return new Proxy(target, { + + construct(clz, args, newTarget: any) { + + const invokableInstance = Object.assign(function (init?: RequestInit) { + + if (!isFunc(invokeableAction)) { + invokeableAction = function (this: any, init?: RequestInit) { + return op(this, get, init); + }; + } + + return Reflect.apply(invokeableAction, invokableInstance, [init]); + + }, Reflect.construct(clz, args, newTarget)); + + Reflect.setPrototypeOf(invokableInstance, newTarget.prototype); + + return invokableInstance; + }, + }); + }; +} + +export interface IInvokable { + (init?: RequestInit): Promise; +} diff --git a/packages/sp-admin/tenant.ts b/packages/sp-admin/tenant.ts index 40268f699..189ba9b89 100644 --- a/packages/sp-admin/tenant.ts +++ b/packages/sp-admin/tenant.ts @@ -1,8 +1,7 @@ -// import { body } from "@pnp/queryable"; import { body, BufferParse } from "@pnp/queryable"; import { _SPInstance, defaultPath, spInvokableFactory, spPost } from "@pnp/sp"; -import { IRenderListDataParameters } from "@pnp/sp/lists/index.js"; -import { IHubSiteInfo } from "@pnp/sp/hubsites/index.js"; +import { IRenderListDataParameters } from "@pnp/sp/lists"; +import { IHubSiteInfo } from "@pnp/sp/hubsites"; import { IHomeSitesDetails, IPortalHealthStatus, From 54a72bc79f4f4fc6305b940125da29abaf5242c8 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 18 Jan 2024 21:29:07 +0000 Subject: [PATCH 093/171] Graph Planner Update --- docs/graph/planner.md | 90 ++++-- package.json | 2 +- packages/graph/planner/index.ts | 4 +- packages/graph/planner/types.ts | 150 ++++----- test/graph/planner.ts | 551 ++++++++++++++++++++++++-------- 5 files changed, 552 insertions(+), 245 deletions(-) diff --git a/docs/graph/planner.md b/docs/graph/planner.md index dd24ee8e3..374eeb122 100644 --- a/docs/graph/planner.md +++ b/docs/graph/planner.md @@ -5,7 +5,7 @@ you can add, update and delete items in Planner. More information can be found in the official Graph documentation: -- [Planner Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/plannertask?view=graph-rest-1.0) +- [Tasks and plans](https://learn.microsoft.com/en-us/graph/api/resources/planner-overview?view=graph-rest-1.0) ## IInvitations @@ -22,7 +22,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const plan = await graph.planner.plans.getById('planId')(); +const plan = await graph.planner.plans.getById({planId})(); ``` @@ -36,7 +36,14 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const newPlan = await graph.planner.plans.add('groupObjectId', 'title'); +const planTemplate: IPlanAdd = { + container: { + url: "", + }, + title: "", +}; + +const plan = await graph.planner.plans.add(planTemplate); ``` @@ -50,7 +57,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const planTasks = await graph.planner.plans.getById('planId').tasks(); +const planTasks = await graph.planner.plans.getById({planId}).tasks(); ``` @@ -64,7 +71,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const planBuckets = await graph.planner.plans.getById('planId').buckets(); +const planBuckets = await graph.planner.plans.getById({planId}).buckets(); ``` @@ -78,7 +85,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const planDetails = await graph.planner.plans.getById('planId').details(); +const planDetails = await graph.planner.plans.getById({planId}).details(); ``` @@ -92,7 +99,8 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const delPlan = await graph.planner.plans.getById('planId').delete('planEtag'); +// Note the planETag cannot be "*" and is required. +const delPlan = await graph.planner.plans.getById({planId}).delete({planEtag}); ``` @@ -106,7 +114,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const updPlan = await graph.planner.plans.getById('planId').update({title: 'New Title', eTag: 'planEtag'}); +const updPlan = await graph.planner.plans.getById({planId}).update({title: 'New Title', eTag: {planEtag}}); ``` @@ -116,11 +124,13 @@ Using the tasks() you can get the Tasks across all plans ```TypeScript import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; import "@pnp/graph/planner"; const graph = graphfi(...); -const planTasks = await graph.me.tasks() +const planTasks = await graph.me.tasks(); +const planTasks = await graph.users.getById({userId}).tasks(); ``` @@ -135,7 +145,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const task = await graph.planner.tasks.getById('taskId')(); +const task = await graph.planner.tasks.getById({taskId})(); ``` @@ -149,7 +159,17 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const newTask = await graph.planner.tasks.add('planId', 'title'); +const taskTemplate = { + planId: {planId}, + title: "My New Task", + assignments: { + {userId}: { + "@odata.type": "#microsoft.graph.plannerAssignment", + orderHint: " !", + } + }, +}; +const newTask = await graph.planner.tasks.add({taskTemplate}); ``` @@ -163,7 +183,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const taskDetails = await graph.planner.tasks.getById('taskId').details(); +const taskDetails = await graph.planner.tasks.getById({taskId}).details(); ``` @@ -177,7 +197,8 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const delTask = await graph.planner.tasks.getById('taskId').delete('taskEtag'); +// Note the taskEtag cannot be "*" and is required. +const delTask = await graph.planner.tasks.getById({taskId}).delete({taskEtag}); ``` @@ -191,7 +212,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const updTask = await graph.planner.tasks.getById('taskId').update({properties, eTag:'taskEtag'}); +const updTask = await graph.planner.tasks.getById({taskId}).update({properties, eTag: {taskEtag}}); ``` @@ -206,7 +227,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const bucket = await graph.planner.buckets.getById('bucketId')(); +const bucket = await graph.planner.buckets.getById({bucketId})(); ``` @@ -220,7 +241,11 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const newBucket = await graph.planner.buckets.add('name', 'planId'); +const bucketTemplate = { + planId: {planId}, + name: "My Task Bucket", +}; +const newBucket = await graph.planner.buckets.add(bucketTemplate); ``` @@ -234,7 +259,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const updBucket = await graph.planner.buckets.getById('bucketId').update({name: "Name", eTag:'bucketEtag'}); +const updBucket = await graph.planner.buckets.getById({bucketId}).update({name: "New Name", eTag: {bucketEtag}}); ``` @@ -248,7 +273,8 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const delBucket = await graph.planner.buckets.getById('bucketId').delete(eTag:'bucketEtag'); +// Note the bucketEtag cannot be "*" and is required. +const delBucket = await graph.planner.buckets.getById({bucketId}).delete(eTag: {bucketEtag}); ``` @@ -262,7 +288,7 @@ import "@pnp/graph/planner"; const graph = graphfi(...); -const bucketTasks = await graph.planner.buckets.getById('bucketId').tasks(); +const bucketTasks = await graph.planner.buckets.getById({bucketId}).tasks(); ``` @@ -280,3 +306,29 @@ const graph = graphfi(...); const plans = await graph.groups.getById("b179a282-9f94-4bb5-a395-2a80de5a5a78").plans(); ``` + +## Get AssignedToTaskBoardFormat, BucketTaskBoardFormat, ProgressTaskBoardTaskFormat + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/planner"; + +const graph = graphfi(...); + +const assignedToTaskBoardFormat = await this.pnp.graph.planner.tasks.getById({taskId}).assignedToTaskBoardFormat(); +const bucketTaskBoardFormat = await this.pnp.graph.planner.tasks.getById({taskId}).assignedToTaskBoardFormat(); +const progressTaskBoardTaskFormat = await this.pnp.graph.planner.tasks.getById({taskId}).progressTaskBoardTaskFormat(); +``` + +## Update AssignedToTaskBoardFormat, BucketTaskBoardFormat, ProgressTaskBoardTaskFormat + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/planner"; + +const graph = graphfi(...); + +await this.pnp.graph.planner.tasks.getById({taskId}).assignedToTaskBoardFormat.update({ unassignedOrderHint: " abc!" }, {taskETag}); +await this.pnp.graph.planner.tasks.getById({taskId}).assignedToTaskBoardFormat.update({orderHint: " abc!" }, {taskETag}); +await this.pnp.graph.planner.tasks.getById({taskId}).progressTaskBoardTaskFormat.update({orderHint: " abc!" }, {taskETag}); +``` diff --git a/package.json b/package.json index 0ee4b834e..a82a53b6a 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "scripts": { "build": "npm run pnp-buildsystem-init && pnpbuild -n build", "build-localresolver": "npx tsc -p tsconfig.localresolver.json", - "buildDebug": "npm run pnp-buildsystem-init && pnpbuild -n build-debug", + "buildDebug": "npm run clean && npm run pnp-buildsystem-init && pnpbuild -n build-debug", "clean": "del-cli \"./?(dist|site|build|buildsystem-config.js)\"", "lint": "eslint ./packages ./test --ext .ts", "package": "npm run pnp-buildsystem-init && pnpbuild -n package", diff --git a/packages/graph/planner/index.ts b/packages/graph/planner/index.ts index 3a648e7f1..0506ec5b3 100644 --- a/packages/graph/planner/index.ts +++ b/packages/graph/planner/index.ts @@ -8,14 +8,12 @@ export { Bucket, Buckets, IBucket, - IBucketAddResult, IBuckets, IPlan, - IPlanAddResult, + IPlanAdd, IPlanner, IPlans, ITask, - ITaskAddResult, ITasks, ITaskDetails, Plan, diff --git a/packages/graph/planner/types.ts b/packages/graph/planner/types.ts index daf3f34c1..5a17d8052 100644 --- a/packages/graph/planner/types.ts +++ b/packages/graph/planner/types.ts @@ -5,10 +5,13 @@ import { PlannerTaskDetails as IPlannerTaskDetailsType, PlannerBucket as IPlannerBucketType, Planner as IPlannerType, + PlannerPlanContainer as IPlannerPlanContainerType, + PlannerAssignedToTaskBoardTaskFormat as IPlannerAssignedToTaskBoardTaskFormatType, + PlannerBucketTaskBoardTaskFormat as IPlannerBucketTaskBoardTaskFormatType, + PlannerProgressTaskBoardTaskFormat as IPlannerProgressTaskBoardTaskFormatType, } from "@microsoft/microsoft-graph-types"; -import { body } from "@pnp/queryable"; -import { _GraphInstance, _GraphCollection, graphInvokableFactory, graphPost } from "../graphqueryable.js"; -import { getById, IGetById, deleteableWithETag, IDeleteableWithETag, updateableWithETag, IUpdateableWithETag } from "../decorators.js"; +import { _GraphInstance, _GraphCollection, graphInvokableFactory } from "../graphqueryable.js"; +import { getById, IGetById, deleteableWithETag, IDeleteableWithETag, updateableWithETag, IUpdateableWithETag, addable, IAddable } from "../decorators.js"; import { defaultPath } from "../decorators.js"; /** @@ -42,7 +45,7 @@ export const Planner = graphInvokableFactory(_Planner); @updateableWithETag() export class _PlanDetails extends _GraphInstance { } export interface IPlanDetails extends _PlanDetails, IUpdateableWithETag { } -export const PlanDetails = graphInvokableFactory(_PlanDetails); +export const PlanDetails = graphInvokableFactory(_PlanDetails); /** * Plan @@ -68,24 +71,9 @@ export const Plan = graphInvokableFactory(_Plan); @defaultPath("plans") @getById(Plan) -export class _Plans extends _GraphCollection { - /** - * Create a new Planner Plan. - * - * @param owner Id of Group object. - * @param title The Title of the Plan. - */ - public async add(owner: string, title: string): Promise { - - const data = await graphPost(this, body({ owner, title })); - - return { - data, - plan: (this).getById(data.id), - }; - } -} -export interface IPlans extends _Plans, IGetById { } +@addable() +export class _Plans extends _GraphCollection {} +export interface IPlans extends _Plans, IGetById, IAddable { } export const Plans = graphInvokableFactory(_Plans); /** @@ -97,6 +85,33 @@ export class _TaskDetails extends _GraphInstance { } export interface ITaskDetails extends _TaskDetails, IUpdateableWithETag { } export const TaskDetails = graphInvokableFactory(_TaskDetails); +/** + * AssignedToTaskBoardFormat + */ +@defaultPath("assignedToTaskBoardFormat") +@updateableWithETag() +export class _AssignedToTaskBoardFormat extends _GraphInstance { } +export interface IAssignedToTaskBoardFormat extends _AssignedToTaskBoardFormat, IUpdateableWithETag { } +export const AssignedToTaskBoardFormat = graphInvokableFactory(_AssignedToTaskBoardFormat); + +/** + * BucketTaskBoardFormat + */ +@defaultPath("bucketTaskBoardFormat") +@updateableWithETag() +export class _BucketTaskBoardFormat extends _GraphInstance { } +export interface IBucketTaskBoardFormat extends _BucketTaskBoardFormat, IUpdateableWithETag { } +export const BucketTaskBoardFormat = graphInvokableFactory(_BucketTaskBoardFormat); + +/** + * ProgressTaskBoardFormat + */ +@defaultPath("progressTaskBoardFormat") +@updateableWithETag() +export class _ProgressTaskBoardFormat extends _GraphInstance { } +export interface IProgressTaskBoardFormat extends _ProgressTaskBoardFormat, IUpdateableWithETag { } +export const ProgressTaskBoardFormat = graphInvokableFactory(_ProgressTaskBoardFormat); + /** * Task */ @@ -106,6 +121,18 @@ export class _Task extends _GraphInstance { public get details(): ITaskDetails { return TaskDetails(this); } + + public get assignedToTaskBoardFormat(): IAssignedToTaskBoardFormat { + return AssignedToTaskBoardFormat(this); + } + + public get bucketTaskBoardFormat(): IBucketTaskBoardFormat { + return BucketTaskBoardFormat(this); + } + + public get progressTaskBoardFormat(): IProgressTaskBoardFormat { + return ProgressTaskBoardFormat(this); + } } export interface ITask extends _Task, IUpdateableWithETag, IDeleteableWithETag { } export const Task = graphInvokableFactory(_Task); @@ -115,39 +142,9 @@ export const Task = graphInvokableFactory(_Task); */ @defaultPath("tasks") @getById(Task) -export class _Tasks extends _GraphCollection { - /** - * Create a new Planner Task. - * - * @param planId Id of Plan. - * @param title The Title of the Task. - * @param assignments Assign the task - * @param bucketId Id of Bucket - */ - public async add(planId: string, title: string, assignments?: Record, bucketId?: string): Promise { - - let postBody = { - planId, - title, - ...assignments, - }; - - if (bucketId) { - postBody = { - ...postBody, - bucketId, - }; - } - - const data = await graphPost(this, body(postBody)); - - return { - data, - task: (this).getById(data.id), - }; - } -} -export interface ITasks extends _Tasks, IGetById { } +@addable() +export class _Tasks extends _GraphCollection {} +export interface ITasks extends _Tasks, IGetById, IAddable { } export const Tasks = graphInvokableFactory(_Tasks); /** @@ -169,44 +166,13 @@ export const Bucket = graphInvokableFactory(_Bucket); */ @defaultPath("buckets") @getById(Bucket) -export class _Buckets extends _GraphCollection { - /** - * Create a new Bucket. - * - * @param name Name of Bucket object. - * @param planId The Id of the Plan. - * @param oderHint Hint used to order items of this type in a list view. - */ - public async add(name: string, planId: string, orderHint?: string): Promise { - - const postBody = { - name: name, - orderHint: orderHint ? orderHint : "", - planId: planId, - }; - - const data = await graphPost(this, body(postBody)); - - return { - bucket: (this).getById(data.id), - data, - }; - } -} -export interface IBuckets extends _Buckets, IGetById { } +@addable() +export class _Buckets extends _GraphCollection {} +export interface IBuckets extends _Buckets, IGetById, IAddable { } export const Buckets = graphInvokableFactory(_Buckets); -export interface IBucketAddResult { - data: IPlannerBucketType; - bucket: IBucket; +export interface IPlanAdd { + container: IPlannerPlanContainerType; + title: string; } -export interface IPlanAddResult { - data: IPlannerPlanType; - plan: IPlan; -} - -export interface ITaskAddResult { - data: IPlannerTaskType; - task: ITask; -} diff --git a/test/graph/planner.ts b/test/graph/planner.ts index 0ab7fb016..c535e4943 100644 --- a/test/graph/planner.ts +++ b/test/graph/planner.ts @@ -1,160 +1,451 @@ -import { getRandomString } from "@pnp/core"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { expect } from "chai"; -import { GroupType } from "@pnp/graph/groups"; import "@pnp/graph/planner"; +import { IPlanAdd } from "@pnp/graph/planner"; +import getValidUser from "./utilities/getValidUser.js"; // Tests can't be run until planner support application permissions, incomplete -describe.skip("Planner", function () { +describe.only("Planner", function () { + const planTemplate: IPlanAdd = { + container: { + url: "", + }, + title: "", + }; - let groupID = ""; - let planID = ""; - let taskID = ""; + const PlanIds = []; - before(function () { + before(async function () { - if (!this.pnp.settings.enableWebTests) { + if ((!this.pnp.settings.enableWebTests) || (!this.pnp.settings.testGroupId)) { this.skip(); } + planTemplate.container.url = `https://graph.microsoft.com/v1.0/groups/${this.pnp.settings.testGroupId}`; }); - beforeEach(async function () { - // Clear out variables - groupID = ""; - planID = ""; - taskID = ""; - }); + describe("Plans", function () { - it("addPlan", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const plan = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = plan.data.id; - return expect(plan.data.title).is.equal(planName); - }); + it("List", async function () { + const planName = `TestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + const plans = await this.pnp.graph.groups.getById(this.pnp.settings.testGroupId).plans(); + let planExists = false; + plans.forEach(element => { + if (element.id === planAdd.id) { + planExists = true; + return planExists === true; + } + }); + return expect(planExists).is.true; + }); - it("getPlan", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - const plan = await this.pnp.graph.planner.plans.getById(planID)(); - return expect(plan.title).is.equal(planName); - }); + it("Add", async function () { + const planName = `TestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + return expect(planAdd.title).is.equal(planName); + }); - it("updatePlan", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - const newPlanName = `TestPlan_${getRandomString(4)}`; - await this.pnp.graph.planner.plans.getById(planID).update({ title: newPlanName }, planAddResult.data["@odata.etag"]); - const planUpdate = await this.pnp.graph.planner.plans.getById(planID)(); - return expect(planUpdate.title).is.equal(newPlanName); - }); + it("GetById", async function () { + const planName = `TestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + const plan = await this.pnp.graph.planner.plans.getById(planAdd.id)(); + return expect(plan.title).is.equal(planName); + }); - it("deletePlan", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - await this.pnp.graph.planner.plans.getById(planID).delete(); - const plan = await this.pnp.graph.planner.plans.getById(planID)(); - planID = ""; - return expect(plan).is.undefined; - }); + it("Update", async function () { + const planName = `TestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + const newPlanName = `TestPlan_${getRandomString(4)}`; + await this.pnp.graph.planner.plans.getById(planAdd.id).update({ title: newPlanName }, planAdd["@odata.etag"]); + const planUpdate = await this.pnp.graph.planner.plans.getById(planAdd.id)(); + return expect(planUpdate.title).is.equal(newPlanName); + }); - it("getPlanDetails", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - const planDetails = await this.pnp.graph.planner.plans.getById(planID).details(); - return expect(planDetails.id).is.equal(planID); - }); + it("Delete", async function () { + const planName = `TestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + await this.pnp.graph.planner.plans.getById(planAdd.id).delete(planAdd["@odata.etag"]); + let plan = "FAILED"; + try { + await this.pnp.graph.planner.plans.getById(planAdd.id)(); + } catch (e) { + plan = null; + } + return expect(plan).is.null; + }); + + it("GetDetails", async function () { + const planName = `TestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + const planDetails = await this.pnp.graph.planner.plans.getById(planAdd.id).details(); + return expect(planDetails.id).length.greaterThan(0); + }); - it("addPlanTasks", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - const taskName = `TestTask_${getRandomString(4)}`; - const planTaskResult = await this.pnp.graph.planner.plans.getById(planID).tasks.add(planID, taskName); - taskID = planTaskResult.data.id; - return expect(planTaskResult.data.id).is.not.undefined; + it("UpdateDetails", async function () { + const planName = `TestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + const category = `TestCategory_${getRandomString(4)}`; + const planDetails = await this.pnp.graph.planner.plans.getById(planAdd.id).details(); + await this.pnp.graph.planner.plans.getById(planAdd.id).details.update({ categoryDescriptions: { category1: category } }, planDetails["@odata.etag"]); + const planDetailsCheck = await this.pnp.graph.planner.plans.getById(planAdd.id).details(); + return expect(planDetailsCheck.categoryDescriptions.category1).is.equal(category); + }); }); - it("getPlanTasks", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - const taskName = `TestTask_${getRandomString(4)}`; - const planTaskResult = await this.pnp.graph.planner.plans.getById(planID).tasks.add(planID, taskName); - taskID = planTaskResult.data.id; - const tasks = await this.pnp.graph.planner.plans.getById(planID).tasks(); - let taskExists = false; - tasks.forEach(element => { - if (element.id === taskID) { - taskExists = true; - return taskExists === true; + describe("Buckets", function () { + let PlanID = null; + const bucketTemplate = { + planId: "", + name: "", + }; + + before(async function () { + const planName = `BucketTestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + PlanID = planAdd.id; + bucketTemplate.planId = PlanID; + }); + + it("List", async function () { + const bucketName = `TestBucket_${getRandomString(4)}`; + const newBucket = JSON.parse(JSON.stringify(bucketTemplate)); + newBucket.name = bucketName; + const planTaskResult = await this.pnp.graph.planner.buckets.add(newBucket); + const buckets = await this.pnp.graph.groups.getById(this.pnp.settings.testGroupId).plans.getById(PlanID).buckets(); + let bucketExists = false; + buckets.forEach(element => { + if (element.id === planTaskResult.id) { + bucketExists = true; + return bucketExists === true; + } + }); + return expect(bucketExists).is.true; + }); + + it("Add", async function () { + const bucketName = `TestBucket_${getRandomString(4)}`; + const newBucket = JSON.parse(JSON.stringify(bucketTemplate)); + newBucket.name = bucketName; + const planBucketResult = await this.pnp.graph.planner.buckets.add(newBucket); + return expect(planBucketResult.id).is.not.undefined; + }); + + it("GetById", async function () { + const bucketName = `TestBucket_${getRandomString(4)}`; + const newBucket = JSON.parse(JSON.stringify(bucketTemplate)); + newBucket.name = bucketName; + const planBucketResult = await this.pnp.graph.planner.buckets.add(newBucket); + const bucket = await this.pnp.graph.planner.buckets.getById(planBucketResult.id)(); + return expect(bucket.name).is.equal(bucketName); + }); + + it("Update", async function () { + const bucketName = `TestBucket_${getRandomString(4)}`; + const newBucket = JSON.parse(JSON.stringify(bucketTemplate)); + newBucket.name = bucketName; + const planBucketAdd = await this.pnp.graph.planner.buckets.add(newBucket); + const newBucketName = `TestBucket_${getRandomString(4)}`; + await this.pnp.graph.planner.buckets.getById(planBucketAdd.id).update({ name: newBucketName }, planBucketAdd["@odata.etag"]); + const bucket = await this.pnp.graph.planner.buckets.getById(planBucketAdd.id)(); + return expect(bucket.name).is.equal(newBucketName); + }); + + it("Delete", async function () { + const bucketName = `TestBucket_${getRandomString(4)}`; + const newBucket = JSON.parse(JSON.stringify(bucketTemplate)); + newBucket.name = bucketName; + const planBucketAdd = await this.pnp.graph.planner.buckets.add(newBucket); + await this.pnp.graph.planner.buckets.getById(planBucketAdd.id).delete(planBucketAdd["@odata.etag"]); + let bucket = "FAILED"; + try { + bucket = await this.pnp.graph.planner.plans.getById(PlanID).buckets.getById(planBucketAdd.id)(); + } catch (e) { + bucket = null; } + return expect(bucket).is.null; }); - return expect(taskExists).is.not.true; }); - it("getTasksById", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - const taskName = `TestTask_${getRandomString(4)}`; - const planTaskResult = await this.pnp.graph.planner.plans.getById(planID).tasks.add(planID, taskName); - taskID = planTaskResult.data.id; - const task = await this.pnp.graph.planner.tasks.getById(taskID)(); - return expect(task.id).is.equal(taskID); + + describe("Tasks", function () { + + let PlanID = null; + let BucketID = null; + + const taskTemplate = { + planId: "", + bucketId: "", + title: "", + }; + + before(async function () { + const planName = `TaskTestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + PlanID = planAdd.id; + taskTemplate.planId = PlanID; + const newBucket = { planId: PlanID, name: `TaskTestBucket_${getRandomString(4)}` }; + const planBucketResult = await this.pnp.graph.planner.buckets.add(newBucket); + BucketID = planBucketResult.id; + taskTemplate.bucketId = BucketID; + }); + + it("List", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskResult = await this.pnp.graph.planner.tasks.add(newTask); + const tasks = await this.pnp.graph.planner.plans.getById(PlanID).tasks(); + let taskExists = false; + tasks.forEach(element => { + if (element.id === planTaskResult.id) { + taskExists = true; + return taskExists === true; + } + }); + return expect(taskExists).is.true; + }); + + it("Add", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskResult = await this.pnp.graph.planner.tasks.add(newTask); + return expect(planTaskResult.id).is.not.undefined; + }); + + it("GetById", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskResult = await this.pnp.graph.planner.tasks.add(newTask); + const task = await this.pnp.graph.planner.tasks.getById(planTaskResult.id)(); + return expect(task.title).is.equal(taskName); + }); + + it("Update", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const newTaskName = `TestTask_${getRandomString(4)}`; + await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).update({ title: newTaskName }, planTaskAdd["@odata.etag"]); + const task = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id)(); + return expect(task.title).is.equal(newTaskName); + }); + + it("Delete", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).delete(planTaskAdd["@odata.etag"]); + let task = "FAILED"; + try { + task = await this.pnp.graph.planner.plans.getById(PlanID).tasks.getById(planTaskAdd.id)(); + } catch (e) { + task = null; + } + return expect(task).is.null; + }); + + it("GetDetails", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const planTaskDetails = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).details(); + return expect(planTaskDetails.id).length.greaterThan(0); + }); + + it("UpdateDetails", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const planTaskDetails = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).details(); + const description = `TestDescription_${getRandomString(4)}`; + await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).details.update({ description: description }, planTaskDetails["@odata.etag"]); + const planTaskDetailsCheck = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).details(); + return expect(planTaskDetailsCheck.description).is.equal(description); + }); + + it("Plan: ListTasks", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskResult = await this.pnp.graph.planner.tasks.add(newTask); + const planTasks = await this.pnp.graph.planner.plans.getById(PlanID).tasks(); + let planExists = false; + planTasks.forEach(element => { + if (element.id === planTaskResult.id) { + planExists = true; + return planExists === true; + } + }); + return expect(planExists).is.true; + }); + + it("Bucket: ListTasks", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskResult = await this.pnp.graph.planner.tasks.add(newTask); + const bucketTasks = await this.pnp.graph.planner.buckets.getById(BucketID).tasks(); + let bucketExists = false; + bucketTasks.forEach(element => { + if (element.id === planTaskResult.id) { + bucketExists = true; + return bucketExists === true; + } + }); + return expect(bucketExists).is.true; + }); + + it("AssignedTaskBoardFormat: Get", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const atbf = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).assignedToTaskBoardFormat(); + return expect(atbf.id).length.greaterThan(0); + }); + + it("AssignedTaskBoardFormat: Update", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const atbf = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).assignedToTaskBoardFormat(); + const newValue = " 123!"; + await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).assignedToTaskBoardFormat.update({ unassignedOrderHint: newValue }, atbf["@odata.etag"]); + const atbfUpdate = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).assignedToTaskBoardFormat(); + return expect(atbfUpdate.unassignedOrderHint).is.not.empty; + }); + + it("BucketTaskBoardFormat: Get", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const btbf = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).bucketTaskBoardFormat(); + return expect(btbf.id).length.greaterThan(0); + }); + + it("BucketTaskBoardFormat: Update", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const btbf = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).bucketTaskBoardFormat(); + const newValue = " 123!"; + await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).bucketTaskBoardFormat.update({ orderHint: newValue }, btbf["@odata.etag"]); + const btbfUpdate = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).bucketTaskBoardFormat(); + return expect(btbfUpdate.orderHint).is.not.empty; + }); + + it("ProgressTaskBoardTaskFormat: Get", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const ptbf = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).progressTaskBoardFormat(); + return expect(ptbf.id).length.greaterThan(0); + }); + + it("ProgressTaskBoardTaskFormat: Update", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskAdd = await this.pnp.graph.planner.tasks.add(newTask); + const ptbf = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).progressTaskBoardFormat(); + const newValue = " 123!"; + await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).progressTaskBoardFormat.update({ orderHint: newValue }, ptbf["@odata.etag"]); + const ptbfUpdate = await this.pnp.graph.planner.tasks.getById(planTaskAdd.id).progressTaskBoardFormat(); + return expect(ptbfUpdate.orderHint).is.not.empty; + }); + + }); - it("updateTask", async function () { - const groupName = `TestGroup_${getRandomString(4)}`; - const groupAddResult = await this.pnp.graph.groups.add(groupName, groupName, GroupType.Office365); - groupID = groupAddResult.data.id; - const planName = `TestPlan_${getRandomString(4)}`; - const planAddResult = await this.pnp.graph.planner.plans.add(groupID, planName); - planID = planAddResult.data.id; - const taskName = `TestTask_${getRandomString(4)}`; - const planTaskResult = await this.pnp.graph.planner.plans.getById(planID).tasks.add(planID, taskName); - taskID = planTaskResult.data.id; - const task = await this.pnp.graph.planner.tasks.getById(taskID)(); - return expect(task.id).is.equal(taskID); + describe("User Tasks", function () { + let PlanID = null; + let testUserName = null; + const taskTemplate = { + planId: "", + title: "", + assignments: {}, + }; + + before(async function () { + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + const planName = `TaskTestPlan_${getRandomString(4)}`; + const newPlan = JSON.parse(JSON.stringify(planTemplate)); + newPlan.title = planName; + const planAdd = await this.pnp.graph.planner.plans.add(newPlan); + PlanIds.push(planAdd.id); + PlanID = planAdd.id; + const userInfo = await getValidUser.call(this); + testUserName = userInfo.userPrincipalName; + const user = await this.pnp.graph.users.getById(testUserName)(); + taskTemplate.planId = PlanID; + taskTemplate.assignments[user.id] = { + "@odata.type": "#microsoft.graph.plannerAssignment", + orderHint: " !", + }; + }); + + it("List", async function () { + const taskName = `TestTask_${getRandomString(4)}`; + const newTask = JSON.parse(JSON.stringify(taskTemplate)); + newTask.title = taskName; + const planTaskResult = await this.pnp.graph.planner.tasks.add(newTask); + const userTasks = await this.pnp.graph.users.getById(testUserName).tasks(); + let taskExists = false; + userTasks.forEach(element => { + if (element.id === planTaskResult.id) { + taskExists = true; + return taskExists === true; + } + }); + return expect(taskExists).is.true; + }); }); - afterEach(async function () { - const promises = [Promise.resolve()]; - if (taskID !== "") { - promises.push(this.pnp.graph.planner.plans.getById(planID).tasks.getById(taskID).delete()); - } - if (planID !== "") { - promises.push(this.pnp.graph.planner.plans.getById(planID).delete()); - } - if (groupID !== "") { - promises.push(this.pnp.graph.groups.getById(groupID).delete()); + after(async function () { + if (PlanIds.length > 0) { + PlanIds.forEach(async (id) => { + await this.pnp.graph.planner.plans.getById(id).delete(); + }); } - return Promise.all(promises); }); }); From 7c6499b589774b697ef96e449979612994c7b14b Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Fri, 19 Jan 2024 15:51:15 -0500 Subject: [PATCH 094/171] added button to spa testing page --- CHANGELOG.md | 6 ++++ debug/serve/main.ts | 66 ++++++++++++++++++++++++++++++-------------- debug/serve/spa.html | 5 ++-- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f39d16738..f691609dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Removed +- queryable + - removed [extension](https://pnp.github.io/pnpjs/queryable/extensions/) capabilities from core library + - graph - paged method removed from IGraphQueryableCollection - ./operations.ts methods moved to ./graphqueryable.ts @@ -32,6 +35,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed +- testing + - SPA application now has a button to trigger the code vs running on page load + - queryable - moved add-props.ts and request-builders.ts to index.ts diff --git a/debug/serve/main.ts b/debug/serve/main.ts index f9ad2ef42..20a059f61 100644 --- a/debug/serve/main.ts +++ b/debug/serve/main.ts @@ -1,14 +1,43 @@ -import { MSAL, MSALOptions } from "@pnp/msaljsclient/index.js"; +import { MSAL } from "@pnp/msaljsclient/index.js"; import { spfi, SPBrowser } from "@pnp/sp"; import "@pnp/sp/webs"; import { settings } from "../../settings.js"; // import { graph } from "@pnp/graph/presets/all"; // ****** -// Please edit this file and do any testing required. Please do not submit changes as part of a PR. +// Please edit the main function and do any testing required. Please do not submit changes as part of a PR. // ****** -// ensure our DOM is ready for us to do stuff +/** + * The testing function whose code is executed + * + * @param resultDiv The div into which you can write your result + */ +async function main(resultDiv: HTMLDivElement) { + + const html = []; + + try { + + // Make sure to add `https://localhost:8080/spa.html` as a Redirect URI in your testing's AAD App Registration + const sp = spfi().using( + SPBrowser({ baseUrl: settings.testing.sp.url }), + MSAL({ configuration: settings.testing.sp.msal.init, authParams: { scopes: settings.testing.sp.msal.scopes } }) + ); + + const r = await sp.web(); + + html.push(``); + + } catch (err) { + + html.push(`Error:
    ${JSON.stringify(err.message, null, 4)}
    `); + } + + resultDiv.innerHTML = html.join("
    "); +} + +// ensure our DOM is ready for us to do stuff and either wire up the button even or fire the main function document.onreadystatechange = async () => { if (document.readyState === "interactive") { @@ -22,26 +51,23 @@ document.onreadystatechange = async () => { // }, // }); - const e = document.getElementById("pnp-test"); + const resultDiv = document.getElementById("pnp-test"); + const body = document.getElementsByTagName("body"); - const html = []; + if (body[0].hasAttribute("isPnPSPA")) { - try { + // id in spa use button event to fire + const b = document.getElementById("pnp-button"); + b.addEventListener("click", async function (e: MouseEvent) { - // Make sure to add `https://localhost:8080/spa.html` as a Redirect URI in your testing's AAD App Registration - const sp = spfi().using( - SPBrowser({ baseUrl: settings.testing.sp.url}), - MSAL({configuration:settings.testing.sp.msal.init, authParams: {scopes: settings.testing.sp.msal.scopes}}) - ); + e.preventDefault(); + await main(resultDiv); + }); - const r = await sp.web(); + } else { - html.push(``); - - } catch (e) { - html.push(`Error:
    ${JSON.stringify(e.message, null, 4)}
    `); + // id not in the spa, just run it (old script editor webpart test) + await main(resultDiv); } - - e.innerHTML = html.join("
    "); - } -}; + }; +} diff --git a/debug/serve/spa.html b/debug/serve/spa.html index 34c3b01a0..740126eae 100644 --- a/debug/serve/spa.html +++ b/debug/serve/spa.html @@ -3,9 +3,10 @@ PnPjs SPA Testing Page - +

    This page can be used to test SPA application access / issues locally.

    -
    +

    +
    From ea872436c6fa196280d07cd7f1a4fe5effe3d00f Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 23 Jan 2024 08:25:10 -0500 Subject: [PATCH 095/171] updates to rearrange graph parsing/batch parsing --- packages/graph/batching.ts | 66 ++++++++++++++++--------- packages/graph/mail/messages.ts | 4 +- packages/queryable/behaviors/parsers.ts | 22 ++------- 3 files changed, 50 insertions(+), 42 deletions(-) diff --git a/packages/graph/batching.ts b/packages/graph/batching.ts index dcfa6fb7a..f8b693347 100644 --- a/packages/graph/batching.ts +++ b/packages/graph/batching.ts @@ -372,36 +372,58 @@ function formatRequests(requests: RequestRecord[], batchId: string): IGraphBatch }); } -function parseResponse(graphResponse: IGraphBatchResponse): Promise { +function parseResponse(graphResponse: IGraphBatchResponse): ParsedGraphResponse { - return new Promise((resolve, reject) => { + // we need to see if we have an error and report that + if (hOP(graphResponse, "error")) { + throw Error(`Error Porcessing Batch: (${graphResponse.error.code}) ${graphResponse.error.message}`); + } - // we need to see if we have an error and report that - if (hOP(graphResponse, "error")) { - return reject(Error(`Error Porcessing Batch: (${graphResponse.error.code}) ${graphResponse.error.message}`)); - } + const parsedResponses: Response[] = new Array(graphResponse.responses.length).fill(null); - const parsedResponses: Response[] = new Array(graphResponse.responses.length).fill(null); + for (let i = 0; i < graphResponse.responses.length; ++i) { - for (let i = 0; i < graphResponse.responses.length; ++i) { + const response = graphResponse.responses[i]; - const response = graphResponse.responses[i]; - // we create the request id by adding 1 to the index, so we place the response by subtracting one to match - // the array of requests and make it easier to map them by index - const responseId = parseInt(response.id, 10) - 1; + // we create the request id by adding 1 to the index, so we place the response by subtracting one to match + // the array of requests and make it easier to map them by index + const responseId = parseInt(response.id, 10) - 1; - if (response.status === 204) { + const contentType = response.headers["Content-Type"]; - parsedResponses[responseId] = new Response(); - } else { + const { status, statusText } = response; - parsedResponses[responseId] = new Response(JSON.stringify(response.body), response); - } + // this is to handle special cases before we pass to the default logic + + if (status === 204) { + + // this handles cases where the response body is empty and has a 204 response status (No Content) + parsedResponses[responseId] = new Response(null, { status, statusText }); + + } else if (status === 302) { + + // this is the case where (probably) a file download was included in the batch and the service has returned a 302 redirect to that file + // the url should be in the response's location header, so we transform the response to a 200 with the location in the body as 302 will be an + // error in the default parser used on the individual request + + // eslint-disable-next-line @typescript-eslint/dot-notation + parsedResponses[responseId] = new Response(JSON.stringify({ location: response.headers["Location"] || "" }), { status: 200, statusText }); + + } else if (status === 200 && /^image[\\|/]/i.test(contentType)) { + + // this handles the case where image content is returned as base 64 data in the batch body, such as /me/photos/$value (https://github.com/pnp/pnpjs/issues/2825) + + const encoder = new TextEncoder(); + parsedResponses[responseId] = new Response(encoder.encode(response.body), { status, statusText }); + + } else { + + parsedResponses[responseId] = new Response(JSON.stringify(response.body), response); } + } - resolve({ - nextLink: graphResponse.nextLink, - responses: parsedResponses, - }); - }); + return { + nextLink: graphResponse.nextLink, + responses: parsedResponses, + }; } diff --git a/packages/graph/mail/messages.ts b/packages/graph/mail/messages.ts index 4e569fd1f..134de7389 100644 --- a/packages/graph/mail/messages.ts +++ b/packages/graph/mail/messages.ts @@ -138,7 +138,7 @@ export const Messages = graphInvokableFactory(_Messages); */ @updateable() @deleteable() -export class _MessageRule extends _GraphInstance {} +export class _MessageRule extends _GraphInstance { } export interface IMessageRule extends _MessageRule, IUpdateable, IDeleteable { } export const MessageRule = graphInvokableFactory(_MessageRule); @@ -148,7 +148,7 @@ export const MessageRule = graphInvokableFactory(_MessageRule); @defaultPath("messageRules") @getById(MessageRule) @addable() -export class _MessageRules extends _GraphCollection {} +export class _MessageRules extends _GraphCollection { } export interface IMessageRules extends _MessageRules, IGetById, IAddable { } export const MessageRules = graphInvokableFactory(_MessageRules); diff --git a/packages/queryable/behaviors/parsers.ts b/packages/queryable/behaviors/parsers.ts index 6fe2fe264..3aec2f9d1 100644 --- a/packages/queryable/behaviors/parsers.ts +++ b/packages/queryable/behaviors/parsers.ts @@ -1,5 +1,5 @@ import { Queryable } from "../queryable.js"; -import { hOP, TimelinePipe, parseToAtob } from "@pnp/core"; +import { hOP, TimelinePipe } from "@pnp/core"; import { isFunc } from "@pnp/core"; export function DefaultParse(): TimelinePipe { @@ -25,21 +25,7 @@ export function TextParse(): TimelinePipe { export function BlobParse(): TimelinePipe { - return parseBinderWithErrorCheck( async (response) => { - const binaryResponseBody = parseToAtob(await response.text()); - // handle batch responses for things that are base64, like photos https://github.com/pnp/pnpjs/issues/2825 - if(binaryResponseBody){ - // Create an array buffer from the binary string - const arrayBuffer = new ArrayBuffer(binaryResponseBody.length); - const uint8Array = new Uint8Array(arrayBuffer); - for (let i = 0; i < binaryResponseBody.length; i++) { - uint8Array[i] = binaryResponseBody.charCodeAt(i); - } - // Create a Blob from the array buffer - return new Blob([arrayBuffer], {type:response.headers.get("Content-Type")}); - } - return response.blob(); - }); + return parseBinderWithErrorCheck(r => r.blob()); } export function JSONParse(): TimelinePipe { @@ -69,8 +55,7 @@ export function JSONHeaderParse(): TimelinePipe { // patch to handle cases of 200 response with no or whitespace only bodies (#487 & #545) const txt = await response.text(); const json = txt.replace(/\s/ig, "").length > 0 ? JSON.parse(txt) : {}; - const all = { data: { ...parseODataJSON(json) }, headers: { ...response.headers } }; - return all; + return { data: { ...parseODataJSON(json) }, headers: { ...response.headers } }; }); } @@ -123,6 +108,7 @@ export function parseBinderWithErrorCheck(impl: (r: Response) => Promise): instance.on.parse(async (url: URL, response: Response, result: any): Promise<[URL, Response, any]> => { if (response.ok && typeof result === "undefined") { + const respClone = response.clone(); // https://github.com/node-fetch/node-fetch?tab=readme-ov-file#custom-highwatermark From 10820799eb96295019d02fc8da09d88e1b82a47b Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 23 Jan 2024 09:58:25 -0500 Subject: [PATCH 096/171] including init for new responses in graph batching --- packages/graph/batching.ts | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/graph/batching.ts b/packages/graph/batching.ts index f8b693347..71a2d2feb 100644 --- a/packages/graph/batching.ts +++ b/packages/graph/batching.ts @@ -1,4 +1,4 @@ -import { isUrlAbsolute, hOP, TimelinePipe, getGUID, CopyFrom, objectDefinedNotNull, isFunc, combine } from "@pnp/core"; +import { isUrlAbsolute, hOP, TimelinePipe, getGUID, CopyFrom, objectDefinedNotNull, isFunc, combine, jsS } from "@pnp/core"; import { parseBinderWithErrorCheck, Queryable, body, InjectHeaders } from "@pnp/queryable"; import { IGraphQueryable, _GraphQueryable, graphPost } from "./graphqueryable.js"; import { GraphFI } from "./fi.js"; @@ -47,9 +47,7 @@ interface IGraphBatchResponseFragment { statusText?: string; method: string; url: string; - headers?: string[][] | { - [key: string]: string; - }; + headers?: [string, string][] | Record; body?: any; } @@ -391,14 +389,15 @@ function parseResponse(graphResponse: IGraphBatchResponse): ParsedGraphResponse const contentType = response.headers["Content-Type"]; - const { status, statusText } = response; + const { status, statusText, headers, body } = response; - // this is to handle special cases before we pass to the default logic + const init = { status, statusText, headers }; + // this is to handle special cases before we pass to the default parsing logic if (status === 204) { // this handles cases where the response body is empty and has a 204 response status (No Content) - parsedResponses[responseId] = new Response(null, { status, statusText }); + parsedResponses[responseId] = new Response(null, init); } else if (status === 302) { @@ -406,19 +405,23 @@ function parseResponse(graphResponse: IGraphBatchResponse): ParsedGraphResponse // the url should be in the response's location header, so we transform the response to a 200 with the location in the body as 302 will be an // error in the default parser used on the individual request + init.status = 200; // eslint-disable-next-line @typescript-eslint/dot-notation - parsedResponses[responseId] = new Response(JSON.stringify({ location: response.headers["Location"] || "" }), { status: 200, statusText }); + parsedResponses[responseId] = new Response(jsS({ location: headers["Location"] || "" }), init); } else if (status === 200 && /^image[\\|/]/i.test(contentType)) { // this handles the case where image content is returned as base 64 data in the batch body, such as /me/photos/$value (https://github.com/pnp/pnpjs/issues/2825) const encoder = new TextEncoder(); - parsedResponses[responseId] = new Response(encoder.encode(response.body), { status, statusText }); + parsedResponses[responseId] = new Response(encoder.encode(body), init); } else { - parsedResponses[responseId] = new Response(JSON.stringify(response.body), response); + // this is the default case where we have a json body which we remake into a string for the downstream parser to parse again + // a bit circular, but this provides consistent behavior for downstream parsers + + parsedResponses[responseId] = new Response(jsS(body), init); } } From 7e3c665c83ee1d52616a375b0f916c5801f9cf20 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Tue, 30 Jan 2024 07:03:33 -0700 Subject: [PATCH 097/171] Calendar WIP --- packages/graph/calendars/funcs.ts | 55 +++++++++++--- packages/graph/calendars/index.ts | 4 - packages/graph/calendars/types.ts | 117 ++++++++++++++++++++++++------ packages/graph/calendars/users.ts | 17 +++-- 4 files changed, 148 insertions(+), 45 deletions(-) diff --git a/packages/graph/calendars/funcs.ts b/packages/graph/calendars/funcs.ts index 9e5480042..75b1872cf 100644 --- a/packages/graph/calendars/funcs.ts +++ b/packages/graph/calendars/funcs.ts @@ -1,11 +1,23 @@ -import { IGraphQueryable, GraphCollection, IGraphCollection } from "../graphqueryable.js"; -import { EmailAddress, Event as IEvent } from "@microsoft/microsoft-graph-types"; -import { Endpoint } from "../behaviors/endpoint.js"; +import { body } from "@pnp/queryable/index.js"; +import { IGraphQueryable, GraphCollection, IGraphCollection, IGraphInstance, graphPost, GraphQueryable } from "../graphqueryable.js"; +import { EmailAddress, Event as IEvent, Reminder as IReminder, MeetingTimeSuggestionsResult, LocationConstraint, TimeConstraint} from "@microsoft/microsoft-graph-types"; +import { CalendarView, ICalendarView } from "./types.js"; interface IEventWithTag extends IEvent { "@odata.etag": string; } +export interface IFindMeetingTimesRequest{ + attendees?: EmailAddress[]; + locationConstraint?: LocationConstraint; + timeConstraint?: TimeConstraint; + meetingDuration?: string; + maxCandidates?: number; + isOrganizerOptional?: boolean; + returnSuggestionReasons?: boolean; + minimumAttendeePercentage?: number; +} + /** * Get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, * from the user's default calendar, or from some other calendar of the user's @@ -14,26 +26,30 @@ interface IEventWithTag extends IEvent { * @param start start time * @param end end time */ -export function calendarView(this: IGraphQueryable, start: string, end: string): IGraphCollection { - - const query = GraphCollection(this, "calendarView"); - query.query.set("startDateTime", start); - query.query.set("endDateTime", end); - return query; +export function calendarView(this: IGraphQueryable, start: string, end: string): ICalendarView { + return CalendarView(this, start, end); } export type ICalendarViewInfo = IEventWithTag; +/** + * Suggest meeting times and locations based on organizer and attendee availability, and time or location constraints specified as parameters. + + * @param this IGraphQueryable instance + * @param properties The body of the meetingTimeSuggestionsRequest resource that contains the parameters for the operation. + */ +export async function findMeetingTimes(this: IGraphQueryable, properties?: IFindMeetingTimesRequest): Promise> { + return graphPost(GraphCollection(this,"findMeetingTimes"), body(properties)); +} + /** * Get the emailAddress objects that represent all the meeting rooms in the user's tenant or in a specific room list. - * - This is a beta graph feature and uses the beta endpoint. * * @param this IGraphQueryable instance * @param roomList The SMTP address associated with the room list. */ export function findRooms(this: IGraphQueryable, roomList?: string): IGraphCollection { const query = GraphCollection(this, roomList ? "findRooms(RoomList=@roomList)" : "findRooms"); - query.using(Endpoint("beta")); if (roomList) { query.query.set("@roomList", `'${roomList}'`); } @@ -56,3 +72,20 @@ export function instances(this: IGraphQueryable, start: string, end: string): IG } export type IInstance = IEventWithTag; + +/** + * Get the list of event remindres defined by a time range, + * + * @param this IGraphQueryable instance + * @param start start time + * @param end end time + */ +export function reminderView(this: IGraphQueryable, start: string, end: string): IGraphCollection { + + const query = GraphCollection(this, "reminderView"); + query.query.set("startDateTime", start); + query.query.set("endDateTime", end); + return query; +} + +export type IReminderInfo = IReminder; \ No newline at end of file diff --git a/packages/graph/calendars/index.ts b/packages/graph/calendars/index.ts index ae86d7eef..8f51031ad 100644 --- a/packages/graph/calendars/index.ts +++ b/packages/graph/calendars/index.ts @@ -12,7 +12,3 @@ export { IEvent, IEvents, } from "./types.js"; - -export { - ICalendarViewInfo, -} from "./funcs.js"; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index 9dd39a608..ff8aa52c8 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -1,21 +1,34 @@ import { body } from "@pnp/queryable"; -import { Event as IEventType, Calendar as ICalendarType } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, _GraphInstance, graphInvokableFactory, graphPost } from "../graphqueryable.js"; -import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById } from "../decorators.js"; +import { Event as IEventType, Calendar as ICalendarType, ScheduleInformation as IScheduleInformationType, DateTimeTimeZone as IDateTimeTimeZoneType, Recipient, TimeSlot, } from "@microsoft/microsoft-graph-types"; +import { GraphQueryable, IGraphQueryable, _GraphCollection, _GraphInstance, _GraphQueryable, graphInvokableFactory, graphPost } from "../graphqueryable.js"; +import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById, IAddable, addable, hasDelta, IHasDelta } from "../decorators.js"; import { calendarView, instances } from "./funcs.js"; /** * Calendar */ +@deleteable() +@updateable() export class _Calendar extends _GraphInstance { public get events(): IEvents { return Events(this); } + /** + * Get the free/busy availability information for a collection of users, + * distributions lists, or resources (rooms or equipment) for a specified time period. + * + * @param properties The set of properties used to get the schedule + */ + public async getSchedule(properties: IScheduleInformationType): Promise { + return graphPost(Calendar(this, "getSchedule"), body(properties)); + } + public calendarView = calendarView; + } -export interface ICalendar extends _Calendar { } +export interface ICalendar extends _Calendar, IUpdateable, IDeleteable { } export const Calendar = graphInvokableFactory(_Calendar); /** @@ -23,16 +36,80 @@ export const Calendar = graphInvokableFactory(_Calendar); */ @defaultPath("calendars") @getById(Calendar) -export class _Calendars extends _GraphCollection { } -export interface ICalendars extends _Calendars, IGetById { } +@addable() +export class _Calendars extends _GraphCollection { + constructor(baseUrl: string | _GraphQueryable, start: string, end: string) { + debugger; + super(baseUrl); + this.query.set("startDateTime", start); + this.query.set("endDateTime", end); + } + +} +export interface ICalendars extends _Calendars, IGetById, IAddable { } export const Calendars = graphInvokableFactory(_Calendars); +/** + * CalendarView + */ +export class _CalendarView extends _GraphCollection { + constructor(baseUrl: string | _GraphQueryable, start: string, end: string) { + super(baseUrl, "calendarView"); + this.query.set("startDateTime", start); + this.query.set("endDateTime", end); + } + + public async delta(token?: string): Promise { + return graphPost(GraphQueryable(this, `delta?${this.query}`), body({ token })); + } +} +export interface ICalendarView extends _CalendarView { } +export const CalendarView = (baseUrl: string | IGraphQueryable, start: string, end: string): _CalendarView => new _CalendarView(baseUrl, start, end); +//export const CalendarView = graphInvokableFactory(_CalendarView); + /** * Event */ @deleteable() @updateable() export class _Event extends _GraphInstance { + + public async accept(comment?: string, sendResponse?: boolean): Promise { + return graphPost(Event(this, "accept"), body({ comment, sendResponse })); + } + + public async cancel(comment?: string): Promise { + return graphPost(Event(this, "cancel")); + } + + public async decline(comment?: string, sendResponse?: boolean, proposedNewTime?: TimeSlot): Promise { + if (proposedNewTime) { + sendResponse = true; + } + return graphPost(Event(this, "decline"), body({ comment, sendResponse, proposedNewTime })); + } + + public async dismissReminder(): Promise { + return graphPost(Event(this, "dismissReminder")); + } + + public async forward(toRecipients: Recipient[], comment?: string): Promise { + return graphPost(Event(this, "forward"), body({ comment, toRecipients })); + } + + public async snoozeReminder(newReminderTime: IDateTimeTimeZoneType): Promise { + return graphPost(Event(this, "snoozeReminder"), body({ newReminderTime })); + } + + public async tentativelyAccept(comment?: string, sendResponse?: boolean, proposedNewTime?: TimeSlot): Promise { + if (proposedNewTime) { + sendResponse = true; + } + return graphPost(Event(this, "tentativelyAccept"), body({ comment, sendResponse, proposedNewTime })); + } + + // TODO:: implement event messages? + public instances = instances; } export interface IEvent extends _Event, IDeleteable, IUpdateable { } @@ -43,24 +120,9 @@ export const Event = graphInvokableFactory(_Event); */ @defaultPath("events") @getById(Event) -export class _Events extends _GraphCollection { - - /** - * Adds a new event to the collection - * - * @param properties The set of properties used to create the event - */ - public async add(properties: IEventType): Promise { - - const data = await graphPost(this, body(properties)); - - return { - data, - event: (this).getById(data.id), - }; - } -} -export interface IEvents extends _Events, IGetById { } +@addable() +export class _Events extends _GraphCollection { } +export interface IEvents extends _Events, IGetById, IAddable { } export const Events = graphInvokableFactory(_Events); /** @@ -70,3 +132,10 @@ export interface IEventAddResult { data: IEventType; event: IEvent; } + +export interface IGetScheduleRequest { + schedules: string[]; + startTime: IDateTimeTimeZoneType; + endTime: IDateTimeTimeZoneType; + availabilityViewInterval?: number; +} \ No newline at end of file diff --git a/packages/graph/calendars/users.ts b/packages/graph/calendars/users.ts index 7eb87fc4f..c9f04d902 100644 --- a/packages/graph/calendars/users.ts +++ b/packages/graph/calendars/users.ts @@ -1,8 +1,9 @@ import { addProp } from "@pnp/queryable"; +import { MeetingTimeSuggestionsResult } from "@microsoft/microsoft-graph-types"; import { _User } from "../users/types.js"; -import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars } from "./types.js"; -import { calendarView, ICalendarViewInfo } from "./funcs.js"; -import { IGraphCollection } from "../graphqueryable.js"; +import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars, ICalendarView} from "./types.js"; +import { reminderView, IReminderInfo, findMeetingTimes, IFindMeetingTimesRequest, calendarView} from "./funcs.js"; +import { IGraphCollection, IGraphInstance } from "../graphqueryable.js"; declare module "../users/types" { interface _User { @@ -10,19 +11,23 @@ declare module "../users/types" { readonly calendars: ICalendars; readonly attachmentFiles: ICalendar; readonly events: IEvents; - calendarView(start: string, end: string): IGraphCollection; + calendarView(start: string, end: string): ICalendarView; + findMeetingTimes(properties?: IFindMeetingTimesRequest): Promise>; + reminderView(start: string, end: string): IGraphCollection; } interface IUser { readonly calendar: ICalendar; readonly calendars: ICalendars; readonly attachmentFiles: ICalendar; readonly events: IEvents; - calendarView(start: string, end: string): IGraphCollection; + calendarView(start: string, end: string): ICalendarView; + reminderView(start: string, end: string): IGraphCollection; } } addProp(_User, "calendar", Calendar); addProp(_User, "calendars", Calendars); addProp(_User, "events", Events); - _User.prototype.calendarView = calendarView; +_User.prototype.findMeetingTimes = findMeetingTimes; +_User.prototype.reminderView = reminderView; From 8a7d2134d513a7f6a4f9db418f55172cda0ba5e0 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Tue, 30 Jan 2024 07:07:43 -0700 Subject: [PATCH 098/171] WIP --- packages/graph/calendars/funcs.ts | 2 +- packages/graph/calendars/groups.ts | 6 +++++- packages/graph/calendars/types.ts | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/graph/calendars/funcs.ts b/packages/graph/calendars/funcs.ts index 75b1872cf..18d6a7421 100644 --- a/packages/graph/calendars/funcs.ts +++ b/packages/graph/calendars/funcs.ts @@ -1,5 +1,5 @@ import { body } from "@pnp/queryable/index.js"; -import { IGraphQueryable, GraphCollection, IGraphCollection, IGraphInstance, graphPost, GraphQueryable } from "../graphqueryable.js"; +import { IGraphQueryable, GraphCollection, IGraphCollection, IGraphInstance, graphPost } from "../graphqueryable.js"; import { EmailAddress, Event as IEvent, Reminder as IReminder, MeetingTimeSuggestionsResult, LocationConstraint, TimeConstraint} from "@microsoft/microsoft-graph-types"; import { CalendarView, ICalendarView } from "./types.js"; diff --git a/packages/graph/calendars/groups.ts b/packages/graph/calendars/groups.ts index 0bc1c571b..7c3cbf1c1 100644 --- a/packages/graph/calendars/groups.ts +++ b/packages/graph/calendars/groups.ts @@ -1,19 +1,23 @@ import { addProp } from "@pnp/queryable"; import { _Group } from "../groups/types.js"; -import { Calendar, ICalendar, IEvents, Events } from "./types.js"; +import { Calendar, ICalendar, IEvents, Events, ICalendarView } from "./types.js"; +import { calendarView } from "./funcs.js"; declare module "../groups/types" { interface _Group { readonly calendar: ICalendar; readonly attachmentFiles: ICalendar; readonly events: IEvents; + calendarView(start: string, end: string): ICalendarView; } interface IGroup { readonly calendar: ICalendar; readonly attachmentFiles: ICalendar; readonly events: IEvents; + calendarView(start: string, end: string): ICalendarView; } } addProp(_Group, "calendar", Calendar); addProp(_Group, "events", Events); +_Group.prototype.calendarView = calendarView; \ No newline at end of file diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index ff8aa52c8..8ea958240 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -1,7 +1,7 @@ import { body } from "@pnp/queryable"; import { Event as IEventType, Calendar as ICalendarType, ScheduleInformation as IScheduleInformationType, DateTimeTimeZone as IDateTimeTimeZoneType, Recipient, TimeSlot, } from "@microsoft/microsoft-graph-types"; import { GraphQueryable, IGraphQueryable, _GraphCollection, _GraphInstance, _GraphQueryable, graphInvokableFactory, graphPost } from "../graphqueryable.js"; -import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById, IAddable, addable, hasDelta, IHasDelta } from "../decorators.js"; +import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById, IAddable, addable } from "../decorators.js"; import { calendarView, instances } from "./funcs.js"; /** From 1b4175971ce27088afdbb83b708ccaaa55455e16 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 30 Jan 2024 09:49:30 -0500 Subject: [PATCH 099/171] update for graph taxonomy get children, test recording doc --- packages/graph/batching.ts | 2 +- packages/graph/taxonomy/types.ts | 40 ++++++++++++ test/test-recording-setup.md | 103 +++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 test/test-recording-setup.md diff --git a/packages/graph/batching.ts b/packages/graph/batching.ts index 71a2d2feb..aa84b7c4b 100644 --- a/packages/graph/batching.ts +++ b/packages/graph/batching.ts @@ -111,7 +111,7 @@ class BatchQueryable extends _GraphQueryable { // do a fix up on the url once other pre behaviors have had a chance to run this.on.pre(async function (this: BatchQueryable, url, init, result) { - const versRegex = /(https:\/\/.*?[\\|/]v1\.0|beta[\\|/])/i; + const versRegex = /(https:\/\/.*?\/(v1.0|beta)\/)/i; const m = url.match(versRegex); diff --git a/packages/graph/taxonomy/types.ts b/packages/graph/taxonomy/types.ts index 5ed609e09..9ce3fc7cc 100644 --- a/packages/graph/taxonomy/types.ts +++ b/packages/graph/taxonomy/types.ts @@ -1,6 +1,7 @@ import { IAddable, IDeleteable, IGetById, IUpdateable, addable, defaultPath, deleteable, getById, updateable } from "../../graph/decorators.js"; import { _GraphInstance, graphInvokableFactory, _GraphCollection } from "../graphqueryable.js"; import { TermStore as ITermStoreType } from "@microsoft/microsoft-graph-types"; +import { createBatch } from "@pnp/graph/batching"; /** * Describes a collection of Form objects @@ -75,6 +76,40 @@ export class _TermSet extends _GraphInstance { public getTermById(id: string): ITerm { return Term(this, `terms/${id}`); } + + /** + * Gets all the direct children of the current termset as a tree, however is not ordered based on the SP sorting info + * + * @returns Array of children for this item + */ + public async getAllChildrenAsTree(): Promise { + + const visitor = async (source: { children(): Promise }, parent: IOrderedTermInfo[]) => { + + const children = await source.children(); + + for (let i = 0; i < children.length; i++) { + + const child = children[i]; + + const orderedTerm: Partial = { + children: [], + defaultLabel: child.labels.find(l => l.isDefault).name, + ...child, + }; + + parent.push(orderedTerm); + + await visitor(this.getTermById(child.id), orderedTerm.children); + } + }; + + const tree: IOrderedTermInfo[] = []; + + await visitor(this, tree); + + return tree; + } } export interface ITermSet extends _TermSet, IUpdateable, IDeleteable { } export const TermSet = graphInvokableFactory(_TermSet); @@ -122,3 +157,8 @@ export const Terms = graphInvokableFactory(_Terms); export class _Relations extends _GraphCollection { } export interface IRelations extends _Relations, IAddable> { } export const Relations = graphInvokableFactory(_Relations); + +export interface IOrderedTermInfo extends ITermStoreType.Term { + children: ITermStoreType.Term[]; + defaultLabel: string; +} diff --git a/test/test-recording-setup.md b/test/test-recording-setup.md new file mode 100644 index 000000000..3b3698c5d --- /dev/null +++ b/test/test-recording-setup.md @@ -0,0 +1,103 @@ +# PnPjs Test Recording + +The testing recording is available to provide a way to record and rerun tests to save network traffic and speed up integration testing of changes, especially to core library components. + +## Activate test recording + +In testing you can use: + + `--record` flag to enable recording in read mode, which will use any recorded test data it finds + + Using `--record write` will start the recorder in write mode, meaning it will execute requests and record the results. + + ## What is recorded + + The recording records both input parameters and network responses into files stored (by default) in a `.recordings` folder. All of the properties are stored in a single file `test-props.json` in the form: + + { + "{test id guid}":{ + "name":"PnPJSTest_dTHOvBPwVN", + "id":"cf328183-0e3c-4c69-b181-fa462a958db7" + }, + "{test2 id guid}":{ + "prop1":"PnPJSTest_dTHOvBPwVN", + "prop2":"some other value" + } + // ... + } + + This allows the tests to be consistent in checking responses against input values and behave the same across runs. + + The response data is recorded in files with computed names, but starting with the test id. Some tests execute many requests and all are recorded. We record the response, request body, and request init separately as this works better with the per-request Queryable model. + + ## Adding recording to a test function + +Each test is defined by a single function, which in Mocha looks like the below. Note that on each run different random values will be used. We also have no way to identify this test against all the other tests. + +```TS +it("attachmentFiles", async function () { + + // add some attachments to an item + const r = await list.items.add({ + Title: `Test_${getRandomString(4)}`, + }); + + await r.item.attachmentFiles.add(`att_${getRandomString(4)}.txt`, "Some Content"); + await r.item.attachmentFiles.add(`att_${getRandomString(4)}.txt`, "Some Content"); + + return expect(r.item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); +}); +``` + +To transform the test function into a PnP Test function we need to take two main steps, wrap the test function and handle the props. We wrap the test in the pnpTest wrapper function, and supply an id. This id is a new guid that must be unique within the scope of our tests. Don't worry - we throw an error if guids are reused. + +The second thing is to handle the props. To do this we augment `this` for the test with a `.props` method that takes any plain object and returns it based on some simple logic: + +|Recording Mode|Behavior| +|---|---| +|Off|Pass-through the supplied values| +|Read|Attempt to read values from the `test-props.json` data and returns the values found, or failing to find any returns the properties supplied| +|Write|Write the supplied values to `test-props.json` and return the values.| + +> Note: If you change the number or type of the properties within the test function, those recorded results will need to be updated or the test will break as the old values will be returned. There is no logic to handle cases where we stored 3 values but the test now needs 4. + + +```TS +import { pnpTest } from "../pnp-test.js"; + +it("attachmentFiles", pnpTest("9bc6dba6-6690-4453-8d13-4f42e051a245", async function () { + + const props = await this.props({ + itemTitle: `Test_${getRandomString(4)}`, + attachmentFile1Name: `att_${getRandomString(4)}.txt`, + attachmentFile2Name: `att_${getRandomString(4)}.txt`, + }); + + // add some attachments to an item + const r = await list.items.add({ + Title: props.itemTitle, + }); + + await r.item.attachmentFiles.add(props.attachmentFile1Name, "Some Content"); + await r.item.attachmentFiles.add(props.attachmentFile2Name, "Some Content"); + + return expect(r.item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); +})); +``` + +You can use this PowerShell snippet to generate code to paste into the front of each function: + +```PowerShell +"pnpTest(""$(([guid]::NewGuid() | select Guid -expandproperty Guid | Out-String).Trim())"", " | Set-Clipboard +``` + +## How it works + +The [test recording](./test-recording.ts) replaces the default `.send` behavior with one that performs a series of steps: + +1. Generate file names for body and init +2. Look-up if files exist, and if so construct and return a new Response object based on the data +3. If no files exist and operating in read mode, make the request with node-fetch and return the Response +4. If no files exist and operating in write mode, make the request with node-fetch and write the response data to the fs + + From 332a856b7017ee85bfe67879b21ea32fe1e7518b Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 30 Jan 2024 09:49:52 -0500 Subject: [PATCH 100/171] update for graph taxonomy get children, test recording doc --- packages/graph/taxonomy/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/graph/taxonomy/types.ts b/packages/graph/taxonomy/types.ts index 9ce3fc7cc..7e4858b1c 100644 --- a/packages/graph/taxonomy/types.ts +++ b/packages/graph/taxonomy/types.ts @@ -1,7 +1,6 @@ import { IAddable, IDeleteable, IGetById, IUpdateable, addable, defaultPath, deleteable, getById, updateable } from "../../graph/decorators.js"; import { _GraphInstance, graphInvokableFactory, _GraphCollection } from "../graphqueryable.js"; import { TermStore as ITermStoreType } from "@microsoft/microsoft-graph-types"; -import { createBatch } from "@pnp/graph/batching"; /** * Describes a collection of Form objects From 6445abb6456e85a9f1900e7dab1e9272a62ec1f0 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 5 Feb 2024 08:46:40 -0700 Subject: [PATCH 101/171] WIP --- packages/graph/attachments/types.ts | 8 +++-- packages/graph/calendars/types.ts | 52 ++++++++++++++++++++++++++--- packages/graph/calendars/users.ts | 10 ++++-- 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/packages/graph/attachments/types.ts b/packages/graph/attachments/types.ts index 27c525e6b..1f3774358 100644 --- a/packages/graph/attachments/types.ts +++ b/packages/graph/attachments/types.ts @@ -20,19 +20,21 @@ export const Attachment = graphInvokableFactory(_Attachment); export class _Attachments extends _GraphCollection { // TODO: Adding attachments is not implemented correctly. I believe it requires updating the parent item but needs further investigation. + /** * Add attachment to this collection * - * @param name Name given to the attachment file + * @param attachmentInfo Attachment properties * @param bytes File content */ - public addFile(name: string, bytes: string | Blob): Promise { + public addFile(attachmentInfo:IAttachmentType, bytes:string | Blob): Promise { return graphPost(GraphInstance(this), body(type("#microsoft.graph.fileAttachment", { contentBytes: bytes, - name, + ...attachmentInfo }))); } + } export interface IAttachments extends _Attachments, IGetById {} export const Attachments = graphInvokableFactory(_Attachments); diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index 8ea958240..b7e257ce2 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -1,5 +1,5 @@ import { body } from "@pnp/queryable"; -import { Event as IEventType, Calendar as ICalendarType, ScheduleInformation as IScheduleInformationType, DateTimeTimeZone as IDateTimeTimeZoneType, Recipient, TimeSlot, } from "@microsoft/microsoft-graph-types"; +import { Event as IEventType, Calendar as ICalendarType, CalendarGroup as ICalendarGroupType, CalendarPermission as ICalendarPermissionType, ScheduleInformation as IScheduleInformationType, DateTimeTimeZone as IDateTimeTimeZoneType, Recipient, TimeSlot, } from "@microsoft/microsoft-graph-types"; import { GraphQueryable, IGraphQueryable, _GraphCollection, _GraphInstance, _GraphQueryable, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById, IAddable, addable } from "../decorators.js"; import { calendarView, instances } from "./funcs.js"; @@ -11,10 +11,12 @@ import { calendarView, instances } from "./funcs.js"; @updateable() export class _Calendar extends _GraphInstance { + public get calendarPermissions(): ICalendarPermissions { + return CalendarPermissions(this); + } public get events(): IEvents { return Events(this); } - /** * Get the free/busy availability information for a collection of users, * distributions lists, or resources (rooms or equipment) for a specified time period. @@ -39,7 +41,6 @@ export const Calendar = graphInvokableFactory(_Calendar); @addable() export class _Calendars extends _GraphCollection { constructor(baseUrl: string | _GraphQueryable, start: string, end: string) { - debugger; super(baseUrl); this.query.set("startDateTime", start); this.query.set("endDateTime", end); @@ -108,8 +109,6 @@ export class _Event extends _GraphInstance { return graphPost(Event(this, "tentativelyAccept"), body({ comment, sendResponse, proposedNewTime })); } - // TODO:: implement event messages? - public instances = instances; } export interface IEvent extends _Event, IDeleteable, IUpdateable { } @@ -125,6 +124,49 @@ export class _Events extends _GraphCollection { } export interface IEvents extends _Events, IGetById, IAddable { } export const Events = graphInvokableFactory(_Events); +/** + * Event + */ +@deleteable() +@updateable() +export class _CalendarGroup extends _GraphInstance { + + public get calendars(): ICalendars { + return Calendars(this); + } +} +export interface ICalendarGroup extends _CalendarGroup, IDeleteable, IUpdateable { } +export const CalendarGroup = graphInvokableFactory(_CalendarGroup); + +/** + * CalendarGroups + */ +@defaultPath("calendarGroups") +@getById(Event) +@addable() +export class _CalendarGroups extends _GraphCollection { } +export interface ICalendarGroups extends _Events, IGetById, IAddable { } +export const CalendarGroups = graphInvokableFactory(_CalendarGroups); + +/** + * CalendarPermission + */ +@updateable() +@deleteable() +export class _CalendarPermission extends _GraphInstance { } +export interface ICalendarPermission extends _CalendarPermission, IUpdateable, IDeleteable { } +export const CalendarPermission = graphInvokableFactory(_CalendarPermission); + +/** + * CalendarPermissions + */ +@defaultPath("calendarPermissions") +@getById(CalendarPermission) +@addable() +export class _CalendarPermissions extends _GraphCollection { } +export interface ICalendarPermissions extends _CalendarPermissions, IAddable { } +export const CalendarPermissions = graphInvokableFactory(_CalendarPermissions); + /** * EventAddResult */ diff --git a/packages/graph/calendars/users.ts b/packages/graph/calendars/users.ts index c9f04d902..1a4616947 100644 --- a/packages/graph/calendars/users.ts +++ b/packages/graph/calendars/users.ts @@ -1,15 +1,17 @@ import { addProp } from "@pnp/queryable"; import { MeetingTimeSuggestionsResult } from "@microsoft/microsoft-graph-types"; import { _User } from "../users/types.js"; -import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars, ICalendarView} from "./types.js"; +import { Calendar, ICalendar, IEvents, Events, Calendars, ICalendars, ICalendarView, ICalendarGroups, CalendarGroups} from "./types.js"; import { reminderView, IReminderInfo, findMeetingTimes, IFindMeetingTimesRequest, calendarView} from "./funcs.js"; import { IGraphCollection, IGraphInstance } from "../graphqueryable.js"; +import { IAttachments } from "../attachments/types.js"; declare module "../users/types" { interface _User { readonly calendar: ICalendar; readonly calendars: ICalendars; - readonly attachmentFiles: ICalendar; + readonly calendarGroups: ICalendarGroups; + readonly attachmentFiles: IAttachments; readonly events: IEvents; calendarView(start: string, end: string): ICalendarView; findMeetingTimes(properties?: IFindMeetingTimesRequest): Promise>; @@ -18,7 +20,8 @@ declare module "../users/types" { interface IUser { readonly calendar: ICalendar; readonly calendars: ICalendars; - readonly attachmentFiles: ICalendar; + readonly calendarGroups: ICalendarGroups; + readonly attachmentFiles: IAttachments; readonly events: IEvents; calendarView(start: string, end: string): ICalendarView; reminderView(start: string, end: string): IGraphCollection; @@ -27,6 +30,7 @@ declare module "../users/types" { addProp(_User, "calendar", Calendar); addProp(_User, "calendars", Calendars); +addProp(_User, "calendarGroups", CalendarGroups); addProp(_User, "events", Events); _User.prototype.calendarView = calendarView; _User.prototype.findMeetingTimes = findMeetingTimes; From 9563d263e6530da7782f0f018137df7067eb2979 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Fri, 9 Feb 2024 14:45:34 +0000 Subject: [PATCH 102/171] v4 File Update --- CHANGELOG.md | 3 + debug/launch/graph.ts | 88 ++++++- debug/launch/main.ts | 4 +- docs/graph/files-labels.md | 103 ++++++++ docs/graph/files.md | 225 ++++++++++------- mkdocs.yml | 1 + packages/graph/files/funcs.ts | 20 +- packages/graph/files/index.ts | 15 +- packages/graph/files/resumableUpload.ts | 91 +++++++ packages/graph/files/sites.ts | 12 +- packages/graph/files/types.ts | 322 +++++++++++++++--------- packages/graph/files/users.ts | 16 +- test/graph/files.ts | 164 +++++++++--- 13 files changed, 779 insertions(+), 285 deletions(-) create mode 100644 docs/graph/files-labels.md create mode 100644 packages/graph/files/resumableUpload.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index f691609dd..4b3f4b8ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - ISite now supports `async rebase()` to ensure any ISite is represented by the url pattern /sites/{site id} regardless of how it was first loaded - ISites.getAllSites() - support for operations for ISite and IList + - completed support for Files - sp - explict error thrown if SPFx context is null or undefined when needed @@ -26,6 +27,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - graph - paged method removed from IGraphQueryableCollection - ./operations.ts methods moved to ./graphqueryable.ts + - deprecated DriveItem move method. + - deprecated DriveItem setContent method. - sp - getPaged method removed from _Items/IItems diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index 9fe04eec9..8c46eb739 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,20 +1,92 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; import "@pnp/graph/users"; +import "@pnp/graph/groups"; +import "@pnp/graph/sites"; +import "@pnp/graph/files"; +import { IDriveItemAdd, IDriveItemAddFolder } from "@pnp/graph/files"; +import * as fs from "fs"; +import { IResumableUploadOptions } from "@pnp/graph/files"; +import { graphPut } from "@pnp/graph"; +import { InjectHeaders } from "@pnp/queryable/index.js"; +import { DriveItemUploadableProperties } from "@microsoft/microsoft-graph-types"; +import { ISensitivityLabel } from "@pnp/graph/files"; declare var process: { exit(code?: number): void }; export async function Example(settings: any) { + const userId = "julie@sympjulie.onmicrosoft.com"; + const graph = graphSetup(settings); - const graph = graphSetup(settings); + const folderInfo: IDriveItemAddFolder = { + name: "Sub Folder", + conflictBehavior: "replace", + }; - const users = await graph.users(); + const fileInfo: IDriveItemAdd = { + filename: "Test File.txt", + content: "Contents of test file", + contentType: "text/plain", + conflictBehavior: "replace", + }; - Logger.log({ - data: users, - level: LogLevel.Info, - message: "List of Users Data", - }); + //const users = await graph.users.getById(userId).drive.root.children.addFolder(folderInfo); + //const folder = await graph.users.getById(userId).drive.getItemByPath("/Test Folder")(); + //const folder = await graph.users.getById(userId).drive.root.getItemByPath("/Test Folder")(); - process.exit(0); + //const file = await graph.users.getById(userId).drive.root.children.add(fileInfo); + + // const moveItem = { + // parentReference: { + // id: folder.id, + // }, + // name: "Moved File.txt", + // } + // const move = await graph.users.getById(userId).drive.getItemById(file.id).moveItem(moveItem); + //const thumbnails = await graph.users.getById(userId).drive.getItemById(folder.id).thumbnails(); + //const versions = await graph.users.getById(userId).drive.getItemById(folder.id).versions(); + //const users = await graph.sites.getById(settings.testing.graph.id).drive.list(); + + const fileBuff = fs.readFileSync("C:\\Users\\jturner.BMA\\Desktop\\TestDocument.docx"); + + const fileUploadOptions: IResumableUploadOptions = { + item: { + name: "TestDocument2.docx", + fileSize: fileBuff.byteLength, + }, + }; + + const label: ISensitivityLabel = { + sensitivityLabelId: "b7a3c3d5-7b6d-4e6c-8e0c-3f5c7b1d0e3d", + assignmentMethod: "standard", + justificationText: "Just because", + }; + + const driveRoot = await graph.sites.getById(settings.testing.graph.id).drive.root(); + const driveItems = await graph.sites.getById(settings.testing.graph.id).drive.root.children(); + const driveItem = await graph.sites.getById(settings.testing.graph.id).drive.getItemById(driveItems[1].id)(); + const retentionLabelStatusUrl = await graph.sites.getById(settings.testing.graph.id).drive.getItemById(driveItems[1].id).assignSensitivityLabel(label); + //const retentionLabel = await graph.users.getById(userId).drive.getItemById(driveItems[0].id).extractSensitivityLabels(); + const uploadSession = await graph.users.getById(userId).drive.getItemById(driveRoot.id).createUploadSession(fileUploadOptions); + const status = await uploadSession.resumableUpload.status(); + + const upload = await uploadSession.resumableUpload.upload(fileBuff.length, fileBuff); + + // Upload a chunk of the file to the upload session + // Using a fragment size that doesn't divide evenly by 320 KiB results in errors committing some files. + const chunkSize = 327680; + let startFrom = 0; + while (startFrom < fileBuff.length) { + const fileChunk = fileBuff.slice(startFrom, startFrom + chunkSize); + const contentLength = `bytes ${startFrom}-${startFrom + chunkSize}/${fileBuff.length}` + const uploadChunk = await uploadSession.resumableUpload.upload(chunkSize, fileChunk, contentLength); + startFrom += chunkSize; + } + Logger.log({ + data: retentionLabelStatusUrl, + level: LogLevel.Info, + message: "List of Users Data", + }); + + process.exit(0); } diff --git a/debug/launch/main.ts b/debug/launch/main.ts index 230ee47d3..5345d2d94 100644 --- a/debug/launch/main.ts +++ b/debug/launch/main.ts @@ -8,8 +8,8 @@ import { ITestingSettings } from "../../test/load-settings.js"; // add your debugging imports here and prior to submitting a PR git checkout debug/debug.ts // will allow you to keep all your debugging files locally // comment out the example -import { Example } from "./sp.js"; -// import { Example } from "./graph.js"; +// import { Example } from "./sp.js"; +import { Example } from "./graph.js"; // setup the connection to SharePoint using the settings file, you can // override any of the values as you want here, just be sure not to commit diff --git a/docs/graph/files-labels.md b/docs/graph/files-labels.md new file mode 100644 index 000000000..d87de5e86 --- /dev/null +++ b/docs/graph/files-labels.md @@ -0,0 +1,103 @@ +# @pnp/graph/files - Sensitivity and Retention Labels (Premium Endpoint) + +The ability to manage sensitivity and retention labels on drive items in SharePoint. + +More information can be found in the official Graph documentation: + +- [Drives/Files Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/drive?view=graph-rest-1.0) + +## IInvitations + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## Assign Sensitivity Label to Drive Item + +Using the assignSensitivityLabel() you can add a sensitivity label to a DriveItem + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/sites"; +import "@pnp/graph/groups"; +import "@pnp/graph/files"; +import { ISensitivityLabel } from "@pnp/graph/files"; + +const graph = graphfi(...); + +const label: ISensitivityLabel = { + sensitivityLabelId: "b7a3c3d5-7b6d-4e6c-8e0c-3f5c7b1d0e3d", + assignmentMethod: "standard", + justificationText: "Just because", +}; + +// This is a long running operation and returns a url to check the status. +const retentionLabelStatusUrl = await graph.sites.getById({site id}).drive.getItemById({item id}).assignSensitivityLabel(label); +const retentionLabelStatusUrl = await graph.users.getById({user id}).drive.getItemById({item id}).assignSensitivityLabel(label); +const retentionLabelStatusUrl = await graph.group.getById({group id}).drive.getItemById({item id}).assignSensitivityLabel(label); +``` + +## Extract Sensitivity Labels from a Drive Item + +Using extractSensitivityLabels() extract one or more sensitivity labels assigned to a drive item + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/sites"; +import "@pnp/graph/groups"; +import "@pnp/graph/files"; + +const graph = graphfi(...); + +const sensitivityLabels = await graph.sites.getById({site id}).drive.getItemById({item id}).extractSensitivityLabels(); +const sensitivityLabels = await graph.users.getById({user id}).drive.getItemById({item id}).extractSensitivityLabels(); +const sensitivityLabels = await graph.group.getById({group id}).drive.getItemById({item id}).extractSensitivityLabels(); +``` + +## Retrieve/Update/Delete Retention Label of the Drive Item + +Method for retrieving, updating, and removing the retention label of the drive item. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/sites"; +import "@pnp/graph/groups"; +import "@pnp/graph/files"; + +const graph = graphfi(...); + +// Get retention label +const retentionLabel = await graph.sites.getById({site id}).drive.getItemById({item id}).retentionLabel(); +const retentionLabel = await graph.users.getById({user id}).drive.getItemById({item id}).retentionLabel(); +const retentionLabel = await graph.group.getById({group id}).drive.getItemById({item id}).retentionLabel(); + +// Update retention label +const retentionLabel = await graph.sites.getById({site id}).drive.getItemById({item id}).updateRetentionLabel("New Name"); +const retentionLabel = await graph.users.getById({user id}).drive.getItemById({item id}).updateRetentionLabel("New Name"); +const retentionLabel = await graph.group.getById({group id}).drive.getItemById({item id}).updateRetentionLabel("New Name"); + +// Delete retention label +await graph.sites.getById({site id}).drive.getItemById({item id}).removeRetentionLabel(); +await graph.users.getById({user id}).drive.getItemById({item id}).removeRetentionLabel(); +await graph.group.getById({group id}).drive.getItemById({item id}).removeRetentionLabel(); +``` + +## Lock/Unlock Record of the Drive Item + +Method for locking/unlocking a record of the drive item. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/sites"; +import "@pnp/graph/groups"; +import "@pnp/graph/files"; + +const graph = graphfi(...); + +// Send 'true' to lock the record, and 'false' to unlock the record. +const retentionLabel = await graph.sites.getById({site id}).drive.getItemById({item id}).recordLocked(true); +const retentionLabel = await graph.users.getById({user id}).drive.getItemById({item id}).recordLocked(true); +const retentionLabel = await graph.group.getById({group id}).drive.getItemById({item id}).recordLocked(true); +``` diff --git a/docs/graph/files.md b/docs/graph/files.md index 87fba26d2..793ac6aef 100644 --- a/docs/graph/files.md +++ b/docs/graph/files.md @@ -1,11 +1,11 @@ # @pnp/graph/files -The ability to manage drives and drive items in Onedrive is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described -you can manage drives and drive items in Onedrive. +The ability to manage drives and drive items in OneDrive is a capability introduced in version 1.2.4 of @pnp/graph. Through the methods described +you can manage drives and drive items in OneDrive. More information can be found in the official Graph documentation: -- [Drive/Files Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/onedrive?view=graph-rest-1.0) +- [Drives/Files Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/drive?view=graph-rest-1.0) ## IInvitations @@ -13,7 +13,7 @@ More information can be found in the official Graph documentation: ## Get the default drive -Using the drive you can get the users default drive from Onedrive, or the groups or sites default document library. +Using the drive you can get the users default drive from OneDrive, or the groups or sites default document library. ```TypeScript import { graphfi } from "@pnp/graph"; @@ -24,7 +24,7 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const otherUserDrive = await graph.users.getById("user@tenant.onmicrosoft.com").drive(); +const otherUserDrive = await graph.users.getById({user id}).drive(); const currentUserDrive = await graph.me.drive(); @@ -35,7 +35,7 @@ const siteDrive = await graph.sites.getById("{site identifier}").drive(); ## Get all of the drives -Using the drives() you can get the users available drives from Onedrive +Using the drives() you can get the users available drives from OneDrive ```TypeScript import { graphfi } from "@pnp/graph"; @@ -46,7 +46,7 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const otherUserDrive = await graph.users.getById("user@tenant.onmicrosoft.com").drives(); +const otherUserDrive = await graph.users.getById({user id}).drives(); const currentUserDrive = await graph.me.drives(); @@ -67,15 +67,15 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const drive = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}")(); +const drive = await graph.users.getById({user id}).drives.getById({drive id})(); -const drive = await graph.me.drives.getById("{drive id}")(); +const drive = await graph.me.drives.getById({drive id})(); -const drive = await graph.drives.getById("{drive id}")(); +const drive = await graph.drives.getById({drive id})(); ``` -## Get the associated list of a drive +## Get the associated list of a SharePoint drive Using the list() you get the associated list information @@ -86,33 +86,30 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const list = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").list(); - -const list = await graph.me.drives.getById("{drive id}").list(); +const list = await graph.sites.getById("{site identifier}").getById({drive id}).list(); ``` -Using the getList(), from the lists implementation, you get the associated IList object. -Form more infomration about acting on the IList object see [@pnpjs/graph/lists](./lists.md) +## Get the recent files + +Using the recent() you get the recent files ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; import "@pnp/graph/files"; -import "@pnp/graph/lists"; const graph = graphfi(...); -const listObject: IList = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").getList(); +const files = await graph.users.getById({user id}).drives.getById({drive id}).recent(); -const listOBject: IList = await graph.me.drives.getById("{drive id}").getList(); +const files = await graph.me.drives.getById({drive id}).recent(); -const list = await listObject(); ``` -## Get the recent files +## Get the files shared with me -Using the recent() you get the recent files +Using the sharedWithMe() you get the files shared with the user ```TypeScript import { graphfi } from "@pnp/graph"; @@ -121,15 +118,20 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const files = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").recent(); +const shared = await graph.users.getById({user id}).drives.getById({drive id}).sharedWithMe(); + +const shared = await graph.me.drives.getById({drive id}).sharedWithMe(); -const files = await graph.me.drives.getById("{drive id}").recent(); +// By default, sharedWithMe return items shared within your own tenant. To include items shared from external tenants include the options object. + +const options: ISharingWithMeOptions = {allowExternal: true}; +const shared = await graph.me.drives.getById({drive id}).sharedWithMe(options); ``` -## Get the files shared with me +## Get the following drive item -Using the sharedWithMe() you get the files shared with the user +List the items that have been followed by the signed in user. ```TypeScript import { graphfi } from "@pnp/graph"; @@ -138,20 +140,13 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const shared = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").sharedWithMe(); - -const shared = await graph.me.drives.getById("{drive id}").sharedWithMe(); - -// By default, sharedWithMe return items shared within your own tenant. To include items shared from external tenants include the options object. - -const options: ISharingWithMeOptions = {allowExternal: true}; -const shared = await graph.me.drives.getById("{drive id}").sharedWithMe(options); +const files = await graph.me.drives.getById({drive id}).following(); ``` -## Get the following files +## Follow/Unfollow a drive item -List the items that have been followed by the signed in user. +Follow/Unfollow a drive item ```TypeScript import { graphfi } from "@pnp/graph"; @@ -160,8 +155,11 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const files = await graph.me.drives.getById("{drive id}").following(); +const driveItem = await graph.me.drives.getById({drive id}).getItemById({item id}).follow(); +const driveItem = await graph.me.drives.getById({drive id}).getItemById({item id}).unfollow(); +const driveItem = await graph.users.getById({user id}).drives.getById({drive id}).getItemById({item id}).follow(); +const driveItem = await graph.users.getById({user id}).drives.getById({drive id}).getItemById({item id}).unfollow(); ``` ## Get the Root folder @@ -177,16 +175,16 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const root = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root(); -const root = await graph.users.getById("user@tenant.onmicrosoft.com").drive.root(); +const root = await graph.users.getById({user id}).drives.getById({drive id}).root(); +const root = await graph.users.getById({user id}).drive.root(); -const root = await graph.me.drives.getById("{drive id}").root(); +const root = await graph.me.drives.getById({drive id}).root(); const root = await graph.me.drive.root(); -const root = await graph.sites.getById("{site id}").drives.getById("{drive id}").root(); +const root = await graph.sites.getById("{site id}").drives.getById({drive id}).root(); const root = await graph.sites.getById("{site id}").drive.root(); -const root = await graph.groups.getById("{site id}").drives.getById("{drive id}").root(); +const root = await graph.groups.getById("{site id}").drives.getById({drive id}).root(); const root = await graph.groups.getById("{site id}").drive.root(); ``` @@ -202,13 +200,13 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const rootChildren = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.children(); +const rootChildren = await graph.users.getById({user id}).drives.getById({drive id}).root.children(); -const rootChildren = await graph.me.drives.getById("{drive id}").root.children(); +const rootChildren = await graph.me.drives.getById({drive id}).root.children(); -const itemChildren = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").children(); +const itemChildren = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").children(); -const itemChildren = await graph.me.drives.getById("{drive id}").root.items.getById("{item id}").children(); +const itemChildren = await graph.me.drives.getById({drive id}).root.items.getById("{item id}").children(); ``` @@ -223,13 +221,13 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const item = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getItemsByPath("MyFolder/MySubFolder")(); +const item = await graph.users.getById({user id}).drives.getItemsByPath("MyFolder/MySubFolder")(); const item = await graph.me.drives.getItemsByPath("MyFolder/MySubFolder")(); ``` -## Add Item +## Add Drive Item (File and Folder) Using the add you can add an item, for more options please user the upload method instead. @@ -237,12 +235,28 @@ Using the add you can add an item, for more options please user the upload metho import { graphfi } from "@pnp/graph"; import "@pnp/graph/files"; import "@pnp/graph/users"; -import {IDriveItemAddResult} from "@pnp/graph/files"; +import {IDriveItemAdd} from "@pnp/graph/files"; const graph = graphfi(...); -const add1: IDriveItemAddResult = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.children.add("test.txt", "My File Content String"); -const add2: IDriveItemAddResult = await graph.me.drives.getById("{drive id}").root.children.add("filename.txt", "My File Content String"); +const fileInfo: IDriveItemAdd = { + filename: "Test File.txt", + content: "Contents of test file", + contentType: "text/plain", + conflictBehavior: "replace", + driveItem: {}, +}; + +const folderInfo: IDriveItemAddFolder = { + name: "Sub Folder", + conflictBehavior: "replace", +}; + +const driveRootFile = await graph.users.getById({user Id}).drive.root.children.add(fileInfo); +const driveRootFolder = await graph.users.getById({user Id}).drive.root.children.addFolder(folderInfo); + +const subFolderFile = await graph.users.getById({user Id}).drive.getItemById({folder id}).children.add(fileInfo); +const subFolderFile = await graph.users.getById({user Id}).drive.getItemById({folder id}).children.addFolder(folderInfo); ``` ## Upload/Replace Drive Item Content @@ -253,22 +267,20 @@ Using the .upload method you can add or update the content of an item. import { graphfi } from "@pnp/graph"; import "@pnp/graph/files"; import "@pnp/graph/users"; -import {IFileOptions, IDriveItemAddResult} from "@pnp/graph/files"; +import {IFileUploadOptions} from "@pnp/graph/files"; const graph = graphfi(...); // file path is only file name -const fileOptions: IFileOptions = { +const fileOptions: IFileUploadOptions = { content: "This is some test content", filePathName: "pnpTest.txt", - contentType: "text/plain;charset=utf-8" + contentType: "text/plain;charset=utf-8", } -const uDriveRoot: IDriveItemAddResult = await graph.users.getById("user@tenant.onmicrosoft.com").drive.root.upload(fileOptions); - -const uFolder: IDriveItemAddResult = await graph.users.getById("user@tenant.onmicrosoft.com").drive.getItemById("{folder id}").upload(fileOptions); - -const uDriveIdRoot: IDriveItemAddResult = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.upload(fileOptions); +const driveItem = await graph.users.getById({user id}).drive.root.upload(fileOptions); +const driveItem = await graph.users.getById({user id}).drive.getItemById({folder id}).upload(fileOptions); +const driveItem = await graph.users.getById({user id}).drives.getById({drive id}).root.upload(fileOptions); // file path includes folders const fileOptions2: IFileOptions = { @@ -277,24 +289,48 @@ const fileOptions2: IFileOptions = { contentType: "text/plain;charset=utf-8" } -const uFileOptions: IDriveItemAddResult = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.upload(fileOptions2); +const driveItem = await graph.users.getById({user id}).drives.getById({drive id}).root.upload(fileOptions2); ``` -## Add folder +## Resumable Upload for Drive Item Content -Using addFolder you can add a folder +Create an upload session to allow your app to upload files up to the maximum file size. An upload session allows your app to upload ranges of the file in sequential API requests. Upload sessions also allow the transfer to resume if a connection is dropped while the upload is in progress. ```TypeScript -import { graph } from "@pnp/graph"; +import * as fs from "fs"; +import { graphfi } from "@pnp/graph"; import "@pnp/graph/files"; -import "@pnp/graph/users" -import {IDriveItemAddResult} from "@pnp/graph/ondrive"; +import "@pnp/graph/users"; +import {IFileUploadOptions} from "@pnp/graph/files"; const graph = graphfi(...); -const addFolder1: IDriveItemAddResult = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.children.addFolder('New Folder'); -const addFolder2: IDriveItemAddResult = await graph.me.drives.getById("{drive id}").root.children.addFolder('New Folder'); +const fileBuff = fs.readFileSync("C:\\MyDocs\\TestDocument.docx"); +const fileUploadOptions: IResumableUploadOptions = { + item: { + name: "TestDocument2.docx", + fileSize: fileBuff.byteLength, + }, +}; +// Create the upload session +const uploadSession = await graph.users.getById(userId).drive.getItemById(driveRoot.id).createUploadSession(fileUploadOptions); +// Get the status of the upload session +const status = await uploadSession.resumableUpload.status(); + +// Upload the entire file to the upload session +const upload = await uploadSession.resumableUpload.upload(fileBuff.length, fileBuff); + +// Upload a chunk of the file to the upload session +// Using a fragment size that doesn't divide evenly by 320 KiB results in errors committing some files. +const chunkSize = 327680; +let startFrom = 0; +while (startFrom < fileBuff.length) { + const fileChunk = fileBuff.slice(startFrom, startFrom + chunkSize); + const contentLength = `bytes ${startFrom}-${startFrom + chunkSize}/${fileBuff.length}` + const uploadChunk = await uploadSession.resumableUpload.upload(chunkSize, fileChunk, contentLength); + startFrom += chunkSize; +} ``` ## Search items @@ -311,9 +347,9 @@ const graph = graphfi(...); // Where searchTerm is the query text used to search for items. // Values may be matched across several fields including filename, metadata, and file content. -const search = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.search(searchTerm)(); +const search = await graph.users.getById({user id}).drives.getById({drive id}).root.search(searchTerm)(); -const search = await graph.me.drives.getById("{drive id}").root.search(searchTerm)(); +const search = await graph.me.drives.getById({drive id}).root.search(searchTerm)(); ``` @@ -328,9 +364,9 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const item = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}")(); +const item = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}")(); -const item = await graph.me.drives.getById("{drive id}").items.getById("{item id}")(); +const item = await graph.me.drives.getById({drive id}).items.getById("{item id}")(); ``` @@ -345,7 +381,7 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const item = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getItemByPath("MyFolder/MySubFolder/myFile.docx")(); +const item = await graph.users.getById({user id}).drives.getItemByPath("MyFolder/MySubFolder/myFile.docx")(); const item = await graph.me.drives.getItemByPath("MyFolder/MySubFolder/myFile.docx")(); @@ -422,15 +458,15 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const thumbs = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").thumbnails(); +const thumbs = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").thumbnails(); -const thumbs = await graph.me.drives.getById("{drive id}").items.getById("{item id}").thumbnails(); +const thumbs = await graph.me.drives.getById({drive id}).items.getById("{item id}").thumbnails(); ``` -## Delete drive item +## Delete/Permenently Delete drive item -Using the delete() you delete the current item +Using the delete() you delete the current item. Using .permanentDelete you can permenently delete the current item. ```TypeScript import { graphfi } from "@pnp/graph"; @@ -439,10 +475,10 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const thumbs = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").delete(); - -const thumbs = await graph.me.drives.getById("{drive id}").items.getById("{item id}").delete(); - +await graph.me.drives.getById({drive id}).items.getById({item id}).delete(); +await graph.me.drives.getById({drive id}).items.getById({item id}).permanentDelete(); +await graph.users.getById({user id}).drives.getById({drive id}).items.getById({item id}).delete(); +await graph.users.getById({user id}).drives.getById({drive id}).items.getById({item id}).permanentDelete(); ``` ## Update drive item metadata @@ -456,9 +492,9 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const update = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").update({name: "New Name"}); +const update = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").update({name: "New Name"}); -const update = await graph.me.drives.getById("{drive id}").items.getById("{item id}").update({name: "New Name"}); +const update = await graph.me.drives.getById({drive id}).items.getById("{item id}").update({name: "New Name"}); ``` @@ -482,9 +518,9 @@ const moveOptions: IItemOptions = { name?: {newName}; }; -const move = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").move(moveOptions); +const move = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").move(moveOptions); -const move = await graph.me.drives.getById("{drive id}").items.getById("{item id}").move(moveOptions); +const move = await graph.me.drives.getById({drive id}).items.getById("{item id}").move(moveOptions); ``` @@ -508,9 +544,9 @@ const copyOptions: IItemOptions = { name?: {newName}; }; -const copy = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").copy(copyOptions); +const copy = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").copy(copyOptions); -const copy = await graph.me.drives.getById("{drive id}").items.getById("{item id}").copy(copyOptions); +const copy = await graph.me.drives.getById({drive id}).items.getById("{item id}").copy(copyOptions); ``` @@ -550,16 +586,16 @@ import { ItemPreviewInfo } from "@microsoft/microsoft-graph-types" const graph = graphfi(...); -const preview: ItemPreviewInfo = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").preview(); +const preview: ItemPreviewInfo = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").preview(); -const preview: ItemPreviewInfo = await graph.me.drives.getById("{drive id}").items.getById("{item id}").preview(); +const preview: ItemPreviewInfo = await graph.me.drives.getById({drive id}).items.getById("{item id}").preview(); const previewOptions: IPreviewOptions = { page: 1, zoom: 90 } -const preview2: ItemPreviewInfo = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").preview(previewOptions); +const preview2: ItemPreviewInfo = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").preview(previewOptions); ``` @@ -576,7 +612,7 @@ const graph = graphfi(...); // Get the changes for the drive items from inception const delta = await graph.me.drive.root.delta()(); -const delta = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").root.delta()(); +const delta = await graph.users.getById({user id}).drives.getById({drive id}).root.delta()(); //You can also loop through the delta changes using the async iterator const driveItems = graph.me.drive.root.delta(); @@ -600,13 +636,16 @@ import { IAnalyticsOptions } from "@pnp/graph/files"; const graph = graphfi(...); // Defaults to lastSevenDays -const analytics = await graph.users.getById("user@tenant.onmicrosoft.com").drives.getById("{drive id}").items.getById("{item id}").analytics()(); +const analytics = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").analytics()(); -const analytics = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics()(); +const analytics = await graph.me.drives.getById({drive id}).items.getById("{item id}").analytics()(); const analyticOptions: IAnalyticsOptions = { timeRange: "allTime" }; -const analyticsAllTime = await graph.me.drives.getById("{drive id}").items.getById("{item id}").analytics(analyticOptions)(); +const analyticsAllTime = await graph.me.drives.getById({drive id}).items.getById("{item id}").analytics(analyticOptions)(); ``` + +For more information on: +[Sensitivity and Retention Labels (Premium Endpoint)](./files-labels.md) diff --git a/mkdocs.yml b/mkdocs.yml index 3b28d5e07..c56dd035d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -52,6 +52,7 @@ nav: - calendars: 'graph/calendars.md' - 'directory objects': 'graph/directoryobjects.md' - files: 'graph/files.md' + - 'Retention/Sensitivity Labels': 'graph/files-labels.md' - invitations: 'graph/invitations.md' - items: 'graph/items.md' - lists: 'graph/lists.md' diff --git a/packages/graph/files/funcs.ts b/packages/graph/files/funcs.ts index 34c46f260..eed1ac7e4 100644 --- a/packages/graph/files/funcs.ts +++ b/packages/graph/files/funcs.ts @@ -1,7 +1,8 @@ -import { combine } from "@pnp/core"; import { body, InjectHeaders } from "@pnp/queryable"; import { graphPost, graphPut } from "../graphqueryable.js"; -import { DriveItem, IDriveItemAddResult, IFileOptions } from "./types.js"; +import { DriveItem, IFileUploadOptions } from "./types.js"; +import { DriveItem as IDriveItemType } from "@microsoft/microsoft-graph-types"; + export interface ICheckInOptions { checkInAs?: string; @@ -20,7 +21,7 @@ export function encodeSharingUrl(url: string): string { return "u!" + Buffer.from(url, "utf8").toString("base64").replace(/=$/i, "").replace("/", "_").replace("+", "-"); } -export async function driveItemUpload(fileOptions: IFileOptions): Promise { +export async function driveItemUpload(fileOptions: IFileUploadOptions): Promise { let path = "/content"; if (fileOptions.filePathName) { path = `:/${fileOptions.filePathName}:/content`; @@ -34,11 +35,12 @@ export async function driveItemUpload(fileOptions: IFileOptions): Promise { + /** Get the status of teh Resumable Upload URL */ + public get status(): IGraphQueryable { + return GraphQueryable(this); + } + + /** Upload a chunk of the file + * @param byteLength - number - the length of the byte array + * @param buffer - any - the buffer to upload + * @param contentRange - string (Optional) - the content range to upload e.g. `bytes 0-311/312` + */ + public async upload(byteLength: number, buffer: any, contentRange?: string): Promise { + const range = contentRange || `bytes 0-${byteLength - 1}/${byteLength}`; + return graphPut(this, { body: buffer, headers: { "Content-Length": byteLength.toString(), "Content-Range": range } }); + } + + /** Cancel the Resumable Upload */ + public async cancel(): Promise { + return graphDelete(this, body(null)); + } +} +export interface IResumableUpload extends _ResumableUpload { } +export const ResumableUpload = graphInvokableFactory(_ResumableUpload); + + +export async function getUploadSession(resuableUploadOptions: any): Promise<{session: IUploadSessionType; resumableUpload: IResumableUpload}> { + const create = resuableUploadOptions.create != null ? resuableUploadOptions.create : true; + const url = this.toRequestUrl(); + const q = GraphQueryable(`${url}${(create)?`:/${resuableUploadOptions.item.name}:/`:""}createUploadSession`).using(AssignFrom(this)); + + if(resuableUploadOptions.eTag) { + const header = {}; + header[resuableUploadOptions.eTagMatch || "If-Match"] = resuableUploadOptions.eTag; + q.using(InjectHeaders(header)); + } + const postBody: any = {}; + if(resuableUploadOptions.conflictBehavior || resuableUploadOptions.item) { + Object.defineProperty(postBody, "item", {value: {}, writable: true}); + if(resuableUploadOptions.item){ + postBody.item = resuableUploadOptions.item; + } + postBody.item["@microsoft.graph.conflictBehavior"] = resuableUploadOptions.conflictBehavior || "rename"; + } + if(resuableUploadOptions.deferCommit){ + Object.defineProperty(postBody, "deferCommit", { value: resuableUploadOptions.deferCommit }); + } + // Create the upload session + const session = await graphPost(q, body(postBody)); + + // Create a new queryable for the upload session + const uploadQueryable = GraphQueryable(session.uploadUrl).using(CopyFrom(this, "replace", (k) => /(pre|init|send|parse|post|data)/i.test(k))); + + const resumableUpload = ResumableUpload(uploadQueryable); + + return {session, resumableUpload}; +} + +/** + * IResumableUploadOptions for creating a resumable upload for uploading a file. + * @param item - Microsoft Graph - IDriveItemUploadablePropertiesType (Optional), must specify the name property. + * @param create - boolean (Optional) - default true for new files; false for updates + * @param deferCommit - boolean (Optional) + * @param eTag - string (Optional) + * @param eTagMatch - string (Optional) - eTag header "If-Match" or "If-None-Match" + * @param conflictBehavior - string (Optional) - "rename" | "replace" | "fail" rename is default + */ +export interface IResumableUploadOptions { + item?: T; + create?: boolean; + deferCommit?: boolean; + eTag?: string; + eTagMatch?: "If-Match" | "If-None-Match"; + conflictBehavior?: "rename" | "replace" | "fail"; +} diff --git a/packages/graph/files/sites.ts b/packages/graph/files/sites.ts index 7399f8647..499e991ee 100644 --- a/packages/graph/files/sites.ts +++ b/packages/graph/files/sites.ts @@ -1,8 +1,8 @@ import { addProp } from "@pnp/queryable"; import { _Site } from "../sites/types.js"; -import { IDrive, Drive, IDrives, Drives, _DriveItem } from "./types.js"; +import { IDrive, Drive, IDrives, Drives, _DriveItem, _Drive } from "./types.js"; import { checkIn, ICheckInOptions, checkOut } from "./funcs.js"; - +import { IList, List } from "../lists/types.js"; declare module "../sites/types" { interface _Site { @@ -17,9 +17,17 @@ declare module "../sites/types" { addProp(_Site, "drive", Drive); addProp(_Site, "drives", Drives); +addProp(_Drive, "list", List); declare module "./types" { + interface _Drive { + list: IList; + } + interface IDrive { + list: IList; + } + interface _DriveItem { checkIn(checkInOptions?: ICheckInOptions): Promise; checkOut(): Promise; diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index 221b34d6c..d65f79aeb 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -1,21 +1,35 @@ import { - GraphInstance, GraphCollection, _GraphInstance, - IGraphInstance, IGraphCollection, _GraphCollection, + IGraphQueryable, graphInvokableFactory, GraphQueryable, graphPatch, graphPost, graphPut, + graphDelete, + GraphInstance, + IGraphInstance, } from "../graphqueryable.js"; -import { Drive as IDriveType, DriveItem as IDriveItemType, ItemPreviewInfo as IDriveItemPreviewInfo } from "@microsoft/microsoft-graph-types"; +import { + Drive as IDriveType, + DriveItem as IDriveItemType, + ItemPreviewInfo as IDriveItemPreviewType, + ThumbnailSet as IThumbnailSetType, + DriveItemVersion as IDriveItemVersionType, + UploadSession as IUploadSessionType, + DriveItemUploadableProperties as IDriveItemUploadablePropertiesType, + SensitivityLabelAssignmentMethod as ISensitivityLabelAssignmentMethodType, + ExtractSensitivityLabelsResult as IExtractSensitivityLabelsResultType, + ItemRetentionLabel as IItemRetentionLabelType, +} from "@microsoft/microsoft-graph-types"; import { combine } from "@pnp/core"; import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable, hasDelta, IHasDelta, IDeltaProps } from "../decorators.js"; import { body, BlobParse, CacheNever, InjectHeaders } from "@pnp/queryable"; import { driveItemUpload } from "./funcs.js"; +import { IResumableUpload, IResumableUploadOptions, getUploadSession } from "./resumableUpload.js"; /** * Describes a Drive instance @@ -32,14 +46,6 @@ export class _Drive extends _GraphInstance { return Root(this); } - /** - * Method for retrieving the related list resource, for use with SharePoint drives. - * @returns IGraphInstance - */ - public get list(): IGraphInstance { - return GraphInstance(this, "list"); - } - /** * Method for retrieving recently accessed drive items by the user. * @returns IDriveItems @@ -139,21 +145,16 @@ export class _Root extends _GraphInstance { * Method for retrieving thumbnails of the drive items. * @returns IGraphCollection */ - public get thumbnails(): IGraphCollection { - return GraphCollection(this, "thumbnails"); + public get thumbnails(): IGraphInstance { + return GraphInstance(this, "thumbnails"); } /** * Method for uploading a new file, or updating the contents of an existing file. - * @param fileOptions - IFileOptions - * @param content - any - * @param filePathName - string (Optional) - * e.g. myfile.txt or myfolder/myfile.txt, unneeded for updates - * @param contentType - string (Optional) - * e.g. "application/json; charset=utf-8" for JSON files + * @param fileOptions - IFileOptions object * @returns IDriveItem */ - public async upload(fileOptions: IFileOptions): Promise { + public async upload(fileOptions: IFileUploadOptions): Promise { return Reflect.apply(driveItemUpload, this, [fileOptions]); } } @@ -182,30 +183,20 @@ export class _DriveItem extends _GraphInstance { /** * Method for retrieving thumbnails of the drive items. - * @returns IGraphCollection + * @returns Microsoft Graph - ThumbnailSet */ - public get thumbnails(): IGraphCollection { - return GraphCollection(this, "thumbnails"); + public get thumbnails(): IGraphCollection { + return GraphCollection(this, "thumbnails"); } /** * Method for retrieving the versions of a drive item. * @returns IDriveItemVersionInfo */ - public get versions(): IGraphCollection { + public get versions(): IGraphCollection { return GraphCollection(this, "versions"); } - /** - * Method for moving a drive item - * @param parentReference - { id: string} - reference to destination folder drive item - * @param name - string - name of the file in the destination - * @deprecated (v3.11.0) use `moveItem` - */ - public move(parentReference: { id: "string" }, name: string): Promise { - return graphPatch(this, body({ name, ...parentReference })); - } - /** * Method for moving a file to a new location and/or name. * @param moveOptions - IItemOptions object @@ -235,18 +226,6 @@ export class _DriveItem extends _GraphInstance { return query(); } - /** - * Method for setting the contents of a IDriveItem - * @param content - any - content to upload to the drive item - * @returns - { id: string; name: string; size: number } - * @deprecated (v3.11.0) use `upload` - */ - public setContent(content: any): Promise<{ id: string; name: string; size: number }> { - return graphPut(DriveItem(this, "content"), { - body: content, - }); - } - /** * Method for copying a file to a new location and/or name. * @param copyOptions - IItemOptions @@ -294,39 +273,123 @@ export class _DriveItem extends _GraphInstance { return query(); } + /** + * Method for getting a temporary preview image of a drive item. + * @returns Microsoft Graph - DriveItem + */ + public async follow(): Promise { + return await graphPost(DriveItem(this, "follow"), body(null)); + } + + /** + * Method for getting a temporary preview image of a drive item. + * @returns void + */ + public async unfollow(): Promise { + return await graphPost(DriveItem(this, "unfollow"), body(null)); + } + /** * Method for uploading a new file, or updating the contents of an existing file. - * @param fileOptions - IFileOptions object - * @param content - any - * @param filePathName - string (Optional) - * e.g. myfile.txt or myfolder/myfile.txt, unneeded for updates - * @param contentType - string (Optional) - * e.g. "application/json; charset=utf-8" for JSON files - * @returns IDriveItem + * @param fileOptions - IFileUploadOptions object + * @returns Microsoft Graph - DriveItem */ - public async upload(fileOptions: IFileOptions): Promise { + public async upload(fileOptions: IFileUploadOptions): Promise { return Reflect.apply(driveItemUpload, this, [fileOptions]); } - // TODO: Upload Session for large files - // public uploadSession(fileOptions: IFileOptions): Promise { - - // } + /** + * Method for uploading a new file, or updating the contents of an existing file. + * @param resuableUploadOptions - IResumableUploadOptions object + * @returns session: Microsoft Graph - UploadSession, resumableUpload: IResumableUpload + */ + public async createUploadSession(resuableUploadOptions: IResumableUploadOptions): + Promise<{ session: IUploadSessionType; resumableUpload: IResumableUpload }> { + return Reflect.apply(getUploadSession, this, [resuableUploadOptions]); + } /** * Method for getting a temporary preview image of a drive item. * @param previewOptions - IPreviewOptions (Optional) - * @returns IDriveItemPreviewInfo + * @returns Microsoft Graph - DriveItemPreview */ - public async preview(previewOptions?: IPreviewOptions): Promise { + public async preview(previewOptions?: IPreviewOptions): Promise { return graphPost(DriveItem(this, "preview"), body(previewOptions)); } + + /** + * Method for permanently deleting a driveItem by using its ID. + * @returns void + */ + public async permanentDelete(): Promise { + return graphPost(DriveItem(this, "permanentDelete"), body(null)); + } + + /** + * Method for permanently deleting a driveItem by using its ID. + * @param label: ISensitivityLabel + * @returns string - long running operation status URL + */ + public async assignSensitivityLabel(label: ISensitivityLabel): Promise { + const data: Headers = await graphPost(DriveItem(this, "assignSensitivityLabel"), body(label)); + let result: string = null; + if (data.has("location")) { + result = data.get("location"); + } + + return result; + } + + /** + * Method for permanently deleting a driveItem by using its ID. + * @returns Microsoft Graph - ExtractSensitivityLabelsResult + */ + public async extractSensitivityLabels(): Promise { + return graphPost(DriveItem(this, "extractSensitivityLabels"), body(null)); + } + + /** + * Method for retrieving the retention label of the drive item. + * @returns Microsoft Graph - ItemRetentionLabel + */ + public retentionLabel(): IGraphQueryable { + return GraphQueryable(this, "retentionLabel"); + } + + /** + * Method for locking/unlocking a record of the drive item. + * @returns Microsoft Graph - ItemRetentionLabel + */ + public async recordLocked(locked: boolean): Promise { + const postBody = { + retentionSettings: { + "isRecordLocked": locked, + }, + }; + return graphPatch(DriveItem(this, "retentionLabel"), body(postBody)); + } + + /** + * Method for deleting a retention label from a driveItem. + * @returns void + */ + public async removeRetentionLabel(): Promise { + return graphDelete(DriveItem(this, "retentionLabel")); + } + + /** + * Method for updating a retention label on a driveItem. + * @returns Microsoft Graph - ItemRetentionLabel + */ + public async updateRetentionLabel(name: string): Promise { + const postBody = { name }; + return graphPatch(DriveItem(this, "retentionLabel"), body(postBody)); + } } export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } export const DriveItem = graphInvokableFactory(_DriveItem); - /** * Describes a collection of Drive Item objects * @@ -335,91 +398,87 @@ export const DriveItem = graphInvokableFactory(_DriveItem); export class _DriveItems extends _GraphCollection { /** * Adds a file to this collection of drive items. - * For more upload options please see the .upload method on DriveItem and Root. - * @param filename - string - name of new file - * @param content - string - contents of file - * @param contentType - string - content type for header - default to "application/json" - * @returns IDriveItemAddResult - result with file data and chainable drive item object + * This method allows more control for conflict behavior and affecting other properties of the DriveItem than the .upload method. + * For more upload options please see the .upload method on DriveItem. + * @param fileInfo - IDriveItemAdd + * @returns Microsoft Graph - DriveItem */ - public async add(filename: string, content: string, contentType = "application/json"): Promise { + public async add(fileInfo: IDriveItemAdd): Promise { const postBody = { - name: filename, - file: {}, - "@microsoft.graph.conflictBehavior": "rename", + name: fileInfo.filename, + file: fileInfo.driveItem || {}, + "@microsoft.graph.conflictBehavior": fileInfo.conflictBehavior || "rename", }; const driveItem = await graphPost(this, body(postBody)); const q = DriveItem([this, `${combine("drives", driveItem.parentReference.driveId, "items", driveItem.id)}`], "content"); q.using(InjectHeaders({ - "Content-Type": contentType, + "Content-Type": fileInfo.contentType || "application/json", })); - const data = await graphPut(q, { body: content }); - - return { - data, - driveItem: DriveItem([this, `${combine("drives", driveItem.parentReference.driveId, "items", driveItem.id)}`]), - }; + return await graphPut(q, { body: fileInfo.content }); } /** * Adds a folder to this collection of drive items. - * @param name - string, name of new folder - * @param driveItem - DriveItem (Optional) - override default drive item properties - * @returns IDriveItemAddResult - result with folder data and chainable drive item object - */ - public async addFolder(name: string, driveItem?: any): Promise { - let postBody = { - name, - folder: {}, - "@microsoft.graph.conflictBehavior": "rename", + * @param folderInfo - an object of type IDriveItemAddFolder specifying the properties of the new folder + * @returns Microsoft Graph - DriveItem + */ + public async addFolder(folderInfo: IDriveItemAddFolder): Promise { + const postBody = { + name: folderInfo.name, + folder: folderInfo.driveItem || {}, + "@microsoft.graph.conflictBehavior": folderInfo.conflictBehavior || "rename", }; - if (driveItem) { - if (driveItem.name == null) { - driveItem.name = name; - } - if (driveItem["@microsoft.graph.conflictBehavior"] == null) { - driveItem["@microsoft.graph.conflictBehavior"] = "rename"; - } - postBody = driveItem; - } - const data = await graphPost(this, body(postBody)); - - return { - data, - driveItem: DriveItem([this, `${combine("drives", data.parentReference.driveId, "items", data.id)}`]), - }; + return await graphPost(this, body(postBody)); } } -export interface IDriveItems extends _DriveItems, IGetById { } +export interface IDriveItems extends _DriveItems, IGetById { } export const DriveItems = graphInvokableFactory(_DriveItems); /** - * IDriveItemAddResult + * IDriveItemAdd - for adding a drive item and the corresponding contents + * @param filename - string - file name. + * @param content - any - file content. + * @param contentType - string (Optional) - e.g. "application/json; charset=utf-8" for JSON files + * @param driveItem - DriveItem (Optional). + * @param conflictBehavior - string (Optional) - "rename" | "replace" | "fail" rename is default */ -export interface IDriveItemAddResult { - data: any; - driveItem: IDriveItem; +export interface IDriveItemAdd { + filename: string; + content: string; + contentType?: string; + driveItem?: IDriveItem; + conflictBehavior?: "rename" | "replace" | "fail"; } -export interface IDriveItemVersionInfo { - id: string; - lastModifiedBy: { - user: { - id: string; - displayName: string; - }; - }; - lastModifiedDateTime: string; - size: number; +/** + * IDriveItemAddFolder - for adding a folder drive item + * @param name - string - folder name. + * @param driveItem - DriveItem (Optional). + * @param conflictBehavior - string (Optional) - "rename" | "replace" | "fail" rename is default + */ +export interface IDriveItemAddFolder { + name: string; + driveItem?: IDriveItem; + conflictBehavior?: "rename" | "replace" | "fail"; } +/** + * ISharingWithMeOptions - Sharing file with me options + * @param allowExternal - boolean - To include items shared from external tenants set to true - default false + */ export interface ISharingWithMeOptions { allowExternal: boolean; } +/** + * IItemOptions - for copy/move operations + * @param name - string (Optional) - destination file name. + * @param parentReference - Parent DriveItem Info (Optional). id of Drive Item and driveId of Drive. + */ export interface IItemOptions { parentReference?: { id?: string; @@ -428,13 +487,42 @@ export interface IItemOptions { name?: string; } -export interface IFileOptions { +/** + * IFileUploadOptions for uploading a file. + * @param content - any + * @param filePathName - string (Optional) + * e.g. myfile.txt or myfolder/myfile.txt, unneeded for updates + * @param contentType - string (Optional) + * e.g. "application/json; charset=utf-8" for JSON files + * @param eTag - string (Optional) + * @param eTagMatch - string (Optional) - eTag header "If-Match" or "If-None-Match" + */ +export interface IFileUploadOptions { content: any; filePathName?: string; contentType?: string; + eTag?: string; + eTagMatch?: "If-Match" | "If-None-Match"; } +/** + * IPreviewOptions for getting a file preview image. + * @param page - string/number (Optional) - Page number of document to start at, if applicable. + * @param zoom - number (Optional) - Zoom level to start at, if applicable. + */ export interface IPreviewOptions { page?: string | number; zoom?: number; } + +/** + * ISensitivityLabel - for assigning a sensitivity label to a drive item + * @param sensitivityLabelId - string - the id of the sensitivity label + * @param assignmentMethod - Microsoft Graph SensitivityLabelAssignmentMethod - "standard" | "privileged" | "auto" | "none" + * @param justificationText - string - the justification for the sensitivity label + */ +export interface ISensitivityLabel { + sensitivityLabelId: string; + assignmentMethod: ISensitivityLabelAssignmentMethodType; + justificationText: string; +} diff --git a/packages/graph/files/users.ts b/packages/graph/files/users.ts index a88fb4bbc..1f7d71fb4 100644 --- a/packages/graph/files/users.ts +++ b/packages/graph/files/users.ts @@ -1,7 +1,7 @@ import { addProp, body } from "@pnp/queryable"; import { graphPost } from "../graphqueryable.js"; import { _User } from "../users/types.js"; -import { IDrive, Drive, IDrives, Drives, _Drive, DriveItem, IDriveItem, _DriveItem, IItemOptions } from "./types.js"; +import { IDrive, Drive, IDrives, Drives, _Drive, DriveItem, IDriveItem, _DriveItem, IItemOptions, DriveItems } from "./types.js"; declare module "../users/types" { interface _User { @@ -16,23 +16,23 @@ declare module "../users/types" { addProp(_User, "drive", Drive); addProp(_User, "drives", Drives); +addProp(_Drive, "bundles", DriveItems); +addProp(_Drive, "following", DriveItems); declare module "./types" { interface _Drive { + bundles: IDriveItems; special(specialFolder: SpecialFolder): IDriveItem; } interface IDrive { + bundles: IDriveItems; special(specialFolder: SpecialFolder): IDriveItem; } interface _DriveItem { restore(restoreOptions: IItemOptions): Promise; - follow(): Promise; - unfollow(): void; } interface IDriveItem { restore(restoreOptions: IItemOptions): Promise; - follow(): Promise; - unfollow(): void; } } @@ -54,9 +54,3 @@ export enum SpecialFolder { _DriveItem.prototype.restore = function restore(restoreOptions: IItemOptions): Promise { return graphPost(DriveItem(this, "restore"), body(restoreOptions)); }; -_DriveItem.prototype.follow = function follow(): Promise { - return graphPost(DriveItem(this, "follow"), null); -}; -_DriveItem.prototype.unfollow = function unfollow(): Promise { - return graphPost(DriveItem(this, "unfollow"), null); -}; diff --git a/test/graph/files.ts b/test/graph/files.ts index 4b4c267a4..16a3b73b0 100644 --- a/test/graph/files.ts +++ b/test/graph/files.ts @@ -4,8 +4,11 @@ import * as fs from "fs"; import findupSync from "findup-sync"; import "@pnp/graph/users"; import "@pnp/graph/files"; +import "@pnp/graph/files/sites"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; -import { IItemOptions } from "@pnp/graph/files/types"; +import { IDriveItemAdd, IDriveItemAddFolder, IFileUploadOptions, IItemOptions } from "@pnp/graph/files/types"; +import { IResumableUploadOptions } from "@pnp/graph/files"; +import { DriveItemUploadableProperties } from "@microsoft/microsoft-graph-types"; // give ourselves a single reference to the projectRoot const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); @@ -13,11 +16,19 @@ const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); describe("Drive", function () { let testUserName = ""; let driveId = null; - const fileOptions = { + const fileOptions: IFileUploadOptions = { content: "This is some test content", filePathName: "pnpTest.txt", contentType: "text/plain;charset=utf-8", }; + + const fileROOptions: IResumableUploadOptions = { + item: { + name: "TestDocument2.docx", + fileSize: null, + }, + }; + const testConvert = path.join(projectRoot, "test/graph/assets", "testconvert.docx"); // Ensure we have the data to test against @@ -53,10 +64,13 @@ describe("Drive", function () { }); it("Get Drive List", async function () { + if (stringIsNullOrEmpty(this.pnp.settings.graph.id)) { + this.skip(); + } if (stringIsNullOrEmpty(driveId)) { this.skip(); } - const list = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).list(); + const list = await this.pnp.graph.sites.getById(this.pnp.settings.graph.id).drive.list(); return expect(list).is.not.null; }); @@ -95,9 +109,9 @@ describe("Drive", function () { const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); if (children != null) { // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } - return expect(children.data.id).length.greaterThan(0); + return expect(children.id).length.greaterThan(0); }); it("Add Drive Root Folder Item (Add)", async function () { @@ -107,12 +121,17 @@ describe("Drive", function () { const testFileName = `TestFile_${getRandomString(4)}.json`; const fo = JSON.parse(JSON.stringify(fileOptions)); fo.filePathName = testFileName; - const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.add(testFileName, fileOptions.content, fileOptions.contentType); + const driveItemAdd: IDriveItemAdd = { + filename: testFileName, + content: fileOptions.content, + contentType: fileOptions.contentType, + }; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.add(driveItemAdd); if (children != null) { // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } - return expect(children.data.id).length.greaterThan(0); + return expect(children.id).length.greaterThan(0); }); it("Add New Drive Folder", async function () { @@ -120,12 +139,15 @@ describe("Drive", function () { this.skip(); } const testFolderName = `TestFolder_${getRandomString(4)}`; - const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder(testFolderName); + const driveItemAdd: IDriveItemAddFolder = { + name: testFolderName, + }; + const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder(driveItemAdd); if (folder != null) { // Clean up test file - await folder.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(folder.id).delete(); } - return expect(folder.data.id).length.greaterThan(0); + return expect(folder.id).length.greaterThan(0); }); it("Search Drive Item", async function () { @@ -141,7 +163,7 @@ describe("Drive", function () { if (children != null) { searchResults = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.search(searchString)(); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } return expect(searchResults).to.not.be.null; }); @@ -156,11 +178,11 @@ describe("Drive", function () { const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); let driveItemId; if (children != null) { - driveItemId = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id)(); + driveItemId = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id)(); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } - return expect(driveItemId.id).to.be.eq(children.data.id); + return expect(driveItemId.id).to.be.eq(children.id); }); it("Get Drive Item By Path", async function () { @@ -175,9 +197,9 @@ describe("Drive", function () { if (children != null) { driveItemId = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemByPath(testFileName)(); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } - return expect(driveItemId.id).to.be.eq(children.data.id); + return expect(driveItemId.id).to.be.eq(children.id); }); it("Get Drive Items By Path", async function () { @@ -186,17 +208,18 @@ describe("Drive", function () { } let driveItems; const testFolderName = `TestFolder_${getRandomString(4)}`; - const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder(testFolderName); + const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder({name: testFolderName}); if (folder != null) { const testFileName = `${getRandomString(4)}.txt`; - const children = await folder.driveItem.upload({ filePathName: testFileName, content: "My File Content String" }); + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(folder.id) + .upload({ filePathName: testFileName, content: "My File Content String" }); if (children != null) { driveItems = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemsByPath(testFolderName)(); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } // Clean up test folder - await folder.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } return expect(driveItems.length).to.be.gt(0); }); @@ -229,9 +252,30 @@ describe("Drive", function () { let driveItemId = null; if (children != null) { // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); + try { + driveItemId = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id)(); + } catch (err) { + // Do nothing as this is the expected outcome + } + } + return expect(driveItemId).to.be.null; + }); + + it("Permanently Delete Drive Item", async function () { + if (stringIsNullOrEmpty(driveId)) { + this.skip(); + } + const testFileName = `${getRandomString(4)}.txt`; + const fo = JSON.parse(JSON.stringify(fileOptions)); + fo.filePathName = testFileName; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); + let driveItemId = null; + if (children != null) { + // Clean up test file + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).permanentDelete(); try { - driveItemId = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id)(); + driveItemId = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id)(); } catch (err) { // Do nothing as this is the expected outcome } @@ -250,10 +294,10 @@ describe("Drive", function () { const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); let driveItemUpdate; if (children != null) { - await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id).update({ name: testFileName2 }); - driveItemUpdate = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id)(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).update({ name: testFileName2 }); + driveItemUpdate = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id)(); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } return expect(driveItemUpdate.name).to.eq(testFileName2); }); @@ -274,9 +318,9 @@ describe("Drive", function () { parentReference: { driveId: r.parentReference.driveId, id: r.id }, name: testFileName2, }; - fileCopy = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.data.id).copyItem(copyOptions); + fileCopy = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).copyItem(copyOptions); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); if (fileCopy.length > 0) { await await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemByPath(testFileName2).delete(); } @@ -290,24 +334,24 @@ describe("Drive", function () { } const testFileName = `${getRandomString(4)}.txt`; const testFileName2 = `${getRandomString(4)}.txt`; - const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.add(testFileName, "My File Content String"); + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.add({filename: testFileName, content: "My File Content String"}); let driveItemUpdate; if (children != null) { const testFolderName = `TestFolder_${getRandomString(4)}`; - const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder(testFolderName); + const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder({name: testFolderName}); if (folder != null) { const moveOptions: IItemOptions = { - parentReference: { driveId: folder.data.parentReference.driveId, id: folder.data.id }, + parentReference: { driveId: folder.parentReference.driveId, id: folder.id }, name: testFileName2, }; - driveItemUpdate = await children.driveItem.moveItem(moveOptions); + driveItemUpdate = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).moveItem(moveOptions); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); // Clean up test folder - await folder.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(folder.id).delete(); } else { // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } } return expect(driveItemUpdate.name).to.eq(testFileName2); @@ -327,9 +371,9 @@ describe("Drive", function () { const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); let convertDriveItem = null; if (children != null) { - convertDriveItem = await children.driveItem.convertContent("pdf"); + convertDriveItem = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).convertContent("pdf"); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } return expect(convertDriveItem).is.not.null; }); @@ -344,10 +388,52 @@ describe("Drive", function () { const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); let previewDriveItem = null; if (children != null) { - previewDriveItem = await children.driveItem.preview(); + previewDriveItem = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).preview(); // Clean up test file - await children.driveItem.delete(); + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); } return expect(previewDriveItem).to.haveOwnProperty("getUrl"); }); + + it("Follow Drive Item", async function () { + if (stringIsNullOrEmpty(driveId)) { + this.skip(); + } + const testFileName = `${getRandomString(4)}.txt`; + const fo = JSON.parse(JSON.stringify(fileOptions)); + fo.filePathName = testFileName; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); + let followDriveItem = null; + if (children != null) { + // Clean up test file + followDriveItem = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).follow(); + // Clean up test file + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); + } + return expect(followDriveItem).to.be.null; + }); + + it("UnFollow Drive Item", async function () { + if (stringIsNullOrEmpty(driveId)) { + this.skip(); + } + const testFileName = `${getRandomString(4)}.txt`; + const fo = JSON.parse(JSON.stringify(fileOptions)); + fo.filePathName = testFileName; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); + let unfollowDriveItem = null; + if (children != null) { + // Set up test file + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).follow(); + try{ + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).unfollow(); + unfollowDriveItem = true; + }catch(err){ + unfollowDriveItem = false; + } + // Clean up test file + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); + } + return expect(unfollowDriveItem).to.be.true; + }); }); From 12d282fba1a22e1d8e3cba5b514b599efb6f94ec Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 19 Feb 2024 08:28:26 -0700 Subject: [PATCH 103/171] Updating Tests --- packages/graph/calendars/funcs.ts | 8 +- packages/graph/calendars/types.ts | 23 +- test/graph/calendars.ts | 429 +++++++++++++++++++++++++++++- 3 files changed, 426 insertions(+), 34 deletions(-) diff --git a/packages/graph/calendars/funcs.ts b/packages/graph/calendars/funcs.ts index 18d6a7421..bb649e187 100644 --- a/packages/graph/calendars/funcs.ts +++ b/packages/graph/calendars/funcs.ts @@ -1,6 +1,6 @@ import { body } from "@pnp/queryable/index.js"; import { IGraphQueryable, GraphCollection, IGraphCollection, IGraphInstance, graphPost } from "../graphqueryable.js"; -import { EmailAddress, Event as IEvent, Reminder as IReminder, MeetingTimeSuggestionsResult, LocationConstraint, TimeConstraint} from "@microsoft/microsoft-graph-types"; +import { EmailAddress, Event as IEvent, Reminder as IReminder, MeetingTimeSuggestionsResult, LocationConstraint, TimeConstraint, AttendeeBase} from "@microsoft/microsoft-graph-types"; import { CalendarView, ICalendarView } from "./types.js"; interface IEventWithTag extends IEvent { @@ -8,7 +8,7 @@ interface IEventWithTag extends IEvent { } export interface IFindMeetingTimesRequest{ - attendees?: EmailAddress[]; + attendees?: AttendeeBase[]; locationConstraint?: LocationConstraint; timeConstraint?: TimeConstraint; meetingDuration?: string; @@ -82,9 +82,7 @@ export type IInstance = IEventWithTag; */ export function reminderView(this: IGraphQueryable, start: string, end: string): IGraphCollection { - const query = GraphCollection(this, "reminderView"); - query.query.set("startDateTime", start); - query.query.set("endDateTime", end); + const query = GraphCollection(this, `reminderView(startDateTime='${start}',endDateTime='${end}')`); return query; } diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index b7e257ce2..c2baef36f 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -2,7 +2,7 @@ import { body } from "@pnp/queryable"; import { Event as IEventType, Calendar as ICalendarType, CalendarGroup as ICalendarGroupType, CalendarPermission as ICalendarPermissionType, ScheduleInformation as IScheduleInformationType, DateTimeTimeZone as IDateTimeTimeZoneType, Recipient, TimeSlot, } from "@microsoft/microsoft-graph-types"; import { GraphQueryable, IGraphQueryable, _GraphCollection, _GraphInstance, _GraphQueryable, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById, IAddable, addable } from "../decorators.js"; -import { calendarView, instances } from "./funcs.js"; +import { calendarView, instances, reminderView } from "./funcs.js"; /** * Calendar @@ -23,7 +23,7 @@ export class _Calendar extends _GraphInstance { * * @param properties The set of properties used to get the schedule */ - public async getSchedule(properties: IScheduleInformationType): Promise { + public async getSchedule(properties: IGetScheduleRequest): Promise { return graphPost(Calendar(this, "getSchedule"), body(properties)); } @@ -39,14 +39,7 @@ export const Calendar = graphInvokableFactory(_Calendar); @defaultPath("calendars") @getById(Calendar) @addable() -export class _Calendars extends _GraphCollection { - constructor(baseUrl: string | _GraphQueryable, start: string, end: string) { - super(baseUrl); - this.query.set("startDateTime", start); - this.query.set("endDateTime", end); - } - -} +export class _Calendars extends _GraphCollection {} export interface ICalendars extends _Calendars, IGetById, IAddable { } export const Calendars = graphInvokableFactory(_Calendars); @@ -98,8 +91,8 @@ export class _Event extends _GraphInstance { return graphPost(Event(this, "forward"), body({ comment, toRecipients })); } - public async snoozeReminder(newReminderTime: IDateTimeTimeZoneType): Promise { - return graphPost(Event(this, "snoozeReminder"), body({ newReminderTime })); + public async snoozeReminder(reminderTime: IDateTimeTimeZoneType): Promise { + return graphPost(Event(this, "snoozeReminder"), body({ newReminderTime: reminderTime })); } public async tentativelyAccept(comment?: string, sendResponse?: boolean, proposedNewTime?: TimeSlot): Promise { @@ -142,10 +135,10 @@ export const CalendarGroup = graphInvokableFactory(_CalendarGrou * CalendarGroups */ @defaultPath("calendarGroups") -@getById(Event) +@getById(CalendarGroup) @addable() export class _CalendarGroups extends _GraphCollection { } -export interface ICalendarGroups extends _Events, IGetById, IAddable { } +export interface ICalendarGroups extends _Events, IGetById, IAddable { } export const CalendarGroups = graphInvokableFactory(_CalendarGroups); /** @@ -164,7 +157,7 @@ export const CalendarPermission = graphInvokableFactory(_Ca @getById(CalendarPermission) @addable() export class _CalendarPermissions extends _GraphCollection { } -export interface ICalendarPermissions extends _CalendarPermissions, IAddable { } +export interface ICalendarPermissions extends _CalendarPermissions, IGetById, IAddable { } export const CalendarPermissions = graphInvokableFactory(_CalendarPermissions); /** diff --git a/test/graph/calendars.ts b/test/graph/calendars.ts index 69bd1f0bc..1b5efbdc8 100644 --- a/test/graph/calendars.ts +++ b/test/graph/calendars.ts @@ -1,10 +1,13 @@ import { expect } from "chai"; import "@pnp/graph/users"; import "@pnp/graph/calendars"; +import "@pnp/graph/attachments"; + import { HttpRequestError } from "@pnp/queryable"; -import { stringIsNullOrEmpty } from "@pnp/core"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; + // TODO:: test recording setup describe("Calendar", function () { @@ -43,7 +46,7 @@ describe("Calendar", function () { "timeZone": "Pacific Standard Time", }, "location": { - "displayName": "Harry's Bar", + "displayName": "PnPJs Office", }, "start": { "dateTime": endDate.toISOString(), @@ -63,7 +66,7 @@ describe("Calendar", function () { }, }, }); - testEventID = event.data.id; + testEventID = event.id; }); it("Get Calendars", async function () { @@ -80,6 +83,12 @@ describe("Calendar", function () { const calendar = await this.pnp.graph.users.getById(testUserName).calendar(); return expect(calendar).is.not.null; }); + + // This can't be tested in an application context + it.skip("Get Group Calendar", async function () { + const group = await this.pnp.graph.groups.getById("").calendar(); + return expect(group.id).does.not.equal(""); + }); it("Get Events From User's Default Calendar", async function () { const events = await this.pnp.graph.users.getById(testUserName).calendar.events(); @@ -121,9 +130,9 @@ describe("Calendar", function () { }, "subject": "Let's go for lunch", }); - const eventAfterAdd = await this.pnp.graph.users.getById(testUserName).events.getById(event.data.id)(); + const eventAfterAdd = await this.pnp.graph.users.getById(testUserName).events.getById(event.id)(); // Clean up the added contact - await this.pnp.graph.users.getById(testUserName).events.getById(event.data.id).delete(); + await this.pnp.graph.users.getById(testUserName).events.getById(event.id).delete(); return expect(eventAfterAdd).is.not.null; }); @@ -148,12 +157,12 @@ describe("Calendar", function () { "subject": "Let's go for lunch", }); - await this.pnp.graph.users.getById(testUserName).events.getById(event.data.id).update({ + await this.pnp.graph.users.getById(testUserName).events.getById(event.id).update({ reminderMinutesBeforeStart: 10, subject: "Updated Lunch", }); - const eventAfterUpdate = await this.pnp.graph.users.getById(testUserName).events.getById(event.data.id)(); + const eventAfterUpdate = await this.pnp.graph.users.getById(testUserName).events.getById(event.id)(); // Clean up the added contact - await this.pnp.graph.users.getById(testUserName).events.getById(event.data.id).delete(); + await this.pnp.graph.users.getById(testUserName).events.getById(event.id).delete(); return expect(eventAfterUpdate.subject).equals("Updated Lunch"); }); @@ -179,13 +188,13 @@ describe("Calendar", function () { }); // Delete the item we just created - await this.pnp.graph.users.getById(testUserName).events.getById(event.data.id).delete(); + await this.pnp.graph.users.getById(testUserName).events.getById(event.id).delete(); let deletedEventFound = false; try { // If we try to find a user that doesn't exist this returns a 404 - await this.pnp.graph.users.getById(testUserName).events.getById(event.data.id)(); + await this.pnp.graph.users.getById(testUserName).events.getById(event.id)(); deletedEventFound = true; } catch (e) { @@ -201,10 +210,202 @@ describe("Calendar", function () { return expect(deletedEventFound).is.false; }); - // This can't be tested in an application context - it.skip("Get Group Calendar", async function () { - const group = await this.pnp.graph.groups.getById("").calendar(); - return expect(group.id).does.not.equal(""); + it("Forward Event", async function () { + return expect(this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).events.getById(testEventID).forward( + [{"emailAddress": {"address": testUserName, "name": "PnP Test User"}}], + "Here is a forward event" + )).eventually.be.fulfilled; + }); + + it("Cancel Event", async function () { + const startDate: Date = new Date(); + startDate.setDate(startDate.getDate() + 1); + const endDate: Date = startDate; + endDate.setHours(startDate.getHours() + 1); + const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( + { + "end": { + "dateTime": startDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "location": { + "displayName": "Test Lunch", + }, + "start": { + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "subject": "Test Delete Lunch", + }); + + return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).cancel()).eventually.be.fulfilled; + }); + + it.skip("Accept Event", async function () { + const startDate: Date = new Date(); + startDate.setDate(startDate.getDate() + 1); + const endDate: Date = startDate; + endDate.setHours(startDate.getHours() + 1); + const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( + { + "end": { + "dateTime": startDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "location": { + "displayName": "Test Lunch", + }, + "start": { + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "subject": "Test Delete Lunch", + }); + + return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).accept()).eventually.be.fulfilled; + }); + + it.skip("Tentatively Accept Event", async function () { + const startDate: Date = new Date(); + startDate.setDate(startDate.getDate() + 1); + const endDate: Date = startDate; + endDate.setHours(startDate.getHours() + 1); + const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( + { + "end": { + "dateTime": startDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "location": { + "displayName": "Test Lunch", + }, + "start": { + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "subject": "Test Delete Lunch", + }); + + return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).tentativelyAccept()).eventually.be.fulfilled; + }); + + it("Dismiss Reminder", async function () { + const startDate: Date = new Date(); + startDate.setDate(startDate.getDate() + 1); + const endDate: Date = startDate; + endDate.setHours(startDate.getHours() + 1); + const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( + { + "end": { + "dateTime": startDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "location": { + "displayName": "Test Lunch", + }, + "start": { + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "subject": "Test Delete Lunch", + }); + + return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).dismissReminder()).eventually.be.fulfilled; + }); + + it("Snooze Reminder", async function () { + const startDate: Date = new Date(); + startDate.setDate(startDate.getDate() + 1); + const endDate: Date = startDate; + endDate.setHours(startDate.getHours() + 1); + const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( + { + "end": { + "dateTime": startDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "location": { + "displayName": "Test Lunch", + }, + "start": { + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "subject": "Test Delete Lunch", + }); + + endDate.setHours(startDate.getHours() + 10); + return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).snoozeReminder({ + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time", + })).eventually.be.fulfilled; + }); + + it("Get Reminder View", async function () { + const startDate: Date = new Date(); + const endDate: Date = new Date(); + endDate.setDate(endDate.getDate() + 10); + const view = await this.pnp.graph.users.getById(testUserName).reminderView(startDate.toISOString(), endDate.toISOString())(); + return expect(view.length).is.greaterThan(0); + }); + + it("Get User's Schedule", async function () { + const startDate: Date = new Date(); + startDate.setDate(startDate.getDate() + 1); + const endDate: Date = new Date(startDate); + endDate.setHours(startDate.getHours() + 10); + const schedule = await this.pnp.graph.users.getById(testUserName).calendar.getSchedule( + { + "schedules": [ + testUserName, + ], + "startTime": { + "dateTime": startDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + "endTime": { + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time", + }, + }); + return expect(schedule).is.not.null; + }); + + //not available for Application context. Only App Context w/ Shared Calendars. + it.skip("Find Meeting Times", async function () { + const startDate: Date = new Date(); + const endDate: Date = new Date(); + endDate.setDate(endDate.getDate() + 10); + const meetingTimes = await this.pnp.graph.users.getById(testUserName).findMeetingTimes({ + "attendees": [ + { + "type": "required", + "emailAddress": { + "name": "PnP Test User", + "address": testUserName + } + } + ], + "timeConstraint": { + "activityDomain":"work", + "timeSlots": [ + { + "start": { + "dateTime": startDate.toISOString(), + "timeZone": "Pacific Standard Time" + }, + "end": { + "dateTime": endDate.toISOString(), + "timeZone": "Pacific Standard Time" + } + } + ] + }, + "meetingDuration": "PT1H", + "minimumAttendeePercentage": 100 + } + ); + return expect(meetingTimes).is.not.null; }); it("Get Calendar View", async function () { @@ -215,6 +416,15 @@ describe("Calendar", function () { return expect(view.length).is.greaterThan(0); }); + it("Get CalendarView Delta", async function () { + const startDate: Date = new Date(); + const endDate: Date = new Date(); + startDate.setDate(endDate.getDate() - 10); + const deltaEvents = await this.pnp.graph.users.getById(testUserName).calendarView(startDate.toISOString(), endDate.toISOString()).delta(); + + return expect(deltaEvents).is.not.null; + }); + it("Get Instances", async function () { const startDate: Date = new Date(); const endDate: Date = new Date(); @@ -224,6 +434,197 @@ describe("Calendar", function () { return expect(instances.length).is.greaterThan(0); }); + // currently not working + it.skip("Add Event Attachments", async function () { + const attachment = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments.addFile({name: "Test.txt"}, "base64bWFjIGFuZCBjaGVlc2UgdG9kYXk"); + return expect(attachment.id).is.not.null; + }); + + // currently not working + it.skip("Get Event Attachments", async function () { + const attachment = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments.addFile({name: "Test.txt"}, "base64bWFjIGFuZCBjaGVlc2UgdG9kYXk"); + + const attachments = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments(); + return expect(attachments.length).is.greaterThan(0); + }); + + it("Get Calendar Groups", async function () { + const groups = await this.pnp.graph.users.getById(testUserName).calendarGroups(); + return expect(groups.length).is.greaterThan(0); + }); + + it("Get Calendar Group by ID", async function () { + const groups = await this.pnp.graph.users.getById(testUserName).calendarGroups(); + if(groups.length > 0) { + const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(groups[0].id)(); + return expect(group).is.not.null; + } + }); + + it("Create Calendar Group", async function () { + let passed = false; + const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ + "name": "Test Group" + }); + + if(group.id){ + passed = true; + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); + } + return expect(passed).is.true; + }); + + it("Update Calendar Group", async function () { + let passed = false; + const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ + "name": "Test Group" + }); + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).update({ + "name": "Updated Test Group" + }); + const updatedGroup = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id)(); + if(updatedGroup.id && updatedGroup.name === "Updated Test Group"){ + passed = true; + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); + } + return expect(passed).is.true; + }); + + it("Delete Calendar Group", async function () { + let deletedCalendarGroupFound = false; + const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ + "name": "DeleteGroup" + getRandomString(5) + }); + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); + try { + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id)(); + deletedCalendarGroupFound = true; + } catch (e) { + if (e?.isHttpRequestError) { + if ((e).status === 404) { + console.error((e).statusText); + } + } else { + console.log(e.message); + } + } + return expect(deletedCalendarGroupFound).is.false; + }); + + it("List Calendar Group Calendars", async function () { + const groups = await this.pnp.graph.users.getById(testUserName).calendarGroups(); + if(groups.length > 0) { + const calendars = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(groups[0].id).calendars(); + return expect(calendars.length).is.greaterThan(0); + } + }); + + it("Create Calendar Group Calendar", async function () { + let passed = false; + const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ + "name": "CalendarGroup" + getRandomString(5) + }); + const calendar = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).calendars.add({ + "name": "Calendar" + getRandomString(5) + }); + + if(calendar.id){ + passed = true; + await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).delete(); + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); + } + return expect(passed).is.true; + }); + + it("Get Calendar Permissions", async function () { + const permissions = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions(); + return expect(permissions.length).is.greaterThan(0); + }); + + it("Get Calendar Permission by ID", async function () { + const permissions = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions(); + if(permissions.length > 0){ + const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permissions[0].id)(); + return expect(permission.id).is.not.null; + } + this.skip(); + }); + + it("Create Calendar Permissions", async function () { + let passed = false; + const calendar = await this.pnp.graph.users.getById(testUserName).calendars.add({ + "name": "Calendar" + getRandomString(5) + }); + const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.add( + { + "emailAddress": { + "address": testUserName, + "name": "PnP Test User" + }, + "allowedRoles": ["read"], + "role": "read" + }); + if(permission.id){ + passed = true; + await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).delete(); + } + return expect(passed).is.true; + }); + + it("Update Calendar Permissions", async function () { + let passed = false; + const calendar = await this.pnp.graph.users.getById(testUserName).calendars.add({ + "name": "Calendar" + getRandomString(5) + }); + const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.add( + { + "emailAddress": { + "address": testUserName, + "name": "PnP Test User" + }, + "role": "read", + "allowedRoles": ["read", "write"] + }); + + await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.getById(permission.id).update({ + "role": "write" + }); + + const updatedPermission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.getById(permission.id)(); + if(updatedPermission.id && updatedPermission.role === "write"){ + passed = true; + await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).delete(); + } + return expect(passed).is.true; + }); + + it("Delete Calendar Permissions", async function () { + let deletePermissionFound = false; + const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.add( + { + "emailAddress": { + "address": testUserName, + "name": "PnP Test User" + }, + "role": "read", + "allowedRoles": ["read", "write"] + }); + await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permission.id).delete(); + + try { + await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permission.id)(); + deletePermissionFound = true; + } catch (e) { + if (e?.isHttpRequestError) { + if ((e).status === 404) { + console.error((e).statusText); + } + } else { + console.log(e.message); + } + } + return expect(deletePermissionFound).is.false; + }); // Remove the test data we created after(async function () { From 0de49be7d4bd0a0adf37114399e2ef5f1cdd42a7 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 19 Feb 2024 10:05:27 -0700 Subject: [PATCH 104/171] Updating Docs & Tests --- docs/graph/calendars.md | 497 +++++++++++++++++++++++++++--- packages/graph/calendars/index.ts | 14 +- packages/graph/calendars/types.ts | 9 +- test/graph/calendars.ts | 317 ++++++++++--------- 4 files changed, 644 insertions(+), 193 deletions(-) diff --git a/docs/graph/calendars.md b/docs/graph/calendars.md index e773daa67..e292d4206 100644 --- a/docs/graph/calendars.md +++ b/docs/graph/calendars.md @@ -5,11 +5,12 @@ More information can be found in the official Graph documentation: - [Calendar Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/calendar?view=graph-rest-1.0) - [Event Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/event?view=graph-rest-1.0) -## ICalendar, ICalendars +## ICalendar, ICalendars, ICalendarGroup, ICalendarGroups, ICalendarPermission, ICalendarPermissions, ICalendarView, IEvent, IEvents, IEventAddResult, IForwardEvent, IGetScheduleRequest [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) -## Get All Calendars For a User +## Calendars +### Get All Calendars For a User ```TypeScript import { graphfi } from "@pnp/graph"; @@ -23,8 +24,7 @@ const calendars = await graph.users.getById('user@tenant.onmicrosoft.com').calen const myCalendars = await graph.me.calendars(); ``` - -## Get a Specific Calendar For a User +### Get a Specific Calendar For a User ```TypeScript import { graphfi } from "@pnp/graph"; @@ -38,9 +38,9 @@ const CALENDAR_ID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgA const calendar = await graph.users.getById('user@tenant.onmicrosoft.com').calendars.getById(CALENDAR_ID)(); const myCalendar = await graph.me.calendars.getById(CALENDAR_ID)(); -``` -## Get a User's Default Calendar +``` +### Get a User's Default Calendar ```TypeScript import { graphfi } from "@pnp/graph"; @@ -54,7 +54,95 @@ const calendar = await graph.users.getById('user@tenant.onmicrosoft.com').calend const myCalendar = await graph.me.calendar(); ``` -## Get Events For a User's Default Calendar +### Get Calendar for a Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/groups'; + +const graph = graph.using(SPFx(this.context)); + +const calendar = await graph.groups.getById('21aaf779-f6d8-40bd-88c2-4a03f456ee82').calendar(); +``` +### Get free/busy schedule + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const schedule = await graph.me.calendar.getSchedule({ + schedules: ["martha@contoso.com", "user@contoso.com"], + startTime: { + dateTime: "2019-03-15T09:00:00", + timeZone: "Pacific Standard Time", + }, + endTime: { + dateTime: "2019-03-15T18:00:00", + timeZone: "Pacific Standard Time", + }, + availabilityViewInterval: 60 +}) + +``` +### Find Meeting Times + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const meetingTimes = await graph.users.getById('user@contoso.com').findMeetingTimes({ + attendees: [ + { + type: "required", + emailAddress: { + name: "User", + address: 'user@contoso.com' + } + } + ], + timeConstraint: { + activityDomain:"work", + timeSlots: [ + { + start: { + dateTime: "2019-04-16T09:00:00", + timeZone: "Pacific Standard Time" + }, + end: { + dateTime: "2019-04-18T17:00:00", + timeZone: "Pacific Standard Time" + } + } + ] + }, + meetingDuration: "PT1H", + minimumAttendeePercentage: 100 + } +); + +``` +### Reminder View + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const view = await graph.users.getById('user@contoso.com').reminderView("2024-04-15T12:00:00", "2024-04-15T14:00:00") + +``` + +## Events +### Get Events For a User's Default Calendar ```TypeScript import { graphfi } from "@pnp/graph"; @@ -74,9 +162,23 @@ const events = await graph.me.calendar.events(); const events = await graph.me.events(); ``` -## Get Events By ID +### Get Events for a Group -You can use .events.getByID to search through all the events in all calendars or narrow the request to a specific calendar. +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/groups'; + +const graph = graphfi(...); + +// You can do one of +const events = await graph.groups.getById('21aaf779-f6d8-40bd-88c2-4a03f456ee82').calendar.events(); +// or +const events = await graph.groups.getById('21aaf779-f6d8-40bd-88c2-4a03f456ee82').events(); +``` + +### Get Events By ID +You can use .events.getById to search through all the events in all calendars or narrow the request to a specific calendar. ```TypeScript import { graphfi } from "@pnp/graph"; @@ -100,8 +202,7 @@ const event = await graph.users.getById('user@tenant.onmicrosoft.com').calendars const events = await graph.me.calendars.getByID(CalendarID).events.getByID(EventID); ``` - -## Create Events +### Create Event This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). @@ -140,9 +241,44 @@ await graph.users.getById('user@tenant.onmicrosoft.com').calendar.events.add( } ] }); + ``` +### Cancel Event + +This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; + +await graph.me.events.getById(EVENT_ID).cancel(); + +``` + +### Delete Event + +This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); -## Update Events +const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; + +await graph.users.getById('user@tenant.onmicrosoft.com').events.getById(EVENT_ID).delete(); + +await graph.me.events.getById(EVENT_ID).delete(); + +``` +### Update Event This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). @@ -158,9 +294,26 @@ const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAA await graph.users.getById('user@tenant.onmicrosoft.com').calendar.events.getById(EVENT_ID).update({ reminderMinutesBeforeStart: 99, }); + ``` +### Accept Event -## Delete Event +This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; + +//accept(comment, sendResponse) +await graph.me.events.getById(EVENT_ID).accept("I will be there!", true); + +``` +### Tentatively Accept Event This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). @@ -173,39 +326,118 @@ const graph = graphfi(...); const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; -await graph.users.getById('user@tenant.onmicrosoft.com').events.getById(EVENT_ID).delete(); +//tentativelyAccept(comment?, sendResponse?, proposedNewTime?) +await graph.me.events.getById(EVENT_ID).tentativelyAccept("I may not be available.", true); -await graph.me.events.getById(EVENT_ID).delete(); ``` +### Decline Event -## Get Calendar for a Group +This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). ```TypeScript import { graphfi } from "@pnp/graph"; import '@pnp/graph/calendars'; -import '@pnp/graph/groups'; +import '@pnp/graph/users'; -const graph = graph.using(SPFx(this.context)); +const graph = graphfi(...); + +const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; + +//decline(comment?, sendResponse?, proposedNewTime?) +await graph.me.events.getById(EVENT_ID).decline(); -const calendar = await graph.groups.getById('21aaf779-f6d8-40bd-88c2-4a03f456ee82').calendar(); ``` +### Forward Event -## Get Events for a Group +This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). ```TypeScript import { graphfi } from "@pnp/graph"; import '@pnp/graph/calendars'; -import '@pnp/graph/groups'; +import '@pnp/graph/users'; const graph = graphfi(...); -// You can do one of -const events = await graph.groups.getById('21aaf779-f6d8-40bd-88c2-4a03f456ee82').calendar.events(); -// or -const events = await graph.groups.getById('21aaf779-f6d8-40bd-88c2-4a03f456ee82').events(); +const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; + +await graph.me.events.getById(EVENT_ID).forward( + { + ToRecipients:[ + { + EmailAddress: { + Address:"danas@contoso.com", + Name:"Dana Swope" + } + } + ], + Comment: "Dana, hope you can make this meeting." + } +) + ``` +### Dimiss Reminder + +This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). -## Get Calendar View +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; + +await graph.me.events.getById(EVENT_ID).dismissReminder(); + +``` +### Snooze Reminder + +This will work on any `IEvents` objects (e.g. anything accessed using an `events` key). + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const EVENT_ID = 'BBMkAGZjNmY6MDM3LWI3YTYtNERhZC05Y2FkLTgyZjcwZjE4OTI5ZQBGAAAAAAD8VQTDKKWNTY61gNKhnFzLBwBuCP8DF46ETJIEZ0XrTOaCAAAAAAENAABuCP8DF46ETJFEZ0EnTOaCAAFvdoJvAAA='; + +await graph.me.events.getById(EVENT_ID).snoozeReminder(); + +``` +### Get Event Instances + +Get the instances (occurrences) of an event for a specified time range. + +If the event is a `seriesMaster` type, this returns the occurrences and exceptions of the event in the specified time range. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); +const event = graph.me.events.getById(''); +// basic request, note need to invoke the returned queryable +const instances = await event.instances("2020-01-01", "2020-03-01")(); +// you can use select, top, etc to filter your returned results +const instances2 = await event.instances("2020-01-01", "2020-03-01").select("subject").top(3)(); +// you can specify times along with the dates +const instance3 = await event.instances("2020-01-01T19:00:00-08:00", "2020-03-01T19:00:00-08:00")(); +``` + +### Event Attachments + +See [Attachments](./attachments.md) + +### Event Messages + +See [Messages](./mail-messages.md); + +## Calendar View +### Get Calendar View Gets the events in a calendar during a specified date range. @@ -228,7 +460,25 @@ const view3 = await graph.users.getById('user@tenant.onmicrosoft.com').calendarV const view4 = await graph.me.calendarView("2020-01-01", "2020-03-01")(); ``` -## Find Rooms +### Get Delta + +Gets the events in a calendar view that have been added, deleted, updated + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const delta = await graph.users.getById('user@tenant.onmicrosoft.com').calendarView("2020-01-01", "2020-03-01").delta() + +``` +## Places + +See [Places](./places.md); + +### Find Rooms Gets the `emailAddress` objects that represent all the meeting rooms in the user's tenant or in a specific room list. @@ -248,11 +498,21 @@ const rooms2 = await graph.users.getById('user@tenant.onmicrosoft.com').findRoom const rooms3 = await graph.users.getById('user@tenant.onmicrosoft.com').findRooms().select('name').top(10)(); ``` -## Get Event Instances +## Calendar Groups -Get the instances (occurrences) of an event for a specified time range. +### Get Calendar Groups -If the event is a `seriesMaster` type, this returns the occurrences and exceptions of the event in the specified time range. +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const calendarGroups = await graph.me.calendarGroups(); + +``` +### Get Calendar Group By ID ```TypeScript import { graphfi } from "@pnp/graph"; @@ -260,15 +520,174 @@ import '@pnp/graph/calendars'; import '@pnp/graph/users'; const graph = graphfi(...); -const event = graph.me.events.getById(''); -// basic request, note need to invoke the returned queryable -const instances = await event.instances("2020-01-01", "2020-03-01")(); -// you can use select, top, etc to filter your returned results -const instances2 = await event.instances("2020-01-01", "2020-03-01").select("subject").top(3)(); -// you can specify times along with the dates -const instance3 = await event.instances("2020-01-01T19:00:00-08:00", "2020-03-01T19:00:00-08:00")(); + +const CALENDAR_GROUPID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +const calendarGroup = await graph.me.calendarGroups.getById(CALENDAR_GROUPID)(); + ``` +### Create Calendar Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const calendarGroup = await graph.me.calendarGroups.add({ + name: "Test Group" +}); + +``` +### Delete Calendar Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); -## Event Attachments +const CALENDAR_GROUPID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +await graph.me.calendarGroups.getById(CALENDAR_GROUPID).delete(); + +``` +### Update Calendar Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_GROUPID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +await graph.me.calendarGroups.getById(CALENDAR_GROUPID).update({ + name: "New Group Name" +}); + +``` +### Get Calendars in Calendar Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_GROUPID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +const calendars = await graph.me.calendarGroups.getById(CALENDAR_GROUPID).calendars(); + +``` +### Create Calendar in Calendar Group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_GROUPID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +const calendar = await graph.me.calendarGroups.getById(CALENDAR_GROUPID).calendars.add({ + name: "New Calendar" +}); + +``` +## Calendar Permissions + +### Get Calendar Permissions + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_ID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +const permissions = await graph.me.calendars.getById(CALENDAR_ID).calendarPermissions(); +``` +### Get Calendar Permission By Id + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_ID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +const permissions = await graph.me.calendars.getById(CALENDAR_ID).calendarPermissions.getById(`{permissionId}`)(); + +``` + +### Create Calendar Permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_ID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +const permissions = await graph.me.calendars.getById(CALENDAR_ID).calendarPermissions.add({ + { + emailAddress: { + address: 'MarthaM@contoso.com', + name: "Martha Marie" + }, + allowedRoles: ["read"], + role: "read" + } +}); + +``` +### Delete Calendar Permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_ID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +await graph.me.calendars.getById(CALENDAR_ID).calendarPermissions.getById(`{permissionId}`).delete(); + +``` + +### Update Calendar Permission + +```TypeScript +import { graphfi } from "@pnp/graph"; +import '@pnp/graph/calendars'; +import '@pnp/graph/users'; + +const graph = graphfi(...); + +const CALENDAR_ID = 'AQMkAGZjNmY0MDN3LRI3YTYtNDQAFWQtOWNhZC04MmY3MGYxODkeOWUARgAAA-xUBMMopY1NkrWA0qGcXHsHAG4I-wMXjoRMkgRnRetM5oIAAAIBBgAAAG4I-wMXjoRMkgRnRetM5oIAAAIsYgAAAA=='; + +const permissions = await graph.me.calendars.getById(CALENDAR_ID).calendarPermissions.update({ + { + emailAddress: { + address: 'MarthaM@contoso.com', + name: "Martha Marie" + }, + role: "read", + allowedRoles: ["read", "write"] + } +}); -See [Attachments](./attachments.md) \ No newline at end of file +``` \ No newline at end of file diff --git a/packages/graph/calendars/index.ts b/packages/graph/calendars/index.ts index 8f51031ad..1d721bbfc 100644 --- a/packages/graph/calendars/index.ts +++ b/packages/graph/calendars/index.ts @@ -4,11 +4,23 @@ import "./users.js"; export { Calendar, Calendars, + CalendarGroup, + CalendarGroups, + CalendarPermission, + CalendarPermissions, + CalendarView, Event, - IEventAddResult, Events, ICalendar, ICalendars, + ICalendarGroup, + ICalendarGroups, + ICalendarPermission, + ICalendarPermissions, + ICalendarView, IEvent, IEvents, + IEventAddResult, + IForwardEvent, + IGetScheduleRequest, } from "./types.js"; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index c2baef36f..cdaacff7c 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -87,8 +87,8 @@ export class _Event extends _GraphInstance { return graphPost(Event(this, "dismissReminder")); } - public async forward(toRecipients: Recipient[], comment?: string): Promise { - return graphPost(Event(this, "forward"), body({ comment, toRecipients })); + public async forward(fowardEventInfo: IForwardEvent): Promise { + return graphPost(Event(this, "forward"), body(fowardEventInfo)); } public async snoozeReminder(reminderTime: IDateTimeTimeZoneType): Promise { @@ -168,6 +168,11 @@ export interface IEventAddResult { event: IEvent; } +export interface IForwardEvent { + Comment?: string; + ToRecipients: Recipient[]; +} + export interface IGetScheduleRequest { schedules: string[]; startTime: IDateTimeTimeZoneType; diff --git a/test/graph/calendars.ts b/test/graph/calendars.ts index 1b5efbdc8..88d9492d4 100644 --- a/test/graph/calendars.ts +++ b/test/graph/calendars.ts @@ -6,10 +6,7 @@ import "@pnp/graph/attachments"; import { HttpRequestError } from "@pnp/queryable"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; - - // TODO:: test recording setup - describe("Calendar", function () { let testUserName = ""; @@ -41,28 +38,28 @@ describe("Calendar", function () { const endRangeString = `${endRange.getFullYear()}-${endRange.getMonth() + 1}-${endRange.getDate()}`; const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", - }, - "location": { - "displayName": "PnPJs Office", - }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", - }, - "subject": "Let's go for lunch", - "recurrence": { - "pattern": { - "type": "weekly", - "interval": 1, - "daysOfWeek": ["monday"], + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", + }, + location: { + displayName: "PnPJs Office", + }, + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", + }, + subject: "Let's go for lunch", + recurrence: { + pattern: { + type: "weekly", + interval: 1, + daysOfWeek: ["monday"], }, - "range": { - "type": "endDate", - "startDate": startRangeString, - "endDate": endRangeString, + range: { + type: "endDate", + startDate: startRangeString, + endDate: endRangeString, }, }, }); @@ -117,18 +114,18 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "location": { - "displayName": "Test Lunch", + location: { + displayName: "Test Lunch", }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "subject": "Let's go for lunch", + subject: "Let's go for lunch", }); const eventAfterAdd = await this.pnp.graph.users.getById(testUserName).events.getById(event.id)(); // Clean up the added contact @@ -143,18 +140,18 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "location": { - "displayName": "Test Lunch", + location: { + displayName: "Test Lunch", }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "subject": "Let's go for lunch", + subject: "Let's go for lunch", }); await this.pnp.graph.users.getById(testUserName).events.getById(event.id).update({ @@ -173,18 +170,18 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "location": { - "displayName": "Test Lunch", + location: { + displayName: "Test Lunch", }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "subject": "Test Delete Lunch", + subject: "Test Delete Lunch", }); // Delete the item we just created @@ -212,11 +209,15 @@ describe("Calendar", function () { it("Forward Event", async function () { return expect(this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).events.getById(testEventID).forward( - [{"emailAddress": {"address": testUserName, "name": "PnP Test User"}}], - "Here is a forward event" + { + ToRecipients: [{emailAddress: {address: testUserName, name: "PnP Test User"}}], + Comment: "Here is a forward event" + } )).eventually.be.fulfilled; }); + it.skip("Decline Event", async function () {}); + it("Cancel Event", async function () { const startDate: Date = new Date(); startDate.setDate(startDate.getDate() + 1); @@ -224,18 +225,18 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", - }, - "location": { - "displayName": "Test Lunch", - }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", - }, - "subject": "Test Delete Lunch", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", + }, + location: { + displayName: "Test Lunch", + }, + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", + }, + subject: "Test Delete Lunch", }); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).cancel()).eventually.be.fulfilled; @@ -248,18 +249,18 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "location": { - "displayName": "Test Lunch", + location: { + displayName: "Test Lunch", }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "subject": "Test Delete Lunch", + subject: "Test Delete Lunch", }); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).accept()).eventually.be.fulfilled; @@ -270,23 +271,37 @@ describe("Calendar", function () { startDate.setDate(startDate.getDate() + 1); const endDate: Date = startDate; endDate.setHours(startDate.getHours() + 1); + const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "location": { - "displayName": "Test Lunch", + location: { + displayName: "Test Lunch", }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "subject": "Test Delete Lunch", + subject: "Test Delete Lunch", }); - return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).tentativelyAccept()).eventually.be.fulfilled; + return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).tentativelyAccept( + "I might be able to make it", + true, + { + start: { + dateTime: "2019-12-02T19:00:00", + timeZone: "Pacific Standard Time" + }, + end: { + dateTime: "2019-12-02T19:00:00", + timeZone: "Pacific Standard Time" + } + } + )).eventually.be.fulfilled; }); it("Dismiss Reminder", async function () { @@ -296,18 +311,18 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "location": { - "displayName": "Test Lunch", + location: { + displayName: "Test Lunch", }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "subject": "Test Delete Lunch", + subject: "Test Delete Lunch", }); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).dismissReminder()).eventually.be.fulfilled; @@ -320,24 +335,24 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( { - "end": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "location": { - "displayName": "Test Lunch", + location: { + displayName: "Test Lunch", }, - "start": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "subject": "Test Delete Lunch", + subject: "Test Delete Lunch", }); endDate.setHours(startDate.getHours() + 10); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).snoozeReminder({ - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", })).eventually.be.fulfilled; }); @@ -356,16 +371,16 @@ describe("Calendar", function () { endDate.setHours(startDate.getHours() + 10); const schedule = await this.pnp.graph.users.getById(testUserName).calendar.getSchedule( { - "schedules": [ + schedules: [ testUserName, ], - "startTime": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time", + startTime: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", }, - "endTime": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time", + endTime: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", }, }); return expect(schedule).is.not.null; @@ -377,32 +392,32 @@ describe("Calendar", function () { const endDate: Date = new Date(); endDate.setDate(endDate.getDate() + 10); const meetingTimes = await this.pnp.graph.users.getById(testUserName).findMeetingTimes({ - "attendees": [ + attendees: [ { - "type": "required", - "emailAddress": { - "name": "PnP Test User", - "address": testUserName + type: "required", + emailAddress: { + name: "PnP Test User", + address: testUserName } } ], - "timeConstraint": { - "activityDomain":"work", - "timeSlots": [ + timeConstraint: { + activityDomain:"work", + timeSlots: [ { - "start": { - "dateTime": startDate.toISOString(), - "timeZone": "Pacific Standard Time" + start: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time" }, - "end": { - "dateTime": endDate.toISOString(), - "timeZone": "Pacific Standard Time" + end: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time" } } ] }, - "meetingDuration": "PT1H", - "minimumAttendeePercentage": 100 + meetingDuration: "PT1H", + minimumAttendeePercentage: 100 } ); return expect(meetingTimes).is.not.null; @@ -464,7 +479,7 @@ describe("Calendar", function () { it("Create Calendar Group", async function () { let passed = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - "name": "Test Group" + name: "Test Group" }); if(group.id){ @@ -477,10 +492,10 @@ describe("Calendar", function () { it("Update Calendar Group", async function () { let passed = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - "name": "Test Group" + name: "Test Group" }); await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).update({ - "name": "Updated Test Group" + name: "Updated Test Group" }); const updatedGroup = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id)(); if(updatedGroup.id && updatedGroup.name === "Updated Test Group"){ @@ -493,7 +508,7 @@ describe("Calendar", function () { it("Delete Calendar Group", async function () { let deletedCalendarGroupFound = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - "name": "DeleteGroup" + getRandomString(5) + name: "DeleteGroup" + getRandomString(5) }); await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); try { @@ -522,10 +537,10 @@ describe("Calendar", function () { it("Create Calendar Group Calendar", async function () { let passed = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - "name": "CalendarGroup" + getRandomString(5) + name: "CalendarGroup" + getRandomString(5) }); const calendar = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).calendars.add({ - "name": "Calendar" + getRandomString(5) + name: "Calendar" + getRandomString(5) }); if(calendar.id){ @@ -553,16 +568,16 @@ describe("Calendar", function () { it("Create Calendar Permissions", async function () { let passed = false; const calendar = await this.pnp.graph.users.getById(testUserName).calendars.add({ - "name": "Calendar" + getRandomString(5) + name: "Calendar" + getRandomString(5) }); const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.add( { - "emailAddress": { - "address": testUserName, - "name": "PnP Test User" + emailAddress: { + address: testUserName, + name: "PnP Test User" }, - "allowedRoles": ["read"], - "role": "read" + allowedRoles: ["read"], + role: "read" }); if(permission.id){ passed = true; @@ -574,20 +589,20 @@ describe("Calendar", function () { it("Update Calendar Permissions", async function () { let passed = false; const calendar = await this.pnp.graph.users.getById(testUserName).calendars.add({ - "name": "Calendar" + getRandomString(5) + name: "Calendar" + getRandomString(5) }); const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.add( { - "emailAddress": { - "address": testUserName, - "name": "PnP Test User" + emailAddress: { + address: testUserName, + name: "PnP Test User" }, - "role": "read", - "allowedRoles": ["read", "write"] + role: "read", + allowedRoles: ["read", "write"] }); await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.getById(permission.id).update({ - "role": "write" + role: "write" }); const updatedPermission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.getById(permission.id)(); @@ -602,12 +617,12 @@ describe("Calendar", function () { let deletePermissionFound = false; const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.add( { - "emailAddress": { - "address": testUserName, - "name": "PnP Test User" + emailAddress: { + address: testUserName, + name: "PnP Test User" }, - "role": "read", - "allowedRoles": ["read", "write"] + role: "read", + allowedRoles: ["read", "write"] }); await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permission.id).delete(); From 35803ab4e15a27a080e1e5a28bfc8b2b13608509 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 19 Feb 2024 10:25:22 -0700 Subject: [PATCH 105/171] ES Lint Fixes --- packages/graph/attachments/types.ts | 8 +- packages/graph/calendars/funcs.ts | 11 +- packages/graph/calendars/groups.ts | 2 +- packages/graph/calendars/types.ts | 35 +++-- test/graph/calendars.ts | 208 ++++++++++++++-------------- 5 files changed, 141 insertions(+), 123 deletions(-) diff --git a/packages/graph/attachments/types.ts b/packages/graph/attachments/types.ts index 1f3774358..7c5f6d8c4 100644 --- a/packages/graph/attachments/types.ts +++ b/packages/graph/attachments/types.ts @@ -20,21 +20,21 @@ export const Attachment = graphInvokableFactory(_Attachment); export class _Attachments extends _GraphCollection { // TODO: Adding attachments is not implemented correctly. I believe it requires updating the parent item but needs further investigation. - + /** * Add attachment to this collection * * @param attachmentInfo Attachment properties * @param bytes File content */ - public addFile(attachmentInfo:IAttachmentType, bytes:string | Blob): Promise { + public addFile(attachmentInfo: IAttachmentType, bytes: string | Blob): Promise { return graphPost(GraphInstance(this), body(type("#microsoft.graph.fileAttachment", { contentBytes: bytes, - ...attachmentInfo + ...attachmentInfo, }))); } - + } export interface IAttachments extends _Attachments, IGetById {} export const Attachments = graphInvokableFactory(_Attachments); diff --git a/packages/graph/calendars/funcs.ts b/packages/graph/calendars/funcs.ts index bb649e187..fb88b5f86 100644 --- a/packages/graph/calendars/funcs.ts +++ b/packages/graph/calendars/funcs.ts @@ -1,6 +1,13 @@ import { body } from "@pnp/queryable/index.js"; import { IGraphQueryable, GraphCollection, IGraphCollection, IGraphInstance, graphPost } from "../graphqueryable.js"; -import { EmailAddress, Event as IEvent, Reminder as IReminder, MeetingTimeSuggestionsResult, LocationConstraint, TimeConstraint, AttendeeBase} from "@microsoft/microsoft-graph-types"; +import { + EmailAddress, + Event as IEvent, + Reminder as IReminder, + MeetingTimeSuggestionsResult, + LocationConstraint, TimeConstraint, + AttendeeBase, +} from "@microsoft/microsoft-graph-types"; import { CalendarView, ICalendarView } from "./types.js"; interface IEventWithTag extends IEvent { @@ -86,4 +93,4 @@ export function reminderView(this: IGraphQueryable, start: string, end: string): return query; } -export type IReminderInfo = IReminder; \ No newline at end of file +export type IReminderInfo = IReminder; diff --git a/packages/graph/calendars/groups.ts b/packages/graph/calendars/groups.ts index 7c3cbf1c1..82f82fb1a 100644 --- a/packages/graph/calendars/groups.ts +++ b/packages/graph/calendars/groups.ts @@ -20,4 +20,4 @@ declare module "../groups/types" { addProp(_Group, "calendar", Calendar); addProp(_Group, "events", Events); -_Group.prototype.calendarView = calendarView; \ No newline at end of file +_Group.prototype.calendarView = calendarView; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index cdaacff7c..e11a09617 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -1,8 +1,17 @@ import { body } from "@pnp/queryable"; -import { Event as IEventType, Calendar as ICalendarType, CalendarGroup as ICalendarGroupType, CalendarPermission as ICalendarPermissionType, ScheduleInformation as IScheduleInformationType, DateTimeTimeZone as IDateTimeTimeZoneType, Recipient, TimeSlot, } from "@microsoft/microsoft-graph-types"; +import { + Event as IEventType, + Calendar as ICalendarType, + CalendarGroup as ICalendarGroupType, + CalendarPermission as ICalendarPermissionType, + ScheduleInformation as IScheduleInformationType, + DateTimeTimeZone as IDateTimeTimeZoneType, + Recipient, + TimeSlot, +} from "@microsoft/microsoft-graph-types"; import { GraphQueryable, IGraphQueryable, _GraphCollection, _GraphInstance, _GraphQueryable, graphInvokableFactory, graphPost } from "../graphqueryable.js"; import { defaultPath, IDeleteable, deleteable, IUpdateable, updateable, getById, IGetById, IAddable, addable } from "../decorators.js"; -import { calendarView, instances, reminderView } from "./funcs.js"; +import { calendarView, instances } from "./funcs.js"; /** * Calendar @@ -11,6 +20,8 @@ import { calendarView, instances, reminderView } from "./funcs.js"; @updateable() export class _Calendar extends _GraphInstance { + public calendarView = calendarView; + public get calendarPermissions(): ICalendarPermissions { return CalendarPermissions(this); } @@ -26,9 +37,6 @@ export class _Calendar extends _GraphInstance { public async getSchedule(properties: IGetScheduleRequest): Promise { return graphPost(Calendar(this, "getSchedule"), body(properties)); } - - public calendarView = calendarView; - } export interface ICalendar extends _Calendar, IUpdateable, IDeleteable { } export const Calendar = graphInvokableFactory(_Calendar); @@ -52,14 +60,13 @@ export class _CalendarView extends _GraphCollection { this.query.set("startDateTime", start); this.query.set("endDateTime", end); } - + public async delta(token?: string): Promise { return graphPost(GraphQueryable(this, `delta?${this.query}`), body({ token })); } } export interface ICalendarView extends _CalendarView { } export const CalendarView = (baseUrl: string | IGraphQueryable, start: string, end: string): _CalendarView => new _CalendarView(baseUrl, start, end); -//export const CalendarView = graphInvokableFactory(_CalendarView); /** * Event @@ -67,13 +74,14 @@ export const CalendarView = (baseUrl: string | IGraphQueryable, start: string, e @deleteable() @updateable() export class _Event extends _GraphInstance { + public instances = instances; public async accept(comment?: string, sendResponse?: boolean): Promise { return graphPost(Event(this, "accept"), body({ comment, sendResponse })); } public async cancel(comment?: string): Promise { - return graphPost(Event(this, "cancel")); + return graphPost(Event(this, "cancel"), body({ comment })); } public async decline(comment?: string, sendResponse?: boolean, proposedNewTime?: TimeSlot): Promise { @@ -102,7 +110,6 @@ export class _Event extends _GraphInstance { return graphPost(Event(this, "tentativelyAccept"), body({ comment, sendResponse, proposedNewTime })); } - public instances = instances; } export interface IEvent extends _Event, IDeleteable, IUpdateable { } export const Event = graphInvokableFactory(_Event); @@ -123,10 +130,10 @@ export const Events = graphInvokableFactory(_Events); @deleteable() @updateable() export class _CalendarGroup extends _GraphInstance { - - public get calendars(): ICalendars { - return Calendars(this); - } + + public get calendars(): ICalendars { + return Calendars(this); + } } export interface ICalendarGroup extends _CalendarGroup, IDeleteable, IUpdateable { } export const CalendarGroup = graphInvokableFactory(_CalendarGroup); @@ -178,4 +185,4 @@ export interface IGetScheduleRequest { startTime: IDateTimeTimeZoneType; endTime: IDateTimeTimeZoneType; availabilityViewInterval?: number; -} \ No newline at end of file +} diff --git a/test/graph/calendars.ts b/test/graph/calendars.ts index 88d9492d4..12280f044 100644 --- a/test/graph/calendars.ts +++ b/test/graph/calendars.ts @@ -80,7 +80,7 @@ describe("Calendar", function () { const calendar = await this.pnp.graph.users.getById(testUserName).calendar(); return expect(calendar).is.not.null; }); - + // This can't be tested in an application context it.skip("Get Group Calendar", async function () { const group = await this.pnp.graph.groups.getById("").calendar(); @@ -210,34 +210,36 @@ describe("Calendar", function () { it("Forward Event", async function () { return expect(this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).events.getById(testEventID).forward( { - ToRecipients: [{emailAddress: {address: testUserName, name: "PnP Test User"}}], - Comment: "Here is a forward event" + ToRecipients: [{ emailAddress: { address: testUserName, name: "PnP Test User" } }], + Comment: "Here is a forward event", } )).eventually.be.fulfilled; }); - it.skip("Decline Event", async function () {}); + it.skip("Decline Event", async function () { + return expect(true); + }); - it("Cancel Event", async function () { + it("Cancel Event", async function () { const startDate: Date = new Date(); startDate.setDate(startDate.getDate() + 1); const endDate: Date = startDate; endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( - { - end: { - dateTime: startDate.toISOString(), - timeZone: "Pacific Standard Time", - }, - location: { - displayName: "Test Lunch", - }, - start: { - dateTime: endDate.toISOString(), - timeZone: "Pacific Standard Time", - }, - subject: "Test Delete Lunch", - }); + { + end: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", + }, + location: { + displayName: "Test Lunch", + }, + start: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", + }, + subject: "Test Delete Lunch", + }); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).cancel()).eventually.be.fulfilled; }); @@ -248,7 +250,7 @@ describe("Calendar", function () { const endDate: Date = startDate; endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( - { + { end: { dateTime: startDate.toISOString(), timeZone: "Pacific Standard Time", @@ -261,7 +263,7 @@ describe("Calendar", function () { timeZone: "Pacific Standard Time", }, subject: "Test Delete Lunch", - }); + }); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).accept()).eventually.be.fulfilled; }); @@ -271,9 +273,9 @@ describe("Calendar", function () { startDate.setDate(startDate.getDate() + 1); const endDate: Date = startDate; endDate.setHours(startDate.getHours() + 1); - + const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( - { + { end: { dateTime: startDate.toISOString(), timeZone: "Pacific Standard Time", @@ -286,21 +288,21 @@ describe("Calendar", function () { timeZone: "Pacific Standard Time", }, subject: "Test Delete Lunch", - }); + }); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).tentativelyAccept( - "I might be able to make it", - true, - { - start: { - dateTime: "2019-12-02T19:00:00", - timeZone: "Pacific Standard Time" - }, - end: { - dateTime: "2019-12-02T19:00:00", - timeZone: "Pacific Standard Time" - } - } + "I might be able to make it", + true, + { + start: { + dateTime: "2019-12-02T19:00:00", + timeZone: "Pacific Standard Time", + }, + end: { + dateTime: "2019-12-02T19:00:00", + timeZone: "Pacific Standard Time", + }, + } )).eventually.be.fulfilled; }); @@ -310,7 +312,7 @@ describe("Calendar", function () { const endDate: Date = startDate; endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( - { + { end: { dateTime: startDate.toISOString(), timeZone: "Pacific Standard Time", @@ -323,7 +325,7 @@ describe("Calendar", function () { timeZone: "Pacific Standard Time", }, subject: "Test Delete Lunch", - }); + }); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).dismissReminder()).eventually.be.fulfilled; }); @@ -334,7 +336,7 @@ describe("Calendar", function () { const endDate: Date = startDate; endDate.setHours(startDate.getHours() + 1); const event = await this.pnp.graph.users.getById(testUserName).calendar.events.add( - { + { end: { dateTime: startDate.toISOString(), timeZone: "Pacific Standard Time", @@ -347,7 +349,7 @@ describe("Calendar", function () { timeZone: "Pacific Standard Time", }, subject: "Test Delete Lunch", - }); + }); endDate.setHours(startDate.getHours() + 10); return expect(this.pnp.graph.users.getById(testUserName).calendar.events.getById(event.id).snoozeReminder({ @@ -386,7 +388,7 @@ describe("Calendar", function () { return expect(schedule).is.not.null; }); - //not available for Application context. Only App Context w/ Shared Calendars. + // not available for Application context. Only App Context w/ Shared Calendars. it.skip("Find Meeting Times", async function () { const startDate: Date = new Date(); const endDate: Date = new Date(); @@ -396,29 +398,29 @@ describe("Calendar", function () { { type: "required", emailAddress: { - name: "PnP Test User", - address: testUserName - } - } - ], - timeConstraint: { - activityDomain:"work", + name: "PnP Test User", + address: testUserName, + }, + }, + ], + timeConstraint: { + activityDomain: "work", timeSlots: [ - { - start: { - dateTime: startDate.toISOString(), - timeZone: "Pacific Standard Time" + { + start: { + dateTime: startDate.toISOString(), + timeZone: "Pacific Standard Time", + }, + end: { + dateTime: endDate.toISOString(), + timeZone: "Pacific Standard Time", + }, }, - end: { - dateTime: endDate.toISOString(), - timeZone: "Pacific Standard Time" - } - } - ] - }, - meetingDuration: "PT1H", - minimumAttendeePercentage: 100 - } + ], + }, + meetingDuration: "PT1H", + minimumAttendeePercentage: 100, + } ); return expect(meetingTimes).is.not.null; }); @@ -451,13 +453,15 @@ describe("Calendar", function () { // currently not working it.skip("Add Event Attachments", async function () { - const attachment = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments.addFile({name: "Test.txt"}, "base64bWFjIGFuZCBjaGVlc2UgdG9kYXk"); + const attachment = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments.addFile( + { name: "Test.txt" }, "base64bWFjIGFuZCBjaGVlc2UgdG9kYXk"); return expect(attachment.id).is.not.null; }); - // currently not working + // currently not working it.skip("Get Event Attachments", async function () { - const attachment = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments.addFile({name: "Test.txt"}, "base64bWFjIGFuZCBjaGVlc2UgdG9kYXk"); + // const attachment = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments.addFile( + // { name: "Test.txt" }, "base64bWFjIGFuZCBjaGVlc2UgdG9kYXk"); const attachments = await this.pnp.graph.users.getById(testUserName).events.getById(testEventID).attachments(); return expect(attachments.length).is.greaterThan(0); @@ -470,19 +474,19 @@ describe("Calendar", function () { it("Get Calendar Group by ID", async function () { const groups = await this.pnp.graph.users.getById(testUserName).calendarGroups(); - if(groups.length > 0) { + if (groups.length > 0) { const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(groups[0].id)(); return expect(group).is.not.null; } }); - it("Create Calendar Group", async function () { + it("Create Calendar Group", async function () { let passed = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - name: "Test Group" + name: "Test Group", }); - - if(group.id){ + + if (group.id) { passed = true; await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); } @@ -492,13 +496,13 @@ describe("Calendar", function () { it("Update Calendar Group", async function () { let passed = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - name: "Test Group" + name: "Test Group", }); await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).update({ - name: "Updated Test Group" + name: "Updated Test Group", }); const updatedGroup = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id)(); - if(updatedGroup.id && updatedGroup.name === "Updated Test Group"){ + if (updatedGroup.id && updatedGroup.name === "Updated Test Group") { passed = true; await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); } @@ -508,11 +512,11 @@ describe("Calendar", function () { it("Delete Calendar Group", async function () { let deletedCalendarGroupFound = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - name: "DeleteGroup" + getRandomString(5) + name: "DeleteGroup" + getRandomString(5), }); - await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); try { - await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id)(); + await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id)(); deletedCalendarGroupFound = true; } catch (e) { if (e?.isHttpRequestError) { @@ -528,7 +532,7 @@ describe("Calendar", function () { it("List Calendar Group Calendars", async function () { const groups = await this.pnp.graph.users.getById(testUserName).calendarGroups(); - if(groups.length > 0) { + if (groups.length > 0) { const calendars = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(groups[0].id).calendars(); return expect(calendars.length).is.greaterThan(0); } @@ -537,13 +541,13 @@ describe("Calendar", function () { it("Create Calendar Group Calendar", async function () { let passed = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ - name: "CalendarGroup" + getRandomString(5) + name: "CalendarGroup" + getRandomString(5), }); const calendar = await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).calendars.add({ - name: "Calendar" + getRandomString(5) + name: "Calendar" + getRandomString(5), }); - if(calendar.id){ + if (calendar.id) { passed = true; await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).delete(); await this.pnp.graph.users.getById(testUserName).calendarGroups.getById(group.id).delete(); @@ -556,9 +560,9 @@ describe("Calendar", function () { return expect(permissions.length).is.greaterThan(0); }); - it("Get Calendar Permission by ID", async function () { + it("Get Calendar Permission by ID", async function () { const permissions = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions(); - if(permissions.length > 0){ + if (permissions.length > 0) { const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permissions[0].id)(); return expect(permission.id).is.not.null; } @@ -568,18 +572,18 @@ describe("Calendar", function () { it("Create Calendar Permissions", async function () { let passed = false; const calendar = await this.pnp.graph.users.getById(testUserName).calendars.add({ - name: "Calendar" + getRandomString(5) + name: "Calendar" + getRandomString(5), }); const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.add( { emailAddress: { address: testUserName, - name: "PnP Test User" + name: "PnP Test User", }, allowedRoles: ["read"], - role: "read" + role: "read", }); - if(permission.id){ + if (permission.id) { passed = true; await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).delete(); } @@ -589,45 +593,45 @@ describe("Calendar", function () { it("Update Calendar Permissions", async function () { let passed = false; const calendar = await this.pnp.graph.users.getById(testUserName).calendars.add({ - name: "Calendar" + getRandomString(5) + name: "Calendar" + getRandomString(5), }); const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.add( { emailAddress: { address: testUserName, - name: "PnP Test User" + name: "PnP Test User", }, role: "read", - allowedRoles: ["read", "write"] + allowedRoles: ["read", "write"], }); await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.getById(permission.id).update({ - role: "write" + role: "write", }); const updatedPermission = await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).calendarPermissions.getById(permission.id)(); - if(updatedPermission.id && updatedPermission.role === "write"){ + if (updatedPermission.id && updatedPermission.role === "write") { passed = true; await this.pnp.graph.users.getById(testUserName).calendars.getById(calendar.id).delete(); } return expect(passed).is.true; }); - it("Delete Calendar Permissions", async function () { + it("Delete Calendar Permissions", async function () { let deletePermissionFound = false; const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.add( - { - emailAddress: { - address: testUserName, - name: "PnP Test User" - }, - role: "read", - allowedRoles: ["read", "write"] - }); + { + emailAddress: { + address: testUserName, + name: "PnP Test User", + }, + role: "read", + allowedRoles: ["read", "write"], + }); await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permission.id).delete(); try { - await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permission.id)(); + await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.getById(permission.id)(); deletePermissionFound = true; } catch (e) { if (e?.isHttpRequestError) { @@ -639,7 +643,7 @@ describe("Calendar", function () { } } return expect(deletePermissionFound).is.false; - }); + }); // Remove the test data we created after(async function () { From 00be6fee53ab48bdc52a29849800e907b569b20e Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 19 Feb 2024 21:11:58 +0000 Subject: [PATCH 106/171] Finished in Graph/Files testing fixes --- debug/launch/graph.ts | 88 +++------------------------ docs/graph/files.md | 4 ++ packages/graph/content-types/types.ts | 2 +- test/graph/files.ts | 20 +++--- 4 files changed, 20 insertions(+), 94 deletions(-) diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index 8c46eb739..f2646a551 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,92 +1,20 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; import "@pnp/graph/users"; -import "@pnp/graph/groups"; -import "@pnp/graph/sites"; -import "@pnp/graph/files"; -import { IDriveItemAdd, IDriveItemAddFolder } from "@pnp/graph/files"; -import * as fs from "fs"; -import { IResumableUploadOptions } from "@pnp/graph/files"; -import { graphPut } from "@pnp/graph"; -import { InjectHeaders } from "@pnp/queryable/index.js"; -import { DriveItemUploadableProperties } from "@microsoft/microsoft-graph-types"; -import { ISensitivityLabel } from "@pnp/graph/files"; declare var process: { exit(code?: number): void }; export async function Example(settings: any) { - const userId = "julie@sympjulie.onmicrosoft.com"; - const graph = graphSetup(settings); - - const folderInfo: IDriveItemAddFolder = { - name: "Sub Folder", - conflictBehavior: "replace", - }; - - const fileInfo: IDriveItemAdd = { - filename: "Test File.txt", - content: "Contents of test file", - contentType: "text/plain", - conflictBehavior: "replace", - }; - - //const users = await graph.users.getById(userId).drive.root.children.addFolder(folderInfo); - //const folder = await graph.users.getById(userId).drive.getItemByPath("/Test Folder")(); - //const folder = await graph.users.getById(userId).drive.root.getItemByPath("/Test Folder")(); - - //const file = await graph.users.getById(userId).drive.root.children.add(fileInfo); - - // const moveItem = { - // parentReference: { - // id: folder.id, - // }, - // name: "Moved File.txt", - // } - // const move = await graph.users.getById(userId).drive.getItemById(file.id).moveItem(moveItem); - //const thumbnails = await graph.users.getById(userId).drive.getItemById(folder.id).thumbnails(); - //const versions = await graph.users.getById(userId).drive.getItemById(folder.id).versions(); - //const users = await graph.sites.getById(settings.testing.graph.id).drive.list(); - const fileBuff = fs.readFileSync("C:\\Users\\jturner.BMA\\Desktop\\TestDocument.docx"); - - const fileUploadOptions: IResumableUploadOptions = { - item: { - name: "TestDocument2.docx", - fileSize: fileBuff.byteLength, - }, - }; - - const label: ISensitivityLabel = { - sensitivityLabelId: "b7a3c3d5-7b6d-4e6c-8e0c-3f5c7b1d0e3d", - assignmentMethod: "standard", - justificationText: "Just because", - }; - - const driveRoot = await graph.sites.getById(settings.testing.graph.id).drive.root(); - const driveItems = await graph.sites.getById(settings.testing.graph.id).drive.root.children(); - const driveItem = await graph.sites.getById(settings.testing.graph.id).drive.getItemById(driveItems[1].id)(); - const retentionLabelStatusUrl = await graph.sites.getById(settings.testing.graph.id).drive.getItemById(driveItems[1].id).assignSensitivityLabel(label); - //const retentionLabel = await graph.users.getById(userId).drive.getItemById(driveItems[0].id).extractSensitivityLabels(); - const uploadSession = await graph.users.getById(userId).drive.getItemById(driveRoot.id).createUploadSession(fileUploadOptions); - const status = await uploadSession.resumableUpload.status(); - - const upload = await uploadSession.resumableUpload.upload(fileBuff.length, fileBuff); + const graph = graphSetup(settings); - // Upload a chunk of the file to the upload session - // Using a fragment size that doesn't divide evenly by 320 KiB results in errors committing some files. - const chunkSize = 327680; - let startFrom = 0; - while (startFrom < fileBuff.length) { - const fileChunk = fileBuff.slice(startFrom, startFrom + chunkSize); - const contentLength = `bytes ${startFrom}-${startFrom + chunkSize}/${fileBuff.length}` - const uploadChunk = await uploadSession.resumableUpload.upload(chunkSize, fileChunk, contentLength); - startFrom += chunkSize; - } + const users = await graph.users(); + Logger.log({ - data: retentionLabelStatusUrl, - level: LogLevel.Info, - message: "List of Users Data", + data: users, + level: LogLevel.Info, + message: "List of Users Data", }); - + process.exit(0); -} +} \ No newline at end of file diff --git a/docs/graph/files.md b/docs/graph/files.md index 793ac6aef..9e4ce0a63 100644 --- a/docs/graph/files.md +++ b/docs/graph/files.md @@ -133,6 +133,8 @@ const shared = await graph.me.drives.getById({drive id}).sharedWithMe(options); List the items that have been followed by the signed in user. +![Known Issue Banner](https://img.shields.io/badge/Known%20Issue-important.svg) Testing has shown that this endpoint throws a 500 Internal Server error implying a problem with Microsoft Graph. + ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; @@ -148,6 +150,8 @@ const files = await graph.me.drives.getById({drive id}).following(); Follow/Unfollow a drive item +![Known Issue Banner](https://img.shields.io/badge/Known%20Issue-important.svg) Testing has shown that this endpoint throws a 500 Internal Server error implying a problem with Microsoft Graph. + ```TypeScript import { graphfi } from "@pnp/graph"; import "@pnp/graph/users"; diff --git a/packages/graph/content-types/types.ts b/packages/graph/content-types/types.ts index d0e524b37..9d7746b57 100644 --- a/packages/graph/content-types/types.ts +++ b/packages/graph/content-types/types.ts @@ -82,7 +82,7 @@ export class _ContentTypes extends _GraphCollection{ public async addCopyFromContentTypeHub(contentTypeId: string): Promise { const creator = ContentType(this, "addCopyFromContentTypeHub").using(JSONHeaderParse()); const data = await graphPost(creator, body({ contentTypeId })); - const pendingLocation = data.headers.location || null; + const pendingLocation = data?.headers?.location || null; return { data: data.data, contentType: (this).getById(data.id), diff --git a/test/graph/files.ts b/test/graph/files.ts index 16a3b73b0..65b140347 100644 --- a/test/graph/files.ts +++ b/test/graph/files.ts @@ -7,13 +7,11 @@ import "@pnp/graph/files"; import "@pnp/graph/files/sites"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { IDriveItemAdd, IDriveItemAddFolder, IFileUploadOptions, IItemOptions } from "@pnp/graph/files/types"; -import { IResumableUploadOptions } from "@pnp/graph/files"; -import { DriveItemUploadableProperties } from "@microsoft/microsoft-graph-types"; // give ourselves a single reference to the projectRoot const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); -describe("Drive", function () { +describe.only("Drive", function () { let testUserName = ""; let driveId = null; const fileOptions: IFileUploadOptions = { @@ -22,13 +20,6 @@ describe("Drive", function () { contentType: "text/plain;charset=utf-8", }; - const fileROOptions: IResumableUploadOptions = { - item: { - name: "TestDocument2.docx", - fileSize: null, - }, - }; - const testConvert = path.join(projectRoot, "test/graph/assets", "testconvert.docx"); // Ensure we have the data to test against @@ -202,7 +193,8 @@ describe("Drive", function () { return expect(driveItemId.id).to.be.eq(children.id); }); - it("Get Drive Items By Path", async function () { + // This tests takes too long for folder to be created to test getItemsByPath + it.skip("Get Drive Items By Path", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); } @@ -395,7 +387,8 @@ describe("Drive", function () { return expect(previewDriveItem).to.haveOwnProperty("getUrl"); }); - it("Follow Drive Item", async function () { + // Seems graph is throwing 500 internal server errors, skipping for now + it.skip("Follow Drive Item", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); } @@ -413,7 +406,8 @@ describe("Drive", function () { return expect(followDriveItem).to.be.null; }); - it("UnFollow Drive Item", async function () { + // Seems graph is throwing 500 internal server errors, skipping for now + it.skip("UnFollow Drive Item", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); } From 108610a7892da243382bfb436ce24d9e816007a3 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 26 Feb 2024 15:53:51 +0000 Subject: [PATCH 107/171] Small test updates --- test/graph/columns.ts | 41 ++++++++++++++++++------------- test/graph/files.ts | 2 +- test/graph/group-conversations.ts | 2 ++ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/test/graph/columns.ts b/test/graph/columns.ts index eaff39179..effb013b8 100644 --- a/test/graph/columns.ts +++ b/test/graph/columns.ts @@ -43,25 +43,32 @@ describe("Columns", function () { }); site = await getTestingGraphSPSite(this); - - const ctTemplate = JSON.parse(JSON.stringify({ - name: "PnPTestContentType", - description: "PnPTestContentType Description", - base: { - name: "Item", - id: "0x01", - }, - group: "PnPTest Content Types", - id: "0x0100CDB27E23CEF44850904C80BD666FA645", - })); - - ctTemplate.name += props.templateName; - - const addCT = await site.contentTypes.add(ctTemplate); - contentType = addCT.contentType; + const ctName = "PnPTestContentType"; + const currentCT = await site.contentTypes(); + const exists = currentCT.filter(ct => ct.name === ctName); + if (exists.length < 1) { + + const ctTemplate = JSON.parse(JSON.stringify({ + name: ctName, + description: "PnPTestContentType Description", + base: { + name: "Item", + id: "0x01", + }, + group: "PnPTest Content Types", + id: "0x0100CDB27E23CEF44850904C80BD666FA645", + })); + + ctTemplate.name += props.templateName; + + const addCT = await site.contentTypes.add(ctTemplate); + contentType = addCT.contentType; + } else { + contentType = site.contentTypes.getById(exists[0].id); + } const addList = await site.lists.add({ - displayName: "PnPGraphTestColumns", + displayName: `PnPGraphTestColumns_${getRandomString(5)}`, list: { "template": "genericList" }, }); diff --git a/test/graph/files.ts b/test/graph/files.ts index 65b140347..692607ae7 100644 --- a/test/graph/files.ts +++ b/test/graph/files.ts @@ -11,7 +11,7 @@ import { IDriveItemAdd, IDriveItemAddFolder, IFileUploadOptions, IItemOptions } // give ourselves a single reference to the projectRoot const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); -describe.only("Drive", function () { +describe("Drive", function () { let testUserName = ""; let driveId = null; const fileOptions: IFileUploadOptions = { diff --git a/test/graph/group-conversations.ts b/test/graph/group-conversations.ts index f343b2206..650ee9369 100644 --- a/test/graph/group-conversations.ts +++ b/test/graph/group-conversations.ts @@ -1,6 +1,7 @@ import { expect } from "chai"; import getValidUser from "./utilities/getValidUser.js"; import "@pnp/graph/users"; +import "@pnp/graph/groups"; import "@pnp/graph/teams"; import "@pnp/graph/conversations"; import { IPostForwardInfo } from "@pnp/graph/conversations"; @@ -24,6 +25,7 @@ describe("Group Conversations", function () { }; const postForwardInfo: IPostForwardInfo = { + comment: "", toRecipients: [ { emailAddress: { From 29bdbd8be851bb5ea0e730fe82fd8228bddd834c Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 26 Feb 2024 09:03:27 -0700 Subject: [PATCH 108/171] Update CHANGELOG.md --- CHANGELOG.md | 597 --------------------------------------------------- 1 file changed, 597 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c06d50c57..6d8a95606 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,600 +55,3 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - sp - _Items and IItems now supports async iterator pattern - -## 3.23.0 - 2024-Feb-19 - -- graph - - Addresses #2911 - fixed Photos endpoint bug - - Add getSchedule to Calendar - -- queryable - - Addresses #2890 - fixed node clone bug - reverts new rawData emit to fix bug introduced that broke batching/cashing - -## 3.22.0 - 2024-Jan-15 - -- sp - - fromAbsolutePath methods reference undefined this. - - Update request-digest.ts to still make call when injected headers include odata=verbose - -- queryable - - Addressing #2890 - Node Clone - Fix - -## 3.21.0 - 2023-Dec-11 - -- graph - - Adding Photos with Dimension support - - Addressing #2836 - Rework Caching and Pagination Logic - -- sp - - Addresses #2847 - Add missing ItemId to IListItemFormUpdateValue - - Addressing #2840 - Add missing parameter to AddUsingPath - -## 3.20.1 - 2023-Nov-20 - -- graph - - Addresses #2833 - Revert of a previous PR #2730 that was meant for V4. - -## 3.20.0 - 2023-Nov-14 - -- graph - - Addresses #2811 - Fixes the parameter object for the Chat Message Add method. - - Addresses #2825 - New utility method for converting to atob with stringification checks Updated Parser for Blobs - -## 3.19.0 - 2023-Oct-16 - -- sp - - Addresses #2762 - Adds orderby to getall's allowed query params. - - Addresses #2783 - Fixed a bug where the field type mapping was incorrect for adding image fields. - - Add AllowIncrementalResults parameter to the getItemsByCAMLQuery function. - -- graph - - Addresses #2789 - Fixes the typing on the sendmail method. It appears to be implemented incorrectly. Updated the sendMail definition to only take a Graph message Object. - -## 3.18.0 - 2023-Sept-11 - -- queryable - - missing .js extensions on 2 files. - -## 3.17.0 - 2023-Jul-24 - -- sp/graph - - Addresses #2716 - Fix for batching adding incorrect headers in certain circumstances - -- graph - - Addresses #2567 - Fixes issue with channel messages in teams. - - Addresses #2677 - Removed analytics endpoint on drive root as it's not longer supported. V4 updates will include new analytics modules that will add more features. - -- logging - - Addresses #2731 - Fixed issues with browser console levels. - -## 3.16.0 - 2023-Jun-9 - -### Fixed - -- sp - - Addresses #2681 - Fix for cannot read properties of undefined (reading 'prototype') - - Addresses #2685 - Fix for multichoice field properties - - Addresses #2688 - Fix for apostorphes in filename - -### Added - -- graph - - Adds shares modules to graph library - -## 3.15.0 - 2023-May-12 - -### Fixed - -- timeline - - Addresses #2669 - Adds code in Timeline emit to ensure we don't create empty observer arrays on the Timeline.observers container due to filtering for once. - -- nodejs - - Modified SPDefault and GraphDefault so empty object is not required. - -- sp - - Addresses #2646 - Issue with creating fields when batching. - - Addresses #2661 - Adding BatchNever to Request-Digest Behavior when retrieving a new RequestDigest token. - -- azidjsclient - - Fix bug with caching in Azure Identity Client wrapper and improve key generation - -## 3.14.0 - 2023-Apr-17 - -### Added - -- sp - - Added groupsitemanager module to help manage team sites. - - Addresses #2565 - Adds a method to Sites to set the site logo vs web property update to set the site logo thumbnail - - Addresses #2602 - adds a tenantAppcatalog property to the root sp object; ensures that web.appcatalog points to the sitecollection appcatalog - -- azidjsclient - - Added new azidjsclient package that supports Azure Identity, most useful for node-js development and managed identity - -- node - Update to node package GraphDefault and SPDefault package to make msal parameter optional (deprecated) and updated the documentation for new guidance on passing the MSAL (and AzureIdentity) auth methods as separate observerable on the using call. - -### Fixed - -- docs - - Updated Taxonomy documentation to call out need for auth token on add/update/delete events. - - Addresses #2604 - Updating Docs for Page Comments to include proper atMention functionality. - -- general - - Updated debug scenarios for spa to make debugging work with settings file. - - Updated package-lock.json for SPFx debugging scenario to fix a bug - -- sp - - Addresses #2629 - Bug fix for missing quotes on sp recycle bin getById method. - - Addresses #2615 - fixes a bug with batching and caching in graph where requests were not resolving correctly, the fix from Version 3 - launch prep 1 #2052 applied to graph lib - -## 3.13.0 - 2023-Mar-17 - -### Added - -- sp - - Added getCurrentUserMemberships to new publishingSitePageService import. - -### Fixed - -- node - - Fixed typing issues with asCanceable wrapper and dropped references in stream.d.ts. - - Fixed setStreamContentChunked to fixed unhandled promise. - -## 3.12.1 - 2023-Feb-14 - -### Fixed - -- sp - - Addresses #2570, #2571 - Removes adding a bearer token by default to SPFx requests - -## 3.12.0 - 2023-Feb-10 - -**Please note:** We are official closing support for v2. Moving forward we will no longer do releases for the v2 version. - -### Added - -- graph - - Addresses #2552 - Adds an SPFx Token behavior to sp and graph libraries - -- sp - - Addresses #2552 - Adds an SPFx Token behavior to sp and graph libraries - - Addresses #2551 - Add typings when fetching Site data and change typings for getDocumentLibraries - -### Fixed - -- core - - Fixes #2539 - Fix unhandlable promise in start() - -- sp - - Fixes #2561 - Changes behavior in processing for saving client side pages to process all controls through the specialSaveHandling function - - Fixes #2558 - Issue with getParentWeb from root site - - Fixes #2550 - Fix for request digest timeout after tab sleeps - -- sp-admin - - Fixes #2518 - Replacing 'CreateGroupForSite' method example by 'AddTenantCdnOrigin' - -## 3.11.0 - 2023-Jan-13 - -### Added - -- graph - - Added various methods to OneDrive module; GraphFI.Drives,Drives - delta,Drives - upload,Drive - getItemByPath,Drive - getItemsByPath,DriveItem - moveItem,DriveItem - copyItem,DriveItem - convertContent,DriveItem - upload,DriveItem - preview,Root/DriveItem - analytics,List - IDrive.getList - -### Fixed - -- docs - - General typo fixes and updates - -- core - - Fixes #2507 - Updates the timeline start logic to get a ref to the promise rather than attaching finally directly. - -- sp - - Fixes #2509 - Fix but with item.setImageField - -- node - - Fixes #2532 - Fix setStreamContentChunked: await loading chunks - -### Removed - -- graph - - Deprecated OneDrive module; DriveItem - move - replaced by moveItem, DriveItem - setContent - replaced by upload - -## 3.10.0 - 2022-Dec-13 - -### Added - -- queryable - - Added CacheNever behavior - - Adds bindCachingCore method to reuse the caching props calculation logic - -- sp - - Added ability to limit the getSharingInformation returned properties - - Adding support for add/update/delete for taxonomy entities - -- graph - - Added followed endpoint to Drives - - Adds options to Graph - OneDrive sharedWithMe method - -### Fixed - -- docs - - General typo fixes and updates - -- queryable - - Fix for CachingPessimistic behavior - -- sp - - Fixing #2448 appears to have reverted #2414, and now fixed again - -- graph - - Bug fix for DrvieItem.getContent when using Caching behavior - -## 3.9.0 - 2022-Nov-11 - -### Added - -- sp - - Support for multi-line batch responses - -- graph - - Add getting site by resource url instead of id - -### Fixed - -- docs - - General typo fixes and updates - -- sp - - Updates Search and Suggest to be true invokable factories - - Updates docs for search on using factory methods - - Updates logic in sp.search and sp.searchSuggest - - fix to await the completePromises in batches that have no requests due to caching supplying all the results. - -- graph - - This update includes a fix for an improperly formed search endpoint on the root drive. - -## 3.8.0 - 2022-Oct-14 - -### Added - -- sp - - adds storage metrics for IFolder - - adds return of IFolder or IFile from copyByPath and moveByPath - - adds fileFromPath and fileFromAbsolutePath to get an IFile from arbitrary file paths - - adds folderFromPath and folderFromAbsolutePath to get an IFolder from arbitrary file paths - - adds ability to pass all options to IFolder's moveByPath and copyByPath to match IFile - - adds docs/tests for the new stuff - - adds a new sp module context-info allowing for easier retrieval of contextual information - - adds new CacheAlways behavior - - adds additional props to ISearchResult - - adds additional props to site scripts create/update - -### Fixed - -- docs - - General typo fixes - - Fixed service class example - -- graph - - Fixed bug with getAllChildrenAsOrderedTree, #2414 - - Fixed issue with observables missing when adding drive item, #2435 - -## 3.7.0 - 2022-Sept-9 - -### Added - -- docs - - Updated getting started docs -- sp - - added support for item rating - - added support for favorite sites and items -- graph - - added $search and $filter parameters to Count() and Paged Behavior - -### Fixed - -- docs - - sample for ACS authentication -- sp - - updated for escaping query strings - - enchance copyByPath and moveByPath for sp/file allowing for passing all valid params - -## 3.6.0 - 2022-Aug-16 - -### Fixed - -- core - - addresses #2222, #2356 - Updates to simplify url & query escaping -- sp - - addresses #2372 - Fix bugs with sharing - -### Added - -- docs - - added docs for Graph messages - - update for getting started videos - - update to docs around SPBrowser usage and setting baseUrl -- querable - - new JSONHeaderParse behavior -- graph - - addresses #2323 - Special Folder support - - support for Lists, Columns, Content Types -- sp - - update method for content types - - addresses #2357 - add missing properties to IViewInfo typing - -## 3.5.1 - 2022-July-13 - -### Fixed - -- queryable - - Error in SPFx due to tuple check in queryable constructor, adjusted check & added tests - -## 3.5.0 - 2022-July-12 - -### Fixed - -- docs - - Documentation update for config/services setup -- graph - - Addresses #2316 - PR #2318 Remove specific encodeURIComponents to address double encoding. - - PR #2319 - Added tests for certain graph queryable methods -- sp - - Updates lists IRenderListDataParameters & RenderListDataOptions with new values not present originally -- queryable: - - Beta 2 - Support for cancelling requests (see docs for known issues) -- behaviors - - Fixes #2333 - PR #2344 Addresses issues with reviewing caching and batching. - - Fixes #2329 - Argument of type 'WebPartContext' is not assignable to parameter of type 'ISPFXContext'. - -### Added - -- sp-admin - - Added sp-admin library to support tenant admin APIs - -## 3.4.1 - 2022-June-13 - -### Fixed - -- sp: - - Addresses #2315 - PR #2233 addressed issues #2220 #2222 creating a breaking changed for the Safari (iOS) browser, this release reverses that change. - -## 3.4.0 - 2022-June-10 - -### Fixed - -- docs: - - Various documentation updates -- general: - - Major package version updates - - Various test fixes -- sp: - - Fields add() properties can be undefined bug - - Fix issue with RequestDigest expiring when spfi is reinitialized. - -### Added - -- queryable: - - Support for cancelling requests (beta - see docs for known issues) -- sp: - - Added support for Recycle Bin/Second-Stage Recycle Bin - - Added schedulePublished method for client-side pages -- graph: - - Added support for paging - - Added support for Bookings - -## 3.3.2 - 2022-May-18 - -### Fixed - -- package: - - post-install.cjs fixes --docs: - - Various documentation updates - -## 3.3.1 - 2022-May-17 - -### Fixed - -- package: - - post-install.cjs fixes - -## 3.3.0 - 2022-May-16 - -### Fixed - -- docs: - - Various documentation updates - - Fix for batch example in add multiple items to SharePoint list - - Fix for documentation on getting site users - -- graph: - - Fixed bug in OneDrive package with Drive/getById - - encodes the id provided to getById in graph lib to resolve issue with non-guid ids - - fixes the addtional headers functionality in sendEmail in sp - -- sp: - - Addresses issue where created object in library was not getting observer refs supplied for files.addUsingPath - - Fixed issue with search not caching results when using caching behavior - - Added support for "X-PnP-CacheAlways" header to allow non-get requests to be cached correctly - - Added Items property to IViewFilesInfo - - Fixed issue where some objects created from urls were not getting observer refs - - Added an exception if a queryable it executed with no registered observers and a docs entry to explain it - -### Added - -- sp: - - Added getLockedByUser method on files - -- graph: - - Add chat message to Team channel - -## 3.2.0 - 2022-April-08 - -### Fixed - -- node: - - Fix for CommonJS imports with ESM modules. - -- sp: - - Fix issue with sendEmail utility. - - Bug fixes for getAllChildrenAsOrderedTree in Taxonomy. - - Update for issues with stale requestdigest. - - Bug fix for client-side pages for home page so that title is read from the json blob. - - Remove user-agent header for throttling as no longer used. - - Bug fix for renderListDataAsStream method - -- graph: - - Added getById method to Sites. - - Added transitiveMemberOf method to User. - - Added installedApps method to a Team. - -- docs: - - Various documentation copy/paste and typo fixes. - - Updates for getting-started guidance for imports of both @pnp/sp and @pnp/graph in SPFx. - - Updates to remove documentation showing batching adding files; includes new tag on all areas of library that are not supported for batching. - - New documentation for Graph to get SharePoint sites. - - New doucmentation for updating a BCS field in SharePoint. - - Added Graph memberOf and transitiveMemberOf properties. - - Updated docs on the Web() method. - -## 3.1.0 - 2022-March-11 - -- sp: - - Update interface IFieldInfo to include "Choices" - - Fix getAllChildrenAsOrderedTree retrieve properties - - Fix naming of getEditProfileLink and getIsMyPeopleListPublic in Profiles - -- docs: - - Updates to transition guide, getting started, authentication, and fixes for graphUrls, etc - -## 3.0.3 - 2022-March-3 - -- sp: - - Issues preventing search queries from running. #2124 - -## 3.0.2 - 2022-Feb-22 - -- sp: - - Issue in SPFx behavior with improperly using current web's request digest for non-current web calls #2102 - -- docs: - - Updates based on feedback - - Sample updates for v3 - -## 3.0.1 - 2022-Feb-15 - -- sp: - - Fixed root property initializers #2082 - -## 3.0.0 - 2022-Feb-14 - -### Added - -- common/core: - - Introduced "Timeline" concept with Timline, moments, and observers - - delay utility function - -- logging: - - new PnPLogging behavior to integrate with new model - -### Changed - -- Renamed package "odata" -> "queryable" -- Renamed package "common" -> "core" - -- logging: - - listeners are now factory functions (new ConsoleListener() => ConsoleListener()), drop the 'new' - - Console listener now supports pretty printing options with colors and improved formatting (@thechriskent) - -- core: - - improved typings on utility methods such that TS understands the outcome and properly types results - -- queryable: - - changed constructor to also accept a tuple of [queryable, string] to allow easy rebasing of url while inheriting observers - -- sp: - - Renamed export "sp" -> "spfi" with type SPFI - - Changed to using minimal metadata for all requests - - web.update return changed to `Promise` - - web.getParentWeb return changed to `Promise` - - moved items.getAll to seperate import @pnp/sp/items/get-all - - files.getByName => files.getByUrl - - folders.getByName => folders.getByUrl - - fields.add* methods now take title and a single props object with the additional properties for each field - - TimeZones.getById no merges the object & data - - renamed search.execute => search.run due to naming conflict in new base classes - - renamed suggest.execute => suggest.run due to naming conflict in new base classes - - renamed sitedesigns.execute => sitedesigns.run due to naming conflict in new base classes - - renamed sitescripts.execute => sitescripts.run due to naming conflict in new base classes - - odataUrlFrom moved to utils folder - - getParent signature change, path is second param, baseUrl is third param and only supports string - - removed "core" preset - - Improved web and site contructor to correctly rebase the web/site urls regardless of the url supplied (i.e. create a web from any sp queryable) - - Renamed property in IItemUpdateResultData to "etag" from "odata.etag" to make it .etag vs ["odata.etag"] - -- graph: - - Renamed export "graph" -> "graphfi" with type GraphFI - -### Removed - -- logging - - None of the other packages reference logging anymore, removing a dependency, logging still exists and can be used in your project as before and easily with the new behaviors model - -- queryable: - - LambdaParser -> write an observer - - TextParser, BlobParser, JSONParser, BufferParser -> TextParse, BlobParse, JSONParse, BufferParse behaviors - - Removed .get method in favor of invokable pattern. foo.get() => foo() - - Removed .clone, .cloneTo in favor of using factories directly, i.e. this.clone(Web, "path") => Web(this, "path") - - Invokable Extensions is split, with core object extension functionality moved to core - - ensureHeaders => headers = { ...headers, ...moreHeaders } - -- nodejs: - - AdalCertificateFetchClient, AdalFetchClient, MsalFetchClient, SPFetchClient, ProviderHostedRequestContext -> use MSAL behavior - - BearerTokenFetchClient -> use @pnp/Queryable BearerToken behavior - - SPFetchClient -> Use SPNodeFetch which includes SP retry logic - -- core (common): - - Removed global extensions in favor of instance or factory. Global no longer aligned to our scoped model - - Removed `assign` util method use Object.assign or { ...a, ...b} - - Removed `getCtxCallback` util method - - Removed ITypedHash => built in type Record - - Removed `sanitizeGuid` util method, wasn't used - - Removed automatic cache expired item flushing -> use a timeout, shown in docs - -- graph: - - setEndpoint removed => .using(EndPoint("v1.0")) | .using(EndPoint("beta")) - -- sp: - - Removed createBatch from Site, use web.batched or sp.batched - - feature.deactivate => use features.remove - - getTenantAppCatalogWeb moved from root object to IWeb when imported - - removed use of ListItemEntityTypeFullName in item add/update and removed associated methods to get the value - - removed folders.add => folders.addUsingPath - - removed folder.serverRelativeUrl property => use select - - removed web.getFolderByServerRelativeUrl => web.getFolderByServerRelativePath - - removed files.add => files.addUsingPath - - removed file.copyTo => file.copyByPath - - removed file.moveTo => file.moveByPath - - removed version.delete => versions.deleteById - - removed web.getFileByServerRelativeUrl => web.getFileByServerRelativePath - - removed folder.contentTypeOrder => use .select("contentTypeOrder") - - removed folder.uniqueContentTypeOrder => use .select("uniqueContentTypeOrder") - - removed folder.copyTo => use folder.copyByPath - - removed folder.moveTo => use folder.moveByPath - - removed _SPInstance._update => refactored and unused - - removed objectToSPKeyValueCollection - - removed toAbsoluteUrl => use behaviors - - removed IUtilities.createWikiPage - - removed searchWithCaching, use caching behavior - - removed spODataEntity and spODataEntityArray - - removed attachments addMultiple, deleteMultiple, and recycleMultiple => write a for loop in calling code - - removed regional settings.installedLanguages => use getInstalledLanguages - - removed metadata method - -- sp-addinhelpers: - - Dropped entire package, no longer needed - -- config-store: - - Dropped entire package. From 54bc1875ea88ac3643c5e045e990617527cbc43e Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 26 Feb 2024 20:03:29 +0000 Subject: [PATCH 109/171] Fixed test bug that removed testing site. --- package-lock.json | 352 ++++++++++++++++++++++-------------- test/sp/groupsitemanager.ts | 27 ++- 2 files changed, 236 insertions(+), 143 deletions(-) diff --git a/package-lock.json b/package-lock.json index b36682599..096c8a07e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,26 +68,38 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz", - "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.6.0.tgz", + "integrity": "sha512-3X9wzaaGgRaBCwhLQZDtFp5uLIXCPrGbwJNWPPugvL4xbIGgScv77YzzxToKGLAKvG9amDoofMoP+9hsH1vs1w==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", + "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.1.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", + "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "dev": true, + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@azure/core-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.3.tgz", - "integrity": "sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.8.0.tgz", + "integrity": "sha512-+gHS3gEzPlhyQBMoqVPOTeNH031R5DM/xpCvz72y38C09rg4Hui/1sJS/ujoisDZbbSHyuRLVWdFlwL0pIFwbg==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", + "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-rest-pipeline": "^1.9.1", "@azure/core-tracing": "^1.0.0", @@ -96,16 +108,28 @@ "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", + "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "dev": true, + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.13.0.tgz", - "integrity": "sha512-a62aP/wppgmnfIkJLfcB4ssPBcH94WzrzPVJ3tlJt050zX4lfmtnvy95D3igDo3f31StO+9BgPrzvkj4aOxnoA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.14.0.tgz", + "integrity": "sha512-Tp4M6NsjCmn9L5p7HsW98eSOS7A0ibl3e5ntZglozT0XuD/0y6i36iW829ZbBq0qihlGgfaeFpkLjZ418KDm1Q==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.1.0", + "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.3.0", @@ -118,6 +142,18 @@ "node": ">=18.0.0" } }, + "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", + "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "dev": true, + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@azure/core-tracing": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", @@ -131,16 +167,28 @@ } }, "node_modules/@azure/core-util": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.6.1.tgz", - "integrity": "sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.7.0.tgz", + "integrity": "sha512-Zq2i3QO6k9DA8vnm29mYM4G8IE9u1mhF1GUabVEqPNX8Lj833gdxQ2NAFxt2BZsfAL+e9cT8SyVN7dFVJ/Hf0g==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", + "@azure/abort-controller": "^2.0.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", + "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "dev": true, + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@azure/identity": { @@ -169,21 +217,21 @@ } }, "node_modules/@azure/identity/node_modules/@azure/msal-common": { - "version": "14.6.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.6.0.tgz", - "integrity": "sha512-AGusT/JvxdzJIYi5u0n97cmhd3pUT6UuI6rEkT5iDeT2FGcV0/EB8pk+dy6GLPpYg9vhDCuyoYrEZGd+2UeCCQ==", + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz", + "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/identity/node_modules/@azure/msal-node": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.1.tgz", - "integrity": "sha512-wYwz83pWatTNWUCkTi3cAOXbchad5FnZz/pbZz7b8Z6FuEqohXcTtg6BLip9SmcjN6FlbwUdJIZYOof2v1Gnrg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.4.tgz", + "integrity": "sha512-nNvEPx009/80UATCToF+29NZYocn01uKrB91xtFr7bSqkqO1PuQGXRyYwryWRztUrYZ1YsSbw9A+LmwOhpVvcg==", "dev": true, "dependencies": { - "@azure/msal-common": "14.6.0", + "@azure/msal-common": "14.7.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -525,9 +573,9 @@ "dev": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", @@ -539,9 +587,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" @@ -573,9 +621,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", - "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", + "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -653,9 +701,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240112", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240112.tgz", - "integrity": "sha512-XP8vi0zqBlbXQnY5H+7D01+IISBIKnCnNl1ntz0QTltkgcZhFcVGP41DNgykcBJqwHFZs7qMkSH1iNEn2xHXXg==", + "version": "4.0.0-alpha0-v4nightly.20240226", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240226.tgz", + "integrity": "sha512-C668f3AsirPvv6KNhoOyR40VRiCyqCy0HtaMJ2NwX/6/1T7Tw2M6PeV9rS63oz4Tc8tI7EK6TF93flgVmiTAdA==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -675,9 +723,9 @@ "dev": true }, "node_modules/@pnp/logging": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.22.0.tgz", - "integrity": "sha512-8krKu9A8RUVju4oF2KEwdRgHwAkXwWkw6mkOHYore13oQdKl93JTDk5TlxvGFVjla4Xg3jAgB9pBMyephMB2lw==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.23.0.tgz", + "integrity": "sha512-QuWUiBgf7csR2/zgfk3Y4EkBBIimfJhdr+8AotfargBBvDzwiOEk0Fb7mwH6saaGeMZJFh9ks0BlLpRSek8/Dg==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -697,9 +745,9 @@ "dev": true }, "node_modules/@sindresorhus/merge-streams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz", - "integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, "engines": { "node": ">=18" @@ -783,9 +831,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "version": "8.56.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", + "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -821,9 +869,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", "dev": true, "dependencies": { "@types/node": "*", @@ -929,9 +977,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/send": { @@ -1800,9 +1848,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -1819,8 +1867,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -1853,14 +1901,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1918,9 +1971,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001578", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001578.tgz", - "integrity": "sha512-J/jkFgsQ3NEl4w2lCoM9ZPxrD+FoBNJ7uJUpGVjIg/j0OwJosWM36EPDv+Yyi0V4twBk9pPmlFS+PLykgEvUmg==", + "version": "1.0.30001589", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", + "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", "dev": true, "funding": [ { @@ -2374,17 +2427,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -2561,9 +2617,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.635", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.635.tgz", - "integrity": "sha512-iu/2D0zolKU3iDGXXxdOzNf72Jnokn+K1IN6Kk4iV6l1Tr2g/qy+mvmtfAiBwZe5S3aB5r92vp+zSZ69scYRrg==", + "version": "1.4.681", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz", + "integrity": "sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==", "dev": true }, "node_modules/emoji-regex": { @@ -2604,9 +2660,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", + "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -2624,6 +2680,27 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", @@ -2631,9 +2708,9 @@ "dev": true }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -3026,9 +3103,9 @@ } }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -3206,9 +3283,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/follow-redirects": { @@ -3336,16 +3413,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3458,12 +3539,12 @@ } }, "node_modules/globby": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz", - "integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "@sindresorhus/merge-streams": "^1.0.0", + "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", "ignore": "^5.2.4", "path-type": "^5.0.0", @@ -3538,21 +3619,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -3574,9 +3655,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -3803,9 +3884,9 @@ } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -5857,9 +5938,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -6019,14 +6100,15 @@ } }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.1" }, @@ -6083,14 +6165,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6155,9 +6241,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -6171,9 +6257,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", "dev": true }, "node_modules/spdy": { @@ -6343,9 +6429,9 @@ } }, "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", + "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6669,9 +6755,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, "engines": { "node": ">= 8" diff --git a/test/sp/groupsitemanager.ts b/test/sp/groupsitemanager.ts index 876c99aff..da5e0c2bb 100644 --- a/test/sp/groupsitemanager.ts +++ b/test/sp/groupsitemanager.ts @@ -1,7 +1,8 @@ import { expect } from "chai"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import "@pnp/graph/groups"; import "@pnp/sp/groupsitemanager"; -import { stringIsNullOrEmpty } from "@pnp/core/util"; +import { GroupType } from "@pnp/graph/groups"; describe.skip("GroupSiteManager (without group context)", function () { // skip because app only tests. @@ -55,33 +56,39 @@ describe.skip("GroupSiteManager (without group context)", function () { }); describe("GroupSiteManager (group context)", function () { + let groupId = ""; before(async function () { - if (stringIsNullOrEmpty(this.pnp.settings.testGroupId)) { - this.skip(); - } + const props = await this.props({ + groupName: `TestGroup_${getRandomString(4)}`, + }); + + const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); + groupId = groupAddResult.data.id; }); it("create", async function () { - const grpSite = await this.pnp.sp.groupSiteManager.create(this.pnp.settings.testGroupId); + if (stringIsNullOrEmpty(groupId)) { + this.skip(); + } + const grpSite = await this.pnp.sp.groupSiteManager.create(groupId); return expect(grpSite.SiteStatus).to.eq(2); }); it("getSiteStatus", async function () { - const parentGrp = await this.pnp.sp.groupSiteManager.getSiteStatus(this.pnp.settings.testGroupId); + const parentGrp = await this.pnp.sp.groupSiteManager.getSiteStatus(groupId); return expect(parentGrp.SiteStatus).to.to.eq(2); }); it("notebook", async function () { - const grpNotebook = await this.pnp.sp.groupSiteManager.notebook(this.pnp.settings.testGroupId); - console.log(grpNotebook); + const grpNotebook = await this.pnp.sp.groupSiteManager.notebook(groupId); return expect(grpNotebook).to.contain("SiteAssets"); }); // Remove the test data we created after(async function () { - if (!stringIsNullOrEmpty(this.pnp.settings.testGroupId)) { - await this.pnp.graph.groups.getById(this.pnp.settings.testGroupId).delete(); + if (!stringIsNullOrEmpty(groupId)) { + await this.pnp.graph.groups.getById(groupId).delete(); } return; }); From 1c800bb6c702b61d07b87012fd2bf54acbc8d3ac Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 27 Feb 2024 08:08:04 -0500 Subject: [PATCH 110/171] wip-merge --- packages/queryable/queryable.ts | 18 ++++++++++++++++++ packages/sp/spqueryable.ts | 16 +++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index 794af0f79..3a762fdda 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -232,6 +232,7 @@ export interface Queryable extends IInvokable { } // this interface is required to stop the class from recursively referencing itself through the DefaultBehaviors type export interface IQueryableInternal extends Timeline, IInvokable { readonly query: URLSearchParams; + new(...params: any[]); (this: IQueryableInternal, init?: RequestInit): Promise; using(...behaviors: TimelinePipe[]): this; toRequestUrl(): string; @@ -287,6 +288,23 @@ export function queryableFactory( }; } +// extends IQueryableInternal +export function queryableFactory2(constructor: InstanceType): (...args: ConstructorParameters) => InstanceType & IInvokable { + + return (...args: ConstructorParameters) => { + + // construct the concrete instance + const instance: InstanceType = new constructor(...args); + + // we emit the construct event from the factory because we need all of the decorators and constructors + // to have fully finished before we emit, which is now true. We type the instance to any to get around + // the protected nature of emit + (instance).emit.construct(...args); + + return instance; + }; +} + /** * Allows a decorated object to be invoked as a function, optionally providing an implementation for that action * diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index 62712c60f..ea4222eb9 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -1,5 +1,5 @@ import { combine, isUrlAbsolute, isArray, objectDefinedNotNull, stringIsNullOrEmpty } from "@pnp/core"; -import { IInvokable, Queryable, queryableFactory, op, get, post, patch, del } from "@pnp/queryable"; +import { Queryable, queryableFactory, queryableFactory2, op, get, post, patch, del, IInvokable } from "@pnp/queryable"; export type SPInit = string | ISPQueryable | [ISPQueryable, string]; @@ -13,6 +13,20 @@ export const spInvokableFactory = (f: any): ISPInvokable return queryableFactory(f); }; + + +export type ISPInvokableFactory2 = (...args: any[]) => R & IInvokable; + +export const spInvokableFactory2 = , T extends ISPQueryable>(f: T): ISPInvokableFactory2 => { + + + + + + return queryableFactory2(f); +}; + + /** * SharePointQueryable Base Class * From 65f1ccacd522c481c021432e426ef1721c7e67dc Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 27 Feb 2024 11:16:07 -0500 Subject: [PATCH 111/171] buildsystem 4.0 --- buildsystem-config.ts | 26 ++--------- packages/tsconfig.json | 2 +- tools/buildsystem/index.ts | 1 - tools/buildsystem/package.json | 2 +- .../src/behaviors/copy-asset-files.ts | 1 + .../src/behaviors/copy-package-files.ts | 13 +++++- .../create-resolution-package-files.ts | 46 ------------------- .../src/behaviors/write-packagejson.ts | 9 +--- tools/buildsystem/src/build-timeline.ts | 4 +- 9 files changed, 20 insertions(+), 84 deletions(-) delete mode 100644 tools/buildsystem/src/behaviors/create-resolution-package-files.ts diff --git a/buildsystem-config.ts b/buildsystem-config.ts index 1e2b5449e..c8c5f66d4 100644 --- a/buildsystem-config.ts +++ b/buildsystem-config.ts @@ -9,7 +9,6 @@ import { WritePackageJSON, Publish, PublishNightly, - CreateResolutionPackageFiles, } from "@pnp/buildsystem"; import { Logger, @@ -48,12 +47,11 @@ function PnPPackage(): (b: BuildTimeline) => BuildTimeline { CopyAssetFiles(".", ["LICENSE"])(instance); CopyAssetFiles("./packages", ["readme.md"])(instance); CopyPackageFiles("built", ["**/*.d.ts", "**/*.js", "**/*.js.map", "**/*.d.ts.map"])(instance); - CreateResolutionPackageFiles()(instance), WritePackageJSON((p) => { return Object.assign({}, p, { type: "module", - main: "./esm/index.js", - typings: "./esm/index", + main: "./index.js", + typings: "./index", engines: { node: ">=18.12.0" }, @@ -69,19 +67,6 @@ function PnPPackage(): (b: BuildTimeline) => BuildTimeline { type: "git", url: "git:github.com/pnp/pnpjs" }, - exports: { - ".": { - "import": { - "types": "./esm/index", - "default": "./esm/index.js" - }, - "require": { - "types": "./commonjs/index", - "default": "./commonjs/index.js" - }, - "default": "./esm/index.js" - } - }, maintainers: [ { name: "patrick-rodgers", @@ -121,14 +106,13 @@ function PnPPublish(flags?: string[]): (b: BuildTimeline) => BuildTimeline { const commonBehaviors = [ PnPLogging(logLevel), -] +]; export default [{ name: "build", distFolder, targets: [ resolve("./packages/tsconfig.json"), - resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), ...commonBehaviors], }, @@ -145,7 +129,6 @@ export default [{ distFolder, targets: [ resolve("./packages/tsconfig.json"), - resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), PnPPackage(), ...commonBehaviors], }, @@ -154,7 +137,6 @@ export default [{ distFolder, targets: [ resolve("./packages/tsconfig.json"), - resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), PnPPackage(), PnPPublish(commonPublishTags), ...commonBehaviors], }, @@ -163,7 +145,6 @@ export default [{ distFolder, targets: [ resolve("./packages/tsconfig.json"), - resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), PnPPackage(), PnPPublish([...commonPublishTags, "--tag", "beta"]), ...commonBehaviors], }, @@ -172,7 +153,6 @@ export default [{ distFolder, targets: [ resolve("./packages/tsconfig.json"), - resolve("./packages/tsconfig-commonjs.json"), ], behaviors: [PnPBuild(), PnPPackage(), PublishNightly([...commonPublishTags], "v4nightly"), ...commonBehaviors], }]; diff --git a/packages/tsconfig.json b/packages/tsconfig.json index 995aac1eb..be33142ea 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -2,7 +2,7 @@ "extends": "../tsconfig.json", "compilerOptions": { "rootDir": ".", - "outDir": "../build/packages/esm" + "outDir": "../build/packages" }, "include": [], "references": [ diff --git a/tools/buildsystem/index.ts b/tools/buildsystem/index.ts index f77389f8b..38095fb4d 100644 --- a/tools/buildsystem/index.ts +++ b/tools/buildsystem/index.ts @@ -7,7 +7,6 @@ export { Publish } from "./src/behaviors/publish.js"; export { ReplaceVersion, IReplaceVersionOptions } from "./src/behaviors/replace-version.js"; export { Webpack } from "./src/behaviors/webpack.js"; export { WritePackageJSON } from "./src/behaviors/write-packagejson.js"; -export { CreateResolutionPackageFiles } from "./src/behaviors/create-resolution-package-files.js"; export { BuildObserver, diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 3831780a6..fd057e00c 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta10", + "version": "4.0.0", "bin": { "pnpbuild": "bin/buildsystem.js" }, diff --git a/tools/buildsystem/src/behaviors/copy-asset-files.ts b/tools/buildsystem/src/behaviors/copy-asset-files.ts index 394bdb56e..49ac8e3dd 100644 --- a/tools/buildsystem/src/behaviors/copy-asset-files.ts +++ b/tools/buildsystem/src/behaviors/copy-asset-files.ts @@ -6,6 +6,7 @@ import buildCopyFile from "../lib/copy-file.js"; /** * Copies files from a single location and to each project's dist folder + * @param path cwd path for the globby command * @param pattern glob patterns for files (see https://www.npmjs.com/package/globby) * @returns */ diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index c8de6da66..a1bf4801d 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -32,9 +32,14 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti cwd: fileSourceRoot, }); + // a.push(...temp.map(t => ({ + // src: resolve(fileSourceRoot, t), + // dest: resolve(pkg.resolvedPkgDistRoot, source === "built" ? pkg.relativePkgDistModulePath : "", t), + // }))); + a.push(...temp.map(t => ({ src: resolve(fileSourceRoot, t), - dest: resolve(pkg.resolvedPkgDistRoot, source === "built" ? pkg.relativePkgDistModulePath : "", t), + dest: resolve(pkg.resolvedPkgDistRoot, t), }))); return a; @@ -43,7 +48,11 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti }, Promise.resolve<{ src: string, dest: string }[]>([])); this.log(`CopyPackageFiles found ${files.length} files for pattern ${stringPattern} in target '${target.tsconfigPath}'`); - + + for (let i = 0; i < files.length; i++) { + this.log(`CopyPackageFiles found ${files[i]}`, 0); + } + await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); this.log(`Completing CopyPackageFiles with pattern ${stringPattern} on target '${target.tsconfigPath}'`, 1); diff --git a/tools/buildsystem/src/behaviors/create-resolution-package-files.ts b/tools/buildsystem/src/behaviors/create-resolution-package-files.ts deleted file mode 100644 index 984ee29af..000000000 --- a/tools/buildsystem/src/behaviors/create-resolution-package-files.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { TimelinePipe } from "@pnp/core"; -import { resolve } from "path"; -import { BuildTimeline } from "../build-timeline.js"; -import buildWriteFile from "../lib/write-file.js"; - -/** - * Because the TypeScript team will not make a simple change we have to add package.json's to each package's module sub/folder to ensure the resolution works with just *.js extensions. - * - * It is stupid this has to exist, but well here we are. - * @returns - */ -export function CreateResolutionPackageFiles(): TimelinePipe { - - return (instance: BuildTimeline) => { - - instance.on.package(async function (this: BuildTimeline) { - - this.log("Creating Resolution package.json files.", 1); - - const { targets } = this.context; - - const promises = []; - - targets.forEach((target) => { - - target.packages.forEach((pkg) => { - - const filePath = resolve(pkg.resolvedPkgDistRoot, pkg.relativePkgDistModulePath, "package.json"); - - let pkgFile = { - name: pkg.name, - type: /commonjs/i.test(target.parsedTSConfig.compilerOptions.module) ? "commonjs" : "module", - } - - this.log(`Writing module resolution package.json for ${filePath} as ${pkgFile.type}`, 0); - - promises.push(buildWriteFile(filePath, JSON.stringify(pkgFile))); - }); - }); - - await Promise.all(promises); - }); - - return instance; - } -} diff --git a/tools/buildsystem/src/behaviors/write-packagejson.ts b/tools/buildsystem/src/behaviors/write-packagejson.ts index 0142a73e0..d3e999a4c 100644 --- a/tools/buildsystem/src/behaviors/write-packagejson.ts +++ b/tools/buildsystem/src/behaviors/write-packagejson.ts @@ -18,17 +18,10 @@ export function WritePackageJSON(transform?: (p: any) => typeof p): TimelinePipe let pkgFile = importJSON(resolve(pkg.resolvedPkgSrcRoot, "package.json")); - this.log(`Updating package version at ${pkgFile} to ${version}`, 1); + this.log(`Updating package version at ${pkg.resolvedPkgSrcRoot} to ${version}`, 1); pkgFile.version = version; - // update our peer dependencies and dependencies placeholder if needed - for (const key in pkgFile.peerDependencies) { - if (pkgFile.peerDependencies[key] === "0.0.0-PLACEHOLDER") { - pkgFile.peerDependencies[key] = version; - } - } - for (const key in pkgFile.dependencies) { if (pkgFile.dependencies[key] === "0.0.0-PLACEHOLDER") { pkgFile.dependencies[key] = version; diff --git a/tools/buildsystem/src/build-timeline.ts b/tools/buildsystem/src/build-timeline.ts index 92a96d94f..9ea6f6e18 100644 --- a/tools/buildsystem/src/build-timeline.ts +++ b/tools/buildsystem/src/build-timeline.ts @@ -43,7 +43,7 @@ export class BuildTimeline extends Timeline { throw Error("No observers registered for this request. (https://pnp.github.io/pnpjs/queryable/queryable#no-observers-registered-for-this-request)"); } - // // schedule the execution after we return the promise below in the next event loop + // schedule the execution after we return the promise below in the next event loop setTimeout(async () => { try { @@ -72,7 +72,7 @@ export class BuildTimeline extends Timeline { }, 0); - // // this is the promise that the calling code will recieve and await + // this is the promise that the calling code will recieve and await let promise = new Promise((resolve, reject) => { // we overwrite any pre-existing internal events as a From 5f032039a64e5e148876b1c93bd20e474b5b30b9 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 27 Feb 2024 11:17:29 -0500 Subject: [PATCH 112/171] commenting out wip changes --- packages/queryable/queryable.ts | 29 +++++++++++++++-------------- packages/sp/spqueryable.ts | 10 +++++----- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index 1d40836dd..276bdb3ab 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -231,7 +231,7 @@ export interface Queryable extends IInvokable { } // this interface is required to stop the class from recursively referencing itself through the DefaultBehaviors type export interface IQueryableInternal extends Timeline, IInvokable { readonly query: URLSearchParams; - new(...params: any[]); + // new(...params: any[]); (this: IQueryableInternal, init?: RequestInit): Promise; using(...behaviors: TimelinePipe[]): this; toRequestUrl(): string; @@ -269,7 +269,7 @@ export function op(q: IQueryableInternal, operation: Operation, init?: Reques return Reflect.apply(operation, q, [init]); } -export function queryableFactory( +export function queryableFactory( constructor: { new(init: QueryableInit, path?: string): InstanceType }, ): (init: QueryableInit, path?: string) => InstanceType { @@ -287,22 +287,23 @@ export function queryableFactory( }; } -// extends IQueryableInternal -export function queryableFactory2(constructor: InstanceType): (...args: ConstructorParameters) => InstanceType & IInvokable { +// // extends IQueryableInternal +// export function queryableFactory2(constructor: InstanceType): +// (...args: ConstructorParameters) => InstanceType & IInvokable { - return (...args: ConstructorParameters) => { +// return (...args: ConstructorParameters) => { - // construct the concrete instance - const instance: InstanceType = new constructor(...args); +// // construct the concrete instance +// const instance: InstanceType = new constructor(...args); - // we emit the construct event from the factory because we need all of the decorators and constructors - // to have fully finished before we emit, which is now true. We type the instance to any to get around - // the protected nature of emit - (instance).emit.construct(...args); +// // we emit the construct event from the factory because we need all of the decorators and constructors +// // to have fully finished before we emit, which is now true. We type the instance to any to get around +// // the protected nature of emit +// (instance).emit.construct(...args); - return instance; - }; -} +// return instance; +// }; +// } /** * Allows a decorated object to be invoked as a function, optionally providing an implementation for that action diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index ea4222eb9..eff41c793 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -1,5 +1,5 @@ import { combine, isUrlAbsolute, isArray, objectDefinedNotNull, stringIsNullOrEmpty } from "@pnp/core"; -import { Queryable, queryableFactory, queryableFactory2, op, get, post, patch, del, IInvokable } from "@pnp/queryable"; +import { Queryable, queryableFactory, op, get, post, patch, del, IInvokable } from "@pnp/queryable"; export type SPInit = string | ISPQueryable | [ISPQueryable, string]; @@ -15,16 +15,16 @@ export const spInvokableFactory = (f: any): ISPInvokable -export type ISPInvokableFactory2 = (...args: any[]) => R & IInvokable; +// export type ISPInvokableFactory2 = (...args: any[]) => R & IInvokable; -export const spInvokableFactory2 = , T extends ISPQueryable>(f: T): ISPInvokableFactory2 => { +// export const spInvokableFactory2 = , T extends ISPQueryable>(f: T): ISPInvokableFactory2 => { - return queryableFactory2(f); -}; +// return queryableFactory2(f); +// }; /** From abb0a173c76b3d16613fea14a1900556f16e40a8 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 27 Feb 2024 11:44:52 -0500 Subject: [PATCH 113/171] small fixes to build system --- package-lock.json | 38 ++++++++++++------- package.json | 2 +- tools/buildsystem/package.json | 2 +- .../src/behaviors/copy-package-files.ts | 2 +- 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index a05ee063a..6039c9783 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@azure/msal-browser": "3.5.0", "@azure/msal-node": "1.18.4", "@microsoft/microsoft-graph-types": "2.40.0", - "@pnp/buildsystem": "^4.0.0-beta10", + "@pnp/buildsystem": "^4.0.0", "@pnp/logging": "^3.22.0", "@types/chai": "4.3.11", "@types/chai-as-promised": "7.1.8", @@ -217,9 +217,9 @@ } }, "node_modules/@azure/identity/node_modules/@azure/msal-common": { - "version": "14.6.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.6.0.tgz", - "integrity": "sha512-AGusT/JvxdzJIYi5u0n97cmhd3pUT6UuI6rEkT5iDeT2FGcV0/EB8pk+dy6GLPpYg9vhDCuyoYrEZGd+2UeCCQ==", + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz", + "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==", "dev": true, "engines": { "node": ">=0.8.0" @@ -678,9 +678,9 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0-beta10", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0-beta10.tgz", - "integrity": "sha512-9x0xL3CmJRZYrVMhECmj4PSARStr4O+4ZtJO/vQsLpEhtitHtfvciXSH8wIY24OfKSG/FBgffRNBu475TMtvSw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0.tgz", + "integrity": "sha512-xzPoUVqZY5Ds7fDAhXy0FAAL+EAGh7vYhx62vN8mpraYvuDIf2qDOMtRoWDHWRkMOILayt5ettAV0hz8Nn0yrw==", "dev": true, "dependencies": { "@pnp/core": "^4.0.0-alpha0-v4nightly.20240105", @@ -1971,9 +1971,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001578", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001578.tgz", - "integrity": "sha512-J/jkFgsQ3NEl4w2lCoM9ZPxrD+FoBNJ7uJUpGVjIg/j0OwJosWM36EPDv+Yyi0V4twBk9pPmlFS+PLykgEvUmg==", + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", "dev": true, "funding": [ { @@ -2614,9 +2614,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.635", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.635.tgz", - "integrity": "sha512-iu/2D0zolKU3iDGXXxdOzNf72Jnokn+K1IN6Kk4iV6l1Tr2g/qy+mvmtfAiBwZe5S3aB5r92vp+zSZ69scYRrg==", + "version": "1.4.682", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz", + "integrity": "sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA==", "dev": true }, "node_modules/emoji-regex": { @@ -4864,6 +4864,18 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", diff --git a/package.json b/package.json index a82a53b6a..6bda8ceec 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@azure/msal-browser": "3.5.0", "@azure/msal-node": "1.18.4", "@microsoft/microsoft-graph-types": "2.40.0", - "@pnp/buildsystem": "^4.0.0-beta10", + "@pnp/buildsystem": "^4.0.0", "@pnp/logging":"^3.22.0", "@types/chai": "4.3.11", "@types/chai-as-promised": "7.1.8", diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index fd057e00c..4f1214930 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -1,6 +1,6 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0", + "version": "4.0.1", "bin": { "pnpbuild": "bin/buildsystem.js" }, diff --git a/tools/buildsystem/src/behaviors/copy-package-files.ts b/tools/buildsystem/src/behaviors/copy-package-files.ts index a1bf4801d..d92aec3cc 100644 --- a/tools/buildsystem/src/behaviors/copy-package-files.ts +++ b/tools/buildsystem/src/behaviors/copy-package-files.ts @@ -50,7 +50,7 @@ export function CopyPackageFiles(source: "src" | "built", pattern: string[]): Ti this.log(`CopyPackageFiles found ${files.length} files for pattern ${stringPattern} in target '${target.tsconfigPath}'`); for (let i = 0; i < files.length; i++) { - this.log(`CopyPackageFiles found ${files[i]}`, 0); + this.log(`CopyPackageFiles found ${files[i].src}`, 0); } await Promise.all(files.map(f => buildCopyFile(f.src, f.dest))); From 23a8b4421a50ae4cbae94762bfb8f6d1b464edec Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 27 Feb 2024 11:49:01 -0500 Subject: [PATCH 114/171] Update publish-buildsystem.yml --- .github/workflows/publish-buildsystem.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-buildsystem.yml b/.github/workflows/publish-buildsystem.yml index ac6568ebd..0cdbb0233 100644 --- a/.github/workflows/publish-buildsystem.yml +++ b/.github/workflows/publish-buildsystem.yml @@ -16,10 +16,10 @@ jobs: with: ref: version-4 # setup nodejs - - name: Use Node.js 16 + - name: Use Node.js 18 uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18 registry-url: 'https://registry.npmjs.org' cache: 'npm' cache-dependency-path: package-lock.json From 53b0ecc8233f000d092c6156f8b71f0ae8028a30 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 27 Feb 2024 11:50:19 -0500 Subject: [PATCH 115/171] Update pull_request.yaml --- .github/workflows/pull_request.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index ae2a5bfba..50b5d6fbf 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -7,10 +7,10 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 # setup nodejs - - name: Use Node.js 16 + - name: Use Node.js 18 uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 18 registry-url: 'https://registry.npmjs.org' cache: 'npm' cache-dependency-path: package-lock.json From bb121c82c8596951a4c1ba7a979f476cc08a2d26 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 27 Feb 2024 15:33:18 -0500 Subject: [PATCH 116/171] test PR --- package-lock.json | 8 ++++---- package.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6039c9783..51e39ab0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@azure/msal-browser": "3.5.0", "@azure/msal-node": "1.18.4", "@microsoft/microsoft-graph-types": "2.40.0", - "@pnp/buildsystem": "^4.0.0", + "@pnp/buildsystem": "^4.0.1", "@pnp/logging": "^3.22.0", "@types/chai": "4.3.11", "@types/chai-as-promised": "7.1.8", @@ -678,9 +678,9 @@ } }, "node_modules/@pnp/buildsystem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.0.tgz", - "integrity": "sha512-xzPoUVqZY5Ds7fDAhXy0FAAL+EAGh7vYhx62vN8mpraYvuDIf2qDOMtRoWDHWRkMOILayt5ettAV0hz8Nn0yrw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.1.tgz", + "integrity": "sha512-AxQPs2sAXnSyrei/V1eWSsRjPuin+o7Sc1ueymsyDTSAavywu1yuXSGuYdsqAeea7IJ0+ziMa13cwvzNCwbBeQ==", "dev": true, "dependencies": { "@pnp/core": "^4.0.0-alpha0-v4nightly.20240105", diff --git a/package.json b/package.json index 6bda8ceec..b6e017621 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "@azure/msal-browser": "3.5.0", "@azure/msal-node": "1.18.4", "@microsoft/microsoft-graph-types": "2.40.0", - "@pnp/buildsystem": "^4.0.0", - "@pnp/logging":"^3.22.0", + "@pnp/buildsystem": "^4.0.1", + "@pnp/logging": "^3.22.0", "@types/chai": "4.3.11", "@types/chai-as-promised": "7.1.8", "@types/core-js": "2.5.8", From 632152108163c85586f8b89eb54c8ea9eb7a9875 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 28 Feb 2024 08:53:01 -0500 Subject: [PATCH 117/171] Create v4_merge.yml --- .github/workflows/v4_merge.yml | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/v4_merge.yml diff --git a/.github/workflows/v4_merge.yml b/.github/workflows/v4_merge.yml new file mode 100644 index 000000000..c40ee2470 --- /dev/null +++ b/.github/workflows/v4_merge.yml @@ -0,0 +1,37 @@ +name: V4 Merge Testing +on: + push: + branches: + - version-4 +env: + PNPTESTING_MSAL_GRAPH_CONFIG: ${{ secrets.PNPTESTING_MSAL_GRAPH_CONFIG }} + PNPTESTING_MSAL_GRAPH_SCOPES: ${{ secrets.PNPTESTING_MSAL_GRAPH_SCOPES }} + PNPTESTING_MSAL_SP_CONFIG: ${{ secrets.PNPTESTING_MSAL_SP_CONFIG }} + PNPTESTING_MSAL_SP_SCOPES: ${{ secrets.PNPTESTING_MSAL_SP_SCOPES }} + PNPTESTING_NOTIFICATIONURL: ${{ secrets.PNPTESTING_NOTIFICATIONURL }} + PNPTESTING_SITEURL: ${{ secrets.PNPTESTING_SITEURL }} +jobs: + run_push_tests: + runs-on: ubuntu-latest + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: version-4 + # setup nodejs + - name: Use Node.js 18 + uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: 'https://registry.npmjs.org' + cache: 'npm' + cache-dependency-path: package-lock.json + + # Run the npm install + - run: npm ci + - name: Run lint + run: npm run lint + - name: Run package + run: npm run package + - name: Run tests + run: npm test -- --mode push --cleanup --msal From ca91071864b6ae66ea48027bff44568c28ff4008 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 28 Feb 2024 08:53:40 -0500 Subject: [PATCH 118/171] Create v4_pull_request.yml --- .github/workflows/v4_pull_request.yml | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/v4_pull_request.yml diff --git a/.github/workflows/v4_pull_request.yml b/.github/workflows/v4_pull_request.yml new file mode 100644 index 000000000..c76769f3e --- /dev/null +++ b/.github/workflows/v4_pull_request.yml @@ -0,0 +1,33 @@ +name: V4 Pull Request Testing +on: + pull_request: + branches: + - version-4 +jobs: + run_pr_tests: + runs-on: ubuntu-latest + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: version-4 + # setup nodejs + - name: Use Node.js 18 + uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: 'https://registry.npmjs.org' + cache: 'npm' + cache-dependency-path: package-lock.json + + # Run the npm install + - run: npm ci + + - name: Run lint + run: npm run lint + + - name: Run package + run: npm run package + + - name: Run tests + run: npm test -- --mode pr From 455755a0a7b26ef92f39976abd3100b7b1776fbb Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 28 Feb 2024 08:54:38 -0500 Subject: [PATCH 119/171] Update push.yaml --- .github/workflows/push.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml index d0af3c760..91aaa9274 100644 --- a/.github/workflows/push.yaml +++ b/.github/workflows/push.yaml @@ -1,4 +1,4 @@ -name: Merge Testing +name: V3 Merge Testing on: push env: PNPTESTING_MSAL_GRAPH_CONFIG: ${{ secrets.PNPTESTING_MSAL_GRAPH_CONFIG }} From 2880dd7a2c5b0d10b55896be590c3a7d7d432a0d Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 28 Feb 2024 08:55:42 -0500 Subject: [PATCH 120/171] Update push.yaml --- .github/workflows/push.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml index 91aaa9274..7bde761c1 100644 --- a/.github/workflows/push.yaml +++ b/.github/workflows/push.yaml @@ -1,5 +1,8 @@ name: V3 Merge Testing -on: push +on: + push: + branches: + - version-3 env: PNPTESTING_MSAL_GRAPH_CONFIG: ${{ secrets.PNPTESTING_MSAL_GRAPH_CONFIG }} PNPTESTING_MSAL_GRAPH_SCOPES: ${{ secrets.PNPTESTING_MSAL_GRAPH_SCOPES }} From 3c4c315af3db2ef86b583e0daea5202e8578c691 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 28 Feb 2024 08:59:59 -0500 Subject: [PATCH 121/171] Update v4-nightly.yml --- .github/workflows/v4-nightly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/v4-nightly.yml b/.github/workflows/v4-nightly.yml index 512225007..dd1f9fb58 100644 --- a/.github/workflows/v4-nightly.yml +++ b/.github/workflows/v4-nightly.yml @@ -14,12 +14,12 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: version-4 # setup nodejs - name: Use Node.js 18 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18 registry-url: 'https://registry.npmjs.org' From 10708da30936738fbf357a5789865c68154c5505 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 28 Feb 2024 09:00:31 -0500 Subject: [PATCH 122/171] Update v4_merge.yml --- .github/workflows/v4_merge.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/v4_merge.yml b/.github/workflows/v4_merge.yml index c40ee2470..f0ad5e384 100644 --- a/.github/workflows/v4_merge.yml +++ b/.github/workflows/v4_merge.yml @@ -15,12 +15,12 @@ jobs: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: version-4 # setup nodejs - name: Use Node.js 18 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18 registry-url: 'https://registry.npmjs.org' From 4384f1835f15849082d098f4a2ab36cb3284932d Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 28 Feb 2024 09:01:01 -0500 Subject: [PATCH 123/171] Update v4_pull_request.yml --- .github/workflows/v4_pull_request.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/v4_pull_request.yml b/.github/workflows/v4_pull_request.yml index c76769f3e..a11976bc2 100644 --- a/.github/workflows/v4_pull_request.yml +++ b/.github/workflows/v4_pull_request.yml @@ -8,12 +8,12 @@ jobs: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: version-4 # setup nodejs - name: Use Node.js 18 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18 registry-url: 'https://registry.npmjs.org' From deb67b144b6721ec30bce01b0f590be55f26e123 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Wed, 28 Feb 2024 19:02:32 +0000 Subject: [PATCH 124/171] Bug fixes and test fixes --- packages/graph/mail/messages.ts | 8 ++-- test/graph/analytics.ts | 72 ++++++++++++++++++++------------- test/graph/list-items.ts | 59 ++++++++++++++------------- test/graph/mail-messages.ts | 67 +++++++++++++++--------------- test/graph/to-do.ts | 37 +++++++++++------ 5 files changed, 137 insertions(+), 106 deletions(-) diff --git a/packages/graph/mail/messages.ts b/packages/graph/mail/messages.ts index 134de7389..4068cc055 100644 --- a/packages/graph/mail/messages.ts +++ b/packages/graph/mail/messages.ts @@ -45,12 +45,12 @@ export class _Message extends _GraphInstance { * Create a draft response * * @param response (optional) The body of the response message - * If using JSON provide either comment: string or message: IMessageType. + * If using JSON, do not provide any payload, you will get an error. * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. * @param timeZone (optional) The time zone to use when creating the draft. * Only use when providing a JSON message. */ - public async createReply(response?: any, timeZone?: TimeZoneInformation): Promise { + public async createReply(response?: string, timeZone?: TimeZoneInformation): Promise { return (await mailResponse(this, "createReply", response, timeZone)) as IMessageType; } @@ -71,12 +71,12 @@ export class _Message extends _GraphInstance { * Create a draft response message to all * * @param response (optional) The body of the response message - * If using JSON provide either comment: string or message: IMessageType. + * If using JSON, do not provide any payload, you will get an error. * If using MIME format, provide the MIME content with the applicable Internet message headers, all encoded in base64 format. * @param timeZone (optional) The time zone to use when creating the draft. * Only use when providing a JSON message. */ - public async createReplyAll(response?: any, timeZone?: TimeZoneInformation): Promise { + public async createReplyAll(response?: string, timeZone?: TimeZoneInformation): Promise { return (await mailResponse(this, "createReplyAll", response, timeZone)) as IMessageType; } diff --git a/test/graph/analytics.ts b/test/graph/analytics.ts index 5e9b5343f..14aa583d3 100644 --- a/test/graph/analytics.ts +++ b/test/graph/analytics.ts @@ -9,9 +9,12 @@ import { List } from "@microsoft/microsoft-graph-types"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { IAnalyticsOptions } from "@pnp/graph/analytics"; import getTestingGraphSPSite from "./utilities/getTestingGraphSPSite.js"; +import getValidUser from "./utilities/getValidUser.js"; +import { pnpTest } from "../pnp-test.js"; +import { IUser } from "@pnp/graph/users"; describe("Analytics", function () { - let testUserName = ""; + let user: IUser = null; let site = null; let driveId = null; let listResultId = null; @@ -28,19 +31,26 @@ describe("Analytics", function () { }; // Ensure we have the data to test against - before(async function () { + before(pnpTest("6ffe9e49-a6d0-48a5-9adb-64cd85f7ef73", async function () { if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { this.skip(); } + const userInfo = await getValidUser.call(this); + user = this.pnp.graph.users.getById(userInfo.userPrincipalName); + // Create a sample list try { site = await getTestingGraphSPSite(this); + const props = await this.props({ + title: "Test Item", + }); + const listResult = await site.lists.add(sampleList); listResultId = listResult.data.id; const listItemProps: any = { - title: "Test Item", + title: props.title, }; const listItem = await site.lists.getById(listResultId).items.add(listItemProps); listItemId = listItem.data.id; @@ -49,78 +59,84 @@ describe("Analytics", function () { } // Get a sample user try { - testUserName = this.pnp.settings.testUser.substring(this.pnp.settings.testUser.lastIndexOf("|") + 1); - const drives = await this.pnp.graph.users.getById(testUserName).drives(); + const drives = await user.drives(); if (drives.length > 0) { driveId = drives[0].id; } } catch (err) { console.log("Could not retrieve user's drives"); } - }); - it("Get Drive Item Analytics - Last Seven Days", async function () { + if (listResultId === null || listItemId === null || driveId === null) { + this.skip(); + } + })); + + it("Get Drive Item Analytics - Last Seven Days", pnpTest("4915eeb3-97cf-447c-b7a6-d4ab445a41b9", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); } - const testFileName = `TestFile_${getRandomString(4)}.txt`; + const props = await this.props({ + testFileName: `TestFile_${getRandomString(4)}.txt`, + }); const fo = JSON.parse(JSON.stringify(fileOptions)); - fo.filePathName = testFileName; - const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); - const analytics = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).analytics(); + fo.filePathName = props.testFileName; + const children = await user.drives.getById(driveId).root.upload(fo); + const analytics = await user.drives.getById(driveId).getItemById(children.id).analytics(); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); - }); + })); // Analytics is not working on list items, returning item not found error. - it.skip("Get List Item Analytics - Last Seven Days", async function () { + it.skip("Get List Item Analytics - Last Seven Days", pnpTest("48aeeeca-0301-4af1-a47c-dd60e9ba459b", async function () { if (stringIsNullOrEmpty(listItemId)) { this.skip(); } const analytics = await site.lists.getById(listResultId).items.getById(listItemId).analytics(); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); - }); + })); - it("Get Site Analytics - Last Seven Days", async function () { + it("Get Site Analytics - Last Seven Days", pnpTest("815b48d8-7604-4883-b085-59de28493d77", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); } - const site = this.pnp.graph.sites.getById(this.pnp.settings.graph.id); const analytics = await site.analytics(); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); - }); + })); - it("Get Drive Item Analytics - All Time", async function () { + it("Get Drive Item Analytics - All Time", pnpTest("721f17f5-836e-4c8d-a52a-a3b7068ac07d", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); } - const testFileName = `TestFile_${getRandomString(4)}.txt`; + + const props = await this.props({ + testFileName: `TestFile_${getRandomString(4)}.txt`, + }); const fo = JSON.parse(JSON.stringify(fileOptions)); - fo.filePathName = testFileName; - const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fo); + fo.filePathName = props.testFileName; + const children = await user.drives.getById(driveId).root.upload(fo); const options: IAnalyticsOptions = { timeRange: "allTime" }; - const analytics = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).analytics(options); + const analytics = await user.drives.getById(driveId).getItemById(children.id).analytics(options); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); - }); + })); // Analytics is not working on list items, returning item not found error. - it.skip("Get List Item Analytics - All Time", async function () { + it.skip("Get List Item Analytics - All Time", pnpTest("37ffc5dc-ed88-4442-b7d7-aac068d25bbf", async function () { if (stringIsNullOrEmpty(listItemId)) { this.skip(); } const options: IAnalyticsOptions = { timeRange: "allTime" }; const analytics = await site.lists.getById(listResultId).items.getById(listItemId).analytics(options); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); - }); + })); - it("Get Site Analytics - All Time", async function () { + it("Get Site Analytics - All Time", pnpTest("94d06ed1-9414-4c39-be5a-0c0553b7a882", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); } - const site = this.pnp.graph.sites.getById(this.pnp.settings.graph.id); const options: IAnalyticsOptions = { timeRange: "allTime" }; const analytics = await site.analytics(options); return expect(analytics).to.haveOwnProperty("@odata.context").eq("https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.itemActivityStat"); - }); + })); // Remove the test contact we created after(async function () { diff --git a/test/graph/list-items.ts b/test/graph/list-items.ts index b0d4d5b4f..5b5aaaeb5 100644 --- a/test/graph/list-items.ts +++ b/test/graph/list-items.ts @@ -12,14 +12,16 @@ import { IListItem } from "@pnp/graph/list-item/types.js"; describe("List-Items", function () { let site: ISite; let list: IList; - let item: IListItem; + let itemUpdate: IListItem; + let itemDelete: IListItem; + let itemDeleteId: string; const sampleList: List = { displayName: "PnPGraphTestList", - list: { "template": "ItemTestList-Graph" }, + list: { template: "genericList" }, }; - before(async function () { + before(pnpTest("b4387653-1d11-49f3-b722-8a305f8f6495", async function () { if (!this.pnp.settings.enableWebTests) { this.skip(); @@ -28,20 +30,23 @@ describe("List-Items", function () { site = await getTestingGraphSPSite(this); const props = await this.props({ - displayName: getRandomString(5) + "Add", + displayName: `Add${getRandomString(5)}`, }); const listTemplate = JSON.parse(JSON.stringify(sampleList)); listTemplate.displayName += props.displayName; - const list = (await site.lists.add(listTemplate)).list; + list = (await site.lists.add(listTemplate)).list; // add test items. Document set can be added later if(list){ - await list.items.add({Title: `Item ${getRandomString(4)}`} as any); - await list.items.add({Title: `Item ${getRandomString(4)}`} as any); + const newItem = await list.items.add({Title: `Item ${getRandomString(4)}`} as any); + itemUpdate = list.items.getById(newItem.id); + const newItem2 = await list.items.add({Title: `Item ${getRandomString(4)}`} as any); + itemDeleteId = newItem2.id; + itemDelete = list.items.getById(newItem2.id); } - }); + })); it("items", pnpTest("3e0e16a0-5683-4c3a-aa3d-f35bb6912de1", async function () { const items = await list.items(); @@ -54,57 +59,57 @@ describe("List-Items", function () { })); it("add", pnpTest("587e280b-0342-4515-a166-1b05cee9f242", async function () { - // fieldvalueset. ugh. Casting as any. const itemAdded = await list.items.add({fields: { - title: getRandomString(5) + "Add", + Title: `Add ${getRandomString(5)}`, }, } as any); - return expect((itemAdded.id)).is.not.null; + return expect((itemAdded.id)).length.is.gt(0); })); it("update", pnpTest("5766613a-51b8-4f88-ba0f-2436d160b86b", async function () { - // fieldvalueset. ugh. Casting as any. - const itemUpdated = await item.update({fields: + const newTitle = `Updated ${getRandomString(5)}`; + const itemUpdated = await itemUpdate.update({fields: { - title: getRandomString(5) + "Update", + Title: newTitle, }, } as any); - return expect(itemUpdated).is.not.null; + return expect(itemUpdated.fields.Title).is.eq(newTitle); })); it("delete", pnpTest("e55bf53f-1316-4e47-97c1-b0c0cdd860ef", async function () { - const item = await list.items.add({fields: - { - title: getRandomString(5) + "Add", - }, - } as any); - const r = await list.items.filter(`Id eq '${item.id}'`)(); - return expect(r.length).to.eq(0); + await itemDelete.delete(); + let passed = false; + try{ + const r = await list.items.getById(itemDeleteId)(); + }catch(err){ + passed = true; + } + return expect(passed).to.be.true; })); it.skip("documentSetVersions", pnpTest("c2889ca3-0230-4c6e-879d-71cc9cd08e83", async function () { - const versions = await item.documentSetVersions(); + const versions = await itemUpdate.documentSetVersions(); return expect(versions).to.be.an("array") && expect(versions[0]).to.haveOwnProperty("id"); })); it.skip("documentSetVersions - getById()", pnpTest("35226d93-204b-4877-9041-26e04e437914", async function () { - const versions = await item.documentSetVersions(); + const versions = await itemUpdate.documentSetVersions(); - const version = await item.documentSetVersions.getById(versions[0].id); + const version = await itemUpdate.documentSetVersions.getById(versions[0].id); return expect(version).to.not.be.null && expect(version).to.haveOwnProperty("id"); })); it.skip("documentSetVersions - add()", pnpTest("a192e096-fe84-4c2c-adc5-b1b9021c0031", async function () { - const documentSetVersion = await item.documentSetVersions.add({comment:"Test Comment"}); + const documentSetVersion = await itemUpdate.documentSetVersions.add({comment:"Test Comment"}); return expect(documentSetVersion).to.not.be.null && expect(documentSetVersion).to.haveOwnProperty("id"); })); it.skip("documentSetVersions - restore()", pnpTest("8814b247-4087-4c87-9a8f-af997f7d8745", async function () { - const restore = await item.documentSetVersions[0].restore(); + const restore = await itemUpdate.documentSetVersions[0].restore(); return expect(restore).to.be.fulfilled; })); diff --git a/test/graph/mail-messages.ts b/test/graph/mail-messages.ts index 3e5b85820..aa30fecdf 100644 --- a/test/graph/mail-messages.ts +++ b/test/graph/mail-messages.ts @@ -4,9 +4,11 @@ import "@pnp/graph/mail"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import getValidUser from "./utilities/getValidUser.js"; import { Message, MailFolder as IMailFolderType } from "@microsoft/microsoft-graph-types"; +import { IUser } from "@pnp/graph/users"; describe("Mail: Messages", function () { - let testUserName = ""; + let user: IUser; + let testUserName: string; let inboxFolder = null; let draftFolder = null; @@ -34,9 +36,10 @@ describe("Mail: Messages", function () { } const userInfo = await getValidUser.call(this); + user = this.pnp.graph.users.getById(userInfo.userPrincipalName); testUserName = userInfo.userPrincipalName; draftMessage.toRecipients[0].emailAddress.address = testUserName; - const mailFolders: IMailFolderType[] = await this.pnp.graph.users.getById(testUserName).mailFolders(); + const mailFolders: IMailFolderType[] = await user.mailFolders(); if (mailFolders.length >= 0) { const inbox = mailFolders.find((f) => f.displayName === "Inbox"); inboxFolder = inbox?.id || mailFolders[0].id; @@ -58,22 +61,22 @@ describe("Mail: Messages", function () { }); it("Mail: Message List", async function () { - const messages = await this.pnp.graph.users.getById(testUserName).messages(); + const messages = await user.messages(); return expect(messages).is.not.null; }); it("Mail: Message List (Delta)", async function () { - const messagesDelta = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.delta()(); + const messagesDelta = await user.mailFolders.getById(inboxFolder).messages.delta()(); return expect(messagesDelta).haveOwnProperty("values"); }); it("Mail: Create Draft Message", async function () { const m = JSON.parse(JSON.stringify(draftMessage)); m.subject = `PnPjs Test Message ${getRandomString(8)}`; - const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + const draft = await user.messages.add(m); const success = (draft !== null); if (success) { - await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + await user.messages.getById(draft.id).delete(); } return expect(success).to.be.true; }); @@ -82,13 +85,13 @@ describe("Mail: Messages", function () { const m = JSON.parse(JSON.stringify(draftMessage)); const newSubject = `PnPjs Test Message ${getRandomString(8)}`; m.subject = `PnPjs Test Message ${getRandomString(8)}`; - const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + const draft = await user.messages.add(m); let success = false; if (draft !== null) { - const update = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).update({ subject: newSubject }); + const update = await user.messages.getById(draft.id).update({ subject: newSubject }); if (update !== null) { success = (update.subject === newSubject); - await this.pnp.graph.users.getById(testUserName).messages.getById(update.id).delete(); + await user.messages.getById(update.id).delete(); } } return expect(success).to.be.true; @@ -96,12 +99,12 @@ describe("Mail: Messages", function () { it("Mail: Delete Message", async function () { const m = JSON.parse(JSON.stringify(draftMessage)); - const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + const draft = await user.messages.add(m); let success = false; if (draft !== null) { - await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + await user.messages.getById(draft.id).delete(); try { - const found = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id)(); + const found = await user.messages.getById(draft.id)(); if (found?.id === null) { success = true; } @@ -115,13 +118,13 @@ describe("Mail: Messages", function () { it("Mail: Copy Message", async function () { const m = JSON.parse(JSON.stringify(draftMessage)); m.subject = `PnPjs Test Message ${getRandomString(8)}`; - const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + const draft = await user.messages.add(m); let success = false; if (draft !== null) { - const messageCopy = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).copy(inboxFolder); + const messageCopy = await user.messages.getById(draft.id).copy(inboxFolder); if (messageCopy !== null) { success = true; - await this.pnp.graph.users.getById(testUserName).messages.getById(messageCopy.id).delete(); + await user.messages.getById(messageCopy.id).delete(); } } return expect(success).to.be.true; @@ -130,13 +133,13 @@ describe("Mail: Messages", function () { it("Mail: Move Message", async function () { const m = JSON.parse(JSON.stringify(draftMessage)); m.subject = `PnPjs Test Message ${getRandomString(8)}`; - const draft: Message = await this.pnp.graph.users.getById(testUserName).messages.add(m); + const draft: Message = await user.messages.add(m); let success = false; if (draft !== null) { - const messageMove = await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).move(inboxFolder); + const messageMove = await user.messages.getById(draft.id).move(inboxFolder); if (messageMove !== null) { success = (messageMove.subject === draft.subject); - await this.pnp.graph.users.getById(testUserName).messages.getById(messageMove.id).delete(); + await user.messages.getById(messageMove.id).delete(); } } return expect(success).to.be.true; @@ -145,9 +148,9 @@ describe("Mail: Messages", function () { it("Mail: Send Draft Message", async function () { const m = JSON.parse(JSON.stringify(draftMessage)); m.subject = `PnPjs Test Message ${getRandomString(8)}`; - const draft = await this.pnp.graph.users.getById(testUserName).messages.add(m); + const draft = await user.messages.add(m); if (draft !== null) { - await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).send(); + await user.messages.getById(draft.id).send(); return true; } else { return false; @@ -159,7 +162,7 @@ describe("Mail: Messages", function () { m.subject = `PnPjs Test Message ${getRandomString(8)}`; let success = false; try{ - await this.pnp.graph.users.getById(testUserName).sendMail(m); + await user.sendMail(m); success = true; }catch(err){ // do nothing @@ -168,15 +171,13 @@ describe("Mail: Messages", function () { }); it("Mail: Create Draft Reply Message", async function () { - const inboxMessage = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.top(1)(); + const inboxMessage = await user.mailFolders.getById(inboxFolder).messages.top(1)(); if (inboxMessage.length === 1) { - const m = JSON.parse(JSON.stringify(draftMessage)); - m.subject = `PnPjs Test Message ${getRandomString(8)}`; let success = false; - const draft = await this.pnp.graph.users.getById(testUserName).messages.getById(inboxMessage[0].id).createReply(m); + const draft = await user.messages.getById(inboxMessage[0].id).createReply(); if (draft !== null) { success = true; - await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + await user.messages.getById(draft.id).delete(); } return success; } else { @@ -189,15 +190,13 @@ describe("Mail: Messages", function () { }); it("Mail: Create Draft Reply-All Message", async function () { - const inboxMessage = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.top(1)(); + const inboxMessage = await user.mailFolders.getById(inboxFolder).messages.top(1)(); if (inboxMessage.length === 1) { - const m = JSON.parse(JSON.stringify(draftMessage)); - m.subject = `PnPjs Test Message ${getRandomString(8)}`; let success = false; - const draft = await this.pnp.graph.users.getById(testUserName).messages.getById(inboxMessage[0].id).createReplyAll(m); + const draft = await user.messages.getById(inboxMessage[0].id).createReplyAll(); if (draft !== null) { success = true; - await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + await user.messages.getById(draft.id).delete(); } return success; } else { @@ -210,15 +209,15 @@ describe("Mail: Messages", function () { }); it("Mail: Create Draft Forward Message", async function () { - const inboxMessage = await this.pnp.graph.users.getById(testUserName).mailFolders.getById(inboxFolder).messages.top(1)(); + const inboxMessage = await user.mailFolders.getById(inboxFolder).messages.top(1)(); if (inboxMessage.length === 1) { const m = JSON.parse(JSON.stringify(draftMessage)); m.subject = `PnPjs Test Message ${getRandomString(8)}`; let success = false; - const draft = await this.pnp.graph.users.getById(testUserName).messages.getById(inboxMessage[0].id).createForward(m); + const draft = await user.messages.getById(inboxMessage[0].id).createForward(m); if (draft !== null) { success = true; - await this.pnp.graph.users.getById(testUserName).messages.getById(draft.id).delete(); + await user.messages.getById(draft.id).delete(); } return success; } else { diff --git a/test/graph/to-do.ts b/test/graph/to-do.ts index 7aa3e9230..7897cf474 100644 --- a/test/graph/to-do.ts +++ b/test/graph/to-do.ts @@ -5,35 +5,46 @@ import { pnpTest } from "../pnp-test.js"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { ChecklistItem } from "@microsoft/microsoft-graph-types"; import { ITaskList, ITask } from "@pnp/graph/to-do"; +import getValidUser from "./utilities/getValidUser.js"; +import { IUser } from "@pnp/graph/users"; describe("To-do", function () { + let user: IUser; let taskList: ITaskList; let todoTask: ITask; - before(async function () { + + before(pnpTest("94d99e35-9891-4b50-a23c-359a43eeadc7", async function () { if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { this.skip(); } - const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ - displayName: getRandomString(5), + const userInfo = await getValidUser.call(this); + user = this.pnp.graph.users.getById(userInfo.userPrincipalName); + const props = await this.props({ + displayName: `ToDoList${getRandomString(5)}`, + taskName: "A new task", + }); + + const list = await user.todo.lists.add({ + displayName: props.displayName, }); - const task = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).tasks.add( + const task = await user.todo.lists.getById(list.id).tasks.add( { - title:"A new task", + title: props.taskName, }, ); - taskList = this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id); + taskList = user.todo.lists.getById(list.id); todoTask = taskList.tasks.getById(task.id); if(!list || !task){ this.skip(); } - }); + })); it("lists", pnpTest("8de75582-6257-4e2a-b753-7c8be1cf0a38", async function () { - const lists = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists(); + const lists = await user.todo.lists(); return expect(lists).to.be.an("array") && expect(lists[0]).to.haveOwnProperty("id"); })); @@ -44,13 +55,13 @@ describe("To-do", function () { it("lists - add", pnpTest("2548a740-4267-4868-8663-e5bf5ae44ae2", async function () { let passed = false; - const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ + const list = await user.todo.lists.add({ displayName: "Test" + getRandomString(5), }); if(list){ passed = true; - await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).delete(); + await user.todo.lists.getById(list.id).delete(); } return expect(passed).is.true; })); @@ -64,17 +75,17 @@ describe("To-do", function () { })); it("lists - delete", pnpTest("ef561648-4380-4629-89bb-9834934e78d1", async function () { - const list = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.add({ + const list = await user.todo.lists.add({ displayName: "Test" + getRandomString(5), }); if(list){ - return expect(this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.getById(list.id).delete()).to.eventually.be.fulfilled; + return expect(user.todo.lists.getById(list.id).delete()).to.eventually.be.fulfilled; } this.skip(); })); it("lists - delta", pnpTest("70cb936e-9ee5-4630-a3c7-6fdf60bbd6fe", async function () { - const delta = await this.pnp.graph.users.getById(this.pnp.settings.testUser).todo.lists.delta()(); + const delta = await user.todo.lists.delta()(); return expect(delta).haveOwnProperty("values"); })); From 154f2724bf9274bdcc5f0c817249901b2684e9d9 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 5 Mar 2024 08:39:41 -0500 Subject: [PATCH 125/171] update to improve sp telemetry --- packages/sp/behaviors/telemetry.ts | 10 +++++----- tools/buildsystem/package-lock.json | 18 +++++++++--------- tools/buildsystem/package.json | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/sp/behaviors/telemetry.ts b/packages/sp/behaviors/telemetry.ts index ba13012a7..b4e189ca0 100644 --- a/packages/sp/behaviors/telemetry.ts +++ b/packages/sp/behaviors/telemetry.ts @@ -1,4 +1,4 @@ -import { TimelinePipe } from "@pnp/core"; +import { TimelinePipe, stringIsNullOrEmpty } from "@pnp/core"; import { Queryable } from "@pnp/queryable"; export function Telemetry(): TimelinePipe { @@ -14,10 +14,10 @@ export function Telemetry(): TimelinePipe { // remove anything before the _api as that is potentially PII and we don't care, just want to get the called path to the REST API // and we want to modify any (*) calls at the end such as items(3) and items(344) so we just track "items()" - clientTag += pathname - .substring(pathname.indexOf("_api/") + 5) - .split("/") - .map((value, index, arr) => index === arr.length - 1 ? value.replace(/\(.*?$/i, "()") : value[0]).join("."); + clientTag = pathname.split("/") + .filter((v) => !stringIsNullOrEmpty(v) && ["_api", "v2.1", "v2.0"].indexOf(v) < 0) + .map((value, index, arr) => index === arr.length - 1 ? value.replace(/\(.*?$/i, "()") : value[0]) + .join("."); if (clientTag.length > 32) { clientTag = clientTag.substring(0, 32); diff --git a/tools/buildsystem/package-lock.json b/tools/buildsystem/package-lock.json index 9a437bc6d..9363097d1 100644 --- a/tools/buildsystem/package-lock.json +++ b/tools/buildsystem/package-lock.json @@ -1,15 +1,15 @@ { "name": "@pnp/buildsystem", - "version": "4.0.0-beta9", + "version": "4.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pnp/buildsystem", - "version": "4.0.0-beta9", + "version": "4.0.1", "license": "MIT", "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20240105", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20240228", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", @@ -153,9 +153,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240105", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240105.tgz", - "integrity": "sha512-AdjLkyHZu5+ynwdxHwtD/hJzi6MIoSkmbh8MfIsf7FQ6hq/87YQhJjOKHPkt8nw2TUjHp7F4+nLoVUUouT/E9g==", + "version": "4.0.0-alpha0-v4nightly.20240228", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240228.tgz", + "integrity": "sha512-MsTCCL5HXpsZ5m/ooMJiYJW6PoPrmVPOJfr9UJuchrS1WW2OmWe0HyM5IBhOn8VzhRTnuuELiOv4wD55xBpN0A==", "dependencies": { "tslib": "2.4.1" }, @@ -2749,9 +2749,9 @@ } }, "@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240105", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240105.tgz", - "integrity": "sha512-AdjLkyHZu5+ynwdxHwtD/hJzi6MIoSkmbh8MfIsf7FQ6hq/87YQhJjOKHPkt8nw2TUjHp7F4+nLoVUUouT/E9g==", + "version": "4.0.0-alpha0-v4nightly.20240228", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240228.tgz", + "integrity": "sha512-MsTCCL5HXpsZ5m/ooMJiYJW6PoPrmVPOJfr9UJuchrS1WW2OmWe0HyM5IBhOn8VzhRTnuuELiOv4wD55xBpN0A==", "requires": { "tslib": "2.4.1" } diff --git a/tools/buildsystem/package.json b/tools/buildsystem/package.json index 4f1214930..3acffc603 100644 --- a/tools/buildsystem/package.json +++ b/tools/buildsystem/package.json @@ -9,7 +9,7 @@ "type": "module", "typings": "./index", "dependencies": { - "@pnp/core": "^4.0.0-alpha0-v4nightly.20240105", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20240228", "globby": "^14.0.0", "liftoff": "^4.0.0", "webpack": "^5.89.0", From b0c167bd39fb6ca5a041654e11923b8f4a97e6e6 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Tue, 5 Mar 2024 16:22:50 -0500 Subject: [PATCH 126/171] moving stream support into sp/files --- CHANGELOG.md | 7 + packages/nodejs/behaviors/stream-parse.ts | 7 - packages/nodejs/index.ts | 11 -- packages/nodejs/sp-extensions/stream.ts | 136 ---------------- packages/sp/files/readable-file.ts | 29 +++- packages/sp/files/types.ts | 189 ++++++++++++---------- 6 files changed, 135 insertions(+), 244 deletions(-) delete mode 100644 packages/nodejs/behaviors/stream-parse.ts delete mode 100644 packages/nodejs/sp-extensions/stream.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d8a95606..2acf5224b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - sp - explict error thrown if SPFx context is null or undefined when needed + - getStream method on all readable files + - addChunked updated to accept stream as content, new signature with props object ### Removed @@ -35,6 +37,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - PagedItemCollection removed from library - removed /items/get-all import, unneeded, use async iterator patterns - ./operations.ts methods moved to ./spqueryable.ts + - startUpload, continueUpload, finishUpload File protected methods removed + +- nodejs + - removed stream extensions, moved into sp ### Changed @@ -55,3 +61,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - sp - _Items and IItems now supports async iterator pattern + - chunked upload/add progress object shape changed to : { uploadId: string; stage: "starting" | "continue" | "finishing"; offset: number; } diff --git a/packages/nodejs/behaviors/stream-parse.ts b/packages/nodejs/behaviors/stream-parse.ts deleted file mode 100644 index fd1f5ea7e..000000000 --- a/packages/nodejs/behaviors/stream-parse.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { TimelinePipe } from "@pnp/core"; -import { parseBinderWithErrorCheck, Queryable } from "@pnp/queryable"; - -export function StreamParse(): TimelinePipe { - - return parseBinderWithErrorCheck(async r => ({ body: r.body, knownLength: parseInt(r?.headers?.get("content-length") || "-1", 10) })); -} diff --git a/packages/nodejs/index.ts b/packages/nodejs/index.ts index f6c7d77a7..7e2fe495c 100644 --- a/packages/nodejs/index.ts +++ b/packages/nodejs/index.ts @@ -16,18 +16,7 @@ import * as NodeFetch from "node-fetch"; })(global); -// auto populate all extensions -import "./sp-extensions/stream.js"; - -// export extension types as a namespace -import * as SPNS from "./sp-extensions/stream.js"; - -export { - SPNS, -}; - export * from "./behaviors/msal.js"; export * from "./behaviors/fetch.js"; -export * from "./behaviors/stream-parse.js"; export * from "./behaviors/spdefault.js"; export * from "./behaviors/graphdefault.js"; diff --git a/packages/nodejs/sp-extensions/stream.ts b/packages/nodejs/sp-extensions/stream.ts deleted file mode 100644 index a4f4949c5..000000000 --- a/packages/nodejs/sp-extensions/stream.ts +++ /dev/null @@ -1,136 +0,0 @@ -// import { asCancelableScope, CancelAction, headers } from "@pnp/queryable"; -// import { File, Files, IFile, IFileAddResult, IFiles, IFileUploadProgressData } from "@pnp/sp/files/index.js"; -// import { spPost, encodePath } from "@pnp/sp"; -// import { ReadStream } from "fs"; -import { PassThrough } from "stream"; -// import { extendFactory, getGUID, isFunc } from "@pnp/core"; -// import { StreamParse } from "../behaviors/stream-parse.js"; -// import { fileFromServerRelativePath } from "@pnp/sp/files/index.js"; - -export interface IResponseBodyStream { - body: PassThrough; - knownLength: number; -} - -// extendFactory(File, { - -// getStream(): Promise { -// return File(this, "$value").using(StreamParse())(headers({ "binaryStringResponseBody": "true" })); -// }, - -// /** -// * Sets the contents of a file using a chunked upload approach. Not supported in batching. -// * -// * @param stream The file to upload (as readable stream) -// * @param progress A callback function which can be used to track the progress of the upload -// */ -// setStreamContentChunked: asCancelableScope(async function (this: IFile, stream: ReadStream, progress?: (data: IFileUploadProgressData) => void): Promise { - -// if (!isFunc(progress)) { -// progress = () => void (0); -// } - -// const uploadId = getGUID(); - -// const fileRef = File(this).using(CancelAction(() => { -// return File(this).cancelUpload(uploadId); -// })); - -// let blockNumber = -1; -// let pointer = 0; - -// for await (const chunk of stream) { -// blockNumber++; -// progress({ -// uploadId, -// blockNumber, -// chunkSize: chunk.length, -// currentPointer: pointer, -// fileSize: -1, -// stage: blockNumber === 0 ? "starting" : "continue", -// totalBlocks: -1, -// }); -// if (blockNumber === 0) { -// pointer = await fileRef.startUpload(uploadId, chunk); -// } else { -// pointer = await fileRef.continueUpload(uploadId, pointer, chunk); -// } -// } - -// progress({ uploadId, blockNumber, chunkSize: -1, currentPointer: -1, fileSize: -1, stage: "finishing", totalBlocks: -1 }); -// return await fileRef.finishUpload(uploadId, pointer, Buffer.from([])); -// }), -// }); - -// extendFactory(Files, { - -// /** -// * Uploads a file. Not supported for batching -// * -// * @param url The folder-relative url of the file -// * @param content The Blob file content or File readable stream to add -// * @param progress A callback function which can be used to track the progress of the upload -// * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true) -// * @param chunkSize The size of each file slice, in bytes (default: 10485760) -// * @returns The new File and the raw response. -// */ -// addChunked: asCancelableScope(async function ( -// this: IFiles, -// url: string, -// content: Blob | ReadStream, -// progress?: (data: IFileUploadProgressData) => void, -// shouldOverWrite = true, -// chunkSize = 10485760 -// ) { - -// const response = await spPost(Files(this, `add(overwrite=${shouldOverWrite},url='${encodePath(url)}')`)); - -// const file = fileFromServerRelativePath(this, response.ServerRelativeUrl); - -// file.using(CancelAction(async () => { -// return File(file).delete(); -// })); - -// if ("function" === typeof (content as ReadStream).read) { -// return file.setStreamContentChunked(content as ReadStream, progress); -// } - -// return file.setContentChunked(content as Blob, progress, chunkSize); -// }), -// }); - -// // these are needed to avoid a type/name not found issue where TSC doesn't properly keep -// // the references used within the module declarations below -// type ProgressFunc = (data: IFileUploadProgressData) => void; -// type ChunkedResult = Promise; - -// declare module "@pnp/sp/files/types" { - -// interface IFile { -// /** -// * Gets a PassThrough stream representing the file -// */ -// getStream(): Promise; - -// /** -// * Sets a file stream content chunk -// */ -// setStreamContentChunked( -// stream: ReadStream, -// progress?: ProgressFunc, -// ): ChunkedResult; -// } - -// interface IFiles { -// /** -// * Adds a file stream in chunks -// */ -// addChunked( -// url: string, -// content: Blob | ReadStream, -// progress?: ProgressFunc, -// shouldOverWrite?: boolean, -// chunkSize?: number, -// ): ChunkedResult; -// } -// } diff --git a/packages/sp/files/readable-file.ts b/packages/sp/files/readable-file.ts index 730830355..0ba3c8f16 100644 --- a/packages/sp/files/readable-file.ts +++ b/packages/sp/files/readable-file.ts @@ -1,7 +1,26 @@ import { TimelinePipe } from "@pnp/core"; -import { BlobParse, BufferParse, CacheNever, JSONParse, TextParse } from "@pnp/queryable/index.js"; +import { + BlobParse, + BufferParse, + CacheNever, + JSONParse, + Queryable, + TextParse, + headers, + parseBinderWithErrorCheck, +} from "@pnp/queryable"; import { _SPInstance, SPQueryable } from "../spqueryable.js"; +export interface IResponseBodyStream { + body: ReadableStream; + knownLength: number; +} + +export function StreamParse(): TimelinePipe { + + return parseBinderWithErrorCheck(async r => ({ body: r.body, knownLength: parseInt(r?.headers?.get("content-length") || "-1", 10) })); +} + export class ReadableFile extends _SPInstance { /** @@ -34,6 +53,14 @@ export class ReadableFile extends _SPInstance { return this.getParsed(JSONParse()); } + /** + * Gets the content of a file as a ReadableStream + * + */ + public getStream(): Promise { + return SPQueryable(this, "$value").using(StreamParse(), CacheNever())(headers({ "binaryStringResponseBody": "true" })); + } + private getParsed(parser: TimelinePipe): Promise { return SPQueryable(this, "$value").using(parser, CacheNever())(); } diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index 474fda15d..020d6e9cf 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -1,5 +1,5 @@ import { body, cancelableScope, CancelAction } from "@pnp/queryable"; -import { getGUID, isFunc, stringIsNullOrEmpty, isUrlAbsolute, combine, noInherit } from "@pnp/core"; +import { getGUID, stringIsNullOrEmpty, isUrlAbsolute, combine, noInherit } from "@pnp/core"; import { _SPCollection, spInvokableFactory, @@ -24,6 +24,7 @@ import { IMoveCopyOptions } from "../types.js"; import { ReadableFile } from "./readable-file.js"; import "../context-info/index.js"; import { BatchNever } from "../batching.js"; +import { PassThrough, Stream } from "stream"; /** * Describes a collection of File objects @@ -86,23 +87,22 @@ export class _Files extends _SPCollection { * * @param url The folder-relative url of the file. * @param content The Blob file content to add - * @param progress A callback function which can be used to track the progress of the upload - * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true) - * @param chunkSize The size of each file slice, in bytes (default: 10485760) + * @param props Set of optional values that control the behavior of the underlying addUsingPath and chunkedUpload feature * @returns The new File and the raw response. */ @cancelableScope - public async addChunked(url: string, content: Blob, progress?: (data: IFileUploadProgressData) => void, shouldOverWrite = true, chunkSize = 10485760): Promise { + public async addChunked(url: string, content: ValidFileContentSource, props?: Partial & Partial): Promise { - const response = await spPost(Files(this, `add(overwrite=${shouldOverWrite},url='${encodePath(url)}')`)); + // add an empty stub + const response = await this.addUsingPath(url, null, props); - const file = fileFromServerRelativePath(this, response.ServerRelativeUrl); + const file = fileFromServerRelativePath(this, response.data.ServerRelativeUrl); file.using(CancelAction(() => { return File(file).delete(); })); - return file.setContentChunked(content, progress, chunkSize); + return file.setContentChunked(content, props); } /** @@ -404,95 +404,46 @@ export class _File extends ReadableFile { * @param chunkSize The size of each file slice, in bytes (default: 10485760) */ @cancelableScope - public async setContentChunked(file: Blob, progress?: (data: IFileUploadProgressData) => void, chunkSize = 10485760): Promise { + public async setContentChunked(file: ValidFileContentSource, props: Partial): Promise { - if (!isFunc(progress)) { - progress = () => null; - } + const { progress } = applyChunckedOperationDefaults(props); - const fileSize = file?.size || (file).length; - const totalBlocks = parseInt((fileSize / chunkSize).toString(), 10) + ((fileSize % chunkSize === 0) ? 1 : 0); const uploadId = getGUID(); + let first = true; + let chunk: { done: boolean; value?: any }; + let offset = 0; const fileRef = File(this).using(CancelAction(() => { return File(fileRef).cancelUpload(uploadId); })); - // report that we are starting - progress({ uploadId, blockNumber: 1, chunkSize, currentPointer: 0, fileSize, stage: "starting", totalBlocks }); - let currentPointer = await fileRef.startUpload(uploadId, file.slice(0, chunkSize)); + const contentStream = sourceToReadableStream(file); + const reader = contentStream.getReader(); - // skip the first and last blocks - for (let i = 2; i < totalBlocks; i++) { - progress({ uploadId, blockNumber: i, chunkSize, currentPointer, fileSize, stage: "continue", totalBlocks }); - currentPointer = await fileRef.continueUpload(uploadId, currentPointer, file.slice(currentPointer, currentPointer + chunkSize)); - } + while ((chunk = await reader.read())) { - progress({ uploadId, blockNumber: totalBlocks, chunkSize, currentPointer, fileSize, stage: "finishing", totalBlocks }); - return fileRef.finishUpload(uploadId, currentPointer, file.slice(currentPointer)); - } + if (chunk.done) { - /** - * Starts a new chunk upload session and uploads the first fragment. - * The current file content is not changed when this method completes. - * The method is idempotent (and therefore does not change the result) as long as you use the same values for uploadId and stream. - * The upload session ends either when you use the CancelUpload method or when you successfully - * complete the upload session by passing the rest of the file contents through the ContinueUpload and FinishUpload methods. - * The StartUpload and ContinueUpload methods return the size of the running total of uploaded data in bytes, - * so you can pass those return values to subsequent uses of ContinueUpload and FinishUpload. - * This method is currently available only on Office 365. - * - * @param uploadId The unique identifier of the upload session. - * @param fragment The file contents. - * @returns The size of the total uploaded data in bytes. - */ - protected async startUpload(uploadId: string, fragment: ArrayBuffer | Blob): Promise { - let n = await spPost(File(this, `startUpload(uploadId=guid'${uploadId}')`), { body: fragment }); - if (typeof n === "object") { - // When OData=verbose the payload has the following shape: - // { StartUpload: "10485760" } - n = (n as any).StartUpload; - } - return parseFloat(n); - } + progress({ offset, stage: "finishing", uploadId }); + const data = await spPost(File(fileRef, `finishUpload(uploadId=guid'${uploadId}',fileOffset=${offset})`), { body: chunk?.value || "" }); - /** - * Continues the chunk upload session with an additional fragment. - * The current file content is not changed. - * Use the uploadId value that was passed to the StartUpload method that started the upload session. - * This method is currently available only on Office 365. - * - * @param uploadId The unique identifier of the upload session. - * @param fileOffset The size of the offset into the file where the fragment starts. - * @param fragment The file contents. - * @returns The size of the total uploaded data in bytes. - */ - protected async continueUpload(uploadId: string, fileOffset: number, fragment: ArrayBuffer | Blob): Promise { - let n = await spPost(File(this, `continueUpload(uploadId=guid'${uploadId}',fileOffset=${fileOffset})`), { body: fragment }); - if (typeof n === "object") { - // When OData=verbose the payload has the following shape: - // { ContinueUpload: "20971520" } - n = (n as any).ContinueUpload; - } - return parseFloat(n); - } + return { + data, + file: fileFromServerRelativePath(this, data.ServerRelativeUrl), + }; - /** - * Uploads the last file fragment and commits the file. The current file content is changed when this method completes. - * Use the uploadId value that was passed to the StartUpload method that started the upload session. - * This method is currently available only on Office 365. - * - * @param uploadId The unique identifier of the upload session. - * @param fileOffset The size of the offset into the file where the fragment starts. - * @param fragment The file contents. - * @returns The newly uploaded file. - */ - protected async finishUpload(uploadId: string, fileOffset: number, fragment: ArrayBuffer | Blob): Promise { - const response: IFileInfo = await spPost(File(this, `finishUpload(uploadId=guid'${uploadId}',fileOffset=${fileOffset})`), { body: fragment }); - return { - data: response, - file: fileFromServerRelativePath(this, response.ServerRelativeUrl), - }; + } else if (first) { + + progress({ offset, stage: "starting", uploadId }); + offset = await spPost(File(fileRef, `startUpload(uploadId=guid'${uploadId}')`), { body: chunk.value }); + first = false; + + } else { + + progress({ offset, stage: "continue", uploadId }); + offset = await spPost(File(fileRef, `continueUpload(uploadId=guid'${uploadId}',fileOffset=${offset})`), { body: chunk.value }); + } + } } protected moveCopyImpl(destUrl: string, options: Partial, overwrite: boolean, methodName: string): Promise { @@ -696,11 +647,7 @@ export enum TemplateFileType { export interface IFileUploadProgressData { uploadId: string; stage: "starting" | "continue" | "finishing"; - blockNumber: number; - totalBlocks: number; - chunkSize: number; - currentPointer: number; - fileSize: number; + offset: number; } export interface IAddUsingPathProps { @@ -777,3 +724,67 @@ export interface IFileDeleteParams { */ ETagMatch: string; } + +export interface IChunkedOperationProps { + progress: (data: IFileUploadProgressData) => void; +} + +export type ValidFileContentSource = Blob | ReadableStream | TransformStream | Stream | PassThrough; + +function applyChunckedOperationDefaults(props: Partial): IChunkedOperationProps { + return { + progress: () => null, + ...props, + }; +} + +function sourceToReadableStream(source: ValidFileContentSource): ReadableStream { + + if (isBlob(source)) { + + return source.stream(); + + // eslint-disable-next-line @typescript-eslint/dot-notation + } else if (isPassThrough(source)) { + + // we probably have a passthrough stream from NodeFetch or some other type that supports "on(data)" + return new ReadableStream({ + start(controller) { + + source.on("data", (chunk) => { + controller.enqueue(chunk); + }); + + source.on("end", () => { + controller.close(); + }); + }, + }); + + } else { + + return source; + } +} + +const NAME = Symbol.toStringTag; + +function isPassThrough(object): object is PassThrough { + // eslint-disable-next-line @typescript-eslint/dot-notation + return typeof object["on"] === "function"; +} + +// FROM: node-fetch source code +function isBlob(object): object is Blob { + return ( + typeof object === "object" && + typeof object.arrayBuffer === "function" && + typeof object.type === "string" && + typeof object.stream === "function" && + typeof object.constructor === "function" && + ( + /^(Blob|File)$/.test(object[NAME]) || + /^(Blob|File)$/.test(object.constructor.name) + ) + ); +} From 5ece5f779cd147357783cb229904e0745a8e1a74 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 6 Mar 2024 10:17:44 -0500 Subject: [PATCH 127/171] removing post-install scripts --- packages/graph/package.json | 3 --- packages/graph/post-install.cjs | 20 -------------------- packages/sp/files/types.ts | 2 +- packages/sp/package.json | 3 --- packages/sp/post-install.cjs | 20 -------------------- 5 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 packages/graph/post-install.cjs delete mode 100644 packages/sp/post-install.cjs diff --git a/packages/graph/package.json b/packages/graph/package.json index e7f0fc6b2..434379db7 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -4,9 +4,6 @@ "description": "pnp - provides a fluent interface to query the Microsoft Graph", "main": "./index.js", "typings": "./index", - "scripts": { - "postinstall": "node ./post-install.cjs" - }, "dependencies": { "@microsoft/microsoft-graph-types": "2.40.0", "tslib": "2.6.2", diff --git a/packages/graph/post-install.cjs b/packages/graph/post-install.cjs deleted file mode 100644 index 2686f800d..000000000 --- a/packages/graph/post-install.cjs +++ /dev/null @@ -1,20 +0,0 @@ -const { readFileSync } = require("fs"); -const { join } = require("path"); -const projectRoot = process.cwd(); -const packageLoc = join(projectRoot, "package.json"); -const packageFile = readFileSync(packageLoc, "utf8"); -const packageJSON = JSON.parse(packageFile); -if (packageJSON.dependencies != null) { - const spfxVersion = packageJSON.dependencies["@microsoft/sp-core-library"]; - if (spfxVersion != null) { - const spfxVersionFloat = parseFloat(spfxVersion); - if (spfxVersionFloat > 1.11 && spfxVersionFloat < 1.15) { - console.log(""); - console.log("\x1b[43m%s\x1b[0m", " PnPjs WARNING "); - console.log("\x1b[33m%s\x1b[0m", " The version of SPFx you are using requires an update to work with PnPjs. Please make sure to follow the getting started instructions to make the appropriate changes. ➡ https://pnp.github.io/pnpjs/getting-started/#spfx-version-1121-later"); - console.log(""); - } - } -} else { - console.log("Package has no dependencies"); -} diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index 020d6e9cf..6d11e8368 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -763,7 +763,7 @@ function sourceToReadableStream(source: ValidFileContentSource): ReadableStream } else { - return source; + return source; } } diff --git a/packages/sp/package.json b/packages/sp/package.json index e694c5597..4904d08df 100644 --- a/packages/sp/package.json +++ b/packages/sp/package.json @@ -4,9 +4,6 @@ "description": "pnp - provides a fluent api for working with SharePoint REST", "main": "./index.js", "typings": "./index", - "scripts": { - "postinstall": "node ./post-install.cjs" - }, "dependencies": { "tslib": "2.4.1", "@pnp/core": "0.0.0-PLACEHOLDER", diff --git a/packages/sp/post-install.cjs b/packages/sp/post-install.cjs deleted file mode 100644 index 2686f800d..000000000 --- a/packages/sp/post-install.cjs +++ /dev/null @@ -1,20 +0,0 @@ -const { readFileSync } = require("fs"); -const { join } = require("path"); -const projectRoot = process.cwd(); -const packageLoc = join(projectRoot, "package.json"); -const packageFile = readFileSync(packageLoc, "utf8"); -const packageJSON = JSON.parse(packageFile); -if (packageJSON.dependencies != null) { - const spfxVersion = packageJSON.dependencies["@microsoft/sp-core-library"]; - if (spfxVersion != null) { - const spfxVersionFloat = parseFloat(spfxVersion); - if (spfxVersionFloat > 1.11 && spfxVersionFloat < 1.15) { - console.log(""); - console.log("\x1b[43m%s\x1b[0m", " PnPjs WARNING "); - console.log("\x1b[33m%s\x1b[0m", " The version of SPFx you are using requires an update to work with PnPjs. Please make sure to follow the getting started instructions to make the appropriate changes. ➡ https://pnp.github.io/pnpjs/getting-started/#spfx-version-1121-later"); - console.log(""); - } - } -} else { - console.log("Package has no dependencies"); -} From c5ce21b3808195d4e29a22f300960510d571ccf9 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 6 Mar 2024 12:03:40 -0500 Subject: [PATCH 128/171] Update pull_request.yaml --- .github/workflows/pull_request.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml index 50b5d6fbf..e7bf77727 100644 --- a/.github/workflows/pull_request.yaml +++ b/.github/workflows/pull_request.yaml @@ -1,5 +1,8 @@ -name: Pull Request Testing -on: pull_request +name: V3 Pull Request Testing +on: + pull_request: + branches: + - version-3 jobs: run_pr_tests: runs-on: ubuntu-latest From f1b2cd898a8a66c32a71841441fbc522a49813e6 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 6 Mar 2024 14:09:03 -0500 Subject: [PATCH 129/171] async paging docs, small updates --- docs/concepts/async-paging.md | 110 ++++++++++++++++++++++++ mkdocs.yml | 1 + packages/queryable/behaviors/caching.ts | 1 + packages/sp/items/types.ts | 12 +-- 4 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 docs/concepts/async-paging.md diff --git a/docs/concepts/async-paging.md b/docs/concepts/async-paging.md new file mode 100644 index 000000000..55fa4ef4f --- /dev/null +++ b/docs/concepts/async-paging.md @@ -0,0 +1,110 @@ +# Async Paging + +With the introduction of the async iterator pattern to both sp/items and all graph collections we wanted to share a discussion for working with async paging. + +The easiest example is to process all of the items in a loop. In this example each page of 1000 results is retrieved from the list. The `items` collection itself is AsyncIterable so you can use it directly in the loop. + +```TypeScript +for await (const items of sp.web.lists.getByTitle("BigList").items.top(1000)) { + console.log(items.length); +} +``` + +And a graph example: + +```TypeScript +for await (const items of graph.users) { + console.log(items.length); +} +``` + +## Accessing the Iterator + +You might in some cases want to access the iterator object directly from the collection, which you can do using `Symbol.asyncIterator` method: + +```TypeScript +const iterator = collection[Symbol.asyncIterator](); +``` + +## Paging Helper + +We are also providing an example paging class to control prev/next paging through the collection using the AsyncIterator. The code here is provided as an example only. + +```TypeScript +class AsyncPager { + + private iterator: AsyncIterator; + + constructor(iterable: AsyncIterable, private pages: T[] = [], private pagePointer = -1, private isDone = false) { + this.iterator = iterable[Symbol.asyncIterator](); + } + + /** + * Provides access to the current page of values + */ + async current(): Promise { + + // we don't have any pages yet + if (this.pagePointer < 0) { + return this.next(); + } + + // return the current page + return this.pages[this.pagePointer]; + } + + /** + * Access the next page, either from the local cache or make a request to load it + */ + async next(): Promise { + + // does the page exist? + let page = this.pages[++this.pagePointer]; + + if (typeof page === "undefined") { + + if (this.isDone) { + + // if we are already done make sure we don't make any more requests + // and return the last page + --this.pagePointer; + + } else { + + // get the next page of links + const next = await this.iterator.next(); + + if (next.done) { + + this.isDone = true; + + } else { + + this.pages.push(next.value); + } + } + } + + return this.pages[this.pagePointer]; + } + + async prev(): Promise { + + // handle already at the start + if (this.pagePointer < 1) { + return this.pages[0]; + } + + // return the previous page moving our pointer + return this.pages[--this.pagePointer]; + } +} +``` + +And some usage: + +```TypeScript +const pager = new AsyncPager(sp.web.lists.getByTitle("BigList").items.top(1000)); + +const items1 = await pager.next(); +``` diff --git a/mkdocs.yml b/mkdocs.yml index c56dd035d..67db74852 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -12,6 +12,7 @@ nav: - '2020': 'news/2020-year-in-review.md' - 'Library Usage Tips': - 'Authentication': 'concepts/authentication.md' + - 'Async Paging': 'concepts/async-paging.md' - 'In SPFx': 'concepts/auth-spfx.md' - 'In Browser': 'concepts/auth-browser.md' - 'In NodeJS': 'concepts/auth-nodejs.md' diff --git a/packages/queryable/behaviors/caching.ts b/packages/queryable/behaviors/caching.ts index f1dad8446..a870fae8d 100644 --- a/packages/queryable/behaviors/caching.ts +++ b/packages/queryable/behaviors/caching.ts @@ -103,6 +103,7 @@ export function Caching(props?: ICachingProps): TimelinePipe { })); } else { + result = cached; } } diff --git a/packages/sp/items/types.ts b/packages/sp/items/types.ts index a1c33fa35..e0c062905 100644 --- a/packages/sp/items/types.ts +++ b/packages/sp/items/types.ts @@ -62,14 +62,14 @@ export class _Items extends _SPCollection { public [Symbol.asyncIterator]() { - const q = SPCollection(this).using(parseBinderWithErrorCheck(async (r) => { + const nextInit = SPCollection(this).using(parseBinderWithErrorCheck(async (r) => { const json = await r.json(); - const nextUrl = hOP(json, "d") && hOP(json.d, "__next") ? json.d.__next : json["odata.nextLink"]; + const nextLink = hOP(json, "d") && hOP(json.d, "__next") ? json.d.__next : json["odata.nextLink"]; return >{ - hasNext: typeof nextUrl === "string" && nextUrl.length > 0, - nextLink: nextUrl, + hasNext: typeof nextLink === "string" && nextLink.length > 0, + nextLink, value: parseODataJSON(json), }; })); @@ -79,13 +79,13 @@ export class _Items extends _SPCollection { for (let i = 0; i < queryParams.length; i++) { const param = this.query.get(queryParams[i]); if (objectDefinedNotNull(param)) { - q.query.set(queryParams[i], param); + nextInit.query.set(queryParams[i], param); } } return >{ - _next: q, + _next: nextInit, async next() { From 25e071298426bcfa710669f0af16e09dfad4026f Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 6 Mar 2024 14:13:37 -0500 Subject: [PATCH 130/171] fixing build error --- packages/sp/files/types.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index 6d11e8368..3a50d27cb 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -738,6 +738,9 @@ function applyChunckedOperationDefaults(props: Partial): }; } +/** + * Converts the source into a ReadableStream we can understand + */ function sourceToReadableStream(source: ValidFileContentSource): ReadableStream { if (isBlob(source)) { From 8263c4b2a02e2aea675d4376cf52243d0393b1ce Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 11 Mar 2024 11:03:55 -0400 Subject: [PATCH 131/171] Update lock.yml --- .github/workflows/lock.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index 3f9b8809d..34bca2c62 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -9,7 +9,7 @@ jobs: lock: runs-on: ubuntu-latest steps: - - uses: dessant/lock-threads@v2 + - uses: dessant/lock-threads@v5 with: github-token: ${{ github.token }} issue-lock-inactive-days: '2' From aa6c814c37880a3a6697f868804e813b9b85d224 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 11 Mar 2024 11:06:36 -0400 Subject: [PATCH 132/171] Update lock.yml --- .github/workflows/lock.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index 34bca2c62..2d06be25a 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -12,7 +12,7 @@ jobs: - uses: dessant/lock-threads@v5 with: github-token: ${{ github.token }} - issue-lock-inactive-days: '2' - issue-lock-labels: 'auto-locked' - issue-lock-comment: 'This issue is locked for inactivity or age. If you have a related issue please open a new issue and reference this one. Closed issues are not tracked.' + issue-inactive-days: '2' + add-issue-labels: 'auto-locked' + issue-comment: 'This issue is locked for inactivity or age. If you have a related issue please open a new issue and reference this one. Closed issues are not tracked.' issue-lock-reason: '' From 5c8997149d6b1da47e9061a61cf867af6a309820 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Wed, 20 Mar 2024 14:50:34 +0000 Subject: [PATCH 133/171] Updates for permissions and shares Updated node typings to 18 --- .vscode/launch.json | 2 +- debug/launch/graph.ts | 39 +- docs/graph/files.md | 87 +++-- docs/graph/permissions.md | 6 +- docs/graph/shares.md | 71 ++++ package-lock.json | 433 ++++++++++------------- package.json | 2 +- packages/graph/files/bundles.ts | 72 ++++ packages/graph/files/index.ts | 9 + packages/graph/files/types.ts | 1 + packages/graph/files/users.ts | 3 - packages/graph/permissions/drive-item.ts | 52 +++ packages/graph/permissions/index.ts | 5 + packages/graph/permissions/site.ts | 22 +- packages/graph/permissions/types.ts | 12 +- packages/graph/shares/drive-item.ts | 39 ++ packages/graph/shares/index.ts | 7 + packages/graph/shares/types.ts | 88 +++-- test/graph/files.ts | 46 ++- test/graph/list-items.ts | 1 + test/graph/permissions.ts | 131 +++++++ test/graph/shares.ts | 92 +++++ test/sp/files.ts | 2 +- test/sp/sites.ts | 2 +- 24 files changed, 911 insertions(+), 313 deletions(-) create mode 100644 packages/graph/files/bundles.ts create mode 100644 packages/graph/permissions/drive-item.ts create mode 100644 packages/graph/shares/drive-item.ts create mode 100644 test/graph/permissions.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index dcbf59852..9b917958b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -37,7 +37,7 @@ "args": [ "--verbose", "--logging", - "Error", + "verbose", "--record", "write" ], diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index f2646a551..ee86b8863 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,6 +1,9 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import "@pnp/graph/users"; +import "@pnp/graph/files"; +import { IDriveItemAdd, IDriveItemAddFolder, IFileUploadOptions, IItemOptions, IBundleDef } from "@pnp/graph/files"; declare var process: { exit(code?: number): void }; @@ -8,10 +11,42 @@ export async function Example(settings: any) { const graph = graphSetup(settings); - const users = await graph.users(); + const fileOptions: IFileUploadOptions = { + content: "This is some test content", + filePathName: "pnpTest.txt", + contentType: "text/plain;charset=utf-8", + }; + + const testUserName = settings.testing.testUser.substring(settings.testing.testUser.lastIndexOf("|") + 1); + const drives = await graph.users.getById(testUserName).drives(); + let driveId = ""; + if (drives.length > 0) { + driveId = drives[0].id; + } + + // Create sample files + let folderId = ""; + let child1Id = ""; + let child2Id = ""; + const testFolderName = `TestFolder_${getRandomString(4)}`; + const driveItemAdd: IDriveItemAddFolder = { + name: testFolderName, + }; + const folder = await graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder(driveItemAdd); + if (folder != null) { + folderId = folder.id; + const testFileName = `TestFile_${getRandomString(4)}.json`; + const fo = JSON.parse(JSON.stringify(fileOptions)); + fo.filePathName = testFileName; + const child1 = await graph.users.getById(testUserName).drives.getById(driveId).getItemById(folderId).upload(fo); + child1Id = child1.id; + fo.filePathName = `TestFile_${getRandomString(4)}.json`; + const child2 = await graph.users.getById(testUserName).drives.getById(driveId).getItemById(folderId).upload(fo); + child2Id = child2.id; + } Logger.log({ - data: users, + data: folder, level: LogLevel.Info, message: "List of Users Data", }); diff --git a/docs/graph/files.md b/docs/graph/files.md index 9e4ce0a63..7448f8436 100644 --- a/docs/graph/files.md +++ b/docs/graph/files.md @@ -129,7 +129,7 @@ const shared = await graph.me.drives.getById({drive id}).sharedWithMe(options); ``` -## Get the following drive item +## Get the drive item being followed List the items that have been followed by the signed in user. @@ -208,9 +208,9 @@ const rootChildren = await graph.users.getById({user id}).drives.getById({drive const rootChildren = await graph.me.drives.getById({drive id}).root.children(); -const itemChildren = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").children(); +const itemChildren = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").children(); -const itemChildren = await graph.me.drives.getById({drive id}).root.items.getById("{item id}").children(); +const itemChildren = await graph.me.drives.getById({drive id}).root.getItemById("{item id}").children(); ``` @@ -368,9 +368,9 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const item = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}")(); +const item = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}")(); -const item = await graph.me.drives.getById({drive id}).items.getById("{item id}")(); +const item = await graph.me.drives.getById({drive id}).getItemById("{item id}")(); ``` @@ -462,9 +462,9 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const thumbs = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").thumbnails(); +const thumbs = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").thumbnails(); -const thumbs = await graph.me.drives.getById({drive id}).items.getById("{item id}").thumbnails(); +const thumbs = await graph.me.drives.getById({drive id}).getItemById("{item id}").thumbnails(); ``` @@ -479,10 +479,10 @@ import "@pnp/graph/files"; const graph = graphfi(...); -await graph.me.drives.getById({drive id}).items.getById({item id}).delete(); -await graph.me.drives.getById({drive id}).items.getById({item id}).permanentDelete(); -await graph.users.getById({user id}).drives.getById({drive id}).items.getById({item id}).delete(); -await graph.users.getById({user id}).drives.getById({drive id}).items.getById({item id}).permanentDelete(); +await graph.me.drives.getById({drive id}).getItemById({item id}).delete(); +await graph.me.drives.getById({drive id}).getItemById({item id}).permanentDelete(); +await graph.users.getById({user id}).drives.getById({drive id}).getItemById({item id}).delete(); +await graph.users.getById({user id}).drives.getById({drive id}).getItemById({item id}).permanentDelete(); ``` ## Update drive item metadata @@ -496,9 +496,9 @@ import "@pnp/graph/files"; const graph = graphfi(...); -const update = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").update({name: "New Name"}); +const update = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").update({name: "New Name"}); -const update = await graph.me.drives.getById({drive id}).items.getById("{item id}").update({name: "New Name"}); +const update = await graph.me.drives.getById({drive id}).getItemById("{item id}").update({name: "New Name"}); ``` @@ -522,9 +522,9 @@ const moveOptions: IItemOptions = { name?: {newName}; }; -const move = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").move(moveOptions); +const move = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").move(moveOptions); -const move = await graph.me.drives.getById({drive id}).items.getById("{item id}").move(moveOptions); +const move = await graph.me.drives.getById({drive id}).getItemById("{item id}").move(moveOptions); ``` @@ -548,9 +548,9 @@ const copyOptions: IItemOptions = { name?: {newName}; }; -const copy = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").copy(copyOptions); +const copy = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").copy(copyOptions); -const copy = await graph.me.drives.getById({drive id}).items.getById("{item id}").copy(copyOptions); +const copy = await graph.me.drives.getById({drive id}).getItemById("{item id}").copy(copyOptions); ``` @@ -590,16 +590,16 @@ import { ItemPreviewInfo } from "@microsoft/microsoft-graph-types" const graph = graphfi(...); -const preview: ItemPreviewInfo = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").preview(); +const preview: ItemPreviewInfo = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").preview(); -const preview: ItemPreviewInfo = await graph.me.drives.getById({drive id}).items.getById("{item id}").preview(); +const preview: ItemPreviewInfo = await graph.me.drives.getById({drive id}).getItemById("{item id}").preview(); const previewOptions: IPreviewOptions = { page: 1, zoom: 90 } -const preview2: ItemPreviewInfo = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").preview(previewOptions); +const preview2: ItemPreviewInfo = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").preview(previewOptions); ``` @@ -640,16 +640,57 @@ import { IAnalyticsOptions } from "@pnp/graph/files"; const graph = graphfi(...); // Defaults to lastSevenDays -const analytics = await graph.users.getById({user id}).drives.getById({drive id}).items.getById("{item id}").analytics()(); +const analytics = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").analytics()(); -const analytics = await graph.me.drives.getById({drive id}).items.getById("{item id}").analytics()(); +const analytics = await graph.me.drives.getById({drive id}).getItemById("{item id}").analytics()(); const analyticOptions: IAnalyticsOptions = { timeRange: "allTime" }; -const analyticsAllTime = await graph.me.drives.getById({drive id}).items.getById("{item id}").analytics(analyticOptions)(); +const analyticsAllTime = await graph.me.drives.getById({drive id}).getItemById("{item id}").analytics(analyticOptions)(); ``` For more information on: [Sensitivity and Retention Labels (Premium Endpoint)](./files-labels.md) + +## Permissions + +### List/Get/Add/Update/Delete Drive Item Permissions + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/users"; +import "@pnp/graph/files"; +import "@pnp/graph/permissions/drive-item"; +import {IPermissionsInviteInfo} from "@pnp/graph/permissions/drive-item"; + +const graph = graphfi(...); + +const newPermissions: IPermissionsInviteInfo = { + recipients: [{email: "user@contoso.com"}], + requireSignIn: true, + sendInvitation: true, + roles: ["read"] +}; + +// List permissions +const permissions = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").permissions(); + +// Add permissions +const permissions = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").addPermissions(newPermissions); + +// Get permissions +const itemPermissions = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").permissions.getById(permissions.id)(); + +// Update permissions +const updatedPermissions = await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").permissions.getById(permissions.id).update({roles: ["write"]}); + +// Delete permissions +await graph.users.getById({user id}).drives.getById({drive id}).getItemById("{item id}").permissions.getById(permissions.id).delete(); + +``` + +## Sharing + +[Shares](./shares.md) diff --git a/docs/graph/permissions.md b/docs/graph/permissions.md index ade06dc57..f3a7543e6 100644 --- a/docs/graph/permissions.md +++ b/docs/graph/permissions.md @@ -46,8 +46,10 @@ const graph = graphfi(...); const permissions = await graph.sites.getById("{site id}").permissions.add({ roles: ["fullcontrol"], grantedToIdentities: [{ - id: "89ea5c94-7736-4e25-95ad-3fa95f62b66e", - displayName: "Contoso Time Manager App", + application: { + id: "89ea5c94-7736-4e25-95ad-3fa95f62b66e", + displayName: "Contoso Time Manager App", + } }], }); ``` diff --git a/docs/graph/shares.md b/docs/graph/shares.md index 40f7703b8..30ceafdc2 100644 --- a/docs/graph/shares.md +++ b/docs/graph/shares.md @@ -46,3 +46,74 @@ const graph = graphfi(...); const driveItemInfo = await graph.shares.getById("{shareId}").driveItem(); ``` + +## Convert sharing URL to a sharing token + +To use a sharing URL with this API, your app needs to transform the URL into a sharing token. + +```TS +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/shares"; +import {IShareLinkInfo} from "@pnp/graph/shares"; + +const graph = graphfi(...); + +// Use ShareId +const shareLinkInfo: IShareLinkInfo = { + shareId: shareId, + redeemSharingLink: false, +}; +const sharedDriveItem = await graph.shares.useSharingLink(shareLinkInfo); + +// Use Encoded Sharing Link +const shareLink: string = graph.shares.encodeSharingLink("https://{tenant}.sharepoint.com/sites/dev/Shared%20Documents/new.pptx"); +const shareLinkInfo = { + encodedSharingUrl: shareLink, + redeemSharingLink: false +}; +const sharedDriveItem = await graph.shares.useSharingLink(shareLinkInfo); +``` + +## Create Sharing Link + +You can use createLink action to share a DriveItem via a sharing link. + +The createLink action will create a new sharing link if the specified link type doesn't already exist for the calling application. If a sharing link of the specified type already exists for the app, the existing sharing link will be returned. + +```TS +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/shares"; +import "@pnp/graph/users"; +import "@pnp/graph/files"; + +const graph = graphfi(...); + +const sharingLinkInfo: ICreateShareLinkInfo = { + type: "view", + scope: "anonymous", +}; +const sharingLink = await graph.users.getById({userId}).drives.getById({driveId}).getItemById({itemId}).createSharingLink(sharingLinkInfo); + +``` + +## Grant Sharing Link Access + +Grant users access to a link represented by a permission. + +```TS +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/shares"; + +const graph = graphfi(...); + +const shareLink: string = graph.shares.encodeSharingLink("https://{tenant}.sharepoint.com/sites/dev/Shared%20Documents/new.pptx"); +const sharingLinkAccess = { + encodedSharingUrl: shareLink, + recipients: [{email: "user@contoso.com"}], + roles: ["read"] +}; + +// +const permissions = await graph.shares.grantSharingLinkAccess(sharingLinkAccess); + +``` diff --git a/package-lock.json b/package-lock.json index 76e50ea57..2dd746037 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@types/core-js": "2.5.8", "@types/findup-sync": "4.0.4", "@types/mocha": "10.0.6", - "@types/node": "16.11.7", + "@types/node": "18.11.9", "@types/webpack": "5.28.5", "@types/yargs": "17.0.32", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -68,65 +68,65 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.6.0.tgz", - "integrity": "sha512-3X9wzaaGgRaBCwhLQZDtFp5uLIXCPrGbwJNWPPugvL4xbIGgScv77YzzxToKGLAKvG9amDoofMoP+9hsH1vs1w==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.0.tgz", + "integrity": "sha512-OuDVn9z2LjyYbpu6e7crEwSipa62jX7/ObV/pmXQfnOG8cHwm363jYtg3FSX3GB1V7jsIKri1zgq7mfXkFk/qw==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.1.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", - "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", + "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-client": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.8.0.tgz", - "integrity": "sha512-+gHS3gEzPlhyQBMoqVPOTeNH031R5DM/xpCvz72y38C09rg4Hui/1sJS/ujoisDZbbSHyuRLVWdFlwL0pIFwbg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.0.tgz", + "integrity": "sha512-x50SSD7bbG5wen3tMDI2oWVSAjt1K1xw6JZSnc6239RmBwqLJF9dPsKsh9w0Rzh5+mGpsu9FDu3DlsT0lo1+Uw==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-rest-pipeline": "^1.9.1", "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", + "@azure/core-util": "^1.6.1", "@azure/logger": "^1.0.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", - "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", + "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.14.0.tgz", - "integrity": "sha512-Tp4M6NsjCmn9L5p7HsW98eSOS7A0ibl3e5ntZglozT0XuD/0y6i36iW829ZbBq0qihlGgfaeFpkLjZ418KDm1Q==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.0.tgz", + "integrity": "sha512-6kBQwE75ZVlOjBbp0/PX0fgNLHxoMDxHe3aIPV/RLVwrIDidxTbsHtkSbPNTkheMset3v9s1Z08XuMNpWRK/7w==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -134,58 +134,58 @@ "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.3.0", "@azure/logger": "^1.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "tslib": "^2.2.0" + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", - "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", + "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.0.tgz", + "integrity": "sha512-MVeJvGHB4jmF7PeHhyr72vYJsBJ3ff1piHikMgRaabPAC4P3rxhf9fm42I+DixLysBunskJWhsDQD2A+O+plkQ==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, "node_modules/@azure/core-util": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.7.0.tgz", - "integrity": "sha512-Zq2i3QO6k9DA8vnm29mYM4G8IE9u1mhF1GUabVEqPNX8Lj833gdxQ2NAFxt2BZsfAL+e9cT8SyVN7dFVJ/Hf0g==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.8.0.tgz", + "integrity": "sha512-w8NrGnrlGDF7fj36PBnJhGXDK2Y3kpTOgL7Ksb5snEHXq/3EAbKYOp1yqme0yWCUlSDq5rjqvxSBAJmsqYac3w==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", - "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", + "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" @@ -240,15 +240,15 @@ } }, "node_modules/@azure/logger": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", - "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.0.tgz", + "integrity": "sha512-BnfkfzVEsrgbVCtqq0RYRMePSH2lL/cgUUR5sYRF4yNN10zJZq/cODz0r89k3ykY83MqeM3twR292a3YBNgC3w==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, "node_modules/@azure/msal-browser": { @@ -573,14 +573,14 @@ "dev": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", - "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -596,22 +596,22 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -621,9 +621,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", - "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -701,9 +701,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240226", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240226.tgz", - "integrity": "sha512-C668f3AsirPvv6KNhoOyR40VRiCyqCy0HtaMJ2NwX/6/1T7Tw2M6PeV9rS63oz4Tc8tI7EK6TF93flgVmiTAdA==", + "version": "4.0.0-alpha0-v4nightly.20240318", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240318.tgz", + "integrity": "sha512-pUmvt7vjEO5Pqo7c05WPMA+IflKEGuX16aLLWErEG55ivDmtf8NKayl+j4GHbPv+xHnPK621B6mvKzHjU6BV8A==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -723,9 +723,9 @@ "dev": true }, "node_modules/@pnp/logging": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.23.0.tgz", - "integrity": "sha512-QuWUiBgf7csR2/zgfk3Y4EkBBIimfJhdr+8AotfargBBvDzwiOEk0Fb7mwH6saaGeMZJFh9ks0BlLpRSek8/Dg==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.24.0.tgz", + "integrity": "sha512-Fw9ej0WIkKxFmG2mQx6BD2TJBOPbmQHbx3y5dASFongg8mZSg/X/pbvxKwMi4CWhfVkSCgt1vw1eH6tEHuT8Bg==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -756,15 +756,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -831,9 +822,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.3", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz", - "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==", + "version": "8.56.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.5.tgz", + "integrity": "sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -938,9 +929,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, "node_modules/@types/node-forge": { @@ -959,9 +950,9 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "version": "6.9.12", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz", + "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==", "dev": true }, "node_modules/@types/range-parser": { @@ -1280,9 +1271,9 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -1302,9 +1293,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -1325,15 +1316,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -1361,28 +1352,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -1390,24 +1381,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -1416,12 +1407,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -1525,15 +1516,15 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { @@ -1753,22 +1744,25 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -1776,7 +1770,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1971,9 +1965,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001589", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", - "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", + "version": "1.0.30001599", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz", + "integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==", "dev": true, "funding": [ { @@ -2049,10 +2043,16 @@ } }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2065,9 +2065,6 @@ "engines": { "node": ">= 8.10.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -2614,9 +2611,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.681", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz", - "integrity": "sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==", + "version": "1.4.708", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.708.tgz", + "integrity": "sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==", "dev": true }, "node_modules/emoji-regex": { @@ -2644,9 +2641,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -2982,14 +2979,14 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -3286,9 +3283,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -3652,9 +3649,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -3739,9 +3736,9 @@ } }, "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, "funding": [ { @@ -3797,17 +3794,16 @@ } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/http-proxy-middleware": { @@ -3847,16 +3843,16 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -4826,33 +4822,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4864,18 +4833,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/mocha/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -5633,9 +5590,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -6136,17 +6093,17 @@ } }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6201,12 +6158,12 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -6465,9 +6422,9 @@ } }, "node_modules/terser": { - "version": "5.28.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", - "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", + "version": "5.29.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", + "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6769,9 +6726,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", diff --git a/package.json b/package.json index b6e017621..6afa371fe 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@types/core-js": "2.5.8", "@types/findup-sync": "4.0.4", "@types/mocha": "10.0.6", - "@types/node": "16.11.7", + "@types/node": "18.11.9", "@types/webpack": "5.28.5", "@types/yargs": "17.0.32", "@typescript-eslint/eslint-plugin": "5.62.0", diff --git a/packages/graph/files/bundles.ts b/packages/graph/files/bundles.ts new file mode 100644 index 000000000..ab7ad5f23 --- /dev/null +++ b/packages/graph/files/bundles.ts @@ -0,0 +1,72 @@ +import { + _GraphInstance, + _GraphCollection, + graphInvokableFactory, + GraphQueryable, + graphPost, + graphDelete, +} from "../graphqueryable.js"; +import { + Bundle as IBundleType, + DriveItem as IDriveItemType, +} from "@microsoft/microsoft-graph-types"; +import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IUpdateable } from "../decorators.js"; +import { body } from "@pnp/queryable"; + + +/** + * Describes a Bundle instance + * ONLY SUPPORTED IN PERSONAL ONEDRIVE + */ +@deleteable() +@updateable() +export class _Bundle extends _GraphInstance { + + /** + * Method for adding a drive item to a bundle. + * @param id - The Id of a DriveItem object to add to the bundle + * @returns void - 204 if successful + */ + public async addItem(id: string): Promise { + return graphPost(this, body({ id })); + } + + /** + * Method for removing a drive item from a bundle. + * @param id - The Id of a DriveItem object to remove from the bundle + * @returns void - 204 if successful + */ + public async removeItem(id: string): Promise { + return graphDelete(GraphQueryable(this,`/children/${id}`)); + } +} + +export interface IBundle extends _Bundle, IDeleteable, IUpdateable { } +export const Bundle = graphInvokableFactory(_Bundle); + +/** + * Describes a collection of Bundle objects + * ONLY SUPPORTED IN PERSONAL ONEDRIVE + */ +@defaultPath("bundles") +@getById(Bundle) +export class _Bundles extends _GraphCollection { + + /** + * Method for creating a new bundle. + * @param bundleDef - IBundleDef object + * @returns Microsoft Graph - DriveItem + */ + public async create(bundleDef: IBundleDef): Promise { + return graphPost(this, body(bundleDef)); + } +} +export interface IBundles extends _Bundles, IGetById { } +export const Bundles = graphInvokableFactory(_Bundles); + +export interface IBundleDef { + name: string; + "@microsoft.graph.conflictBehavior": "rename"; + bundle: IBundleType; + children: {id: string}[]; +} diff --git a/packages/graph/files/index.ts b/packages/graph/files/index.ts index 0fd2f4a8d..028c3579a 100644 --- a/packages/graph/files/index.ts +++ b/packages/graph/files/index.ts @@ -19,6 +19,14 @@ export { IResumableUploadOptions, } from "./resumableUpload.js"; +export { + Bundle, + IBundle, + Bundles, + IBundles, + IBundleDef, +} from "./bundles.js"; + export { Drive, DriveItem, @@ -52,3 +60,4 @@ Reflect.defineProperty(GraphFI.prototype, "drives", { return this.create(Drives); }, }); + diff --git a/packages/graph/files/types.ts b/packages/graph/files/types.ts index d65f79aeb..9c06d1d01 100644 --- a/packages/graph/files/types.ts +++ b/packages/graph/files/types.ts @@ -438,6 +438,7 @@ export class _DriveItems extends _GraphCollection { export interface IDriveItems extends _DriveItems, IGetById { } export const DriveItems = graphInvokableFactory(_DriveItems); + /** * IDriveItemAdd - for adding a drive item and the corresponding contents * @param filename - string - file name. diff --git a/packages/graph/files/users.ts b/packages/graph/files/users.ts index 1f7d71fb4..fbc6febc7 100644 --- a/packages/graph/files/users.ts +++ b/packages/graph/files/users.ts @@ -16,16 +16,13 @@ declare module "../users/types" { addProp(_User, "drive", Drive); addProp(_User, "drives", Drives); -addProp(_Drive, "bundles", DriveItems); addProp(_Drive, "following", DriveItems); declare module "./types" { interface _Drive { - bundles: IDriveItems; special(specialFolder: SpecialFolder): IDriveItem; } interface IDrive { - bundles: IDriveItems; special(specialFolder: SpecialFolder): IDriveItem; } interface _DriveItem { diff --git a/packages/graph/permissions/drive-item.ts b/packages/graph/permissions/drive-item.ts new file mode 100644 index 000000000..2123fa66a --- /dev/null +++ b/packages/graph/permissions/drive-item.ts @@ -0,0 +1,52 @@ +import { addProp, body } from "@pnp/queryable"; +import { graphPost } from "../graphqueryable.js"; +import { _DriveItem, DriveItem } from "../files/types.js"; +import { IPermissions, Permissions } from "./types.js"; +import { Permission as IPermissionType, DriveRecipient as IDriveRecipientType } from "@microsoft/microsoft-graph-types"; + +declare module "../files/types" { + interface _DriveItem { + readonly permissions: IPermissions; + addPermissions(permissionsInviteInfo: IPermissionsInviteInfo): Promise; + } + interface IDriveItem { + readonly permissions: IPermissions; + addPermissions(permissionsInviteInfo: IPermissionsInviteInfo): Promise; + } +} + +addProp(_DriveItem, "permissions", Permissions); + +/** + * Method for adding permissions to the drive item. + * @param permissionsInviteInfo: IPermissionsInviteInfo + * @returns Microsoft Graph - Permission[] + */ +_DriveItem.prototype.addPermissions = async function addPermissions(permissionsInviteInfo: IPermissionsInviteInfo): Promise { + return graphPost(DriveItem(this, "invite"), body(permissionsInviteInfo)); +}; + +/* +* IPermissionsInviteInfo - for adding permissions to a drive item +* @param recipients - IDriveRecipientType[] - A collection of recipients who will receive access and the sharing invitation. +* @param message - string - A plain text formatted message that is included in the sharing invitation. Maximum length 2000 characters. +* @param requireSignIn - boolean - Specifies whether the recipient of the invitation is required to sign-in to view the shared item. +* @param sendInvitation - boolean - If true, a sharing link is sent to the recipient. Otherwise, a permission is granted directly without sending a notification. +* @param roles - "read" | "write" | "owner"[] - Specifies the roles that are to be granted to the recipients of the sharing invitation. +* @param expirationDateTime - string - (Optional) A String with format of yyyy-MM-ddTHH:mm:ssZ of DateTime indicates the expiration time of the permission. +* For OneDrive for Business and SharePoint, expirationDateTime is only applicable for sharingLink permissions. Available on OneDrive for Business, SharePoint, +* and premium personal OneDrive accounts. +* @param password - string (Optional) - The password set on the invite by the creator. Optional and OneDrive Personal only. +* @param retainInheritedPermissions - boolean (Optional) - If true (default), any existing inherited permissions are retained on the shared item when sharing +* this item for the first time. If false, all existing permissions are removed when sharing for the first time. +} +*/ +export interface IPermissionsInviteInfo { + recipients: IDriveRecipientType[]; + requireSignIn: boolean; + sendInvitation: boolean; + roles: ["read" | "write" | "owner"]; + expirationDateTime?: string; + password?: string; + retainInheritedPermissions?: boolean; +} diff --git a/packages/graph/permissions/index.ts b/packages/graph/permissions/index.ts index 44f0a05ee..6b0b80bf2 100644 --- a/packages/graph/permissions/index.ts +++ b/packages/graph/permissions/index.ts @@ -1,4 +1,5 @@ import "./site.js"; +import "./drive-item.js"; export { IPermission, @@ -6,3 +7,7 @@ export { Permission, Permissions, } from "./types.js"; + +export { + IPermissionsInviteInfo, +} from "./drive-item.js"; diff --git a/packages/graph/permissions/site.ts b/packages/graph/permissions/site.ts index a293c6e24..7e11d3c28 100644 --- a/packages/graph/permissions/site.ts +++ b/packages/graph/permissions/site.ts @@ -1,14 +1,32 @@ -import { addProp } from "@pnp/queryable"; +import { addProp, body } from "@pnp/queryable"; +import { graphPost } from "../graphqueryable.js"; +import { Permission as IPermissionType } from "@microsoft/microsoft-graph-types"; import { _Site } from "../sites/types.js"; -import { IPermissions, Permissions } from "./types.js"; +import { IPermissions, Permissions, _Permissions } from "./types.js"; declare module "../sites/types" { interface _Site { readonly permissions: IPermissions; + add(permissions: Pick): Promise; } interface ISite { readonly permissions: IPermissions; + add(permissions: Pick): Promise; } } addProp(_Site, "permissions", Permissions); + +declare module "./types" { + interface _Permissions { + add(permissions: Pick): Promise; + } + interface IPermissions { + add(permissions: Pick): Promise; + } +} + +_Permissions.prototype.add = async function addPermissions(permissions: Pick): Promise { + return graphPost(this, body(permissions)); +}; + diff --git a/packages/graph/permissions/types.ts b/packages/graph/permissions/types.ts index ca5cddb95..cd04d5b92 100644 --- a/packages/graph/permissions/types.ts +++ b/packages/graph/permissions/types.ts @@ -1,6 +1,6 @@ -import { body } from "@pnp/queryable"; + import { IDeleteable, IGetById, IUpdateable, defaultPath, deleteable, getById, updateable } from "../decorators.js"; -import { graphInvokableFactory, _GraphCollection, _GraphInstance, graphPost } from "../graphqueryable.js"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; import { Permission as IPermissionType } from "@microsoft/microsoft-graph-types"; /** @@ -17,12 +17,6 @@ export const Permission = graphInvokableFactory(_Permission); */ @defaultPath("permissions") @getById(Permission) -export class _Permissions extends _GraphCollection { - - public add(permissions: Pick): Promise { - - return graphPost(this, body(permissions)); - } -} +export class _Permissions extends _GraphCollection {} export interface IPermissions extends _Permissions, IGetById { } export const Permissions = graphInvokableFactory(_Permissions); diff --git a/packages/graph/shares/drive-item.ts b/packages/graph/shares/drive-item.ts new file mode 100644 index 000000000..84358a116 --- /dev/null +++ b/packages/graph/shares/drive-item.ts @@ -0,0 +1,39 @@ +import { body } from "@pnp/queryable"; +import { graphPost } from "../graphqueryable.js"; +import { _DriveItem, DriveItem } from "../files/types.js"; +import { SharingLink as ISharingLinkType } from "@microsoft/microsoft-graph-types"; + +declare module "../files/types" { + interface _DriveItem { + createSharingLink(sharingLinkInfo: ICreateShareLinkInfo): Promise; + } + interface IDriveItem { + createSharingLink(sharingLinkInfo: ICreateShareLinkInfo): Promise; + } +} + +/** + * Method for creating a sharing link for the drive item. + * @param sharingLinkInfo - ISharingLinkInfo + * @returns Microsoft Graph - SharingLink + */ +_DriveItem.prototype.createSharingLink = async function createSharingLink(sharingLinkInfo: ICreateShareLinkInfo): Promise { + return graphPost(DriveItem(this, "createLink"), body(sharingLinkInfo)); +}; + +/** + * ISharingLinkInfo - for creating a sharing link + * @param type - "view" | "edit" | "embed" - The type of sharing link to create. + * @param scope - "anonymous" | "organization" | "users" - The scope of link to create. + * @param expirationDateTime - string - (Optional) A String with format of yyyy-MM-ddTHH:mm:ssZ of DateTime indicates the expiration time of the permission. + * @param password - string (Optional) - password for the link + * @param retainInheritedPermissions - boolean (Optional) - If true (default), any existing inherited permissions are retained on the shared + * item when sharing this item for the first time. If false, all existing permissions are removed when sharing for the first time. + */ +export interface ICreateShareLinkInfo { + type: "view" | "edit" | "embed"; + scope: "anonymous" | "organization" | "users"; + expirationDateTime?: string; + password?: string; + retainInheritedPermissions?: boolean; +} diff --git a/packages/graph/shares/index.ts b/packages/graph/shares/index.ts index 32dd826a6..b3529a5b7 100644 --- a/packages/graph/shares/index.ts +++ b/packages/graph/shares/index.ts @@ -1,13 +1,20 @@ import { GraphFI } from "../fi.js"; import { Shares, IShares } from "./types.js"; +import "./drive-item.js"; export { IShare, IShares, Share, Shares, + IShareLinkInfo, + IShareLinkAccessInfo, } from "./types.js"; +export { + ICreateShareLinkInfo, +} from "./drive-item.js"; + declare module "../fi" { interface GraphFI { readonly shares: IShares; diff --git a/packages/graph/shares/types.ts b/packages/graph/shares/types.ts index 10083be78..a2e2aa590 100644 --- a/packages/graph/shares/types.ts +++ b/packages/graph/shares/types.ts @@ -1,23 +1,36 @@ -import { defaultPath } from "../decorators.js"; -import { graphInvokableFactory, _GraphCollection, _GraphInstance } from "../graphqueryable.js"; -import { SharedDriveItem as ISharedDriveItem } from "@microsoft/microsoft-graph-types"; +import { defaultPath, getById, IGetById } from "../decorators.js"; +import { body, InjectHeaders } from "@pnp/queryable"; +import { combine } from "@pnp/core"; +import { graphInvokableFactory, _GraphCollection, _GraphInstance, graphPost, graphGet } from "../graphqueryable.js"; import { DriveItem, IDriveItem } from "../files/types.js"; +import { + Permission as IPermissionType, + SharedDriveItem as ISharedDriveItemType, + DriveRecipient as IDriveRecipientType, +} from "@microsoft/microsoft-graph-types"; /** - * Shares + * Describes a Share object */ -@defaultPath("shares") -export class _Shares extends _GraphCollection { +export class _Share extends _GraphInstance { /** - * Gets a share by share id or encoded url - * @param id The share id - * @returns An IShare instance + * Access the driveItem associated with this shared file */ - public getById(id: string): IShare { - return Share(this, id); + public get driveItem(): IDriveItem { + return DriveItem(this, "driveitem"); } +} +export interface IShare extends _Share { } +export const Share = graphInvokableFactory(_Share); +/** + * Describes a collection of Share objects + * + */ +@defaultPath("shares") +@getById(Share) +export class _Shares extends _GraphCollection { /** * Creates a sharing link (id) from a given absolute url to a file * @param url Absolute file url such as "https://{tenant}.sharepoint.com/sites/dev/Shared%20Documents/new.pptx" @@ -26,22 +39,51 @@ export class _Shares extends _GraphCollection { public encodeSharingLink(url: string): string { return (`u!${Buffer.from(url).toString("base64").replace(/=$/, "").replace("/", "_").replace("+", "-")}`); } + + /** + * Method for using a sharing link. + * @param share: string - Share Id or Encoded Sharing Url + * @returns Microsoft Graph - SharingLink + */ + public async useSharingLink(shareLink: IShareLinkInfo): Promise { + const q = Shares(this, shareLink.shareId || shareLink.encodedSharingUrl); + if (shareLink.redeemSharingLink) { + q.using(InjectHeaders({ + "Prefer": (shareLink.redeemSharingLink) ? "redeemSharingLink" : "redeemSharingLinkIfNecessary", + })); + } + return graphGet(q); + } + + public async grantSharingLinkAccess(shareLinkAccess: IShareLinkAccessInfo): Promise { + const q = Shares(this, combine(shareLinkAccess.encodedSharingUrl, "permission", "grant")); + return graphPost(q, body(shareLinkAccess)); + } } -export interface IShares extends _Shares { } +export interface IShares extends _Shares, IGetById { } export const Shares = graphInvokableFactory(_Shares); + /** - * Share + * IShareLinkInfo - for using a sharing link - either ShareId or EncodedSharingUrl must be included. + * @param shareId: string - Optional - Share Id + * @param encodedSharingUrl: string - Optional - Encoded Sharing Url + * @param redeemSharingLink: boolean - Optional - True to Redeem the sharing link; False to redeem the sharing link if necessary */ -export class _Share extends _GraphInstance { - - /** - * Access the driveItem associated with this shared file - */ - public get driveItem(): IDriveItem { - return DriveItem(this, "driveitem"); - } +export interface IShareLinkInfo { + shareId?: string; + encodedSharingUrl?: string; + redeemSharingLink?: boolean; } -export interface IShare extends _Share { } -export const Share = graphInvokableFactory(_Share); +/** + * IShareLinkAccessInfo - update Sharing permissions. + * @param encodedSharingUrl: string - Encoded Sharing Url + * @param recipients: IDriveRecipientType[] - Array of recipients + * @param roles: ["read" | "write" | "owner"] - Array of roles + */ +export interface IShareLinkAccessInfo { + encodedSharingUrl: string; + recipients: IDriveRecipientType[]; + roles: ["read" | "write" | "owner"]; +} diff --git a/test/graph/files.ts b/test/graph/files.ts index 692607ae7..9e3a40c79 100644 --- a/test/graph/files.ts +++ b/test/graph/files.ts @@ -4,9 +4,8 @@ import * as fs from "fs"; import findupSync from "findup-sync"; import "@pnp/graph/users"; import "@pnp/graph/files"; -import "@pnp/graph/files/sites"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; -import { IDriveItemAdd, IDriveItemAddFolder, IFileUploadOptions, IItemOptions } from "@pnp/graph/files/types"; +import { IDriveItemAdd, IDriveItemAddFolder, IFileUploadOptions, IItemOptions } from "@pnp/graph/files"; // give ourselves a single reference to the projectRoot const projectRoot = path.resolve(path.dirname(findupSync("package.json"))); @@ -66,6 +65,7 @@ describe("Drive", function () { }); + // TODO: Failing with Timeout it("Get Recent Drive Items", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); @@ -200,7 +200,7 @@ describe("Drive", function () { } let driveItems; const testFolderName = `TestFolder_${getRandomString(4)}`; - const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder({name: testFolderName}); + const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder({ name: testFolderName }); if (folder != null) { const testFileName = `${getRandomString(4)}.txt`; const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(folder.id) @@ -326,11 +326,11 @@ describe("Drive", function () { } const testFileName = `${getRandomString(4)}.txt`; const testFileName2 = `${getRandomString(4)}.txt`; - const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.add({filename: testFileName, content: "My File Content String"}); + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.add({ filename: testFileName, content: "My File Content String" }); let driveItemUpdate; if (children != null) { const testFolderName = `TestFolder_${getRandomString(4)}`; - const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder({name: testFolderName}); + const folder = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder({ name: testFolderName }); if (folder != null) { const moveOptions: IItemOptions = { parentReference: { driveId: folder.parentReference.driveId, id: folder.id }, @@ -349,6 +349,7 @@ describe("Drive", function () { return expect(driveItemUpdate.name).to.eq(testFileName2); }); + // TODO: Failing timeout it("Convert Drive Item", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); @@ -419,10 +420,10 @@ describe("Drive", function () { if (children != null) { // Set up test file await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).follow(); - try{ + try { await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).unfollow(); unfollowDriveItem = true; - }catch(err){ + } catch (err) { unfollowDriveItem = false; } // Clean up test file @@ -430,4 +431,35 @@ describe("Drive", function () { } return expect(unfollowDriveItem).to.be.true; }); + + // it("Create Sharing Link", async function () { + // if (stringIsNullOrEmpty(driveId)) { + // this.skip(); + // } + // const testFileName = `TestFile_${getRandomString(4)}.json`; + // const fo = JSON.parse(JSON.stringify(fileOptions)); + // fo.filePathName = testFileName; + // const driveItemAdd: IDriveItemAdd = { + // filename: testFileName, + // content: fileOptions.content, + // contentType: fileOptions.contentType, + // }; + // const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.children.add(driveItemAdd); + // let sharingLink = null; + // if (children != null) { + // // Create Sharing Link + // const sharingLinkInfo: ISharingLinkInfo = { + // type: "view", + // scope: "anonymous", + // }; + // sharingLink = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).createSharingLink(sharingLinkInfo); + // // Clean up test file + // await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(children.id).delete(); + // } + // return expect(sharingLink).to.haveOwnProperty("id"); + // }); + + /* Testing for Bundles is not possible as it is only supported in Personal OneDrive */ + // describe.skip("Bundles", function () {}); }); + diff --git a/test/graph/list-items.ts b/test/graph/list-items.ts index 5b5aaaeb5..562e0042f 100644 --- a/test/graph/list-items.ts +++ b/test/graph/list-items.ts @@ -84,6 +84,7 @@ describe("List-Items", function () { await itemDelete.delete(); let passed = false; try{ + // eslint-disable-next-line @typescript-eslint/no-unused-vars const r = await list.items.getById(itemDeleteId)(); }catch(err){ passed = true; diff --git a/test/graph/permissions.ts b/test/graph/permissions.ts new file mode 100644 index 000000000..33c925edf --- /dev/null +++ b/test/graph/permissions.ts @@ -0,0 +1,131 @@ +import { expect } from "chai"; +import "@pnp/graph/users"; +import "@pnp/graph/files"; +import "@pnp/graph/permissions/drive-item"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import { IFileUploadOptions } from "@pnp/graph/files"; +import { IPermissionsInviteInfo } from "@pnp/graph/permissions/drive-item"; + +describe("Permissions", function () { + let testUserName = ""; + let driveId = null; + let fileId = null; + let fileId2 = null; + let permissionsId = null; + + const newPermissions: IPermissionsInviteInfo = { + recipients: [{email: testUserName}], + requireSignIn: true, + sendInvitation: true, + roles: ["read"], + }; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + // Get a sample user + try { + testUserName = this.pnp.settings.testUser.substring(this.pnp.settings.testUser.lastIndexOf("|") + 1); + newPermissions.recipients[0].email = testUserName; + const drives = await this.pnp.graph.users.getById(testUserName).drives(); + if (drives.length > 0) { + driveId = drives[0].id; + + // upload a file + const fileOptions: IFileUploadOptions = { + content: "This is some test content", + filePathName: `TestFile_${getRandomString(4)}.json`, + contentType: "text/plain;charset=utf-8", + }; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fileOptions); + if (children != null) { + fileId = children.id; + const perms = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).permissions(); + if(perms != null && perms.length > 0){ + permissionsId = perms[0].id; + } + } + } + } catch (err) { + console.log("Could not retrieve user's drives"); + } + }); + + after(async function () { + if (fileId) { + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).delete(); + } + if(fileId2){ + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId2).delete(); + } + }); + + describe("DriveItem", function () { + it("List Permissions", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + + const permissions = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).permissions(); + expect(permissions).to.be.instanceOf(Array); + }); + + it("Add Permissions", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + + const permissions = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).addPermissions(newPermissions); + expect(permissions).to.be.instanceOf(Array); + }); + + it("Get Permissions", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + + const permissions = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).permissions.getById(permissionsId)(); + expect(permissions).to.haveOwnProperty("id"); + }); + + it("Update Permissions", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + + const permissionUpdate = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId) + .permissions.getById(permissionsId).update({roles: ["write"]}); + expect(permissionUpdate).to.haveOwnProperty("id"); + }); + + it("Delete Permissions", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + const fileOptions: IFileUploadOptions = { + content: "This is some test content", + filePathName: `TestFile_${getRandomString(4)}.json`, + contentType: "text/plain;charset=utf-8", + }; + const newFile = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fileOptions); + let success = false; + if(newFile != null){ + fileId2 = newFile.id; + const permissions = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).addPermissions(newPermissions); + if(permissions != null){ + try{ + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).permissions.getById(permissions[0].id).delete(); + success = true; + }catch(err){ + // ignore + } + } + } + expect(success).to.equal(true); + }); + }); +}); diff --git a/test/graph/shares.ts b/test/graph/shares.ts index 78a2482fc..1e077374f 100644 --- a/test/graph/shares.ts +++ b/test/graph/shares.ts @@ -1,5 +1,11 @@ import { expect } from "chai"; import "@pnp/graph/shares"; +import "@pnp/graph/users"; +import "@pnp/graph/files"; +import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; +import { IFileUploadOptions } from "@pnp/graph/files"; +import { ICreateShareLinkInfo, IShareLinkAccessInfo } from "@pnp/graph/shares"; +import { DriveItem } from "@microsoft/microsoft-graph-types"; describe("Shares", function () { @@ -23,4 +29,90 @@ describe("Shares", function () { return expect(link).to.eq("u!aHR0cHM6Ly9zb21ldGhpbmcuc2hhcmVwb2ludC5jb20vc2l0ZXMvc2l0ZS9zaGFyZWQlMjBkb2N1bWVudHMvc29tZXRoaW5nLmRvY3g"); }); + + describe("Drive Item", function () { + let testUserName = ""; + let driveId = null; + let fileId = null; + + // Ensure we have the data to test against + before(async function () { + + if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { + this.skip(); + } + + // Get a sample user + try { + testUserName = this.pnp.settings.testUser.substring(this.pnp.settings.testUser.lastIndexOf("|") + 1); + const drives = await this.pnp.graph.users.getById(testUserName).drives(); + if (drives.length > 0) { + driveId = drives[0].id; + + // upload a file + const fileOptions: IFileUploadOptions = { + content: "This is some test content", + filePathName: `TestFile_${getRandomString(4)}.json`, + contentType: "text/plain;charset=utf-8", + }; + const children = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).root.upload(fileOptions); + if (children != null) { + fileId = children.id; + } + } + } catch (err) { + console.log("Could not retrieve user's drives"); + } + }); + + after(async function () { + if (fileId) { + await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).delete(); + } + }); + + it("Create Sharing Link", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + + const sharingLinkInfo: ICreateShareLinkInfo = { + type: "view", + scope: "anonymous", + }; + const sharingLink = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId).createSharingLink(sharingLinkInfo); + expect(sharingLink).to.haveOwnProperty("id"); + }); + + it("Grant Sharing Link Access", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + + const driveItem: DriveItem = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId)(); + const shareLink: string = this.pnp.graph.shares.encodeSharingLink(driveItem.webUrl); + const sharingLinkAccess: IShareLinkAccessInfo = { + encodedSharingUrl: shareLink, + recipients: [{email: testUserName}], + roles: ["read"], + }; + const permissions = await this.pnp.graph.shares.grantSharingLinkAccess(sharingLinkAccess); + expect(permissions).to.be.instanceOf(Array); + }); + + it("Use Sharing Link", async function () { + if (stringIsNullOrEmpty(fileId)) { + this.skip(); + } + + const driveItem: DriveItem = await this.pnp.graph.users.getById(testUserName).drives.getById(driveId).getItemById(fileId)(); + const shareLink: string = this.pnp.graph.shares.encodeSharingLink(driveItem.webUrl); + const shareLinkInfo = { + encodedSharingUrl: shareLink, + redeemSharingLink: false, + }; + const sharedDriveItem = await this.pnp.graph.shares.useSharingLink(shareLinkInfo); + expect(sharedDriveItem).to.haveOwnProperty("id"); + }); + }); }); diff --git a/test/sp/files.ts b/test/sp/files.ts index 7df1b9247..6ad66cb97 100644 --- a/test/sp/files.ts +++ b/test/sp/files.ts @@ -95,7 +95,7 @@ describe("Files", function () { const name = `Testing Chunked - ${getRandomString(4)}.jpg`; const content = readFileSync(resolve(projectRoot, "./test/sp/assets/sample_file.jpg")); - const far = await files.addChunked(name, content, null, true, 1000000); + const far = await files.addChunked(name, content, null); // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(far).to.not.be.null; return expect(far.file()).to.eventually.be.fulfilled; diff --git a/test/sp/sites.ts b/test/sp/sites.ts index 555e79161..672eed56c 100644 --- a/test/sp/sites.ts +++ b/test/sp/sites.ts @@ -86,7 +86,7 @@ describe("Sites", function () { const files: IFiles = this.pnp.sp.web.defaultDocumentLibrary.rootFolder.files; const name = `Testing Chunked - ${getRandomString(4)}.jpg`; const content = readFileSync(resolve(projectRoot, "./test/sp/assets/sample_file.jpg")); - const far = await files.addChunked(name, content, null, true, 1000000); + const far = await files.addChunked(name, content, null); const path = far.data.ServerRelativeUrl; const logoProperties: ISiteLogoProperties = {relativeLogoUrl: path, aspect: SiteLogoAspect.Square, type: SiteLogoType.WebLogo}; await this.pnp.sp.site.setSiteLogo(logoProperties); From 968d09e9a8df6d449eec1d1963ed16618a77f60d Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 21 Mar 2024 09:23:44 -0400 Subject: [PATCH 134/171] Update readable-file.ts --- packages/sp/files/readable-file.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sp/files/readable-file.ts b/packages/sp/files/readable-file.ts index 730830355..2663eece4 100644 --- a/packages/sp/files/readable-file.ts +++ b/packages/sp/files/readable-file.ts @@ -1,5 +1,5 @@ import { TimelinePipe } from "@pnp/core"; -import { BlobParse, BufferParse, CacheNever, JSONParse, TextParse } from "@pnp/queryable/index.js"; +import { BlobParse, BufferParse, CacheNever, JSONParse, TextParse } from "@pnp/queryable"; import { _SPInstance, SPQueryable } from "../spqueryable.js"; export class ReadableFile extends _SPInstance { From baaa11438ae80d1508328f0199091a8cb46018af Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 21 Mar 2024 14:30:56 +0000 Subject: [PATCH 135/171] Updates for msal-node, msal-browser, and identity packages --- docs/msaljsclient/index.md | 2 +- package-lock.json | 273 +++++++++-------------------- package.json | 6 +- packages/azidjsclient/package.json | 2 +- packages/msaljsclient/package.json | 2 +- packages/nodejs/package.json | 2 +- 6 files changed, 92 insertions(+), 195 deletions(-) diff --git a/docs/msaljsclient/index.md b/docs/msaljsclient/index.md index 1ca13eb9f..c4a510fdd 100644 --- a/docs/msaljsclient/index.md +++ b/docs/msaljsclient/index.md @@ -26,7 +26,7 @@ const options: MSALOptions = { clientId: "{client id}", }, cache: { - cacheLocation: "localStorage" // in order to avoid re-login after page refresh + claimsBasedCachingEnabled: true // in order to avoid network call to refresh a token every time claims are requested } }, authParams: { diff --git a/package-lock.json b/package-lock.json index 2dd746037..ef882f70e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "4.0.0-alpha0", "license": "MIT", "devDependencies": { - "@azure/identity": "3.4.1", - "@azure/msal-browser": "3.5.0", - "@azure/msal-node": "1.18.4", + "@azure/identity": "4.0.1", + "@azure/msal-browser": "3.10.0", + "@azure/msal-node": "2.6.4", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.1", "@pnp/logging": "^3.22.0", @@ -68,9 +68,9 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.0.tgz", - "integrity": "sha512-OuDVn9z2LjyYbpu6e7crEwSipa62jX7/ObV/pmXQfnOG8cHwm363jYtg3FSX3GB1V7jsIKri1zgq7mfXkFk/qw==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.1.tgz", + "integrity": "sha512-dyeQwvgthqs/SlPVQbZQetpslXceHd4i5a7M/7z/lGEAVwnSluabnQOjF2/dk/hhWgMISusv1Ytp4mQ8JNy62A==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -82,9 +82,9 @@ } }, "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", - "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -94,9 +94,9 @@ } }, "node_modules/@azure/core-client": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.0.tgz", - "integrity": "sha512-x50SSD7bbG5wen3tMDI2oWVSAjt1K1xw6JZSnc6239RmBwqLJF9dPsKsh9w0Rzh5+mGpsu9FDu3DlsT0lo1+Uw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.1.tgz", + "integrity": "sha512-hHYFx9lz0ZpbO5W+iotU9tmIX1jPcoIjYUEUaWGuMi1628LCQ/z05TUR4P+NRtMgyoHQuyVYyGQiD3PC47kaIA==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -112,9 +112,9 @@ } }, "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", - "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -124,9 +124,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.0.tgz", - "integrity": "sha512-6kBQwE75ZVlOjBbp0/PX0fgNLHxoMDxHe3aIPV/RLVwrIDidxTbsHtkSbPNTkheMset3v9s1Z08XuMNpWRK/7w==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.1.tgz", + "integrity": "sha512-ZxS6i3eHxh86u+1eWZJiYywoN2vxvsSoAUx60Mny8cZ4nTwvt7UzVVBJO+m2PW2KIJfNiXMt59xBa59htOWL4g==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -143,9 +143,9 @@ } }, "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", - "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -155,9 +155,9 @@ } }, "node_modules/@azure/core-tracing": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.0.tgz", - "integrity": "sha512-MVeJvGHB4jmF7PeHhyr72vYJsBJ3ff1piHikMgRaabPAC4P3rxhf9fm42I+DixLysBunskJWhsDQD2A+O+plkQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.1.tgz", + "integrity": "sha512-qPbYhN1pE5XQ2jPKIHP33x8l3oBu1UqIWnYqZZ3OYnYjzY0xqIHjn49C+ptsPD9yC7uyWI9Zm7iZUZLs2R4DhQ==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -167,9 +167,9 @@ } }, "node_modules/@azure/core-util": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.8.0.tgz", - "integrity": "sha512-w8NrGnrlGDF7fj36PBnJhGXDK2Y3kpTOgL7Ksb5snEHXq/3EAbKYOp1yqme0yWCUlSDq5rjqvxSBAJmsqYac3w==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.8.1.tgz", + "integrity": "sha512-L3voj0StUdJ+YKomvwnTv7gHzguJO+a6h30pmmZdRprJCM+RJlGMPxzuh4R7lhQu1jNmEtaHX5wvTgWLDAmbGQ==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -180,9 +180,9 @@ } }, "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.0.tgz", - "integrity": "sha512-SYtcG13aiV7znycu6plCClWUzD9BBtfnsbIxT89nkkRvQRB4n0kuZyJJvJ7hqdKOn7x7YoGKZ9lVStLJpLnOFw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -192,9 +192,9 @@ } }, "node_modules/@azure/identity": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.1.tgz", - "integrity": "sha512-oQ/r5MBdfZTMIUcY5Ch8G7Vv9aIXDkEYyU4Dfqjim4MQN+LY2uiQ57P1JDopMLeHCsZxM4yy8lEdne3tM9Xhzg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.0.1.tgz", + "integrity": "sha512-yRdgF03SFLqUMZZ1gKWt0cs0fvrDIkq2bJ6Oidqcoo5uM85YMBnXWMzYKK30XqIT76lkFyAaoAAy5knXhrG4Lw==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -202,7 +202,7 @@ "@azure/core-client": "^1.4.0", "@azure/core-rest-pipeline": "^1.1.0", "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", + "@azure/core-util": "^1.3.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^3.5.0", "@azure/msal-node": "^2.5.1", @@ -213,36 +213,13 @@ "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@azure/identity/node_modules/@azure/msal-common": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz", - "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/identity/node_modules/@azure/msal-node": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.4.tgz", - "integrity": "sha512-nNvEPx009/80UATCToF+29NZYocn01uKrB91xtFr7bSqkqO1PuQGXRyYwryWRztUrYZ1YsSbw9A+LmwOhpVvcg==", - "dev": true, - "dependencies": { - "@azure/msal-common": "14.7.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" + "node": ">=18.0.0" } }, "node_modules/@azure/logger": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.0.tgz", - "integrity": "sha512-BnfkfzVEsrgbVCtqq0RYRMePSH2lL/cgUUR5sYRF4yNN10zJZq/cODz0r89k3ykY83MqeM3twR292a3YBNgC3w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.1.tgz", + "integrity": "sha512-/+4TtokaGgC+MnThdf6HyIH9Wrjp+CnCn3Nx3ggevN7FFjjNyjqg0yLlc2i9S+Z2uAzI8GYOo35Nzb1MhQ89MA==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -252,134 +229,53 @@ } }, "node_modules/@azure/msal-browser": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.5.0.tgz", - "integrity": "sha512-2NtMuel4CI3UEelCPKkNRXgKzpWEX48fvxIvPz7s0/sTcCaI08r05IOkH2GkXW+czUOtuY6+oGafJCpumnjRLg==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.10.0.tgz", + "integrity": "sha512-mnmi8dCXVNZI+AGRq0jKQ3YiodlIC4W9npr6FCB9WN6NQT+6rq+cIlxgUb//BjLyzKsnYo+i4LROGeMyU+6v1A==", "dev": true, "dependencies": { - "@azure/msal-common": "14.4.0" + "@azure/msal-common": "14.7.1" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.4.0.tgz", - "integrity": "sha512-ffCymScQuMKVj+YVfwNI52A5Tu+uiZO2eTf+c+3TXxdAssks4nokJhtr+uOOMxH0zDi6d1OjFKFKeXODK0YLSg==", + "version": "14.7.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz", + "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", - "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", - "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.4.tgz", + "integrity": "sha512-nNvEPx009/80UATCToF+29NZYocn01uKrB91xtFr7bSqkqO1PuQGXRyYwryWRztUrYZ1YsSbw9A+LmwOhpVvcg==", "dev": true, "dependencies": { - "@azure/msal-common": "13.3.1", + "@azure/msal-common": "14.7.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, "engines": { - "node": "10 || 12 || 14 || 16 || 18" - } - }, - "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", - "dev": true, - "engines": { - "node": ">=0.8.0" + "node": ">=16" } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", @@ -390,14 +286,15 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -701,9 +598,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240318", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240318.tgz", - "integrity": "sha512-pUmvt7vjEO5Pqo7c05WPMA+IflKEGuX16aLLWErEG55ivDmtf8NKayl+j4GHbPv+xHnPK621B6mvKzHjU6BV8A==", + "version": "4.0.0-alpha0-v4nightly.20240321", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240321.tgz", + "integrity": "sha512-zaVhzMXFOb7QhrZkHy/eapNlaBwoId1hmgaM23ID6u+QymFpdtBaJqEoFqFHwxSaqcZNx01aunGPV8UL2j8wwg==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -822,9 +719,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.5.tgz", - "integrity": "sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==", + "version": "8.56.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", + "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", "dev": true, "dependencies": { "@types/estree": "*", @@ -950,9 +847,9 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.12", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz", - "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==", + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", "dev": true }, "node_modules/@types/range-parser": { @@ -2284,9 +2181,9 @@ } }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -2611,9 +2508,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.708", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.708.tgz", - "integrity": "sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==", + "version": "1.4.713", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.713.tgz", + "integrity": "sha512-vDarADhwntXiULEdmWd77g2dV6FrNGa8ecAC29MZ4TwPut2fvosD0/5sJd1qWNNe8HcJFAC+F5Lf9jW1NPtWmw==", "dev": true }, "node_modules/emoji-regex": { @@ -2696,9 +2593,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.2.tgz", + "integrity": "sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==", "dev": true }, "node_modules/escalade": { @@ -2979,9 +2876,9 @@ } }, "node_modules/express": { - "version": "4.18.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", - "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.1.tgz", + "integrity": "sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==", "dev": true, "dependencies": { "accepts": "~1.3.8", @@ -2989,7 +2886,7 @@ "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -6858,9 +6755,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "dependencies": { "colorette": "^2.0.10", diff --git a/package.json b/package.json index 6afa371fe..0bf3f3744 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "version": "4.0.0-alpha0", "description": "A JavaScript library for SharePoint & Graph development.", "devDependencies": { - "@azure/identity": "3.4.1", - "@azure/msal-browser": "3.5.0", - "@azure/msal-node": "1.18.4", + "@azure/identity": "4.0.1", + "@azure/msal-browser": "3.10.0", + "@azure/msal-node": "2.6.4", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.1", "@pnp/logging": "^3.22.0", diff --git a/packages/azidjsclient/package.json b/packages/azidjsclient/package.json index ea6ce53e4..f64d2fb34 100644 --- a/packages/azidjsclient/package.json +++ b/packages/azidjsclient/package.json @@ -7,7 +7,7 @@ "dependencies": { "@pnp/core": "0.0.0-PLACEHOLDER", "@pnp/queryable": "0.0.0-PLACEHOLDER", - "@azure/identity": "3.4.1", + "@azure/identity": "4.0.1", "tslib": "2.6.2" } } \ No newline at end of file diff --git a/packages/msaljsclient/package.json b/packages/msaljsclient/package.json index 56068e95b..9f3b29c91 100644 --- a/packages/msaljsclient/package.json +++ b/packages/msaljsclient/package.json @@ -5,7 +5,7 @@ "main": "./index.js", "typings": "./index", "dependencies": { - "@azure/msal-browser": "3.5.0", + "@azure/msal-browser": "3.10.0", "@pnp/queryable": "0.0.0-PLACEHOLDER", "tslib": "2.4.1" } diff --git a/packages/nodejs/package.json b/packages/nodejs/package.json index 83048bfcd..bf5ef6cd5 100644 --- a/packages/nodejs/package.json +++ b/packages/nodejs/package.json @@ -5,7 +5,7 @@ "main": "./index.js", "typings": "./index", "dependencies": { - "@azure/msal-node": "1.18.4", + "@azure/msal-node": "2.6.4", "@pnp/core": "0.0.0-PLACEHOLDER", "@pnp/logging": "0.0.0-PLACEHOLDER", "@pnp/queryable": "0.0.0-PLACEHOLDER", From 11e9ce3c795d5097b3f172f37d350521e0f2f08e Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 21 Mar 2024 10:55:54 -0400 Subject: [PATCH 136/171] Update v4_pull_request.yml --- .github/workflows/v4_pull_request.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/v4_pull_request.yml b/.github/workflows/v4_pull_request.yml index a11976bc2..6a4cc27fa 100644 --- a/.github/workflows/v4_pull_request.yml +++ b/.github/workflows/v4_pull_request.yml @@ -8,9 +8,7 @@ jobs: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v4 - with: - ref: version-4 + - uses: actions/checkout@v4 # setup nodejs - name: Use Node.js 18 uses: actions/setup-node@v4 From f35eeb0cf5573ce40401d28c3a0dde97229bf971 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 21 Mar 2024 10:56:16 -0400 Subject: [PATCH 137/171] Update v4_pull_request.yml --- .github/workflows/v4_pull_request.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/v4_pull_request.yml b/.github/workflows/v4_pull_request.yml index a11976bc2..fc37cf80f 100644 --- a/.github/workflows/v4_pull_request.yml +++ b/.github/workflows/v4_pull_request.yml @@ -8,9 +8,7 @@ jobs: runs-on: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v4 - with: - ref: version-4 + - uses: actions/checkout@v4 # setup nodejs - name: Use Node.js 18 uses: actions/setup-node@v4 From f23fde432479ba1c7c9629dfd436ed196a0abe49 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Fri, 22 Mar 2024 20:55:21 +0000 Subject: [PATCH 138/171] Fix overwritten debug files --- debug/launch/graph.ts | 39 ++------------------------------------- debug/launch/main.ts | 4 ++-- 2 files changed, 4 insertions(+), 39 deletions(-) diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index ee86b8863..f2646a551 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -1,9 +1,6 @@ import { Logger, LogLevel } from "@pnp/logging"; import { graphSetup } from "./setup.js"; -import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import "@pnp/graph/users"; -import "@pnp/graph/files"; -import { IDriveItemAdd, IDriveItemAddFolder, IFileUploadOptions, IItemOptions, IBundleDef } from "@pnp/graph/files"; declare var process: { exit(code?: number): void }; @@ -11,42 +8,10 @@ export async function Example(settings: any) { const graph = graphSetup(settings); - const fileOptions: IFileUploadOptions = { - content: "This is some test content", - filePathName: "pnpTest.txt", - contentType: "text/plain;charset=utf-8", - }; - - const testUserName = settings.testing.testUser.substring(settings.testing.testUser.lastIndexOf("|") + 1); - const drives = await graph.users.getById(testUserName).drives(); - let driveId = ""; - if (drives.length > 0) { - driveId = drives[0].id; - } - - // Create sample files - let folderId = ""; - let child1Id = ""; - let child2Id = ""; - const testFolderName = `TestFolder_${getRandomString(4)}`; - const driveItemAdd: IDriveItemAddFolder = { - name: testFolderName, - }; - const folder = await graph.users.getById(testUserName).drives.getById(driveId).root.children.addFolder(driveItemAdd); - if (folder != null) { - folderId = folder.id; - const testFileName = `TestFile_${getRandomString(4)}.json`; - const fo = JSON.parse(JSON.stringify(fileOptions)); - fo.filePathName = testFileName; - const child1 = await graph.users.getById(testUserName).drives.getById(driveId).getItemById(folderId).upload(fo); - child1Id = child1.id; - fo.filePathName = `TestFile_${getRandomString(4)}.json`; - const child2 = await graph.users.getById(testUserName).drives.getById(driveId).getItemById(folderId).upload(fo); - child2Id = child2.id; - } + const users = await graph.users(); Logger.log({ - data: folder, + data: users, level: LogLevel.Info, message: "List of Users Data", }); diff --git a/debug/launch/main.ts b/debug/launch/main.ts index 5345d2d94..230ee47d3 100644 --- a/debug/launch/main.ts +++ b/debug/launch/main.ts @@ -8,8 +8,8 @@ import { ITestingSettings } from "../../test/load-settings.js"; // add your debugging imports here and prior to submitting a PR git checkout debug/debug.ts // will allow you to keep all your debugging files locally // comment out the example -// import { Example } from "./sp.js"; -import { Example } from "./graph.js"; +import { Example } from "./sp.js"; +// import { Example } from "./graph.js"; // setup the connection to SharePoint using the settings file, you can // override any of the values as you want here, just be sure not to commit From 546095be696b4c83660c251276dfe1f3de4cd916 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 3 Apr 2024 20:37:11 -0400 Subject: [PATCH 139/171] graph specific query param handling --- packages/graph/graphqueryable.ts | 30 +++++++++++++++++++++++++- packages/queryable/queryable.ts | 36 +++++++++++++++++++++++++++++--- packages/sp/spqueryable.ts | 2 +- 3 files changed, 63 insertions(+), 5 deletions(-) diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index 8b9599a1e..1ced2e96a 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -1,5 +1,5 @@ import { isArray, objectDefinedNotNull } from "@pnp/core"; -import { IInvokable, Queryable, queryableFactory, op, get, post, patch, del, put } from "@pnp/queryable"; +import { IInvokable, QueryParams, Queryable, queryableFactory, op, get, post, patch, del, put } from "@pnp/queryable"; import { ConsistencyLevel } from "./behaviors/consistency-level.js"; import { IPagedResult, Paged } from "./behaviors/paged.js"; @@ -34,6 +34,9 @@ export class _GraphQueryable extends Queryable { super(base, path); + // we need to use the graph implementation to handle our special encoding + this._query = new GraphQueryParams(); + if (typeof base === "string") { this.parentUrl = base; @@ -239,3 +242,28 @@ export const graphPatch = (o: IGraphQueryable, init?: RequestInit) export const graphPut = (o: IGraphQueryable, init?: RequestInit): Promise => { return op(o, put, init); }; + +class GraphQueryParams extends Map { + + public toString(): string { + + const params = new URLSearchParams(); + const literals: string[] = []; + + for (const item of this) { + + // and here is where we add some "enhanced" parsing as we get issues. + if (/\/any\(.*?\)/i.test(item[1])) { + literals.push(`${item[0]}=${item[1]}`); + } else { + params.append(item[0], item[1]); + } + } + + if (params.size > 0) { + literals.push(params.toString()); + } + + return literals.join("&"); + } +} diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index 276bdb3ab..4e933fb51 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -28,12 +28,41 @@ const DefaultMoments = { export type QueryableInit = Queryable | string | [Queryable, string]; +export type QueryParams = { + + // new(init?: string[][] | Record | string | QueryParams): QueryParams; + + /** + * Sets the value associated to a given search parameter to the given value. If there were several values, delete the others. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/set) + */ + set(name: string, value: string): void; + + /** + * Returns the first value associated to the given search parameter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/get) + */ + get(name: string): string | null; + + /** + * Returns a Boolean indicating if such a search parameter exists. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/has) + */ + has(name: string, value?: string): boolean; + + /** Returns a string containing a query string suitable for use in a URL. Does not include the question mark. */ + toString(): string; +}; + @invokable() // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export class Queryable extends Timeline implements IQueryableInternal { // tracks any query parameters which will be appended to the request url - private _query: URLSearchParams; + protected _query: QueryParams; // tracks the current url for a given Queryable protected _url: string; @@ -49,6 +78,7 @@ export class Queryable extends Timeline implements IQu super(DefaultMoments); + // default to use the included URL search params to parse the query string this._query = new URLSearchParams(); // add an internal moment with specific implementation for promise creation @@ -114,7 +144,7 @@ export class Queryable extends Timeline implements IQu /** * Querystring key, value pairs which will be included in the request */ - public get query(): URLSearchParams { + public get query(): QueryParams { return this._query; } @@ -230,7 +260,7 @@ export interface Queryable extends IInvokable { } // this interface is required to stop the class from recursively referencing itself through the DefaultBehaviors type export interface IQueryableInternal extends Timeline, IInvokable { - readonly query: URLSearchParams; + readonly query: QueryParams; // new(...params: any[]); (this: IQueryableInternal, init?: RequestInit): Promise; using(...behaviors: TimelinePipe[]): this; diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index eff41c793..3e864c1d8 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -92,7 +92,7 @@ export class _SPQueryable extends Queryable { */ public toRequestUrl(): string { - const aliasedParams = new URLSearchParams(this.query); + const aliasedParams = new URLSearchParams(this.query); // this regex is designed to locate aliased parameters within url paths. These may have the form: // /something(!@p1::value) From 24351016edf513aec4c48d54200b09105cbf427f Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Wed, 3 Apr 2024 20:44:10 -0400 Subject: [PATCH 140/171] build error: --- package-lock.json | 6 +++--- packages/graph/graphqueryable.ts | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef882f70e..5553ac5e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2876,9 +2876,9 @@ } }, "node_modules/express": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.1.tgz", - "integrity": "sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index 1ced2e96a..f2d226913 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -1,5 +1,5 @@ import { isArray, objectDefinedNotNull } from "@pnp/core"; -import { IInvokable, QueryParams, Queryable, queryableFactory, op, get, post, patch, del, put } from "@pnp/queryable"; +import { IInvokable, Queryable, queryableFactory, op, get, post, patch, del, put } from "@pnp/queryable"; import { ConsistencyLevel } from "./behaviors/consistency-level.js"; import { IPagedResult, Paged } from "./behaviors/paged.js"; @@ -260,9 +260,7 @@ class GraphQueryParams extends Map { } } - if (params.size > 0) { - literals.push(params.toString()); - } + literals.push(params.toString()); return literals.join("&"); } From a74e0713fd0e650661bb23fc1b4c57937c6d040b Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 4 Apr 2024 10:19:12 -0400 Subject: [PATCH 141/171] adding tests for graph query params --- packages/graph/graphqueryable.ts | 9 ------- test/graph/query-params.ts | 44 ++++++++++++++++++++++++++++++++ test/mocha-root-hooks.ts | 2 +- 3 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 test/graph/query-params.ts diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index f2d226913..324640e83 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -165,15 +165,6 @@ export class _GraphCollection extends _GraphQueryable return this; } - /** - * Retrieves the total count of matching resources - * If the resource doesn't support count, this value will always be zero - */ - public async count(): Promise { - // TODO::do we want to do this, or just attach count to the collections that support it? we could use a decorator for countable on the few collections that support count. - return -1; - } - public [Symbol.asyncIterator]() { const q = GraphCollection(this).using(Paged(), ConsistencyLevel()); diff --git a/test/graph/query-params.ts b/test/graph/query-params.ts new file mode 100644 index 000000000..1c2b0e824 --- /dev/null +++ b/test/graph/query-params.ts @@ -0,0 +1,44 @@ +import { expect } from "chai"; +import { pnpTest } from "../pnp-test.js"; +import "@pnp/graph/groups"; +import "@pnp/graph/users"; +import { ConsistencyLevel } from "@pnp/graph/index.js"; + +describe("Graph Query Params", function () { + + before(async function () { + + if ((!this.pnp.settings.enableWebTests)) { + this.skip(); + } + }); + + it("groupTypes/any(c:c eq 'Unified')", pnpTest("158a6aa2-3d0e-4435-88e0-11a146db133e", async function () { + + return expect(this.pnp.graph.groups.filter("groupTypes/any(c:c eq 'Unified')")()).to.eventually.be.fulfilled; + })); + + it("NOT groupTypes/any(c:c eq 'Unified')", pnpTest("b26626fc-d5ee-4a46-afc1-1ae210d1a739", async function () { + + const query = this.pnp.graph.groups.using(ConsistencyLevel()).filter("NOT groupTypes/any(c:c eq 'Unified')"); + query.query.set("$count", "true"); + + return expect(query()).to.eventually.be.fulfilled; + })); + + it("companyName ne null and NOT(companyName eq 'Microsoft')", pnpTest("bbca7a4d-6fce-4c1b-904f-e295919ea25e", async function () { + + const query = this.pnp.graph.users.using(ConsistencyLevel()).filter("companyName ne null and NOT(companyName eq 'Microsoft')"); + query.query.set("$count", "true"); + + return expect(query()).to.eventually.be.fulfilled; + })); + + it("not(assignedLicenses/$count eq 0)", pnpTest("1b25afc7-771e-43be-a549-a6b2c326072b", async function () { + + const query = this.pnp.graph.users.using(ConsistencyLevel()).filter("not(assignedLicenses/$count eq 0)"); + query.query.set("$count", "true"); + + return expect(query()).to.eventually.be.fulfilled; + })); +}); diff --git a/test/mocha-root-hooks.ts b/test/mocha-root-hooks.ts index c7620536a..ba09f8ef4 100644 --- a/test/mocha-root-hooks.ts +++ b/test/mocha-root-hooks.ts @@ -70,7 +70,7 @@ export const mochaHooks = { }, }; - if (this.pnp.args.logging > LogLevel.Off) { + if (this.pnp.args.logging < LogLevel.Off) { // add a listener for logging if we are enabled at any level Logger.subscribe(ConsoleListener()); } From 5bd722756cac7ddb3c34d4137f73751aca64108d Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 4 Apr 2024 10:22:11 -0400 Subject: [PATCH 142/171] fixing test bug --- test/graph/paging.ts | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/test/graph/paging.ts b/test/graph/paging.ts index 49b3b601b..c9696b783 100644 --- a/test/graph/paging.ts +++ b/test/graph/paging.ts @@ -37,37 +37,24 @@ describe("Groups", function () { it("pages all users", async function () { - const count = await this.pnp.graph.users.count(); - const allUsers = []; for await (const users of this.pnp.graph.users.top(20).select("displayName")) { allUsers.push(...users); } - expect(allUsers.length).to.eq(count); + expect(allUsers.length).to.be.greaterThan(0); }); it("pages groups", async function () { - const count = await this.pnp.graph.groups.count(); - - expect(count).is.gt(0); - const allGroups = []; for await (const groups of this.pnp.graph.groups.top(20).select("displayName")) { allGroups.push(...groups); } - expect(allGroups.length).to.eq(count); - }); - - it("groups count", async function () { - - const count = await this.pnp.graph.groups.count(); - - expect(count).to.be.gt(0); + expect(allGroups.length).to.be.greaterThan(0); }); it("pages items", async function () { @@ -80,12 +67,4 @@ describe("Groups", function () { expect(allItems.length).to.be.gt(0); }); - - it("items count", async function () { - - const count = await itemsCol.count(); - - // items doesn't support count, should be zero - expect(count).to.eq(-1); - }); }); From 580230266783df2b4552bc4f57843a3043a2fe16 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Fri, 5 Apr 2024 08:22:13 -0400 Subject: [PATCH 143/171] code cleanup for v4 --- CHANGELOG.md | 3 +++ packages/core/moments.ts | 4 ++-- packages/core/timeline.ts | 5 +++++ packages/queryable/queryable.ts | 36 +++++---------------------------- packages/sp/spqueryable.ts | 30 ++------------------------- 5 files changed, 17 insertions(+), 61 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2acf5224b..128faff86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - removed /items/get-all import, unneeded, use async iterator patterns - ./operations.ts methods moved to ./spqueryable.ts - startUpload, continueUpload, finishUpload File protected methods removed + - removed legacy support for @target query param - nodejs - removed stream extensions, moved into sp @@ -49,6 +50,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - queryable - moved add-props.ts and request-builders.ts to index.ts + - Changed interface for `query` property - graph - IGraphQueryableCollection now supports async iterator pattern @@ -58,6 +60,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - ISites.getByUrl is now async - @pnp/graph/outlook is not in @pnp/graph/mail, included all mail endpoints - mailCategory.add() returns Microsoft Graph types OutlookCategory vs object with data property. + - Changed how query params are parsed to custom logic - sp - _Items and IItems now supports async iterator pattern diff --git a/packages/core/moments.ts b/packages/core/moments.ts index 05ddc442b..7aede8879 100644 --- a/packages/core/moments.ts +++ b/packages/core/moments.ts @@ -1,4 +1,4 @@ -import { ObserverAction, ObserverFunction, Timeline } from "./timeline.js"; +import { ObserverAction, ObserverFunction, ObserverSyncFunction, Timeline } from "./timeline.js"; import { isArray } from "./util.js"; /** @@ -49,7 +49,7 @@ export function asyncBroadcast>(): (observers: * * @returns The final set of arguments */ -export function reduce]>>(): (observers: T[], ...args: [...Parameters]) => [...Parameters] { +export function reduce]>>(): (observers: T[], ...args: [...Parameters]) => [...Parameters] { return function (this: Timeline, observers: T[], ...args: [...Parameters]): [...Parameters] { diff --git a/packages/core/timeline.ts b/packages/core/timeline.ts index 032c7a7e1..557d1c96e 100644 --- a/packages/core/timeline.ts +++ b/packages/core/timeline.ts @@ -6,6 +6,11 @@ import { objectDefinedNotNull, isArray, isFunc } from "./util.js"; */ export type ObserverAction = (this: Timeline, ...args: any[]) => void; +/** + * Represents an observer with side effects within the timeline + */ +export type ObserverSyncFunction = (this: Timeline, ...args: any[]) => R; + /** * Represents an observer with side effects within the timeline */ diff --git a/packages/queryable/queryable.ts b/packages/queryable/queryable.ts index 4e933fb51..afe87e4e0 100644 --- a/packages/queryable/queryable.ts +++ b/packages/queryable/queryable.ts @@ -14,7 +14,7 @@ export type QueryablePostObserver = (this: IQueryableInternal, url: URL, result: export type QueryableDataObserver = (this: IQueryableInternal, result: T) => void; -type QueryablePromiseObserver = (this: IQueryableInternal, promise: Promise) => Promise<[Promise]>; +type QueryablePromiseObserver = (this: IQueryableInternal, promise: Promise) => [Promise]; const DefaultMoments = { construct: lifecycle(), @@ -29,9 +29,6 @@ const DefaultMoments = { export type QueryableInit = Queryable | string | [Queryable, string]; export type QueryParams = { - - // new(init?: string[][] | Record | string | QueryParams): QueryParams; - /** * Sets the value associated to a given search parameter to the given value. If there were several values, delete the others. * @@ -234,20 +231,15 @@ export class Queryable extends Timeline implements IQu }, 0); - // this is the promise that the calling code will recieve and await - let promise = new Promise((resolve, reject) => { + // this allows us to internally hook the promise creation and modify it. This was introduced to allow for + // cancelable to work as envisioned, but may have other users. Meant for internal use in the library accessed via behaviors. + return this.emit[this.InternalPromise](new Promise((resolve, reject) => { // we overwrite any pre-existing internal events as a // given queryable only processes a single request at a time this.on[this.InternalResolve].replace(resolve); this.on[this.InternalReject].replace(reject); - }); - - // this allows us to internally hook the promise creation and modify it. This was introduced to allow for - // cancelable to work as envisioned, but may have other users. Meant for internal use in the library accessed via behaviors. - [promise] = this.emit[this.InternalPromise](promise); - - return promise; + }))[0]; } } @@ -317,24 +309,6 @@ export function queryableFactory( }; } -// // extends IQueryableInternal -// export function queryableFactory2(constructor: InstanceType): -// (...args: ConstructorParameters) => InstanceType & IInvokable { - -// return (...args: ConstructorParameters) => { - -// // construct the concrete instance -// const instance: InstanceType = new constructor(...args); - -// // we emit the construct event from the factory because we need all of the decorators and constructors -// // to have fully finished before we emit, which is now true. We type the instance to any to get around -// // the protected nature of emit -// (instance).emit.construct(...args); - -// return instance; -// }; -// } - /** * Allows a decorated object to be invoked as a function, optionally providing an implementation for that action * diff --git a/packages/sp/spqueryable.ts b/packages/sp/spqueryable.ts index 3e864c1d8..7c8cc0a97 100644 --- a/packages/sp/spqueryable.ts +++ b/packages/sp/spqueryable.ts @@ -1,4 +1,4 @@ -import { combine, isUrlAbsolute, isArray, objectDefinedNotNull, stringIsNullOrEmpty } from "@pnp/core"; +import { combine, isUrlAbsolute, isArray, stringIsNullOrEmpty } from "@pnp/core"; import { Queryable, queryableFactory, op, get, post, patch, del, IInvokable } from "@pnp/queryable"; export type SPInit = string | ISPQueryable | [ISPQueryable, string]; @@ -13,20 +13,6 @@ export const spInvokableFactory = (f: any): ISPInvokable return queryableFactory(f); }; - - -// export type ISPInvokableFactory2 = (...args: any[]) => R & IInvokable; - -// export const spInvokableFactory2 = , T extends ISPQueryable>(f: T): ISPInvokableFactory2 => { - - - - - -// return queryableFactory2(f); -// }; - - /** * SharePointQueryable Base Class * @@ -79,11 +65,6 @@ export class _SPQueryable extends Queryable { const q: Queryable = isArray(base) ? base[0] : base; this.parentUrl = isArray(base) ? base[1] : q.toUrl(); - - const target = q.query.get("@target"); - if (objectDefinedNotNull(target)) { - this.query.set("@target", target); - } } } @@ -149,14 +130,7 @@ export class _SPQueryable extends Queryable { path?: string, base: string = this.parentUrl): T { - const parent = factory([this, base], path); - - const t = "@target"; - if (this.query.has(t)) { - parent.query.set(t, this.query.get(t)); - } - - return parent; + return factory([this, base], path); } } export interface ISPQueryable extends _SPQueryable { } From 3b9c8f86f8a924cfeaa9481e70d66cdddb81c894 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 8 Apr 2024 10:19:27 -0400 Subject: [PATCH 144/171] removing favorites from sp --- CHANGELOG.md | 1 + docs/sp/favorites.md | 91 ---------------- mkdocs.yml | 1 - packages/sp/favorites/index.ts | 32 ------ packages/sp/favorites/types.ts | 186 --------------------------------- packages/sp/presets/all.ts | 2 - test/sp/favorites.ts | 2 - 7 files changed, 1 insertion(+), 314 deletions(-) delete mode 100644 docs/sp/favorites.md delete mode 100644 packages/sp/favorites/index.ts delete mode 100644 packages/sp/favorites/types.ts delete mode 100644 test/sp/favorites.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 128faff86..ebf4c0d66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - ./operations.ts methods moved to ./spqueryable.ts - startUpload, continueUpload, finishUpload File protected methods removed - removed legacy support for @target query param + - removed "favorites", please use graph favorites - nodejs - removed stream extensions, moved into sp diff --git a/docs/sp/favorites.md b/docs/sp/favorites.md deleted file mode 100644 index c1c4ba55d..000000000 --- a/docs/sp/favorites.md +++ /dev/null @@ -1,91 +0,0 @@ -# @pnp/sp/ - favorites - -[![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) - -The favorites API allows you to fetch and manipulate followed sites and list items (also called _saved for later_). Note, all of these methods only work with the context of a logged in user, and not with app-only permissions. - -## Get current user's followed sites - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/favorites"; - -const sp = spfi(...); - -const favSites = await sp.favorites.getFollowedSites(); -``` - -## Add a site to current user's followed sites - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/favorites"; - -const sp = spfi(...); - -const tenantUrl = "contoso.sharepoint.com"; -const siteId = "e3913de9-bfee-4089-b1bc-fb147d302f11"; -const webId = "11a53c2b-0a67-46c8-8599-db50b8bc4dd1" -const webUrl = "https://contoso.sharepoint.com/sites/favsite" - -const favSiteInfo = await sp.favorites.getFollowedSites.add(tenantUrl, siteId, webId, webUrl); -``` - -## Remove a site from current user's followed sites - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/favorites"; - -const sp = spfi(...); - -const tenantUrl = "contoso.sharepoint.com"; -const siteId = "e3913de9-bfee-4089-b1bc-fb147d302f11"; -const webId = "11a53c2b-0a67-46c8-8599-db50b8bc4dd1" -const webUrl = "https://contoso.sharepoint.com/sites/favsite" - -await sp.favorites.getFollowedSites.remove(tenantUrl, siteId, webId, webUrl); -``` - -## Get current user's followed list items - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/favorites"; - -const sp = spfi(...); - -const favListItems = await sp.favorites.getFollowedListItems(); -``` - -## Add an item to current user's followed list items - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/favorites"; - -const sp = spfi(...); - -const siteId = "e3913de9-bfee-4089-b1bc-fb147d302f11"; -const webId = "11a53c2b-0a67-46c8-8599-db50b8bc4dd1"; -const listId = "f09fe67e-0160-4fcc-9144-905bd4889f31"; -const listItemUniqueId = "1425C841-626A-44C9-8731-DA8BDC0882D1"; - -const favListItemInfo = await sp.favorites.getFollowedListItems.add(siteId, webId, listId, listItemUniqueId); -``` - -## Remove an item from current user's followed list items - -```TypeScript -import { spfi } from "@pnp/sp"; -import "@pnp/sp/favorites"; - -const sp = spfi(...); - -const siteId = "e3913de9-bfee-4089-b1bc-fb147d302f11"; -const webId = "11a53c2b-0a67-46c8-8599-db50b8bc4dd1"; -const listId = "f09fe67e-0160-4fcc-9144-905bd4889f31"; -const listItemUniqueId = "1425C841-626A-44C9-8731-DA8BDC0882D1"; - -const favListItemInfo = await sp.favorites.getFollowedListItems.remove(siteId, webId, listId, listItemUniqueId); -``` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 67db74852..c9af784e8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -98,7 +98,6 @@ nav: - 'comments and likes': 'sp/comments-likes.md' - 'content types': 'sp/content-types.md' - 'context info': 'sp/context-info.md' - - Favorites: 'sp/favorites.md' - Features: 'sp/features.md' - Fields: 'sp/fields.md' - Files: 'sp/files.md' diff --git a/packages/sp/favorites/index.ts b/packages/sp/favorites/index.ts deleted file mode 100644 index 9340e0c61..000000000 --- a/packages/sp/favorites/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { SPFI } from "../fi.js"; -import { Favorites, IFavorites} from "./types.js"; - -export { - IFavorites, - Favorites, - IFollowedSites, - IFollowedSiteInfo, - IFollowedExchangeId, - IFollowedListItems, - IFollowedListItemInfo, - IFavoritesResourceVisualization, - IFavoritesUser, -} from "./types.js"; - - -declare module "../fi" { - interface SPFI { - /** - * Access to the favorites instance which allows you to track followed sites and items. - */ - readonly favorites: IFavorites; - } -} - -Reflect.defineProperty(SPFI.prototype, "favorites", { - configurable: true, - enumerable: true, - get: function (this: SPFI) { - return this.create(Favorites); - }, -}); diff --git a/packages/sp/favorites/types.ts b/packages/sp/favorites/types.ts deleted file mode 100644 index b8e21106e..000000000 --- a/packages/sp/favorites/types.ts +++ /dev/null @@ -1,186 +0,0 @@ -import { defaultPath } from "../decorators.js"; -import { _SPInstance, spInvokableFactory, _SPCollection, SPInit, spPost } from "../spqueryable.js"; -import { hOP } from "@pnp/core"; -import { body } from "@pnp/queryable"; -import { SharepointIds, ResourceVisualization } from "@microsoft/microsoft-graph-types"; - -@defaultPath("_api/v2.1/favorites") -export class _Favorites extends _SPInstance implements IFavorites { - public get followedSites(): IFollowedSites { - return FollowedSites(this); - } - - public get followedListItems(): IFollowedListItems { - return FollowedListItems(this); - } -} - -export const Favorites = (baseUrl: SPInit): IFavorites => new _Favorites(baseUrl); - -@defaultPath("followedSites") -export class _FollowedSites extends _SPCollection { - /** - * Adds a site to user's followed sites - * - * @param tenantUrl Name of a tenant (e.g. yourtenant.sharepoint.com). - * @param siteId Id of a site collection. - * @param webId Id of a site. - * @param webUrl Absolute URL of a site. - */ - public async add(tenantUrl: string, siteId: string, webId: string, webUrl: string): Promise { - const data = await spPost(FollowedListItems(this, "oneDrive.add"), body( - { - value: [ - { - id: [tenantUrl,webId,siteId].join(","), - webUrl: webUrl, - }, - ], - } - )); - return hOP(data, "value") ? data.value : data; - } - - /** - * Removes a site from user's followed sites - * - * @param tenantUrl Name of a tenant (e.g. yourtenant.sharepoint.com). - * @param siteId Id of a site collection. - * @param webId Id of a site. - * @param webUrl Absolute URL of a site. - */ - public async remove(tenantUrl: string, siteId: string, webId: string, webUrl: string): Promise { - - await spPost(FollowedListItems(this, "oneDrive.remove"), body( - { - value: [ - { - id: [tenantUrl,webId,siteId].join(","), - webUrl: webUrl, - }, - ], - } - )); - } -} - -export interface IFollowedSites extends _FollowedSites { } -export const FollowedSites = spInvokableFactory(_FollowedSites); - -@defaultPath("followedListItems") -export class _FollowedListItems extends _SPCollection { - /** - * Adds an item to user's _saved for later_ list - * - * @param siteId Id of a site collection of an item to add - * @param webId Id of a site of an item to add - * @param listId Id of a list of an item to add - * @param listItemUniqueId Unique id of an item to add - */ - public async add(siteId: string, webId: string, listId: string, listItemUniqueId: string): Promise { - const data = await spPost(FollowedListItems(this, "oneDrive.add"), body( - { - value: [ - { - siteId: siteId, - webId: webId, - listId: listId, - listItemUniqueId: listItemUniqueId, - }, - ], - } - )); - return hOP(data, "value") ? data.value : data; - } - - /** - * Removes an item from user's _saved for later_ list - * - * @param siteId Id of a site collection of an item to remove - * @param webId Id of a site of an item to remove - * @param listId Id of a list of an item to remove - * @param listItemUniqueId Unique id of an item to remove - */ - public async remove(siteId: string, webId: string, listId: string, listItemUniqueId: string): Promise { - await spPost(FollowedListItems(this, "oneDrive.remove"), body( - { - value: [ - { - siteId: siteId, - webId: webId, - listId: listId, - listItemUniqueId: listItemUniqueId, - }, - ], - } - )); - } -} - -export interface IFollowedListItems extends _FollowedListItems { } -export const FollowedListItems = spInvokableFactory(_FollowedListItems); - -export interface IFavorites { - readonly followedSites: IFollowedSites; - readonly followedListItems: IFollowedListItems; -} - -export interface IFollowedSiteInfo { - id: string; - webUrl: string; - title: string; - sharepointIds: SharepointIds; - siteCollection: { - hostName: string; - }; - template: any; - exchangeIds: IFollowedExchangeId; - resourceVisualization: { - color: string; - }; -} - -export interface IFollowedListItemInfo { - description: string; - id: string; - lastModifiedDateTime: string; - name: string; - size: number; - webUrl: string; - serverRedirectedUrl: string; - contentClass: string; - lastModifiedBy: { - user: IFavoritesUser; - }; - sharepointIds: SharepointIds; - contentType: { - id: string; - }; - resourceVisualization: IFavoritesResourceVisualization; - exchangeIds: IFollowedExchangeId; - followed: { - followedDateTime: string; - }; - file: { - fileExtension: string; - }; - news: { - publishedDateTime: string; - newsType: string; - author: IFavoritesUser; - }; -} - -export interface IFavoritesResourceVisualization extends ResourceVisualization { - color: string; -} - -export interface IFollowedExchangeId { - id: string; - documentId: string; -} - -export interface IFavoritesUser { - displayName: string; - userPrincipalName: string; -} diff --git a/packages/sp/presets/all.ts b/packages/sp/presets/all.ts index c1fb87c74..011602395 100644 --- a/packages/sp/presets/all.ts +++ b/packages/sp/presets/all.ts @@ -4,7 +4,6 @@ import "../clientside-pages/index.js"; import "../column-defaults/index.js"; import "../comments/index.js"; import "../content-types/index.js"; -import "../favorites/index.js"; import "../features/index.js"; import "../fields/index.js"; import "../files/index.js"; @@ -40,7 +39,6 @@ export * from "../clientside-pages/index.js"; export * from "../column-defaults/index.js"; export * from "../comments/index.js"; export * from "../content-types/index.js"; -export * from "../favorites/index.js"; export * from "../features/index.js"; export * from "../fields/index.js"; export * from "../files/index.js"; diff --git a/test/sp/favorites.ts b/test/sp/favorites.ts deleted file mode 100644 index ac5ef5031..000000000 --- a/test/sp/favorites.ts +++ /dev/null @@ -1,2 +0,0 @@ -// we cannot test favorites as they rely on a current user and an app doesn't work -describe("Favorites", () => void(0)); From 53a25846dd5f1eadadb3c69fad8cec100b09acc0 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 8 Apr 2024 14:13:22 -0500 Subject: [PATCH 145/171] WIP for member updates --- docs/graph/groups.md | 17 ++--------- docs/graph/members.md | 50 ++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + packages/graph/members/groups.ts | 2 +- 4 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 docs/graph/members.md diff --git a/docs/graph/groups.md b/docs/graph/groups.md index c4391027e..dc7e3c4a7 100644 --- a/docs/graph/groups.md +++ b/docs/graph/groups.md @@ -132,20 +132,6 @@ const endDate = new Date("2020-03-01"); const events = graph.groups.getById("7d2b9355-0891-47d3-84c8-bf2cd9c62177").getCalendarView(startDate, endDate); ``` -## Group Membership - -Get the members and/or owners of a group. - -```TypeScript -import { graphfi } from "@pnp/graph"; -import "@pnp/graph/groups"; -import "@pnp/graph/members"; - -const graph = graphfi(...); -const members = await graph.groups.getById("7d2b9355-0891-47d3-84c8-bf2cd9c62177").members(); -const owners = await graph.groups.getById("7d2b9355-0891-47d3-84c8-bf2cd9c62177").owners(); -``` - ## Get the Team Site for a Group ```TypeScript @@ -158,6 +144,9 @@ const graph = graphfi(...); const teamSite = await graph.groups.getById("7d2b9355-0891-47d3-84c8-bf2cd9c62177").sites.root(); const url = teamSite.webUrl ``` +## Group Membership (Members and Owners) + +See [Members](./members.md) ## Group Photo Operations diff --git a/docs/graph/members.md b/docs/graph/members.md new file mode 100644 index 000000000..f3c16bb65 --- /dev/null +++ b/docs/graph/members.md @@ -0,0 +1,50 @@ +# @pnp/graph/members + +Members are collections of users and other principals. Other API objects have membership so all membership functionality is encapsulated in one import. + +## IMember, IMembers + +[![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) + +## List Group Members/Owners + +Get the members and/or owners of a group. + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/members"; + +const graph = graphfi(...); +const members = await graph.groups.getById({groupId}).members(); +const owners = await graph.groups.getById({groupId}).owners(); +``` + +## Add Member/Owner + +Add a member/owner to an group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/members"; + +const graph = graphfi(...); +const members = await graph.groups.getById({groupId}).members.add({directoryObjectId}). +const owners = await graph.groups.getById({groupId}).owners.add({directoryObjectId}); +``` + +## Remove Member/Owner + +Remove a member/owner to an group + +```TypeScript +import { graphfi } from "@pnp/graph"; +import "@pnp/graph/groups"; +import "@pnp/graph/members"; + +const graph = graphfi(...); +const members = await graph.groups.getById({groupId}).members.getById({directoryObjectId}).remove(). +const owners = await graph.groups.getById({groupId}).owners.getById({directoryObjectId}).remove(); +``` + diff --git a/mkdocs.yml b/mkdocs.yml index 67db74852..8cf191df4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -63,6 +63,7 @@ nav: - 'mailbox': 'graph/mail-mailbox.md' - 'messages': 'graph/mail-messages.md' - 'rules': 'graph/mail-rules.md' + - members: 'graph/members.md' - outlook: 'graph/outlook.md' - operations: 'graph/operations.md' - permissions: 'graph/permissions.md' diff --git a/packages/graph/members/groups.ts b/packages/graph/members/groups.ts index cce0e13ec..2b9ec0a56 100644 --- a/packages/graph/members/groups.ts +++ b/packages/graph/members/groups.ts @@ -13,5 +13,5 @@ declare module "../groups/types" { } } -addProp(_Group, "owners", Members); +addProp(_Group, "owners", Members, "owners"); addProp(_Group, "members", Members); From ca3937adfe804ac03e67298d1b54232eb2069222 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 11 Apr 2024 14:13:30 -0400 Subject: [PATCH 146/171] code cleanup, changelog updates --- CHANGELOG.md | 29 +++- packages/core/extendable.ts | 218 -------------------------- packages/core/timeline.ts | 25 +-- packages/logging/index.js | 11 -- packages/logging/index.ts | 2 +- packages/sp/clientside-pages/types.ts | 2 +- packages/sp/fields/types.ts | 6 +- packages/sp/profiles/types.ts | 2 +- packages/sp/site-designs/types.ts | 6 +- packages/sp/sites/types.ts | 4 +- packages/sp/social/types.ts | 8 +- packages/sp/types.ts | 4 +- tsconfig.json | 2 +- 13 files changed, 60 insertions(+), 259 deletions(-) delete mode 100644 packages/core/extendable.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index ebf4c0d66..d29e15e29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,20 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - ISite now supports `async rebase()` to ensure any ISite is represented by the url pattern /sites/{site id} regardless of how it was first loaded - ISites.getAllSites() - support for operations for ISite and IList + - support for file labels + - support for mail folders, mailbox, rules - completed support for Files + - admin module + - analytics module + - appCatalog module + - compliance module + - list-item module + - mail module + - operations module + - permissions module + - places module + - taxonomy module + - to-do module - sp - explict error thrown if SPFx context is null or undefined when needed @@ -40,15 +53,26 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - startUpload, continueUpload, finishUpload File protected methods removed - removed legacy support for @target query param - removed "favorites", please use graph favorites + - taxonomy module, please use graph taxonomy - nodejs - removed stream extensions, moved into sp ### Changed +- tsconfig.json + - set preserveConstEnums: false + +- buildsystem + - Rewritten using Timeline + - Updated to v4 + - testing - SPA application now has a button to trigger the code vs running on page load +- msaljsclient + - updated to use @azure/msal-browser v3 + - queryable - moved add-props.ts and request-builders.ts to index.ts - Changed interface for `query` property @@ -59,9 +83,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - All GraphQueryable*, _GraphQueryable*, and IGraphQueryable* have been renamed to remove "Queryable" (ex: GraphQueryableCollection is now GraphCollection) - @pnp/graph/onedrive renamed to @pnp/graph/files - ISites.getByUrl is now async - - @pnp/graph/outlook is not in @pnp/graph/mail, included all mail endpoints + - @pnp/graph/outlook is now in @pnp/graph/mail, included all mail endpoints - mailCategory.add() returns Microsoft Graph types OutlookCategory vs object with data property. - Changed how query params are parsed to custom logic + - Improvements to shared module + - Greatly expanded what is supported through teams module + - sp - _Items and IItems now supports async iterator pattern diff --git a/packages/core/extendable.ts b/packages/core/extendable.ts deleted file mode 100644 index e04b8fd0d..000000000 --- a/packages/core/extendable.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { getGUID, isArray, isFunc } from "./util.js"; - -export type ValidProxyMethods = "apply" | "get" | "has" | "set"; - -export type ExtensionDelegateType> = { (op: string, target: T, ...rest: any[]): void }; - -// eslint-disable-next-line @typescript-eslint/ban-types -export type ExtensionType = {}> = Pick, ValidProxyMethods> | ExtensionDelegateType | Record; - -let _enableExtensions = false; - -const ObjExtensionsSym = Symbol.for("PnPExt"); - -const factoryExtensions: Map = new Map(); - -/** - * Option 1 - * - * just use it on individual objects, consumers make their own factory functions - * extend(object: any, extensions: ExtensionType) - * - * Option 2 - * - * maintain some support for extending factories - but how are these applied later? - * that pattern needs to change - * - * Option 3 - * - * leave it as a decorator, consumers subclass and tag (I don't like this) - * - * Option 4 - * - * Ask the community if anyone cares. If not, punt them fully (kinda lame) - * - */ - - - - - - -/** - * Decorator factory wrapping any tagged class in the extension proxy, enabling the use of object extensions - * - * - * @returns Decorator implementation - */ -export function extendable() { - - return (target: any) => { - - return new Proxy(target, { - - construct(clz, args, newTarget: any) { - - let r: object = Reflect.construct(clz, args, newTarget); - - // this block handles the factory function extensions by picking - // them off the factory and applying them to the created object - const proto: any = Reflect.getPrototypeOf(target); - - if (Reflect.has(proto, ObjExtensionsSym)) { - - const extensions = factoryExtensions.get(Reflect.get(proto, ObjExtensionsSym)); - - if (extensions) { - r = extend(r, extensions); - } - } - - const proxied = new Proxy(r, { - apply: (target: any, _thisArg: any, argArray?: any) => { - // eslint-disable-next-line @typescript-eslint/ban-types - return extensionOrDefault("apply", (...a: [Function, any, ArrayLike]) => Reflect.apply(...a), target, proxied, argArray); - }, - get: (target: any, p: PropertyKey, receiver: any) => { - // eslint-disable-next-line @typescript-eslint/ban-types - return extensionOrDefault("get", (...a: [Object, PropertyKey, any]) => Reflect.get(...a), target, p, receiver); - }, - has: (target: any, p: PropertyKey) => { - // eslint-disable-next-line @typescript-eslint/ban-types - return extensionOrDefault("has", (...a: [object, PropertyKey]) => Reflect.has(...a), target, p); - }, - set: (target: any, p: PropertyKey, value: any, receiver: any) => { - // eslint-disable-next-line @typescript-eslint/ban-types - return extensionOrDefault("set", (...a: [object, PropertyKey, any, any]) => Reflect.set(...a), target, p, value, receiver); - }, - }); - - return proxied; - }, - }); - }; -} - -/** - * Applies the supplied extensions to a single instance - * - * @param target Object to which extensions are applied - * @param extensions Extensions to apply - */ -export function extend(target: T, extensions: ExtensionType | ExtensionType[]): T { - - _enableExtensions = true; - - if (!Reflect.has(target, ObjExtensionsSym)) { - Reflect.defineProperty(target, ObjExtensionsSym, { - writable: true, - value: [], - }); - } - - extendCol(Reflect.get(target, ObjExtensionsSym), extensions); - - return target; -} - -/** - * Allows applying extensions to all instances created from the supplied factory - * - * @param factory The Invokable Factory method to extend - * @param extensions Extensions to apply - */ -export function extendFactory any>(factory: T, extensions: ExtensionType | ExtensionType[]): void { - - _enableExtensions = true; - - // factoryExtensions - const proto = Reflect.getPrototypeOf(factory); - - if (proto) { - if (!Reflect.has(proto, ObjExtensionsSym)) { - - Reflect.defineProperty(proto, ObjExtensionsSym, { - value: getGUID(), - }); - } - - const key = proto[ObjExtensionsSym]; - - if (!factoryExtensions.has(key)) { - factoryExtensions.set(key, []); - } - - extendCol(factoryExtensions.get(key), extensions); - } -} - -function extendCol(a: ExtensionType[], e: ExtensionType | ExtensionType[]) { - if (isArray(e)) { - a.push(...e); - } else { - a.push(e); - } -} - -/** - * Disables all extensions - */ -export const disableExtensions = () => { - _enableExtensions = false; -}; - -/** - * Enables all extensions - */ -export const enableExtensions = () => { - _enableExtensions = true; -}; - -/** - * Executes the extended functionality if present, or the default action - * - * @param op Current operation type - * @param or The default non-extended functionality - * @param target The current "this" to which the current call applies - * @param rest Any arguments required for the called method - * @returns Whatever the underlying extension or method returns - */ -function extensionOrDefault(op: ValidProxyMethods, or: (...args: any[]) => any, target: any, ...rest: any[]): any { - - if (_enableExtensions && Reflect.has(target, ObjExtensionsSym)) { - - const extensions: ExtensionType[] = [...Reflect.get(target, ObjExtensionsSym)]; - - let result = undefined; - - for (let i = 0; i < extensions.length; i++) { - - const extension = extensions[i]; - - if (isFunc(extension)) { - - // this extension is a function which we call - result = (extension)(op, target, ...rest); - - } else if (op === "get" && Reflect.has(extension, rest[0])) { - - // this extension is a named extension meaning we are adding/overriding a specific method/property - result = Reflect.get(extension, rest[0], target); - - } else if (Reflect.has(extension, op)) { - - // this extension is a ProxyHandler that has a handler defined for {op} so we pass control and see if we get a result - result = Reflect.get(extension, op)(target, ...rest); - } - - if (typeof result !== "undefined") { - // if a extension returned a result, we return that - // this means that this extension overrides any other extensions and no more are executed - // first extension in the list to return "wins" - return result; - } - } - } - - return or(target, ...rest); -} diff --git a/packages/core/timeline.ts b/packages/core/timeline.ts index 557d1c96e..48052bc83 100644 --- a/packages/core/timeline.ts +++ b/packages/core/timeline.ts @@ -124,6 +124,12 @@ export const noInherit = addFlag(ObserverLifecycleFlags.noInherit); */ export const once = addFlag(ObserverLifecycleFlags.once); +const enum ObserverAddBehavior { + Add = 1, + Prepend = 2, + Replace = 3, +} + /** * Timeline represents a set of operations executed in order of definition, * with each moment's behavior controlled by the implementing function @@ -170,7 +176,7 @@ export abstract class Timeline { get: (target: any, p: string) => Object.assign((handler: ValidObserver) => { target.cloneObserversOnChange(); - addObserver(target.observers, p, handler, "add"); + addObserver(target.observers, p, handler, ObserverAddBehavior.Add); return target; }, { @@ -180,13 +186,13 @@ export abstract class Timeline { replace: (handler: ValidObserver) => { target.cloneObserversOnChange(); - addObserver(target.observers, p, handler, "replace"); + addObserver(target.observers, p, handler, ObserverAddBehavior.Replace); return target; }, prepend: (handler: ValidObserver) => { target.cloneObserversOnChange(); - addObserver(target.observers, p, handler, "prepend"); + addObserver(target.observers, p, handler, ObserverAddBehavior.Prepend); return target; }, clear: (): boolean => { @@ -309,9 +315,7 @@ export abstract class Timeline { } catch (e) { // shouldn't happen, but possible dispose throws - which may be missed as the usercode await will have resolved. - const e2 = Object.assign(Error("Error in dispose."), { - innerException: e, - }); + const e2 = Object.assign(Error("Error in dispose."), { innerException: e }); this.error(e2); } @@ -349,7 +353,7 @@ export abstract class Timeline { * @param addBehavior Determines how the observer is added to the collection * */ -function addObserver(target: Record, moment: string, observer: ValidObserver, addBehavior: "add" | "replace" | "prepend"): any[] { +function addObserver(target: Record, moment: string, observer: ValidObserver, addBehavior: ObserverAddBehavior): any[] { if (!isFunc(observer)) { throw Error("Observers must be functions."); @@ -364,13 +368,13 @@ function addObserver(target: Record, moment: string, observer: Vali // if we have an existing property then we follow the specified behavior switch (addBehavior) { - case "add": + case ObserverAddBehavior.Add: target[moment].push(observer); break; - case "prepend": + case ObserverAddBehavior.Prepend: target[moment].unshift(observer); break; - case "replace": + case ObserverAddBehavior.Replace: target[moment].length = 0; target[moment].push(observer); break; @@ -384,7 +388,6 @@ export function cloneObserverCollection(source: ObserverCollection): ObserverCol return Reflect.ownKeys(source).reduce((clone: ObserverCollection, key: string) => { - // eslint-disable-next-line no-bitwise clone[key] = [...source[key].filter(byFlag(ObserverLifecycleFlags.noInherit))]; return clone; diff --git a/packages/logging/index.js b/packages/logging/index.js index 84c854091..8f6ab8e23 100644 --- a/packages/logging/index.js +++ b/packages/logging/index.js @@ -1,15 +1,4 @@ export * from "./listeners.js"; -/** - * A set of logging levels - */ -export var LogLevel; -(function (LogLevel) { - LogLevel[LogLevel["Verbose"] = 0] = "Verbose"; - LogLevel[LogLevel["Info"] = 1] = "Info"; - LogLevel[LogLevel["Warning"] = 2] = "Warning"; - LogLevel[LogLevel["Error"] = 3] = "Error"; - LogLevel[LogLevel["Off"] = 99] = "Off"; -})(LogLevel || (LogLevel = {})); const _subscribers = []; let _activeLogLevel = 2 /* Warning */; /** diff --git a/packages/logging/index.ts b/packages/logging/index.ts index a32a72512..97debdbbf 100644 --- a/packages/logging/index.ts +++ b/packages/logging/index.ts @@ -3,7 +3,7 @@ export * from "./listeners.js"; /** * A set of logging levels */ -export const enum LogLevel { +export enum LogLevel { Verbose = 0, Info = 1, Warning = 2, diff --git a/packages/sp/clientside-pages/types.ts b/packages/sp/clientside-pages/types.ts index e90613520..d5c045726 100644 --- a/packages/sp/clientside-pages/types.ts +++ b/packages/sp/clientside-pages/types.ts @@ -16,7 +16,7 @@ import { createBatch } from "../batching.js"; /** * Page promotion state */ -export const enum PromotedState { +export enum PromotedState { /** * Regular client side page */ diff --git a/packages/sp/fields/types.ts b/packages/sp/fields/types.ts index 596e97bc1..8a7f23e9e 100644 --- a/packages/sp/fields/types.ts +++ b/packages/sp/fields/types.ts @@ -442,7 +442,7 @@ export type AddMultiChoiceProps = { /** * Specifies the type of the field. */ -export const enum FieldTypes { +export enum FieldTypes { Invalid = 0, Integer = 1, Text = 2, @@ -519,7 +519,7 @@ export enum DateTimeFieldFriendlyFormatType { /** * Specifies the control settings while adding a field. */ -export const enum AddFieldOptions { +export enum AddFieldOptions { /** * Specify that a new field added to the list must also be added to the default content type in the site collection */ @@ -555,7 +555,7 @@ export interface IXmlSchemaFieldCreationInformation { SchemaXml: string; } -export const enum CalendarType { +export enum CalendarType { Gregorian = 1, Japan = 3, Taiwan = 4, diff --git a/packages/sp/profiles/types.ts b/packages/sp/profiles/types.ts index 4bc5461fb..5ff831d05 100644 --- a/packages/sp/profiles/types.ts +++ b/packages/sp/profiles/types.ts @@ -495,7 +495,7 @@ export interface IPeoplePickerEntityData { /** * Specifies the originating zone of a request received. */ -export const enum UrlZone { +export enum UrlZone { /** * Specifies the default zone used for requests unless another zone is specified. */ diff --git a/packages/sp/site-designs/types.ts b/packages/sp/site-designs/types.ts index 5b90d120a..ed6513815 100644 --- a/packages/sp/site-designs/types.ts +++ b/packages/sp/site-designs/types.ts @@ -296,7 +296,7 @@ export interface ISiteDesignUpdateInfo extends Partial Id: string; } -export const enum TemplateDesignType { +export enum TemplateDesignType { /// /// Represents the Site design type. /// @@ -307,7 +307,7 @@ export const enum TemplateDesignType { List = 1 } -export const enum ListDesignColor { +export enum ListDesignColor { DarkRed = 0, Red = 1, Orange = 2, @@ -322,7 +322,7 @@ export const enum ListDesignColor { Pink = 11 } -export const enum ListDesignIcon { +export enum ListDesignIcon { Bug = 0, Calendar = 1, BullseyeTarget = 2, diff --git a/packages/sp/sites/types.ts b/packages/sp/sites/types.ts index a1de6f33f..13d30a5b5 100644 --- a/packages/sp/sites/types.ts +++ b/packages/sp/sites/types.ts @@ -390,7 +390,7 @@ export interface ISiteInfo { WriteLocked: boolean; } -export const enum SiteLogoType { +export enum SiteLogoType { /** * Site header logo */ @@ -409,7 +409,7 @@ export const enum SiteLogoType { GlobalNavLogo = 3 } -export const enum SiteLogoAspect { +export enum SiteLogoAspect { Square = 0, Rectangular = 1, } diff --git a/packages/sp/social/types.ts b/packages/sp/social/types.ts index dd1e1501b..20779914f 100644 --- a/packages/sp/social/types.ts +++ b/packages/sp/social/types.ts @@ -174,7 +174,7 @@ export interface ISocialActorInfo { * Social actor type * */ -export const enum SocialActorType { +export enum SocialActorType { User, Document, Site, @@ -186,7 +186,7 @@ export const enum SocialActorType { * */ /* eslint-disable no-bitwise */ -export const enum SocialActorTypes { +export enum SocialActorTypes { None = 0, User = 1 << SocialActorType.User, Document = 1 << SocialActorType.Document, @@ -211,7 +211,7 @@ export const enum SocialActorTypes { * Result from following * */ -export const enum SocialFollowResult { +export enum SocialFollowResult { Ok = 0, AlreadyFollowing = 1, LimitReached = 2, @@ -221,7 +221,7 @@ export const enum SocialFollowResult { /** * Specifies an exception or status code. */ -export const enum SocialStatusCode { +export enum SocialStatusCode { /** * The operation completed successfully */ diff --git a/packages/sp/types.ts b/packages/sp/types.ts index d2dc948f7..b2e9d8f69 100644 --- a/packages/sp/types.ts +++ b/packages/sp/types.ts @@ -195,7 +195,7 @@ export interface IChangeQuery { /** * Specifies the type of a principal. */ -export const enum PrincipalType { +export enum PrincipalType { /** * Enumeration whose value specifies no principal type. */ @@ -226,7 +226,7 @@ export const enum PrincipalType { /** * Specifies the source of a principal. */ -export const enum PrincipalSource { +export enum PrincipalSource { /** * Enumeration whose value specifies no principal source. */ diff --git a/tsconfig.json b/tsconfig.json index e45b59aed..74384c7bf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,7 +27,7 @@ "skipDefaultLibCheck": true, "skipLibCheck": true, "strictNullChecks": false, - "preserveConstEnums": true, + "preserveConstEnums": false, "importHelpers": true, "resolveJsonModule": true, "paths": { From f0001220f84b7f5449d9c752e07518f01826e43b Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Fri, 12 Apr 2024 08:50:18 -0600 Subject: [PATCH 147/171] Updating Presets Clashing interface names, decided to change todo interface and class names. Updating Presets --- docs/graph/to-do.md | 2 +- packages/graph/presets/all.ts | 73 ++++++++++++++++++++++------------- packages/graph/to-do/index.ts | 10 ++--- packages/graph/to-do/types.ts | 54 +++++++++++++------------- test/graph/to-do.ts | 4 +- 5 files changed, 81 insertions(+), 62 deletions(-) diff --git a/docs/graph/to-do.md b/docs/graph/to-do.md index 449810e37..4cd6d36c8 100644 --- a/docs/graph/to-do.md +++ b/docs/graph/to-do.md @@ -6,7 +6,7 @@ More information can be found in the official Graph documentation: - [To-do Resource Type](https://learn.microsoft.com/en-us/graph/api/resources/todo-overview?view=graph-rest-1.0) -## IAttachment, IAttachments, IChecklistItem, IChecklistItems, ILinkedResource, ILinkedResources, ITask, ITaskList, ITaskLists, ITodo +## ITodoAttachment, ITodoAttachments, IChecklistItem, IChecklistItems, ILinkedResource, ILinkedResources, ITodoTask, ITaskList, ITaskLists, ITodo [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ## taskLists diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index e7b213db4..fb58b02e9 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -1,46 +1,67 @@ +import "../admin/index.js"; +import "../analytics/index.js"; import "../appCatalog/index.js"; import "../attachments/index.js"; import "../calendars/index.js"; import "../cloud-communications/index.js"; +import "../columns/index.js"; +import "../compliance/index.js"; import "../contacts/index.js"; +import "../content-types/index.js"; import "../conversations/index.js"; import "../directory-objects/index.js"; +import "../files/index.js"; import "../groups/index.js"; import "../insights/index.js"; import "../invitations/index.js"; -import "../members/index.js"; +import "../list-item/index.js"; +import "../lists/index.js"; import "../mail/index.js"; -import "../files/index.js"; +import "../members/index.js"; import "../onenote/index.js"; import "../operations/index.js"; +import "../permissions/index.js"; import "../photos/index.js"; +import "../places/index.js" import "../planner/index.js"; import "../search/index.js"; import "../shares/index.js"; +import "../sites/index.js"; import "../subscriptions/index.js"; -import "../teams/index.js"; +import "../taxonomy/index.js"; +import "../to-do/index.js" import "../users/index.js"; -export * from "../appCatalog/index.js"; -export * from "../attachments/index.js"; -export * from "../calendars/index.js"; -export * from "../cloud-communications/index.js"; -export * from "../contacts/index.js"; -export * from "../conversations/index.js"; -export * from "../directory-objects/index.js"; -export * from "../groups/index.js"; -export * from "../insights/index.js"; -export * from "../invitations/index.js"; -export * from "../members/index.js"; -export * from "../mail/index.js"; -export * from "../files/index.js"; -export * from "../onenote/index.js"; -export * from "../operations/index.js"; -export * from "../photos/index.js"; -export * from "../planner/index.js"; -export * from "../search/index.js"; -export * from "../shares/index.js"; -export * from "../subscriptions/index.js"; -export * from "../teams/index.js"; -export * from "../users/index.js"; -export * from "../index.js"; +export * from "../admin/index.js"; +export * from "../analytics/index.js"; +export * from "../appCatalog/index.js"; +export * from "../attachments/index.js"; +export * from "../calendars/index.js"; +export * from "../cloud-communications/index.js"; +export * from "../columns/index.js"; +export * from "../compliance/index.js"; +export * from "../contacts/index.js"; +export * from "../content-types/index.js"; +export * from "../conversations/index.js"; +export * from "../directory-objects/index.js"; +export * from "../files/index.js"; +export * from "../groups/index.js"; +export * from "../insights/index.js"; +export * from "../invitations/index.js"; +export * from "../list-item/index.js"; +export * from "../lists/index.js"; +export * from "../mail/index.js"; +export * from "../members/index.js"; +export * from "../onenote/index.js"; +export * from "../operations/index.js"; +export * from "../permissions/index.js"; +export * from "../photos/index.js"; +export * from "../places/index.js" +export * from "../planner/index.js"; +export * from "../search/index.js"; +export * from "../shares/index.js"; +export * from "../sites/index.js"; +export * from "../subscriptions/index.js"; +export * from "../taxonomy/index.js"; +export * from "../to-do/index.js"; +export * from "../users/index.js"; \ No newline at end of file diff --git a/packages/graph/to-do/index.ts b/packages/graph/to-do/index.ts index 9862db43f..cfe2406c8 100644 --- a/packages/graph/to-do/index.ts +++ b/packages/graph/to-do/index.ts @@ -1,23 +1,21 @@ import "./user.js"; export { - IAttachment, - IAttachments, + ITodoAttachment, + ITodoAttachments, IChecklistItem, IChecklistItems, ILinkedResource, ILinkedResources, - ITask, + ITodoTask, ITaskList, ITaskLists, ITodo, - Attachment, - Attachments, ChecklistItem, ChecklistItems, LinkedResource, LinkedResources, - Tasks, + ITodoTasks, TaskList, TaskLists, } from "./types.js"; diff --git a/packages/graph/to-do/types.ts b/packages/graph/to-do/types.ts index 645151a25..3902eb816 100644 --- a/packages/graph/to-do/types.ts +++ b/packages/graph/to-do/types.ts @@ -28,8 +28,8 @@ export const Todo = graphInvokableFactory(_Todo); @deleteable() @updateable() export class _TaskList extends _GraphInstance { - public get tasks(): ITasks{ - return Tasks(this); + public get tasks(): ITodoTasks{ + return TodoTasks(this); } // TODO Create Open Extension. Wait for it to be built as part of extensions module @@ -50,14 +50,14 @@ export interface ITaskLists extends _TaskLists, IGetById, IAddable(_TaskLists); /** - * Task + * TodoTask */ @deleteable() @updateable() -export class _Task extends _GraphInstance { +export class _TodoTask extends _GraphInstance { - public get attachments(): IAttachments{ - return Attachments(this); + public get attachments(): ITodoAttachments{ + return TodoAttachments(this); } public get checklistItems(): IChecklistItems{ @@ -70,51 +70,51 @@ export class _Task extends _GraphInstance { // TODO Create Open Extension. Wait for it to be built as part of extensions module // TODO Get Open Extension. Wait for it to be built as part of extensions module } -export interface ITask extends _Task, IUpdateable, IDeleteable{ } -export const Task = graphInvokableFactory(_Task); +export interface ITodoTask extends _TodoTask, IUpdateable, IDeleteable{ } +export const TodoTask = graphInvokableFactory(_TodoTask); /** - * Tasks + * TodoTasks */ @defaultPath("tasks") -@getById(Task) +@getById(TodoTask) @addable() @hasDelta() -export class _Tasks extends _GraphCollection { } -export interface ITasks extends _Tasks, IGetById, IAddable, IHasDelta, ITodoTaskType> { } -export const Tasks = graphInvokableFactory(_Tasks); +export class _TodoTasks extends _GraphCollection { } +export interface ITodoTasks extends _TodoTasks, IGetById, IAddable, IHasDelta, ITodoTaskType> { } +export const TodoTasks = graphInvokableFactory(_TodoTasks); /** - * Attachment + * TodoAttachment */ @deleteable() -export class _Attachment extends _GraphInstance { +export class _TodoAttachment extends _GraphInstance { - public get attachments(): IAttachments{ - return Attachments(this); + public get TodoAttachments(): ITodoAttachments{ + return TodoAttachments(this); } } -export interface IAttachment extends _Attachment, IDeleteable{ } -export const Attachment = graphInvokableFactory(_Attachment); +export interface ITodoAttachment extends _TodoAttachment, IDeleteable{ } +export const TodoAttachment = graphInvokableFactory(_TodoAttachment); /** - * Attachments + * TodoAttachments */ @defaultPath("attachments") -@getById(Attachment) -export class _Attachments extends _GraphCollection { +@getById(TodoAttachment) +export class _TodoAttachments extends _GraphCollection { - public async add(attachmentInfo: IAddAttachmentOptions): Promise{ + public async add(TodoAttachmentInfo: IAddTodoAttachmentOptions): Promise{ const postBody = { "@odata.type": "#microsoft.graph.taskFileAttachment", - ...attachmentInfo, + ...TodoAttachmentInfo, }; return graphPost(this, body(postBody)); } } -export interface IAttachments extends _Attachments, IGetById { } -export const Attachments = graphInvokableFactory(_Attachments); +export interface ITodoAttachments extends _TodoAttachments, IGetById { } +export const TodoAttachments = graphInvokableFactory(_TodoAttachments); /** * Checklist @@ -158,6 +158,6 @@ export interface IAddTaskListOptions{ displayName: string; } -export interface IAddAttachmentOptions extends ITodoAttachmentType{ +export interface IAddTodoAttachmentOptions extends ITodoAttachmentType{ contentBytes: string; } diff --git a/test/graph/to-do.ts b/test/graph/to-do.ts index 7897cf474..66837d3f5 100644 --- a/test/graph/to-do.ts +++ b/test/graph/to-do.ts @@ -4,14 +4,14 @@ import "@pnp/graph/to-do"; import { pnpTest } from "../pnp-test.js"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { ChecklistItem } from "@microsoft/microsoft-graph-types"; -import { ITaskList, ITask } from "@pnp/graph/to-do"; +import { ITaskList, ITodoTask } from "@pnp/graph/to-do"; import getValidUser from "./utilities/getValidUser.js"; import { IUser } from "@pnp/graph/users"; describe("To-do", function () { let user: IUser; let taskList: ITaskList; - let todoTask: ITask; + let todoTask: ITodoTask; before(pnpTest("94d99e35-9891-4b50-a23c-359a43eeadc7", async function () { From b01d3d456e7274e65ce0e16d9e4da249d2abb342 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Fri, 12 Apr 2024 11:23:07 -0400 Subject: [PATCH 148/171] fixing #2931 --- packages/sp/attachments/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sp/attachments/types.ts b/packages/sp/attachments/types.ts index e53157108..4c89e1234 100644 --- a/packages/sp/attachments/types.ts +++ b/packages/sp/attachments/types.ts @@ -20,7 +20,7 @@ export class _Attachments extends _SPCollection { */ public getByName(name: string): IAttachment { const f = Attachment(this); - f.concat(`('${name}')`); + f.concat(`('${encodePath(name)}')`); return f; } From ca86b508e236b372da0f0bbb97fdf1faf4908873 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Sun, 14 Apr 2024 15:56:15 +0000 Subject: [PATCH 149/171] Fix typing for sendMail --- packages/graph/mail/users.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/graph/mail/users.ts b/packages/graph/mail/users.ts index c452fcd7d..571827bea 100644 --- a/packages/graph/mail/users.ts +++ b/packages/graph/mail/users.ts @@ -5,6 +5,7 @@ import { IOutlook, Outlook } from "./categories.js"; import { FocusedInboxOverrides, IFocusedInboxOverrides, IMailboxSettings, MailboxSettings } from "./mailbox.js"; import { addProp, body } from "@pnp/queryable"; import { graphPost } from "../graphqueryable.js"; +import { Message as IMessageType } from "@microsoft/microsoft-graph-types"; declare module "../users/types" { interface _User { @@ -13,7 +14,7 @@ declare module "../users/types" { readonly mailFolders: IMailFolders; readonly outlook: IOutlook; readonly focusedInboxOverrides: IFocusedInboxOverrides; - sendMail(message: IMessage): Promise; + sendMail(message: IMessageType): Promise; translateExchangeIds(translateExchangeIds: ITranslateExchangeIds): Promise; } interface IUser { @@ -33,7 +34,7 @@ addProp(_User, "mailFolders", MailFolders); addProp(_User, "outlook", Outlook); addProp(_User, "focusedInboxOverrides", FocusedInboxOverrides, "inferenceClassification/overrides"); -_User.prototype.sendMail = function (this: _User, message: IMessage): Promise { +_User.prototype.sendMail = function (this: _User, message: IMessageType): Promise { return graphPost(User(this, "sendMail"), body(message)); }; From e25944befdf3d08f5e2e22aaa624a155feede06c Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Sun, 14 Apr 2024 15:57:48 +0000 Subject: [PATCH 150/171] Missing documentation for SP Item Version history --- docs/sp/items.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/docs/sp/items.md b/docs/sp/items.md index 51ae373d3..cac7920e6 100644 --- a/docs/sp/items.md +++ b/docs/sp/items.md @@ -592,6 +592,7 @@ Gets information about an item, including details about the parent list, parent ```TypeScript import { spfi } from "@pnp/sp"; import "@pnp/sp/webs"; +import "@pnp/sp/lists"; import "@pnp/sp/items"; const sp = spfi(...); @@ -599,3 +600,48 @@ const sp = spfi(...); const item: any = await sp.web.lists.getByTitle("My List").items.getById(1)(); await item.getParentInfos(); ``` + +### Get Version History + +Get's the version history information for a list item + +```TypeScript +import { spfi } from "@pnp/sp"; +import "@pnp/sp/webs"; +import "@pnp/sp/lists"; +import "@pnp/sp/items"; + +const sp = spfi(...); + +const itemVersions: any = await sp.web.lists.getByTitle("My List").items.getById({item id}).versions(); +``` + +### Get Version History Item by Id + +Get's the specific version information for a list item + +```TypeScript +import { spfi } from "@pnp/sp"; +import "@pnp/sp/webs"; +import "@pnp/sp/lists"; +import "@pnp/sp/items"; + +const sp = spfi(...); + +const itemVersion: any = await sp.web.lists.getByTitle("My List").items.getById({item id}).versions.getById({version id})(); +``` + +### Delete Version History Item by Id + +Get's the specific version information for a list item + +```TypeScript +import { spfi } from "@pnp/sp"; +import "@pnp/sp/webs"; +import "@pnp/sp/lists"; +import "@pnp/sp/items"; + +const sp = spfi(...); + +await sp.web.lists.getByTitle("My List").items.getById({item id}).versions.getById({version id}).delete({eTag}); +``` From 019e610a0c10b5726021b3f512e1e6e8c1752838 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 15 Apr 2024 08:18:08 -0600 Subject: [PATCH 151/171] Missing Semi-Colon --- packages/graph/presets/all.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index fb58b02e9..cab6c2450 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -22,14 +22,14 @@ import "../onenote/index.js"; import "../operations/index.js"; import "../permissions/index.js"; import "../photos/index.js"; -import "../places/index.js" +import "../places/index.js"; import "../planner/index.js"; import "../search/index.js"; import "../shares/index.js"; import "../sites/index.js"; import "../subscriptions/index.js"; import "../taxonomy/index.js"; -import "../to-do/index.js" +import "../to-do/index.js"; import "../users/index.js"; export * from "../admin/index.js"; From 10ae984121c51202a793163c79d2a5f40f83518b Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Mon, 15 Apr 2024 08:20:37 -0600 Subject: [PATCH 152/171] EsLint --- packages/graph/presets/all.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/graph/presets/all.ts b/packages/graph/presets/all.ts index cab6c2450..6c08ef8c8 100644 --- a/packages/graph/presets/all.ts +++ b/packages/graph/presets/all.ts @@ -56,7 +56,7 @@ export * from "../onenote/index.js"; export * from "../operations/index.js"; export * from "../permissions/index.js"; export * from "../photos/index.js"; -export * from "../places/index.js" +export * from "../places/index.js"; export * from "../planner/index.js"; export * from "../search/index.js"; export * from "../shares/index.js"; @@ -64,4 +64,4 @@ export * from "../sites/index.js"; export * from "../subscriptions/index.js"; export * from "../taxonomy/index.js"; export * from "../to-do/index.js"; -export * from "../users/index.js"; \ No newline at end of file +export * from "../users/index.js"; From 748a1d07c95fadc88be812924bbaed1b87cbeb44 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 15 Apr 2024 12:07:08 -0400 Subject: [PATCH 153/171] small docs updates --- docs/graph/users.md | 2 +- mkdocs.yml | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/graph/users.md b/docs/graph/users.md index d7b10243d..4e9074579 100644 --- a/docs/graph/users.md +++ b/docs/graph/users.md @@ -129,7 +129,7 @@ See [Cloud Communications](./cloud-communications.md) ## User Messages (Mail) -See [Messages](./messages.md) +See [Messages](./mail-messages.md) ## User OneDrive diff --git a/mkdocs.yml b/mkdocs.yml index c9af784e8..c6dd42d88 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -40,10 +40,14 @@ nav: - util: 'core/util.md' - graph: - graph: 'packages/#graph' + - admin: 'graph\admin.md' + - analytics: 'graph\analytics.md' + - appCatalog: 'graph\appCatalog.md' - attachments: 'graph/attachments.md' - behaviors: 'graph/behaviors.md' - bookings: 'graph/bookings.md' - columns: 'graph/columns.md' + - compliance: 'graph\compliance.md' - 'content types': 'graph/content-types.md' - conversations: 'graph/conversations.md' - groups: 'graph/groups.md' @@ -53,7 +57,7 @@ nav: - calendars: 'graph/calendars.md' - 'directory objects': 'graph/directoryobjects.md' - files: 'graph/files.md' - - 'Retention/Sensitivity Labels': 'graph/files-labels.md' + - 'Retention/Sensitivity Labels': 'graph/files-labels.md' - invitations: 'graph/invitations.md' - items: 'graph/items.md' - lists: 'graph/lists.md' @@ -63,16 +67,20 @@ nav: - 'mailbox': 'graph/mail-mailbox.md' - 'messages': 'graph/mail-messages.md' - 'rules': 'graph/mail-rules.md' + - onenote: 'graph\onenote.md' - outlook: 'graph/outlook.md' - operations: 'graph/operations.md' - permissions: 'graph/permissions.md' - photos: 'graph/photos.md' + - places: 'graph\places.md' - planner: 'graph/planner.md' - search: 'graph/search.md' - shares: 'graph/shares.md' - sites: 'graph/sites.md' - subscriptions: 'graph/subscriptions.md' + - taxonomy: 'graph\taxonomy.md' - teams: 'graph/teams.md' + - to-do: 'graph\to-do.md' - users: 'graph/users.md' - logging: - logging: 'logging/index.md' @@ -125,7 +133,6 @@ nav: - 'SP.Publishing.SitePageService': 'sp/publishing-sitepageservice.md' - 'SP.Utilities.Utility': 'sp/sp-utilities-utility.md' - Subscriptions: 'sp/subscriptions.md' - - Taxonomy: 'sp/taxonomy.md' - 'Tenant Properties': 'sp/tenant-properties.md' - 'User custom actions': 'sp/user-custom-actions.md' - Views: 'sp/views.md' From 8b4ab7d7fc69d4038a7b091278f06a4f61915184 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 15 Apr 2024 18:30:19 +0000 Subject: [PATCH 154/171] Update packages Fix bug with planner tests Fix spfx versioning Fix bug with mail --- debug/spfx/package-lock.json | 66748 ++++++++------------------- debug/spfx/package.json | 38 +- debug/spfx/tsconfig.json | 2 +- package-lock.json | 1261 +- package.json | 28 +- packages/azidjsclient/package.json | 2 +- packages/graph/mail/users.ts | 4 +- packages/nodejs/package.json | 2 +- test/graph/planner.ts | 9 +- 9 files changed, 21171 insertions(+), 46923 deletions(-) diff --git a/debug/spfx/package-lock.json b/debug/spfx/package-lock.json index e5142b720..9d2a3d4aa 100644 --- a/debug/spfx/package-lock.json +++ b/debug/spfx/package-lock.json @@ -1,48 +1,50 @@ { - "name": "spfx-1-16-1", - "version": "0.0.1", - "lockfileVersion": 2, + "name": "spfx-1-18-2", + "version": "4.0.0", + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "spfx-1-16-1", - "version": "0.0.1", + "name": "spfx-1-18-2", + "version": "4.0.0", "dependencies": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-office-ui-fabric-core": "1.16.1", - "@microsoft/sp-property-pane": "1.16.1", - "@microsoft/sp-webpart-base": "1.16.1", - "@pnp/core": "^3.13.0", - "@pnp/graph": "^3.13.0", - "@pnp/logging": "^3.13.0", - "@pnp/sp": "^3.13.0", + "@microsoft/sp-component-base": "1.18.2", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-office-ui-fabric-core": "1.18.2", + "@microsoft/sp-property-pane": "1.18.2", + "@microsoft/sp-webpart-base": "1.18.2", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20240412", + "@pnp/graph": "^4.0.0-alpha0-v4nightly.20240412", + "@pnp/logging": "^4.0.0-alpha0-v4nightly.20240412", + "@pnp/sp": "^4.0.0-alpha0-v4nightly.20240412", "tslib": "2.3.1" }, "devDependencies": { - "@microsoft/eslint-config-spfx": "1.16.1", - "@microsoft/eslint-plugin-spfx": "1.16.1", - "@microsoft/rush-stack-compiler-4.5": "0.2.2", - "@microsoft/sp-build-web": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", + "@microsoft/eslint-config-spfx": "1.18.2", + "@microsoft/eslint-plugin-spfx": "1.18.2", + "@microsoft/rush-stack-compiler-4.7": "0.1.0", + "@microsoft/sp-build-web": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", "@rushstack/eslint-config": "2.5.1", "@types/webpack-env": "~1.15.2", "ajv": "^6.12.5", + "eslint": "8.7.0", "gulp": "4.0.2", - "typescript": "4.5.5" + "typescript": "4.7.4" }, "engines": { - "node": ">=16.13.0 <17.0.0" + "node": ">=16.13.0 <17.0.0 || >=18.17.1 <19.0.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -61,52 +63,89 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz", - "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.1.tgz", + "integrity": "sha512-dyeQwvgthqs/SlPVQbZQetpslXceHd4i5a7M/7z/lGEAVwnSluabnQOjF2/dk/hhWgMISusv1Ytp4mQ8JNy62A==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", - "tslib": "^2.2.0" + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, + "node_modules/@azure/core-auth/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@azure/core-client": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.2.tgz", - "integrity": "sha512-ye5554gnVnXdfZ64hptUtETgacXoRWxYv1JF5MctoAzTSH5dXhDPZd9gOjDPyWMcLIk58pnP5+p5vGX6PYn1ag==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.1.tgz", + "integrity": "sha512-hHYFx9lz0ZpbO5W+iotU9tmIX1jPcoIjYUEUaWGuMi1628LCQ/z05TUR4P+NRtMgyoHQuyVYyGQiD3PC47kaIA==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", + "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-rest-pipeline": "^1.9.1", "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", + "@azure/core-util": "^1.6.1", "@azure/logger": "^1.0.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@azure/core-client/node_modules/@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.1.tgz", + "integrity": "sha512-qPbYhN1pE5XQ2jPKIHP33x8l3oBu1UqIWnYqZZ3OYnYjzY0xqIHjn49C+ptsPD9yC7uyWI9Zm7iZUZLs2R4DhQ==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, + "node_modules/@azure/core-client/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@azure/core-http": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.1.tgz", - "integrity": "sha512-cur03BUwV0Tbv81bQBOLafFB02B6G++K6F2O3IMl8pSE2QlXm3cu11bfyBNlDUKi5U+xnB3GC63ae3athhkx6Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.2.tgz", + "integrity": "sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -123,113 +162,125 @@ "tslib": "^2.2.0", "tunnel": "^0.0.6", "uuid": "^8.3.0", - "xml2js": "^0.4.19" + "xml2js": "^0.5.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@azure/core-http/node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@azure/core-http/node_modules/@types/node-fetch/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/@azure/core-lro": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.1.tgz", + "integrity": "sha512-kXSlrNHOCTVZMxpXNRqzgh9/j4cnNXU5Hf2YjMyjddRhCXFiFRzmNaqwN+XO9rGTsCOIaaG7M67zZdyliXZG9g==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/@azure/core-http/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=18.0.0" } }, - "node_modules/@azure/core-lro": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.5.1.tgz", - "integrity": "sha512-JHQy/bA3NOz2WuzOi5zEk6n/TJdAropupxUT521JIJvW7EXV2YN2SFYZrf/2RHeD28QAClGdynYadZsbmP+nyQ==", + "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, + "node_modules/@azure/core-lro/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@azure/core-paging": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.5.0.tgz", - "integrity": "sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.1.tgz", + "integrity": "sha512-3tKIQXSU3mlN+ITz0m2pXLnKK3oQ6/EVcW8ud011Iq+M0rx6Wnm7NUEpoMeOAEedeKlPtemrQzO6YWoDR71O5w==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, + "node_modules/@azure/core-paging/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.2.tgz", - "integrity": "sha512-e3WzAsRKLor5EgK2bQqR1OY5D7VBqzORHtlqtygZZQGCYOIBsynqrZBa8MFD1Ue9r8TPtofOLditalnlQHS45Q==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.1.tgz", + "integrity": "sha512-ZxS6i3eHxh86u+1eWZJiYywoN2vxvsSoAUx60Mny8cZ4nTwvt7UzVVBJO+m2PW2KIJfNiXMt59xBa59htOWL4g==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", + "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.0.0", + "@azure/core-util": "^1.3.0", "@azure/logger": "^1.0.0", - "form-data": "^4.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "tslib": "^2.2.0", - "uuid": "^8.3.0" + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@azure/core-rest-pipeline/node_modules/@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.1.tgz", + "integrity": "sha512-qPbYhN1pE5XQ2jPKIHP33x8l3oBu1UqIWnYqZZ3OYnYjzY0xqIHjn49C+ptsPD9yC7uyWI9Zm7iZUZLs2R4DhQ==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, - "node_modules/@azure/core-rest-pipeline/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/@azure/core-rest-pipeline/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, + "node_modules/@azure/core-rest-pipeline/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@azure/core-tracing": { "version": "1.0.0-preview.13", "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", @@ -244,18 +295,36 @@ } }, "node_modules/@azure/core-util": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.2.0.tgz", - "integrity": "sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.8.1.tgz", + "integrity": "sha512-L3voj0StUdJ+YKomvwnTv7gHzguJO+a6h30pmmZdRprJCM+RJlGMPxzuh4R7lhQu1jNmEtaHX5wvTgWLDAmbGQ==", "dev": true, "dependencies": { - "@azure/abort-controller": "^1.0.0", - "tslib": "^2.2.0" + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, + "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", + "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@azure/identity": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz", @@ -284,42 +353,46 @@ } }, "node_modules/@azure/identity/node_modules/@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.1.tgz", + "integrity": "sha512-qPbYhN1pE5XQ2jPKIHP33x8l3oBu1UqIWnYqZZ3OYnYjzY0xqIHjn49C+ptsPD9yC7uyWI9Zm7iZUZLs2R4DhQ==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, - "node_modules/@azure/identity/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } + "node_modules/@azure/identity/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, "node_modules/@azure/logger": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", - "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.1.tgz", + "integrity": "sha512-/+4TtokaGgC+MnThdf6HyIH9Wrjp+CnCn3Nx3ggevN7FFjjNyjqg0yLlc2i9S+Z2uAzI8GYOo35Nzb1MhQ89MA==", "dev": true, "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, + "node_modules/@azure/logger/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/@azure/msal-browser": { "version": "2.28.1", "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.28.1.tgz", "integrity": "sha512-5uAfwpNGBSRzBGTSS+5l4Zw6msPV7bEmq99n0U3n/N++iTcha+nIp1QujxTPuOLHmTNCeySdMx9qzGqWuy22zQ==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", "dependencies": { "@azure/msal-common": "^7.3.0" }, @@ -336,12 +409,13 @@ } }, "node_modules/@azure/msal-node": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.17.0.tgz", - "integrity": "sha512-aOKykKxDc+Kf5vcdOUPdKlJ96YAIyrHyl4W8RyfMqw0iApDckOuhejNwlZr6/M7U40wo1Wj4PwxRVx7d8OFBFg==", + "version": "1.18.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", + "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", "dev": true, "dependencies": { - "@azure/msal-common": "^12.0.0", + "@azure/msal-common": "13.3.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -350,23 +424,14 @@ } }, "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-12.0.0.tgz", - "integrity": "sha512-SvQl4JWy1yZnxyq0xng/urf103wz68UJG0K9Dq2NM2to7ePA+R1hMisKnXELJvZrEGYANGbh/Hc0T9piGqOteQ==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", + "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", "dev": true, "engines": { "node": ">=0.8.0" } }, - "node_modules/@azure/msal-node/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@azure/storage-blob": { "version": "12.11.0", "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.11.0.tgz", @@ -387,47 +452,48 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -437,220 +503,210 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -728,9 +784,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -871,35 +927,47 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "peer": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", - "debug": "^4.1.0", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -907,13 +975,13 @@ } }, "node_modules/@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -942,12 +1010,20 @@ "node": ">=0.1.95" } }, + "node_modules/@devexpress/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@devexpress/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-fneVypElGUH6Be39mlRZeAu00pccTlf4oVuzf9xPJD1cdEqI8NyAiQua/EW7lZdrbMUbgyXcJmfKPefhYius3A==", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "peer": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -959,25 +1035,23 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, - "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.4.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -996,15 +1070,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -1016,38 +1088,19 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "peer": true, "engines": { "node": ">= 4" } }, - "node_modules/@eslint/eslintrc/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "peer": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -1055,22 +1108,11 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -1078,208 +1120,212 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/js": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz", - "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/@fluentui/date-time-utilities": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-7.9.1.tgz", - "integrity": "sha512-o8iU1VIY+QsqVRWARKiky29fh4KR1xaKSgMClXIi65qkt8EDDhjmlzL0KVDEoDA2GWukwb/1PpaVCWDg4v3cUQ==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.6.0.tgz", + "integrity": "sha512-fpdR2pesIewgfgErX0eS+YBPengNH4Qf21Q6bNFTfQsBYXaJZMUqD4V/57JRfIFz4fYXZ6lWKFTTQe50wXKlWA==", "dependencies": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" } }, - "node_modules/@fluentui/date-time-utilities/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@fluentui/dom-utilities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-1.1.2.tgz", - "integrity": "sha512-XqPS7l3YoMwxdNlaYF6S2Mp0K3FmVIOIy2K3YkMc+eRxu9wFK6emr2Q/3rBhtG5u/On37NExRT7/5CTLnoi9gw==", + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.14.tgz", + "integrity": "sha512-+4DVm5sNfJh+l8fM+7ylpOkGNZkNr4X1z1uKQPzRJ1PRhlnvc6vLpWNNicGwpjTbgufSrVtGKXwP5sf++r81lg==", "dependencies": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" } }, - "node_modules/@fluentui/dom-utilities/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@fluentui/keyboard-key": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.2.17.tgz", - "integrity": "sha512-iT1bU56rKrKEOfODoW6fScY11qj3iaYrZ+z11T6fo5+TDm84UGkkXjLXJTE57ZJzg0/gbccHQWYv+chY7bJN8Q==", + "node_modules/@fluentui/font-icons-mdl2": { + "version": "8.5.34", + "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.34.tgz", + "integrity": "sha512-FRTtryqrU0ilzSATvfU3zG7x8+mnEIrio3Qd6LDsQ7cLm62BX2z25rBqTvmY2YmY/fHFx2tkVsTZcCKRT08Vww==", "dependencies": { - "tslib": "^1.10.0" + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.5", + "@fluentui/utilities": "^8.15.0", + "tslib": "^2.1.0" } }, - "node_modules/@fluentui/keyboard-key/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@fluentui/react": { - "version": "7.204.0", - "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-7.204.0.tgz", - "integrity": "sha512-WQKHcO6cboGO0eCPsiNSzUwnMWBmAvdltu4X0tvXwb+q8W3wZzCQiU1voDVYNm4Nz/Jgiiy8jbMcesmNAq7jsw==", + "node_modules/@fluentui/foundation-legacy": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.4.0.tgz", + "integrity": "sha512-RSOfVPLgCCru6RBYxqp754aeWZ+lYVI+CMffMrhg2/LGl0CcNGXZjK0LYH/anbVq1sEZ/D9e56FekzMOR3CScw==", "dependencies": { - "@uifabric/set-version": "^7.0.24", - "office-ui-fabric-react": "^7.204.0", - "tslib": "^1.10.0" + "@fluentui/merge-styles": "^8.6.0", + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.5", + "@fluentui/utilities": "^8.15.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" + } + }, + "node_modules/@fluentui/keyboard-key": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.14.tgz", + "integrity": "sha512-XzZHcyFEM20H23h3i15UpkHi2AhRBriXPGAHq0Jm98TKFppXehedjjEFuUsh+CyU5JKBhDalWp8TAQ1ArpNzow==", + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/@fluentui/react-compose": { - "version": "0.19.24", - "resolved": "https://registry.npmjs.org/@fluentui/react-compose/-/react-compose-0.19.24.tgz", - "integrity": "sha512-4PO7WSIZjwBGObpknjK8d1+PhPHJGSlVSXKFHGEoBjLWVlCTMw6Xa1S4+3K6eE3TEBbe9rsqwwocMTFHjhWwtQ==", + "node_modules/@fluentui/merge-styles": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.6.0.tgz", + "integrity": "sha512-Si54VVK/XZQMTPT6aKE/RmqsY7uy9hERreU143Fbqtg9cf+Hr4iJ7FOGC4dXCfrFIXs0KvIHXCh5mtfrEW2aRQ==", "dependencies": { - "@types/classnames": "^2.2.9", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "classnames": "^2.2.6", - "tslib": "^1.10.0" + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" + } + }, + "node_modules/@fluentui/react": { + "version": "8.117.1", + "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.117.1.tgz", + "integrity": "sha512-QtbYiKpiuo2lBDJqk6gMOMLFMyecHswfZhcNC/GXDOio+umkfjSp7TGUeEiI1/4mctI5h/kipw5ZfnvcU/lcWw==", + "dependencies": { + "@fluentui/date-time-utilities": "^8.6.0", + "@fluentui/font-icons-mdl2": "^8.5.34", + "@fluentui/foundation-legacy": "^8.4.0", + "@fluentui/merge-styles": "^8.6.0", + "@fluentui/react-focus": "^8.8.42", + "@fluentui/react-hooks": "^8.7.0", + "@fluentui/react-portal-compat-context": "^9.0.11", + "@fluentui/react-window-provider": "^2.2.18", + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.5", + "@fluentui/theme": "^2.6.43", + "@fluentui/utilities": "^8.15.0", + "@microsoft/load-themed-styles": "^1.10.26", + "tslib": "^2.1.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0" + "@types/react": ">=16.8.0 <19.0.0", + "@types/react-dom": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0", + "react-dom": ">=16.8.0 <19.0.0" } }, - "node_modules/@fluentui/react-compose/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@fluentui/react-focus": { - "version": "7.18.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-7.18.17.tgz", - "integrity": "sha512-W+sLIhX7wLzMsJ0jhBrDAblkG3DNbRbF8UoSieRVdAAm7xVf5HpiwJ6tb6nGqcFOnpRh8y+fjyVM+dV3K6GNHA==", + "version": "8.8.42", + "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.42.tgz", + "integrity": "sha512-U9KRiBabHyVUfemArukjTH6TDthj/MnDbgAUa55CMdj061ZV/Ria+Fxb1QG+GW3Az6bSaAulJvj/fGuNrawWhA==", "dependencies": { - "@fluentui/keyboard-key": "^0.2.12", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" + "@fluentui/keyboard-key": "^0.4.14", + "@fluentui/merge-styles": "^8.6.0", + "@fluentui/set-version": "^8.2.14", + "@fluentui/style-utilities": "^8.10.5", + "@fluentui/utilities": "^8.15.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" } }, - "node_modules/@fluentui/react-focus/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@fluentui/react-stylesheets": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-stylesheets/-/react-stylesheets-0.2.9.tgz", - "integrity": "sha512-6GDU/cUEG/eJ4owqQXDWPmP5L1zNh2NLEDKdEzxd7cWtGnoXLeMjbs4vF4t5wYGzGaxZmUQILOvJdgCIuc9L9Q==", + "node_modules/@fluentui/react-hooks": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.7.0.tgz", + "integrity": "sha512-m1/2q+zF/dNj2dWqIl06G88dTEMmiaP40k16b1juyjHXYsVPooxPlUD1l9FLrB8mC3VkpCy/fgASaPqRH8mUGw==", "dependencies": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" + "@fluentui/react-window-provider": "^2.2.18", + "@fluentui/set-version": "^8.2.14", + "@fluentui/utilities": "^8.15.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0" + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" } }, - "node_modules/@fluentui/react-stylesheets/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@fluentui/react-theme-provider": { - "version": "0.19.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme-provider/-/react-theme-provider-0.19.16.tgz", - "integrity": "sha512-Kf7z4ZfNLS/onaFL5eQDSlizgwy2ytn6SDyjEKV+9VhxIXdDtOh8AaMXWE7dsj1cRBfBUvuGPVnsnoaGdHxJ+A==", - "dependencies": { - "@fluentui/react-compose": "^0.19.24", - "@fluentui/react-stylesheets": "^0.2.9", - "@fluentui/react-window-provider": "^1.0.6", - "@fluentui/theme": "^1.7.13", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/react-hooks": "^7.16.4", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "classnames": "^2.2.6", - "tslib": "^1.10.0" + "node_modules/@fluentui/react-portal-compat-context": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.11.tgz", + "integrity": "sha512-ubvW/ej0O+Pago9GH3mPaxzUgsNnBoqvghNamWjyKvZIViyaXUG6+sgcAl721R+qGAFac+A20akI5qDJz/xtdg==", + "dependencies": { + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0" + "@types/react": ">=16.14.0 <19.0.0", + "react": ">=16.14.0 <19.0.0" } }, - "node_modules/@fluentui/react-theme-provider/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@fluentui/react-window-provider": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-1.0.6.tgz", - "integrity": "sha512-m2HoxhU2m/yWxUauf79y+XZvrrWNx+bMi7ZiL6DjiAKHjTSa8KOyvicbOXd/3dvuVzOaNTnLDdZAvhRFcelOIA==", + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.18.tgz", + "integrity": "sha512-nBKqxd0P8NmIR0qzFvka1urE2LVbUm6cse1I1T7TcOVNYa5jDf5BrO06+JRZfwbn00IJqOnIVoP0qONqceypWQ==", "dependencies": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" } }, - "node_modules/@fluentui/react-window-provider/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@fluentui/react/node_modules/@microsoft/load-themed-styles": { + "version": "1.10.295", + "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", + "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==" }, - "node_modules/@fluentui/react/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@fluentui/set-version": { + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.14.tgz", + "integrity": "sha512-f/QWJnSeyfAjGAqq57yjMb6a5ejPlwfzdExPmzFBuEOuupi8hHbV8Yno12XJcTW4I0KXEQGw+PUaM1aOf/j7jw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@fluentui/style-utilities": { + "version": "8.10.5", + "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.10.5.tgz", + "integrity": "sha512-pATlzdNhkFghbjPqybq2vrIHnJZ6/bIoVk6tekMVucVedpfLr+TC/2EcRYhRSLyCOjE3qYPhFMZKe850FGDFqA==", + "dependencies": { + "@fluentui/merge-styles": "^8.6.0", + "@fluentui/set-version": "^8.2.14", + "@fluentui/theme": "^2.6.43", + "@fluentui/utilities": "^8.15.0", + "@microsoft/load-themed-styles": "^1.10.26", + "tslib": "^2.1.0" + } + }, + "node_modules/@fluentui/style-utilities/node_modules/@microsoft/load-themed-styles": { + "version": "1.10.295", + "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", + "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==" }, "node_modules/@fluentui/theme": { - "version": "1.7.13", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-1.7.13.tgz", - "integrity": "sha512-/1ZDHZNzV7Wgohay47DL9TAH4uuib5+B2D6Rxoc3T6ULoWcFzwLeVb+VZB/WOCTUbG+NGTrmsWPBOz5+lbuOxA==", + "version": "2.6.43", + "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.43.tgz", + "integrity": "sha512-Z5M0L0xRASWBt13Uj4LiazMKxsWGdno2KeK5Rh+xrSYjAUIXxrJz5Y+VGmpObNsDemyfaYG2TGnTg/b0DDEXtQ==", "dependencies": { - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" + "@fluentui/merge-styles": "^8.6.0", + "@fluentui/set-version": "^8.2.14", + "@fluentui/utilities": "^8.15.0", + "tslib": "^2.1.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" } }, - "node_modules/@fluentui/theme/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/@fluentui/utilities": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.15.0.tgz", + "integrity": "sha512-fj5/LBpt4JPQwx8OZPhHFPHYeCM+a1nnSSpPnVKj2cCZ3o3MoCenw23tgTGdQM5A+i9MKNTE8OuSfMcnTGlA0w==", + "dependencies": { + "@fluentui/dom-utilities": "^2.2.14", + "@fluentui/merge-styles": "^8.6.0", + "@fluentui/set-version": "^8.2.14", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@types/react": ">=16.8.0 <19.0.0", + "react": ">=16.8.0 <19.0.0" + } }, "node_modules/@gar/promisify": { "version": "1.1.3", @@ -1288,34 +1334,19 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, - "peer": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.5" + "minimatch": "^3.0.4" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -1518,9 +1549,9 @@ } }, "node_modules/@jest/reporters/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "optional": true, "bin": { @@ -1554,15 +1585,6 @@ "node": ">= 8.3" } }, - "node_modules/@jest/source-map/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@jest/test-result": { "version": "25.5.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", @@ -1637,91 +1659,76 @@ } }, "node_modules/@jest/types/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, - "peer": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, "node_modules/@microsoft/api-extractor": { @@ -1806,36 +1813,36 @@ } }, "node_modules/@microsoft/eslint-config-spfx": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/eslint-config-spfx/-/eslint-config-spfx-1.16.1.tgz", - "integrity": "sha512-WJVgoqTUQdlX2r6dY2ETmssXXNr5XwakBdvvPA9KM0Smu9quSbrsyka1fNDRrsuku5pOp5zwfpHn+aK9qg9C9w==", + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/eslint-config-spfx/-/eslint-config-spfx-1.18.2.tgz", + "integrity": "sha512-ZSMfGvqsZYU8fZRF6NmwMLaJ0+CQgfw9DmKWDRsqi2PWGVlPbMFL1o7nhopWeJfRVid/ymdYe8mx3OK9z7xzmw==", "dev": true, "dependencies": { - "@microsoft/eslint-plugin-spfx": "1.16.1", - "@rushstack/eslint-config": "3.0.1", - "@typescript-eslint/experimental-utils": "5.30.7" + "@microsoft/eslint-plugin-spfx": "1.18.2", + "@rushstack/eslint-config": "3.4.0", + "@typescript-eslint/experimental-utils": "5.59.11" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=18.17.1 <19.0.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@rushstack/eslint-config": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-config/-/eslint-config-3.0.1.tgz", - "integrity": "sha512-9OIB2T6fYsgMNUVGjopgT8NZv7x4shXsq1KqT8fX0VVVzJ6/XA7+nSBXHYFzYH+8Liux7ApdzyaZNxaF0Ex7Sw==", - "dev": true, - "dependencies": { - "@rushstack/eslint-patch": "1.2.0", - "@rushstack/eslint-plugin": "0.10.0", - "@rushstack/eslint-plugin-packlets": "0.5.0", - "@rushstack/eslint-plugin-security": "0.4.0", - "@typescript-eslint/eslint-plugin": "~5.30.3", - "@typescript-eslint/experimental-utils": "~5.30.3", - "@typescript-eslint/parser": "~5.30.3", - "@typescript-eslint/typescript-estree": "~5.30.3", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-config/-/eslint-config-3.4.0.tgz", + "integrity": "sha512-KZNwM1S3LkhzJ6mBjXaJBo7maUN44Chu2CjsHnIui3i6W/FlazLyjme3929ACsVA8nyC4VlPOQYDRy2d3siPGw==", + "dev": true, + "dependencies": { + "@rushstack/eslint-patch": "1.5.0", + "@rushstack/eslint-plugin": "0.13.1", + "@rushstack/eslint-plugin-packlets": "0.8.1", + "@rushstack/eslint-plugin-security": "0.7.1", + "@typescript-eslint/eslint-plugin": "~5.59.2", + "@typescript-eslint/experimental-utils": "~5.59.2", + "@typescript-eslint/parser": "~5.59.2", + "@typescript-eslint/typescript-estree": "~5.59.2", "eslint-plugin-promise": "~6.0.0", "eslint-plugin-react": "~7.27.1", "eslint-plugin-tsdoc": "~0.2.16" @@ -1846,69 +1853,70 @@ } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.0.tgz", + "integrity": "sha512-EF3948ckf3f5uPgYbQ6GhyA56Dmv8yg0+ir+BroRjwdxyZJsekhZzawOecC2rOTPCz173t7ZcR1HHZu0dZgOCw==", "dev": true }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@rushstack/eslint-plugin": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin/-/eslint-plugin-0.10.0.tgz", - "integrity": "sha512-39DCBD6s7Y5XQxvcMmitXfupkReGcg0lmtil9mrGHkDoyiUln90sOWtpkSl6LqUrSL3lx7N2wRvJiJlwGIPYFQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin/-/eslint-plugin-0.13.1.tgz", + "integrity": "sha512-qQ6iPCm8SFuY+bpcSv5hlYtdwDHcFlE6wlpUHa0ywG9tGVBYM5But8S4qVRFq1iejAuFX+ubNUOyFJHvxpox+A==", "dev": true, "dependencies": { - "@rushstack/tree-pattern": "0.2.4", - "@typescript-eslint/experimental-utils": "~5.30.3" + "@rushstack/tree-pattern": "0.3.1", + "@typescript-eslint/experimental-utils": "~5.59.2" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@rushstack/eslint-plugin-packlets": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-packlets/-/eslint-plugin-packlets-0.5.0.tgz", - "integrity": "sha512-I160nHeAGzA0q4g3cR7kiHNgiU1HqrYto52+lEmxLAdbBllqc6IOyiWQfCDb5ug0f+Y8bTwMQHiUrI7XclZB/Q==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-packlets/-/eslint-plugin-packlets-0.8.1.tgz", + "integrity": "sha512-p3u2AfJsam6g29ah1P3yA9O65EACmcHmQtbsn+NdQEfZ1J72tm+x3d2PucFC381AeIcMVjULm9H/SGS+mHgDZA==", "dev": true, "dependencies": { - "@rushstack/tree-pattern": "0.2.4", - "@typescript-eslint/experimental-utils": "~5.30.3" + "@rushstack/tree-pattern": "0.3.1", + "@typescript-eslint/experimental-utils": "~5.59.2" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@rushstack/eslint-plugin-security": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.4.0.tgz", - "integrity": "sha512-jRFtrOnZZcuJ2MRA9RtoeyKiFQ60iKu7SDF1wkc7M9nHL5C1HkFApX6nTlAjY7C5B7UlV+9BP9fDmOJJmB4FSw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.7.1.tgz", + "integrity": "sha512-84N42tlONhcbXdlk5Rkb+/pVxPnH+ojX8XwtFoecCRV88/4Ii7eGEyJPb73lOpHaE3NJxLzLVIeixKYQmdjImA==", "dev": true, "dependencies": { - "@rushstack/tree-pattern": "0.2.4", - "@typescript-eslint/experimental-utils": "~5.30.3" + "@rushstack/tree-pattern": "0.3.1", + "@typescript-eslint/experimental-utils": "~5.59.2" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@rushstack/tree-pattern": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@rushstack/tree-pattern/-/tree-pattern-0.2.4.tgz", - "integrity": "sha512-H8i0OinWsdKM1TKEKPeRRTw85e+/7AIFpxm7q1blceZJhuxRBjCGAUZvQXZK4CMLx75xPqh/h1t5WHwFmElAPA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@rushstack/tree-pattern/-/tree-pattern-0.3.1.tgz", + "integrity": "sha512-2yn4qTkXZTByQffL3ymS6viYuyZk3YnJT49bopGBlm9Thtyfa7iuFUV6tt+09YIRO1sjmSWILf4dPj6+Dr5YVA==", "dev": true }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz", - "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.11.tgz", + "integrity": "sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/type-utils": "5.30.7", - "@typescript-eslint/utils": "5.30.7", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/type-utils": "5.59.11", + "@typescript-eslint/utils": "5.59.11", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", - "regexpp": "^3.2.0", + "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -1930,14 +1938,14 @@ } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@typescript-eslint/parser": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz", - "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz", + "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", "debug": "^4.3.4" }, "engines": { @@ -1957,13 +1965,13 @@ } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz", + "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1974,9 +1982,9 @@ } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", + "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1987,13 +1995,13 @@ } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", + "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2014,12 +2022,12 @@ } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", + "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", + "@typescript-eslint/types": "5.59.11", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2060,9 +2068,9 @@ } }, "node_modules/@microsoft/eslint-config-spfx/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -2077,41 +2085,27 @@ "node": ">= 8" } }, - "node_modules/@microsoft/eslint-config-spfx/node_modules/typescript": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", - "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, "node_modules/@microsoft/eslint-plugin-spfx": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/eslint-plugin-spfx/-/eslint-plugin-spfx-1.16.1.tgz", - "integrity": "sha512-CN91uwrZ6/huwzWmD/NDF5cx6KQq11rt1JI5l/5kK1CvXKpaoU8XUGL8WCy9Ed7C0VD/DoZAtiapjp2rtc517g==", + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/eslint-plugin-spfx/-/eslint-plugin-spfx-1.18.2.tgz", + "integrity": "sha512-rgiMXFYbO7+nq/quAz7Lq2RLFYes3/40cFbelXm5Obl3HIInN9LWQJHhoOcpg6sP1J/EeTX0K/opFTMTrLEWVQ==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "5.30.7" + "@typescript-eslint/experimental-utils": "5.59.11" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@microsoft/gulp-core-build": { - "version": "3.17.19", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.17.19.tgz", - "integrity": "sha512-izeW3DDC9KC5NYqwHqddY0KElO7YYLtbXvH30JJnYFVlpaXTl23opv5XFZYpWe6LKGuNVGnbTNwYqEuxiGiTVg==", + "version": "3.18.1", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.18.1.tgz", + "integrity": "sha512-nktxVFJcBToR/lsXzgC1kJo+1RNxwJJDMPSb44vI1i0JIlnhnfrhUGD3v+0ZdukRZBE1snJ4E+sXE0uh8Jkevw==", "dev": true, "dependencies": { "@jest/core": "~25.4.0", "@jest/reporters": "~25.4.0", - "@rushstack/node-core-library": "~3.44.1", + "@rushstack/node-core-library": "~3.53.0", "@types/chalk": "0.4.31", "@types/gulp": "4.0.6", "@types/jest": "25.2.1", @@ -2151,12 +2145,12 @@ } }, "node_modules/@microsoft/gulp-core-build-sass": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-sass/-/gulp-core-build-sass-4.16.0.tgz", - "integrity": "sha512-sDwUyTsnRBvnMntiIGtElcaYejK17/WZRiXXXaS8VkrTNfBjdcifPnnuojKawGYnE3kFC2PrP+TwB2BI9rvVKg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-sass/-/gulp-core-build-sass-4.17.1.tgz", + "integrity": "sha512-vP1qf328OfMszcmqdyC/ghBQsJ0GA0594Wz9XvdkfduIYtIYXujYGkiRpJU1s+LhoQJg2fdcN9P2RtKfxS7Z4A==", "dev": true, "dependencies": { - "@microsoft/gulp-core-build": "3.17.20", + "@microsoft/gulp-core-build": "3.18.1", "@microsoft/load-themed-styles": "~1.10.172", "@rushstack/node-core-library": "~3.53.0", "@types/gulp": "4.0.6", @@ -2169,54 +2163,261 @@ "sass": "1.44.0" } }, - "node_modules/@microsoft/gulp-core-build-sass/node_modules/@microsoft/gulp-core-build": { - "version": "3.17.20", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.17.20.tgz", - "integrity": "sha512-VBZY08BhygVV9WeIY8lo9yUoe51+5mMjdfx8Bqle40k+/V7br0d93LXeUcMqaCJ5J6C3ribx2mrzaYhkj1l//g==", + "node_modules/@microsoft/gulp-core-build-sass/node_modules/@microsoft/load-themed-styles": { + "version": "1.10.295", + "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", + "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==", + "dev": true + }, + "node_modules/@microsoft/gulp-core-build-sass/node_modules/@rushstack/node-core-library": { + "version": "3.53.3", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.3.tgz", + "integrity": "sha512-H0+T5koi5MFhJUd5ND3dI3bwLhvlABetARl78L3lWftJVQEPyzcgTStvTTRiIM5mCltyTM8VYm6BuCtNUuxD0Q==", "dev": true, "dependencies": { - "@jest/core": "~25.4.0", - "@jest/reporters": "~25.4.0", + "@types/node": "12.20.24", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "z-schema": "~5.0.2" + } + }, + "node_modules/@microsoft/gulp-core-build-sass/node_modules/@rushstack/node-core-library/node_modules/@types/node": { + "version": "12.20.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "dev": true + }, + "node_modules/@microsoft/gulp-core-build-sass/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@microsoft/gulp-core-build-sass/node_modules/postcss": { + "version": "7.0.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.38.tgz", + "integrity": "sha512-wNrSHWjHDQJR/IZL5IKGxRtFgrYNaAA/UrkW2WqbtZO6uxSLMxMN+s2iqUMwnAWm3fMROlDYZB41dr0Mt7vBwQ==", + "dev": true, + "dependencies": { + "nanocolors": "^0.2.2", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@microsoft/gulp-core-build-sass/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@microsoft/gulp-core-build-sass/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/@microsoft/gulp-core-build-serve": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-serve/-/gulp-core-build-serve-3.12.1.tgz", + "integrity": "sha512-i1oLCVmWELaLHYTy1XFQJQ4gZ4sDaLhXKXnhys6x+o3rddzM7ZK9ITOUPMA7KLLO2Y4cgypiMopM5ZJz1ikQsA==", + "dev": true, + "dependencies": { + "@microsoft/gulp-core-build": "3.18.1", + "@rushstack/debug-certificate-manager": "~1.1.19", "@rushstack/node-core-library": "~3.53.0", - "@types/chalk": "0.4.31", - "@types/gulp": "4.0.6", - "@types/jest": "25.2.1", "@types/node": "10.17.13", - "@types/node-notifier": "8.0.2", - "@types/orchestrator": "0.0.30", - "@types/semver": "7.3.5", - "@types/through2": "2.0.32", - "@types/vinyl": "2.0.3", - "@types/yargs": "0.0.34", "colors": "~1.2.1", - "del": "^2.2.2", - "end-of-stream": "~1.1.0", + "express": "~4.16.2", + "gulp": "~4.0.2", + "gulp-connect": "~5.7.0", + "open": "8.4.2", + "sudo": "~1.0.3", + "through2": "~2.0.1" + } + }, + "node_modules/@microsoft/gulp-core-build-serve/node_modules/@rushstack/node-core-library": { + "version": "3.53.3", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.3.tgz", + "integrity": "sha512-H0+T5koi5MFhJUd5ND3dI3bwLhvlABetARl78L3lWftJVQEPyzcgTStvTTRiIM5mCltyTM8VYm6BuCtNUuxD0Q==", + "dev": true, + "dependencies": { + "@types/node": "12.20.24", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "z-schema": "~5.0.2" + } + }, + "node_modules/@microsoft/gulp-core-build-serve/node_modules/@rushstack/node-core-library/node_modules/@types/node": { + "version": "12.20.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "dev": true + }, + "node_modules/@microsoft/gulp-core-build-serve/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@microsoft/gulp-core-build-serve/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@microsoft/gulp-core-build-serve/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/@microsoft/gulp-core-build-typescript": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-typescript/-/gulp-core-build-typescript-8.6.1.tgz", + "integrity": "sha512-ZMuW0aMFUqP6UtEqwOTKmRjaZuPjmz88FWjPCI8VfeOl40Ixo5aQAA6PWXZHozHvv85A8eJAnu8azPgcYc+RrQ==", + "dev": true, + "dependencies": { + "@microsoft/gulp-core-build": "3.18.1", + "@rushstack/node-core-library": "~3.53.0", + "@types/node": "10.17.13", + "decomment": "~0.9.1", "glob": "~7.0.5", "glob-escape": "~0.0.2", - "globby": "~5.0.0", - "gulp": "~4.0.2", - "gulp-flatten": "~0.2.0", - "gulp-if": "^2.0.1", - "jest": "~25.4.0", - "jest-cli": "~25.4.0", - "jest-environment-jsdom": "~25.4.0", - "jest-nunit-reporter": "~1.3.1", - "jsdom": "~11.11.0", - "lodash.merge": "~4.6.2", - "merge2": "~1.0.2", - "node-notifier": "~10.0.1", - "object-assign": "~4.1.0", - "orchestrator": "~0.3.8", - "pretty-hrtime": "~1.0.2", + "resolve": "~1.17.0" + } + }, + "node_modules/@microsoft/gulp-core-build-typescript/node_modules/@rushstack/node-core-library": { + "version": "3.53.3", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.3.tgz", + "integrity": "sha512-H0+T5koi5MFhJUd5ND3dI3bwLhvlABetARl78L3lWftJVQEPyzcgTStvTTRiIM5mCltyTM8VYm6BuCtNUuxD0Q==", + "dev": true, + "dependencies": { + "@types/node": "12.20.24", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.17.0", "semver": "~7.3.0", - "through2": "~2.0.1", - "vinyl": "~2.2.0", - "xml": "~1.0.1", - "yargs": "~4.6.0", - "z-schema": "~3.18.3" + "z-schema": "~5.0.2" } }, - "node_modules/@microsoft/gulp-core-build-sass/node_modules/@rushstack/node-core-library": { + "node_modules/@microsoft/gulp-core-build-typescript/node_modules/@rushstack/node-core-library/node_modules/@types/node": { + "version": "12.20.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "dev": true + }, + "node_modules/@microsoft/gulp-core-build-typescript/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@microsoft/gulp-core-build-typescript/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@microsoft/gulp-core-build-typescript/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/@microsoft/gulp-core-build-webpack": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-webpack/-/gulp-core-build-webpack-5.4.0.tgz", + "integrity": "sha512-H6GoROBzKlQTu+qdDH6aaqt4NIsQ3wuYEbYHtChc4RFB464FePOWRI/rZyWE+q3O+MsqBzcuDACcLKZawaVezQ==", + "dev": true, + "dependencies": { + "@microsoft/gulp-core-build": "3.18.1", + "@types/gulp": "4.0.6", + "@types/node": "10.17.13", + "colors": "~1.2.1", + "gulp": "~4.0.2", + "webpack": "~4.47.0" + } + }, + "node_modules/@microsoft/gulp-core-build/node_modules/@rushstack/node-core-library": { "version": "3.53.3", "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.3.tgz", "integrity": "sha512-H0+T5koi5MFhJUd5ND3dI3bwLhvlABetARl78L3lWftJVQEPyzcgTStvTTRiIM5mCltyTM8VYm6BuCtNUuxD0Q==", @@ -2232,13 +2433,13 @@ "z-schema": "~5.0.2" } }, - "node_modules/@microsoft/gulp-core-build-sass/node_modules/@rushstack/node-core-library/node_modules/@types/node": { + "node_modules/@microsoft/gulp-core-build/node_modules/@rushstack/node-core-library/node_modules/@types/node": { "version": "12.20.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", "dev": true }, - "node_modules/@microsoft/gulp-core-build-sass/node_modules/@rushstack/node-core-library/node_modules/z-schema": { + "node_modules/@microsoft/gulp-core-build/node_modules/@rushstack/node-core-library/node_modules/z-schema": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", @@ -2258,7 +2459,7 @@ "commander": "^9.4.1" } }, - "node_modules/@microsoft/gulp-core-build-sass/node_modules/commander": { + "node_modules/@microsoft/gulp-core-build/node_modules/commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", @@ -2268,953 +2469,935 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/gulp-core-build-sass/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@microsoft/gulp-core-build/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { "node": ">= 0.10" } }, - "node_modules/@microsoft/gulp-core-build-serve": { - "version": "3.9.22", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-serve/-/gulp-core-build-serve-3.9.22.tgz", - "integrity": "sha512-gIhu1TBIft4ofWLulAZG17cEta0UU91d9p/idAkyGG3DL4aAfKNrCTXcie3X915N3sNjz1feeCWnkkxM1vB5/Q==", + "node_modules/@microsoft/load-themed-styles": { + "version": "2.0.115", + "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-2.0.115.tgz", + "integrity": "sha512-4ha6korKR0Kv/5IY9RvGFLekXf1Cm2LRTF6v8ZeSUlHBr0We/HV+aR3go0uUxh8ue48cHw9T2j/C0UkW2v0Gtg==", "dev": true, - "dependencies": { - "@microsoft/gulp-core-build": "3.17.19", - "@rushstack/debug-certificate-manager": "~1.1.19", - "@rushstack/node-core-library": "~3.44.1", - "@types/node": "10.17.13", - "colors": "~1.2.1", - "express": "~4.16.2", - "gulp": "~4.0.2", - "gulp-connect": "~5.5.0", - "gulp-open": "~3.0.1", - "sudo": "~1.0.3" - } + "peer": true }, - "node_modules/@microsoft/gulp-core-build-typescript": { - "version": "8.5.33", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-typescript/-/gulp-core-build-typescript-8.5.33.tgz", - "integrity": "sha512-+ykMtWF8Skcl2QpGPzJYmSf/cdq6tZ0a+ph1I0GnRalaJo+KpVKzlAhUUkxG3lVmo0pbXYBICl6PK3l3UZAEHg==", + "node_modules/@microsoft/loader-load-themed-styles": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@microsoft/loader-load-themed-styles/-/loader-load-themed-styles-2.1.7.tgz", + "integrity": "sha512-3RrhqgMDm+U/B576A8xZCF5mSIWYA+zYh3sdPeBz3WjTMqas402yFl8p1O6Fad3UF3PRlisp4QeRMLiSiSXm0g==", "dev": true, "dependencies": { - "@microsoft/gulp-core-build": "3.17.19", - "@rushstack/node-core-library": "~3.44.1", - "@types/node": "10.17.13", - "decomment": "~0.9.1", - "glob": "~7.0.5", - "glob-escape": "~0.0.2", - "resolve": "~1.17.0" + "loader-utils": "1.4.2" + }, + "peerDependencies": { + "@microsoft/load-themed-styles": "^2.0.83", + "@types/webpack": "^4" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack": { - "version": "5.2.28", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-webpack/-/gulp-core-build-webpack-5.2.28.tgz", - "integrity": "sha512-EMu5P62rKvU9QlFJMg8r7ANyb+we2DQna1z2uz6tDm4S9DomnULvX6eCeB3za4JH+QJtO5LOU5RV9JaZF3auig==", - "dev": true, + "node_modules/@microsoft/microsoft-graph-client": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-3.0.2.tgz", + "integrity": "sha512-eYDiApYmiGsm1s1jfAa/rhB2xQCsX4pWt0vCTd1LZmiApMQfT/c0hXj2hvpuGz5GrcLdugbu05xB79rIV57Pjw==", + "peer": true, "dependencies": { - "@microsoft/gulp-core-build": "3.17.19", - "@types/gulp": "4.0.6", - "@types/node": "10.17.13", - "colors": "~1.2.1", - "gulp": "~4.0.2", - "webpack": "~4.44.2" + "@babel/runtime": "^7.12.5", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependenciesMeta": { + "@azure/identity": { + "optional": true + }, + "@azure/msal-browser": { + "optional": true + }, + "buffer": { + "optional": true + }, + "stream-browserify": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, + "node_modules/@microsoft/microsoft-graph-clientv1": { + "name": "@microsoft/microsoft-graph-client", + "version": "1.7.2-spfx", + "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-1.7.2-spfx.tgz", + "integrity": "sha512-BQN50r3tohWYOaQ0de7LJ5eCRjI6eg4RQqLhGDlgRmZIZhWzH0bhR6QBMmmxtYtwKWifhPhJSxYDW+cP67TJVw==", "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "es6-promise": "^4.2.6", + "isomorphic-fetch": "^3.0.0", + "tslib": "^1.9.3" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true + "node_modules/@microsoft/microsoft-graph-clientv1/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true + "node_modules/@microsoft/microsoft-graph-types": { + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.40.0.tgz", + "integrity": "sha512-1fcPVrB/NkbNcGNfCy+Cgnvwxt6/sbIEEFgZHFBJ670zYLegENYJF8qMo7x3LqBjWX2/Eneq5BVVRCLTmlJN+g==" }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@microsoft/rush-lib": { + "version": "5.107.4", + "resolved": "https://registry.npmjs.org/@microsoft/rush-lib/-/rush-lib-5.107.4.tgz", + "integrity": "sha512-B9s0HhvXbQXHE14q2TcI9FMHYB0WvmlXTdXhsmumJ3tddJQd9jVxIdQd5H5OBGELULLc1UQnnTFAid4/cND6UA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@pnpm/dependency-path": "~2.1.2", + "@pnpm/link-bins": "~5.3.7", + "@rushstack/heft-config-file": "0.14.1", + "@rushstack/node-core-library": "3.60.1", + "@rushstack/package-deps-hash": "4.1.5", + "@rushstack/package-extractor": "0.6.6", + "@rushstack/rig-package": "0.5.1", + "@rushstack/rush-amazon-s3-build-cache-plugin": "5.107.4", + "@rushstack/rush-azure-storage-build-cache-plugin": "5.107.4", + "@rushstack/rush-http-build-cache-plugin": "5.107.4", + "@rushstack/stream-collator": "4.1.6", + "@rushstack/terminal": "0.7.5", + "@rushstack/ts-command-line": "4.16.1", + "@types/node-fetch": "2.6.2", + "@yarnpkg/lockfile": "~1.0.2", + "builtin-modules": "~3.1.0", + "cli-table": "~0.3.1", + "colors": "~1.2.1", + "dependency-path": "~9.2.8", + "fast-glob": "~3.3.1", + "figures": "3.0.0", + "git-repo-info": "~2.1.0", + "glob-escape": "~0.0.2", + "https-proxy-agent": "~5.0.0", + "ignore": "~5.1.6", + "inquirer": "~7.3.3", + "js-yaml": "~3.13.1", + "node-fetch": "2.6.7", + "npm-check": "~6.0.1", + "npm-package-arg": "~6.1.0", + "read-package-tree": "~5.1.5", + "rxjs": "~6.6.7", + "semver": "~7.5.4", + "ssri": "~8.0.0", + "strict-uri-encode": "~2.0.0", + "tapable": "2.2.1", + "tar": "~6.1.11", + "true-case-path": "~2.2.1", + "uuid": "~8.3.2" + }, + "engines": { + "node": ">=5.6.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@microsoft/rush-lib/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@microsoft/rush-lib/node_modules/@rushstack/rig-package": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.1.tgz", + "integrity": "sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@microsoft/rush-lib/node_modules/@rushstack/ts-command-line": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.16.1.tgz", + "integrity": "sha512-+OCsD553GYVLEmz12yiFjMOzuPeCiZ3f8wTiFHL30ZVXexTyPmgjwXEhg2K2P0a2lVf+8YBy7WtPoflB2Fp8/A==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@microsoft/rush-lib/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@microsoft/rush-lib/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@microsoft/rush-lib/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@microsoft/rush-lib/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, + "lru-cache": "^6.0.0" + }, "bin": { - "acorn": "bin/acorn" + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/@microsoft/rush-lib/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": "*" + "node": ">= 0.10" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/@microsoft/rush-lib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@microsoft/rush-lib/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/@microsoft/rush-stack-compiler-4.7": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-4.7/-/rush-stack-compiler-4.7-0.1.0.tgz", + "integrity": "sha512-fl7vWuAJjhsJWauSlUgC/ldF4vL8qmMX0LozTvHM5ICmM82O3exPFjLjvgw9q/niGt77P1OGIrwiDClCHfZQJQ==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "@microsoft/api-extractor": "~7.15.2", + "@rushstack/eslint-config": "~2.6.2", + "@rushstack/node-core-library": "~3.53.0", + "@types/node": "10.17.13", + "import-lazy": "~4.0.0", + "typescript": "~4.7.4" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "rush-api-extractor": "bin/rush-api-extractor", + "rush-eslint": "bin/rush-eslint", + "rush-tsc": "bin/rush-tsc", + "rush-tslint": "bin/rush-tslint" + }, + "peerDependencies": { + "eslint": "^8.7.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/eslint-config": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-config/-/eslint-config-2.6.2.tgz", + "integrity": "sha512-EcZENq5HlXe5XN9oFZ90K8y946zBXRgliNhy+378H0oK00v3FYADj8aSisEHS5OWz4HO0hYWe6IU57CNg+syYQ==", + "dev": true, + "dependencies": { + "@rushstack/eslint-patch": "1.1.4", + "@rushstack/eslint-plugin": "0.9.1", + "@rushstack/eslint-plugin-packlets": "0.4.1", + "@rushstack/eslint-plugin-security": "0.3.1", + "@typescript-eslint/eslint-plugin": "~5.20.0", + "@typescript-eslint/experimental-utils": "~5.20.0", + "@typescript-eslint/parser": "~5.20.0", + "@typescript-eslint/typescript-estree": "~5.20.0", + "eslint-plugin-promise": "~6.0.0", + "eslint-plugin-react": "~7.27.1", + "eslint-plugin-tsdoc": "~0.2.16" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0", + "typescript": ">=3.0.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/chownr": { + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/eslint-patch": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", + "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", "dev": true }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/eslint-plugin": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin/-/eslint-plugin-0.9.1.tgz", + "integrity": "sha512-iMfRyk9FE1xdhuenIYwDEjJ67u7ygeFw/XBGJC2j4GHclznHWRfSGiwTeYZ66H74h7NkVTuTp8RYw/x2iDblOA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "@rushstack/tree-pattern": "0.2.4", + "@typescript-eslint/experimental-utils": "~5.20.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/eslint-plugin-packlets": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-packlets/-/eslint-plugin-packlets-0.4.1.tgz", + "integrity": "sha512-A+mb+45fAUV6SRRlRy5EXrZAHNTnvOO3ONxw0hmRDcvyPAJwoX0ClkKQriz56QQE5SL4sPxhYoqbkoKbBmsxcA==", "dev": true, "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "@rushstack/tree-pattern": "0.2.4", + "@typescript-eslint/experimental-utils": "~5.20.0" }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/eslint-plugin-security": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.3.1.tgz", + "integrity": "sha512-LOBJj7SLPkeonBq2CD9cKqujwgc84YXJP18UXmGYl8xE3OM+Fwgnav7GzsakyvkeWJwq7EtpZjjSW8DTpwfA4w==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "@rushstack/tree-pattern": "0.2.4", + "@typescript-eslint/experimental-utils": "~5.20.0" }, - "engines": { - "node": ">=4.0.0" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/node-core-library": { + "version": "3.53.3", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.3.tgz", + "integrity": "sha512-H0+T5koi5MFhJUd5ND3dI3bwLhvlABetARl78L3lWftJVQEPyzcgTStvTTRiIM5mCltyTM8VYm6BuCtNUuxD0Q==", "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "@types/node": "12.20.24", + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.17.0", + "semver": "~7.3.0", + "z-schema": "~5.0.2" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/node-core-library/node_modules/@types/node": { + "version": "12.20.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", + "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "dev": true + }, + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@rushstack/tree-pattern": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@rushstack/tree-pattern/-/tree-pattern-0.2.4.tgz", + "integrity": "sha512-H8i0OinWsdKM1TKEKPeRRTw85e+/7AIFpxm7q1blceZJhuxRBjCGAUZvQXZK4CMLx75xPqh/h1t5WHwFmElAPA==", + "dev": true + }, + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz", + "integrity": "sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/type-utils": "5.20.0", + "@typescript-eslint/utils": "5.20.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/experimental-utils": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.20.0.tgz", + "integrity": "sha512-w5qtx2Wr9x13Dp/3ic9iGOGmVXK5gMwyc8rwVgZU46K9WTjPZSyPvdER9Ycy+B5lNHvoz+z2muWhUvlTpQeu+g==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "@typescript-eslint/utils": "5.20.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/parser": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.20.0.tgz", + "integrity": "sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", + "debug": "^4.3.2" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/scope-manager": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz", + "integrity": "sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/type-utils": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz", + "integrity": "sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@typescript-eslint/utils": "5.20.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" }, "engines": { - "node": "*" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/types": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz", + "integrity": "sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz", + "integrity": "sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/utils": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.20.0.tgz", + "integrity": "sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz", + "integrity": "sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@typescript-eslint/types": "5.20.0", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/make-dir": { + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, + "optional": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">= 4" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/@microsoft/rush-stack-compiler-4.7/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "find-up": "^3.0.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" + "node": ">=8.0.0" }, - "bin": { - "rimraf": "bin.js" + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/@microsoft/sp-build-core-tasks": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-build-core-tasks/-/sp-build-core-tasks-1.18.2.tgz", + "integrity": "sha512-QzqO7N7IZYUEGoTceelSQp4ZnjbBnOoJH+Y49MW2Xw5SAXFzqH3dwBBqsInvc1ehFZjqEVfD5Qb2AQMjTECMkw==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@microsoft/gulp-core-build": "3.18.1", + "@microsoft/gulp-core-build-serve": "3.12.1", + "@microsoft/gulp-core-build-webpack": "5.4.0", + "@microsoft/spfx-heft-plugins": "1.18.2", + "@rushstack/node-core-library": "3.61.0", + "@types/glob": "5.0.30", + "@types/lodash": "4.14.117", + "@types/webpack": "4.41.24", + "colors": "~1.2.1", + "glob": "~7.0.5", + "gulp": "4.0.2", + "lodash": "4.17.21", + "webpack": "~4.47.0" }, "engines": { - "node": ">= 4" - } - }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "node_modules/@microsoft/sp-build-core-tasks/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "figgy-pudding": "^3.5.1" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "node_modules/@microsoft/sp-build-core-tasks/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "optional": true, "engines": { - "node": ">=6" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "node_modules/@microsoft/sp-build-core-tasks/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "node_modules/@microsoft/sp-build-core-tasks/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">= 6.9.0" + "bin": { + "resolve": "bin/resolve" }, - "peerDependencies": { - "webpack": "^4.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/@microsoft/sp-build-core-tasks/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "node_modules/@microsoft/sp-build-core-tasks/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" + "engines": { + "node": ">= 0.10" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "node_modules/@microsoft/sp-build-core-tasks/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@microsoft/sp-build-core-tasks/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" }, "bin": { - "webpack": "bin/webpack.js" + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=8.0.0" }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/gulp-core-build-webpack/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/@microsoft/load-themed-styles": { - "version": "1.10.295", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", - "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==" + "node_modules/@microsoft/sp-build-web": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-build-web/-/sp-build-web-1.18.2.tgz", + "integrity": "sha512-q+5nT2EGvsU4aFgGYN/E1wskG5jZBHerCw8JGL5ANyHtAnc1m2TSNEZO/NrpfyeDsZxIqDZ353cVRZRiUj8aHw==", + "dev": true, + "dependencies": { + "@microsoft/gulp-core-build": "3.18.1", + "@microsoft/gulp-core-build-sass": "4.17.1", + "@microsoft/gulp-core-build-serve": "3.12.1", + "@microsoft/gulp-core-build-typescript": "8.6.1", + "@microsoft/gulp-core-build-webpack": "5.4.0", + "@microsoft/rush-lib": "5.107.4", + "@microsoft/sp-build-core-tasks": "1.18.2", + "@rushstack/node-core-library": "3.61.0", + "@types/webpack": "4.41.24", + "gulp": "4.0.2", + "postcss": "^8.4.19", + "semver": "~7.3.2", + "true-case-path": "~2.2.1", + "webpack": "~4.47.0", + "yargs": "~4.6.0" + }, + "engines": { + "node": ">=18.17.1 <19.0.0" + } }, - "node_modules/@microsoft/loader-load-themed-styles": { - "version": "1.9.174", - "resolved": "https://registry.npmjs.org/@microsoft/loader-load-themed-styles/-/loader-load-themed-styles-1.9.174.tgz", - "integrity": "sha512-BmsuGqKEq3faLOpfTj+k2BYa3CnxuoaRusOVc4WkY84Ycv+IBX1WW3jhslwWbmAOt7ryb6/RZpxZ7sHw6Iy8ow==", + "node_modules/@microsoft/sp-build-web/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "@microsoft/load-themed-styles": "1.10.292", - "loader-utils": "~1.1.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, "peerDependencies": { - "@types/webpack": "^4" + "@types/node": "*" }, "peerDependenciesMeta": { - "@types/webpack": { + "@types/node": { "optional": true } } }, - "node_modules/@microsoft/loader-load-themed-styles/node_modules/@microsoft/load-themed-styles": { - "version": "1.10.292", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", - "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", - "dev": true - }, - "node_modules/@microsoft/microsoft-graph-clientv1": { - "name": "@microsoft/microsoft-graph-client", - "version": "1.7.2-spfx", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-1.7.2-spfx.tgz", - "integrity": "sha512-BQN50r3tohWYOaQ0de7LJ5eCRjI6eg4RQqLhGDlgRmZIZhWzH0bhR6QBMmmxtYtwKWifhPhJSxYDW+cP67TJVw==", - "dependencies": { - "es6-promise": "^4.2.6", - "isomorphic-fetch": "^3.0.0", - "tslib": "^1.9.3" - } - }, - "node_modules/@microsoft/microsoft-graph-clientv1/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@microsoft/microsoft-graph-types": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.26.0.tgz", - "integrity": "sha512-ABYHb80BRF5Sjo1CdbRdZpI4O0Jal85XVAGmTfnpSMOjUZi0HkESHP+oajVsPSQJyRTjEKrbneUC2qheBBdQGg==" - }, - "node_modules/@microsoft/rush-lib": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@microsoft/rush-lib/-/rush-lib-5.79.0.tgz", - "integrity": "sha512-9FKABGIUiFZxgEVPVY7ObcoJ2OtIcaan1KeykjgcCYGjYOGliN4hl9FQ5e7UdpokNWU62c1zLfESQfnJPsyCGA==", + "node_modules/@microsoft/sp-build-web/node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@pnpm/link-bins": "~5.3.7", - "@rushstack/heft-config-file": "0.10.0", - "@rushstack/node-core-library": "3.52.0", - "@rushstack/package-deps-hash": "3.2.51", - "@rushstack/rig-package": "0.3.15", - "@rushstack/rush-amazon-s3-build-cache-plugin": "5.79.0", - "@rushstack/rush-azure-storage-build-cache-plugin": "5.79.0", - "@rushstack/stream-collator": "4.0.205", - "@rushstack/terminal": "0.3.74", - "@rushstack/ts-command-line": "4.12.3", - "@types/node-fetch": "1.6.9", - "@yarnpkg/lockfile": "~1.0.2", - "builtin-modules": "~3.1.0", - "cli-table": "~0.3.1", - "colors": "~1.2.1", - "git-repo-info": "~2.1.0", - "glob": "~7.0.5", - "glob-escape": "~0.0.2", - "https-proxy-agent": "~5.0.0", - "ignore": "~5.1.6", - "inquirer": "~7.3.3", - "js-yaml": "~3.13.1", - "jszip": "~3.7.1", - "lodash": "~4.17.15", - "node-fetch": "2.6.7", - "npm-package-arg": "~6.1.0", - "npm-packlist": "~2.1.2", - "read-package-tree": "~5.1.5", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "ssri": "~8.0.0", - "strict-uri-encode": "~2.0.0", - "tapable": "2.2.1", - "tar": "~6.1.11", - "true-case-path": "~2.2.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=5.6.0" + "node": ">=10" } }, - "node_modules/@microsoft/rush-lib/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@microsoft/sp-build-web/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/rush-lib/node_modules/@rushstack/rig-package": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.15.tgz", - "integrity": "sha512-jxVfvO5OnkRlYRhcVDZWvwiI2l4pv37HDJRtyg5HbD8Z/I8Xj32RICgrxS5xMeGGytobrg5S6OfPOHskg7Nw+A==", + "node_modules/@microsoft/sp-build-web/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/rush-lib/node_modules/@rushstack/ts-command-line": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.12.3.tgz", - "integrity": "sha512-Pdij22RotMXzI+HWHyYCvw0RMZhiP5a6Za/96XamZ1+mxmpSm4ujf8TROKxGAHySmR5A8iNVSlzhNMnUlFQE6g==", + "node_modules/@microsoft/sp-build-web/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } - }, - "node_modules/@microsoft/rush-lib/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@microsoft/rush-lib/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/rush-lib/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@microsoft/sp-build-web/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { "node": ">= 0.10" } }, - "node_modules/@microsoft/rush-lib/node_modules/z-schema": { + "node_modules/@microsoft/sp-build-web/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@microsoft/sp-build-web/node_modules/z-schema": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", @@ -3234,1959 +3417,1928 @@ "commander": "^9.4.1" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-4.5/-/rush-stack-compiler-4.5-0.2.2.tgz", - "integrity": "sha512-nRlomAZwOYUR3qmFxxVcn8A3wmkjQ4eS3hoKzYylOqEU8SYPFxDFSN4I+2Y+hGTYG0gpm3NSL4Wvb0I180pCbg==", - "dev": true, - "dependencies": { - "@microsoft/api-extractor": "~7.15.2", - "@rushstack/eslint-config": "~2.5.0", - "@rushstack/node-core-library": "~3.44.1", - "@types/node": "10.17.13", - "eslint": "8.7.0", - "import-lazy": "~4.0.0", - "typescript": "~4.5.5" + "node_modules/@microsoft/sp-component-base": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-component-base/-/sp-component-base-1.18.2.tgz", + "integrity": "sha512-POPKGkI1jZwdBr69lV+6tkpeztDuJHZbvwfU3LKO/fPpxQ8JdCM7Sb76702kLfMCtxXN6MMfUN/UfbilYb6aKg==", + "dependencies": { + "@fluentui/react": "^8.110.12", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-dynamic-data": "1.18.2", + "@microsoft/sp-http": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", + "@microsoft/sp-page-context": "1.18.2", + "tslib": "2.3.1" }, - "bin": { - "rush-api-extractor": "bin/rush-api-extractor", - "rush-eslint": "bin/rush-eslint", - "rush-tsc": "bin/rush-tsc", - "rush-tslint": "bin/rush-tslint" + "engines": { + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, + "node_modules/@microsoft/sp-core-library": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-core-library/-/sp-core-library-1.18.2.tgz", + "integrity": "sha512-CBhJiGw8vo/ZUEYG/uRDtceLxqs1xduCW1pAFOVGfnNH6ilw4NS8zT3PCptYUsqQzuvSQtKak7T7E5pb+jlCVA==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", + "@microsoft/sp-odata-types": "1.18.2", + "tslib": "2.3.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18.17.1 <19.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@types/react": ">=16.9.51 <18.0.0", + "@types/react-dom": ">=16.9.8 <18.0.0", + "react": ">=16.13.1 <18.0.0", + "react-dom": ">=16.13.1 <18.0.0" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "node_modules/@microsoft/sp-css-loader": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-css-loader/-/sp-css-loader-1.18.2.tgz", + "integrity": "sha512-PWrDru9YpZ1D0+d9qBOzuBV2iT4sv1Inb3iF+rgcW57z1VbEvzq7ohEqhYyOtgHyz6cDBV7MvaiqO6jhlzN19g==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" + "@microsoft/load-themed-styles": "1.10.292", + "@rushstack/node-core-library": "3.61.0", + "autoprefixer": "9.7.1", + "css-loader": "3.4.2", + "cssnano": "~5.1.14", + "loader-utils": "^1.4.2", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "~3.0.0", + "postcss-modules-local-by-default": "~4.0.0", + "postcss-modules-scope": "~3.0.0", + "postcss-modules-values": "~4.0.0", + "webpack": "~4.47.0" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@microsoft/sp-css-loader/node_modules/@microsoft/load-themed-styles": { + "version": "1.10.292", + "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", + "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", "dev": true }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@microsoft/sp-css-loader/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/node": "*" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "node_modules/@microsoft/sp-css-loader/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "color-convert": "^1.9.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=4" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/@microsoft/sp-css-loader/node_modules/autoprefixer": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", + "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "browserslist": "^4.7.2", + "caniuse-lite": "^1.0.30001006", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.21", + "postcss-value-parser": "^4.0.2" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=10.13.0" + "node": ">=6.0.0" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/@microsoft/sp-css-loader/node_modules/autoprefixer/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/@microsoft/sp-css-loader/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/@microsoft/sp-css-loader/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "color-name": "1.1.3" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/@microsoft/sp-css-loader/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@microsoft/sp-css-loader/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "optional": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/rush-stack-compiler-4.5/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@microsoft/sp-css-loader/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/@microsoft/sp-build-core-tasks": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-build-core-tasks/-/sp-build-core-tasks-1.16.1.tgz", - "integrity": "sha512-TXFQkzxPXYdc0rvI6vEc0VhuytKZy8TDlAW3K5bzC5DGm87QB+2N/IYVFMQ6jxavXO7uDFuItgavSGraOyeN1Q==", + "node_modules/@microsoft/sp-css-loader/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "dependencies": { - "@microsoft/gulp-core-build": "3.17.19", - "@microsoft/gulp-core-build-serve": "3.9.22", - "@microsoft/gulp-core-build-webpack": "5.2.28", - "@microsoft/spfx-heft-plugins": "1.16.1", - "@rushstack/node-core-library": "3.52.0", - "@types/glob": "5.0.30", - "@types/lodash": "4.14.117", - "@types/webpack": "4.41.24", - "colors": "~1.2.1", - "glob": "~7.0.5", - "gulp": "4.0.2", - "lodash": "4.17.21", - "webpack": "~4.44.2" - }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=4" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@microsoft/sp-css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "node_modules/@microsoft/sp-css-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@microsoft/sp-css-loader/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@microsoft/sp-css-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@microsoft/sp-css-loader/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@microsoft/sp-css-loader/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" + "engines": { + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "node_modules/@microsoft/sp-css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@microsoft/sp-css-loader/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, + "node_modules/@microsoft/sp-diagnostics": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-diagnostics/-/sp-diagnostics-1.18.2.tgz", + "integrity": "sha512-DfjtB2WdsPfPp+/e/OUu70UFflXgDSPIIH5ZnVUpNCImRIjD4g1FNd1XFIhkp6ih+SyZSYlDAWNBthM+0iTFqg==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2" + }, + "engines": { + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, + "node_modules/@microsoft/sp-dynamic-data": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-dynamic-data/-/sp-dynamic-data-1.18.2.tgz", + "integrity": "sha512-7KhogG7iCkfdqMjWuZIOScxTus32b/YnbsKiGiQxOMZthUnguRC2MWr5+KvNiiNBHmoIPXXP1vG3hCD4nAmX9A==", + "dependencies": { + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", + "tslib": "2.3.1" + }, + "engines": { + "node": ">=18.17.1 <19.0.0" + } + }, + "node_modules/@microsoft/sp-http": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-http/-/sp-http-1.18.2.tgz", + "integrity": "sha512-u22g6TehpW4dHBz2QUY/2la3NKYdvJDgbM5dJ/5cAyukVWR3gpZ/DBTTx+I9NI9UPgYTJv2Gw5HMqExBcMCeHw==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@microsoft/microsoft-graph-clientv1": "npm:@microsoft/microsoft-graph-client@1.7.2-spfx", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-http-base": "1.18.2", + "@microsoft/sp-http-msgraph": "1.18.2", + "tslib": "2.3.1" + }, + "engines": { + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, + "node_modules/@microsoft/sp-http-base": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-http-base/-/sp-http-base-1.18.2.tgz", + "integrity": "sha512-kedmfpvArM/qmRQKXuUfMYPj4Hd18dfT9jeHv3E2eD40UDMMXp0ghMyvyu5PLDHruG700jUCVmY4bhIbXPguLA==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@azure/msal-browser": "2.28.1", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-page-context": "1.18.2", + "@microsoft/teams-js-v2": "npm:@microsoft/teams-js@2.12.0", + "adal-angular": "1.0.16", + "msalBrowserLegacy": "npm:@azure/msal-browser@2.22.0", + "msalLegacy": "npm:msal@1.4.12", + "tslib": "2.3.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, + "node_modules/@microsoft/sp-http-msgraph": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-http-msgraph/-/sp-http-msgraph-1.18.2.tgz", + "integrity": "sha512-NY1kHavTQoSUawZ+K4nxMWHZn/70epj16fyygQgAA7ooxImJ+L6p0UVCEJh25S+r058+Mm5OUmWeWmmqNDX74Q==", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "@microsoft/microsoft-graph-clientv1": "npm:@microsoft/microsoft-graph-client@1.7.2-spfx", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-http-base": "1.18.2", + "@microsoft/sp-loader": "1.18.2", + "tslib": "2.3.1" + }, + "peerDependencies": { + "@microsoft/microsoft-graph-client": "3.0.2" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "node_modules/@microsoft/sp-image-helper": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-image-helper/-/sp-image-helper-1.18.2.tgz", + "integrity": "sha512-nSKfKdClZCGBwtpJG23XGef6Hnqifvvh4OKbExBc460LRn7JT2AXSiIM9gRNkp7AyfrksqHCq4EbUzEnOWy1Qw==", + "dependencies": { + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-http": "1.18.2", + "@microsoft/sp-http-base": "1.18.2", + "@microsoft/sp-loader": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-page-context": "1.18.2", + "tslib": "2.3.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=18.17.1 <19.0.0" + }, + "peerDependencies": { + "@types/react": ">=16.9.51 <18.0.0", + "@types/react-dom": ">=16.9.8 <18.0.0", + "react": ">=16.13.1 <18.0.0", + "react-dom": ">=16.13.1 <18.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, + "node_modules/@microsoft/sp-loader": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-loader/-/sp-loader-1.18.2.tgz", + "integrity": "sha512-IXE8tGvVWSRbV8WU7WdVpvuA9CAcJUJfnrk2Ef6ygUgxullJnWv7LddiBDDiqm74AkI4dSUDPVPvi45NBHMWQg==", + "dependencies": { + "@fluentui/react": "^8.110.12", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-dynamic-data": "1.18.2", + "@microsoft/sp-http-base": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", + "@microsoft/sp-odata-types": "1.18.2", + "@microsoft/sp-page-context": "1.18.2", + "@rushstack/loader-raw-script": "1.4.7", + "@types/requirejs": "2.1.29", + "raw-loader": "~0.5.1", + "react": "17.0.1", + "react-dom": "17.0.1", + "requirejs": "2.3.6", + "tslib": "2.3.1" + }, "engines": { - "node": "*" + "node": ">=18.17.1 <19.0.0" + }, + "peerDependencies": { + "@types/react": ">=16.9.51 <18.0.0", + "@types/react-dom": ">=16.9.8 <18.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, + "node_modules/@microsoft/sp-loader/node_modules/react": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", + "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, + "node_modules/@microsoft/sp-loader/node_modules/react-dom": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", + "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", "dependencies": { - "is-extendable": "^0.1.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "17.0.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, + "node_modules/@microsoft/sp-lodash-subset": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-lodash-subset/-/sp-lodash-subset-1.18.2.tgz", + "integrity": "sha512-RcPAiSq+sDxP78pswo/pnBR7OQIQ8Nvd+MX9ObZofJa/5dSJfC3j/Q5s9jEiCo6sIi4fHSW1W47/eg8WvKoumQ==", "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "@types/lodash": "4.14.117", + "tslib": "2.3.1" + }, + "engines": { + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/cacache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "node_modules/@microsoft/sp-module-interfaces": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-module-interfaces/-/sp-module-interfaces-1.18.2.tgz", + "integrity": "sha512-uaB21IZj3/j/nGOXRR4Lzl0v44Cpq5V/DH4zzj06J416I0eOCXSNthzTkuZMReIknL968ZlVwEDnrT3qxwbWYg==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@rushstack/node-core-library": "3.61.0", + "z-schema": "4.2.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "node_modules/@microsoft/sp-module-interfaces/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", + "dependencies": { + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, + "node_modules/@microsoft/sp-module-interfaces/node_modules/@rushstack/node-core-library/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "optional": true, "engines": { - "node": ">= 4" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, + "node_modules/@microsoft/sp-module-interfaces/node_modules/@rushstack/node-core-library/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=6.9.0" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, + "node_modules/@microsoft/sp-module-interfaces/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, + "node_modules/@microsoft/sp-module-interfaces/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@microsoft/sp-module-interfaces/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, + "node_modules/@microsoft/sp-module-interfaces/node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", "engines": { - "node": ">=4.0" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/fill-range": { + "node_modules/@microsoft/sp-module-interfaces/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@microsoft/sp-module-interfaces/node_modules/z-schema": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.4.tgz", + "integrity": "sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==", "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.6.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" + }, + "optionalDependencies": { + "commander": "^2.7.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, + "node_modules/@microsoft/sp-odata-types": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-odata-types/-/sp-odata-types-1.18.2.tgz", + "integrity": "sha512-giCVKR+ZQ20mcwkKX5Osq5RExdVhHDIc2t5yXdF20F/sBqQLQQiiVeIQSFFhhDyfLeHyC+u4Zhw/0SR8PO9OVw==", "dependencies": { - "is-extendable": "^0.1.0" + "tslib": "2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, + "node_modules/@microsoft/sp-office-ui-fabric-core": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-office-ui-fabric-core/-/sp-office-ui-fabric-core-1.18.2.tgz", + "integrity": "sha512-glpgTxu4h5EOMOv6eJoDvEaC7vBi1fn2CS4jPEgFPaEksYq4tZCZbWqM+xsWf91xje3V+a+Mu/fM7tUaA3zybg==", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "office-ui-fabric-core": "11.0.1", + "tslib": "2.3.1" }, "engines": { - "node": ">=6" + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" + "node_modules/@microsoft/sp-page-context": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-page-context/-/sp-page-context-1.18.2.tgz", + "integrity": "sha512-ux0atGLKYvHMcIQdBOIPQnjtG+wohVU6rB81kbxlJVmfnXYD2Rkng5q8v+fgxQvKRA1EAwtILP8TPN0KUZRIvQ==", + "dependencies": { + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-dynamic-data": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-odata-types": "1.18.2", + "tslib": "2.3.1" }, "engines": { - "node": ">=6" + "node": ">=18.17.1 <19.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, + "node_modules/@microsoft/sp-property-pane": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-property-pane/-/sp-property-pane-1.18.2.tgz", + "integrity": "sha512-7KpylwJ3KyFpe4q54Q4++/2E52XEFan8NdQU6kRl9o4/assWB8DokF83KMiGLkEte4NZhXgxyAYAj39RyHUzIA==", + "dependencies": { + "@fluentui/react": "^8.110.12", + "@microsoft/sp-component-base": "1.18.2", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-dynamic-data": "1.18.2", + "@microsoft/sp-image-helper": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-page-context": "1.18.2", + "react": "17.0.1", + "react-dom": "17.0.1", + "tslib": "2.3.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18.17.1 <19.0.0" + }, + "peerDependencies": { + "@types/react": ">=16.9.51 <18.0.0", + "@types/react-dom": ">=16.9.8 <18.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, + "node_modules/@microsoft/sp-property-pane/node_modules/react": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", + "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", "dependencies": { - "kind-of": "^3.0.2" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, + "node_modules/@microsoft/sp-property-pane/node_modules/react-dom": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", + "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", "dependencies": { - "is-buffer": "^1.1.5" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "17.0.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, + "node_modules/@microsoft/sp-top-actions": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-top-actions/-/sp-top-actions-1.18.2.tgz", + "integrity": "sha512-kKxTB/Bj352OCAGKidgk7WtHcXvHUdH1srnsMS3FgbgRCHqK0K7A2EZRSRYothxrn4TwGHXN7gNbLQfstk521Q==" + }, + "node_modules/@microsoft/sp-webpart-base": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/sp-webpart-base/-/sp-webpart-base-1.18.2.tgz", + "integrity": "sha512-HFOnWHb5TL5+m+5aIpSsFh9jK0o2PhtNe/PsmXVPxnSKtQiJE3dxRhEFKZfashERM4SM5GprWjcLH9V8zz/lPQ==", + "dependencies": { + "@fluentui/react": "^8.110.12", + "@microsoft/sp-component-base": "1.18.2", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-diagnostics": "1.18.2", + "@microsoft/sp-dynamic-data": "1.18.2", + "@microsoft/sp-http": "1.18.2", + "@microsoft/sp-http-base": "1.18.2", + "@microsoft/sp-loader": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", + "@microsoft/sp-page-context": "1.18.2", + "@microsoft/sp-property-pane": "1.18.2", + "@microsoft/sp-top-actions": "1.18.2", + "@microsoft/teams-js-v2": "npm:@microsoft/teams-js@2.12.0", + "@types/office-js": "1.0.36", + "react": "17.0.1", + "react-dom": "17.0.1", + "tslib": "2.3.1" + }, "engines": { - "node": ">=4" + "node": ">=18.17.1 <19.0.0" + }, + "peerDependencies": { + "@types/react": ">=16.9.51 <18.0.0", + "@types/react-dom": ">=16.9.8 <18.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, + "node_modules/@microsoft/sp-webpart-base/node_modules/react": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", + "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", "dependencies": { - "minimist": "^1.2.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node_modules/@microsoft/sp-webpart-base/node_modules/react-dom": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", + "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.1" + }, + "peerDependencies": { + "react": "17.0.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/@microsoft/spfx-heft-plugins": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/spfx-heft-plugins/-/spfx-heft-plugins-1.18.2.tgz", + "integrity": "sha512-gc6QDEzqq6v6RiVNwKB96+BTF5ezBLtCqQ5TKDVxbLF1Y86SnYbiJlCJTs++BDvW4JqJMMcjQGgppwG99W0NRA==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "@azure/storage-blob": "~12.11.0", + "@microsoft/load-themed-styles": "1.10.292", + "@microsoft/loader-load-themed-styles": "2.1.7", + "@microsoft/rush-lib": "5.107.4", + "@microsoft/sp-css-loader": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", + "@rushstack/heft-config-file": "0.14.2", + "@rushstack/localization-utilities": "0.9.7", + "@rushstack/node-core-library": "3.61.0", + "@rushstack/rig-package": "0.5.1", + "@rushstack/set-webpack-public-path-plugin": "4.1.7", + "@rushstack/terminal": "0.7.7", + "@rushstack/webpack4-localization-plugin": "0.18.7", + "@rushstack/webpack4-module-minifier-plugin": "0.13.7", + "@types/tapable": "1.0.6", + "autoprefixer": "9.7.1", + "colors": "~1.2.1", + "copy-webpack-plugin": "~6.0.3", + "css-loader": "3.4.2", + "cssnano": "~5.1.14", + "express": "4.18.1", + "file-loader": "6.1.0", + "git-repo-info": "~2.1.1", + "glob": "~7.0.5", + "html-loader": "~0.5.1", + "jszip": "~3.8.0", + "lodash": "4.17.21", + "mime": "2.5.2", + "postcss": "^8.4.19", + "postcss-loader": "^4.2.0", + "resolve": "~1.17.0", + "source-map": "0.6.1", + "source-map-loader": "1.1.3", + "tapable": "1.1.3", + "true-case-path": "~2.2.1", + "uuid": "^9.0.0", + "webpack": "~4.47.0", + "webpack-dev-server": "~4.9.3", + "webpack-sources": "1.4.3", + "xml": "~1.0.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/@microsoft/load-themed-styles": { + "version": "1.10.292", + "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", + "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", + "dev": true + }, + "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/heft-config-file": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.14.2.tgz", + "integrity": "sha512-X29DqXN6dyvkZm4hIewFkCCub1lxY8LPsyWSYqkuZ1E5f70ibKBp8P+nf2QzjQ7XcJzqDuq5fWrvPzi5N6M5lg==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@rushstack/node-core-library": "3.61.0", + "@rushstack/rig-package": "0.5.1", + "jsonpath-plus": "~4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/node-core-library/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, "bin": { - "semver": "bin/semver" + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/rig-package": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.1.tgz", + "integrity": "sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/rig-package/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "mkdirp": "bin/cmd.js" + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/terminal": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.7.7.tgz", + "integrity": "sha512-Onaz61ll33U7JhJ3STtdpO+ITSdeuNc7S/4MpYxc2d7kJ13MYef1bC6ZKLpQ4dxDbhdjv4LuqZ/RW7ilFAaYAA==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "@rushstack/node-core-library": "3.61.0" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@types/node": "*" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "color-convert": "^1.9.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, "engines": { "node": ">=4" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/autoprefixer": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", + "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", "dev": true, + "dependencies": { + "browserslist": "^4.7.2", + "caniuse-lite": "^1.0.30001006", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.21", + "postcss-value-parser": "^4.0.2" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/autoprefixer/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "find-up": "^3.0.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">=6" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.8" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 4" + "node": ">=4" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" + "node_modules/@microsoft/spfx-heft-plugins/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/tapable": { + "node_modules/@microsoft/spfx-heft-plugins/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@microsoft/spfx-heft-plugins/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "optional": true, "engines": { - "node": ">=6" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.6" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" + "node": ">= 0.6" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, + "ms": "2.0.0" + } + }, + "node_modules/@microsoft/spfx-heft-plugins/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } + "node": ">= 0.10.0" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">= 0.8" } }, - "node_modules/@microsoft/sp-build-core-tasks/node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "optional": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=4" } }, - "node_modules/@microsoft/sp-build-web": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-build-web/-/sp-build-web-1.16.1.tgz", - "integrity": "sha512-qiZT6yU9EkAHOsq0r65cDgalWYUfdB7GFrvxJHUbOUlFtbkjOfzujddyGBH5JK/xJ6bPTZMZRFKFh1xzElVwBQ==", - "dev": true, - "dependencies": { - "@microsoft/gulp-core-build": "3.17.19", - "@microsoft/gulp-core-build-sass": "4.16.0", - "@microsoft/gulp-core-build-serve": "3.9.22", - "@microsoft/gulp-core-build-typescript": "8.5.33", - "@microsoft/gulp-core-build-webpack": "5.2.28", - "@microsoft/rush-lib": "5.79.0", - "@microsoft/sp-build-core-tasks": "1.16.1", - "@rushstack/node-core-library": "3.52.0", - "@types/webpack": "4.41.24", - "gulp": "4.0.2", - "semver": "~7.3.2", - "true-case-path": "~2.2.1", - "webpack": "~4.44.2", - "yargs": "~4.6.0" + "node_modules/@microsoft/spfx-heft-plugins/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">= 0.8" } }, - "node_modules/@microsoft/sp-build-web/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@microsoft/sp-build-web/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-web/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/@microsoft/sp-build-web/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "bin": { - "acorn": "bin/acorn" + "mime": "cli.js" }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/@microsoft/sp-build-web/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } + "node_modules/@microsoft/spfx-heft-plugins/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/@microsoft/sp-build-web/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/@microsoft/sp-build-web/node_modules/braces/node_modules/extend-shallow": { + "node_modules/@microsoft/spfx-heft-plugins/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/@microsoft/spfx-heft-plugins/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/@microsoft/sp-build-web/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@microsoft/sp-build-web/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "node_modules/@microsoft/spfx-heft-plugins/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/@microsoft/sp-build-web/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "node_modules/@microsoft/spfx-heft-plugins/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } }, - "node_modules/@microsoft/sp-build-web/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": ">= 4" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-build-web/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "node_modules/@microsoft/spfx-heft-plugins/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@microsoft/spfx-heft-plugins/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=6.9.0" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-build-web/node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/@microsoft/teams-js-v2": { + "name": "@microsoft/teams-js", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-2.12.0.tgz", + "integrity": "sha512-4gBtIC/Jc4elZ+R9i1LR+4QFwTAPtJ4P1MsCMDafe3HLtFGu/ZQngG9jZkWQ4A/rP4z1wNaDNn39XC+dLfURHQ==", + "dependencies": { + "debug": "^4.3.3" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", + "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", "dev": true, "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "@microsoft/tsdoc": "0.13.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-build-web/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=4.0.0" + "node": ">= 8" } }, - "node_modules/@microsoft/sp-build-web/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">= 8" } }, - "node_modules/@microsoft/sp-build-web/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/@microsoft/sp-build-web/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" } }, - "node_modules/@microsoft/sp-build-web/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-web/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/@opentelemetry/api": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", + "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/@microsoft/sp-build-web/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "node_modules/@pnp/core": { + "version": "4.0.0-alpha0-v4nightly.20240412", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240412.tgz", + "integrity": "sha512-CETGc6aYHRPSQtKRXLUKv5COLVy28QhKfjeqTEXmaleweRfRghvf3X0AYijYROQJL6//m5pHusA84skSwEI1iw==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "tslib": "2.4.1" }, "engines": { - "node": "*" + "node": ">=18.12.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" } }, - "node_modules/@microsoft/sp-build-web/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@pnp/core/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, - "node_modules/@microsoft/sp-build-web/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, + "node_modules/@pnp/graph": { + "version": "4.0.0-alpha0-v4nightly.20240412", + "resolved": "https://registry.npmjs.org/@pnp/graph/-/graph-4.0.0-alpha0-v4nightly.20240412.tgz", + "integrity": "sha512-6XsUED+ad0W7gnkQYK0W1DHBXB4veTP8QuPwtcDSrMzH48/bHHWRKudgwrGJGyj9rK1Fz3eaYyxFAj0lXhiTvQ==", "dependencies": { - "kind-of": "^3.0.2" + "@microsoft/microsoft-graph-types": "2.40.0", + "@pnp/core": "4.0.0-alpha0-v4nightly.20240412", + "@pnp/queryable": "4.0.0-alpha0-v4nightly.20240412", + "tslib": "2.6.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=18.12.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" } }, - "node_modules/@microsoft/sp-build-web/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, + "node_modules/@pnp/graph/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@pnp/logging": { + "version": "4.0.0-alpha0-v4nightly.20240412", + "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-4.0.0-alpha0-v4nightly.20240412.tgz", + "integrity": "sha512-l9QLYZaXgRFQBIJN6R7EQFD2h/s9r3i6arQPSNM4IHzHpq1TDKuFz/WK/EmPYyYLrAf3OeOp4/8CsGyD1FAeCw==", "dependencies": { - "is-buffer": "^1.1.5" + "tslib": "2.4.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=18.12.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" } }, - "node_modules/@microsoft/sp-build-web/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/@pnp/logging/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, - "node_modules/@microsoft/sp-build-web/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, + "node_modules/@pnp/queryable": { + "version": "4.0.0-alpha0-v4nightly.20240412", + "resolved": "https://registry.npmjs.org/@pnp/queryable/-/queryable-4.0.0-alpha0-v4nightly.20240412.tgz", + "integrity": "sha512-lKExbFgeccpSzs7qPSsN4qX8vS8Sp2BAT/FjECYNjyPjKhgP9wox1zC0BVR6W0gbAdHE+nAhBn6DxL/8vdtMEQ==", "dependencies": { - "minimist": "^1.2.0" + "@pnp/core": "4.0.0-alpha0-v4nightly.20240412", + "tslib": "2.4.1" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=18.12.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" } }, - "node_modules/@microsoft/sp-build-web/node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } + "node_modules/@pnp/queryable/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, - "node_modules/@microsoft/sp-build-web/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, + "node_modules/@pnp/sp": { + "version": "4.0.0-alpha0-v4nightly.20240412", + "resolved": "https://registry.npmjs.org/@pnp/sp/-/sp-4.0.0-alpha0-v4nightly.20240412.tgz", + "integrity": "sha512-M8KBzH3+R5odmeefrR6KKh6BOquXKxfIGJ6wXp67qDtdifE8cOY18ObFPyLOnReaA80R0VKrYhrrM1vPsrWY1g==", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "@pnp/core": "4.0.0-alpha0-v4nightly.20240412", + "@pnp/queryable": "4.0.0-alpha0-v4nightly.20240412", + "tslib": "2.4.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=18.12.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/patrick-rodgers/" } }, - "node_modules/@microsoft/sp-build-web/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/@pnp/sp/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/@pnpm/crypto.base32-hash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@pnpm/crypto.base32-hash/-/crypto.base32-hash-2.0.0.tgz", + "integrity": "sha512-3ttOeHBpmWRbgJrpDQ8Nwd3W8s8iuiP5YZM0JRyKWaMtX8lu9d7/AKyxPmhYsMJuN+q/1dwHa7QFeDZJ53b0oA==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "rfc4648": "^1.5.2" }, "engines": { - "node": ">=6" + "node": ">=16.14" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/@pnpm/dependency-path": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@pnpm/dependency-path/-/dependency-path-2.1.8.tgz", + "integrity": "sha512-ywBaTjy0iSEF7lH3DlF8UXrdL2bw4AQFV2tTOeNeY7wc1W5CE+RHSJhf9MXBYcZPesqGRrPiU7Pimj3l05L9VA==", "dev": true, "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "@pnpm/crypto.base32-hash": "2.0.0", + "@pnpm/types": "9.4.2", + "encode-registry": "^3.0.1", + "semver": "^7.5.4" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">=16.14" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/@pnpm/dependency-path/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-web/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/@pnpm/dependency-path/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "lru-cache": "^6.0.0" }, "bin": { - "mkdirp": "bin/cmd.js" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-build-web/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@pnpm/dependency-path/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@pnpm/error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pnpm/error/-/error-1.4.0.tgz", + "integrity": "sha512-vxkRrkneBPVmP23kyjnYwVOtipwlSl6UfL+h+Xa3TrABJTz5rYBXemlTsU5BzST8U4pD7YDkTb3SQu+MMuIDKA==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/@pnpm/link-bins": { + "version": "5.3.25", + "resolved": "https://registry.npmjs.org/@pnpm/link-bins/-/link-bins-5.3.25.tgz", + "integrity": "sha512-9Xq8lLNRHFDqvYPXPgaiKkZ4rtdsm7izwM/cUsFDc5IMnG0QYIVBXQbgwhz2UvjUotbJrvfKLJaCfA3NGBnLDg==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "@pnpm/error": "1.4.0", + "@pnpm/package-bins": "4.1.0", + "@pnpm/read-modules-dir": "2.0.3", + "@pnpm/read-package-json": "4.0.0", + "@pnpm/read-project-manifest": "1.1.7", + "@pnpm/types": "6.4.0", + "@zkochan/cmd-shim": "^5.0.0", + "is-subdir": "^1.1.1", + "is-windows": "^1.0.2", + "mz": "^2.7.0", + "normalize-path": "^3.0.0", + "p-settle": "^4.1.1", + "ramda": "^0.27.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=10.16" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/@pnpm/link-bins/node_modules/@pnpm/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-6.4.0.tgz", + "integrity": "sha512-nco4+4sZqNHn60Y4VE/fbtlShCBqipyUO+nKRPvDHqLrecMW9pzHWMVRxk4nrMRoeowj3q0rX3GYRBa8lsHTAg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10.16" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/@pnpm/package-bins": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/package-bins/-/package-bins-4.1.0.tgz", + "integrity": "sha512-57/ioGYLBbVRR80Ux9/q2i3y8Q+uQADc3c+Yse8jr/60YLOi3jcWz13e2Jy+ANYtZI258Qc5wk2X077rp0Ly/Q==", "dev": true, "dependencies": { - "find-up": "^3.0.0" + "@pnpm/types": "6.4.0", + "fast-glob": "^3.2.4", + "is-subdir": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">=10.16" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/@pnpm/package-bins/node_modules/@pnpm/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-6.4.0.tgz", + "integrity": "sha512-nco4+4sZqNHn60Y4VE/fbtlShCBqipyUO+nKRPvDHqLrecMW9pzHWMVRxk4nrMRoeowj3q0rX3GYRBa8lsHTAg==", "dev": true, - "dependencies": { - "glob": "^7.1.3" + "engines": { + "node": ">=10.16" }, - "bin": { - "rimraf": "bin.js" + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/@pnpm/read-modules-dir": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@pnpm/read-modules-dir/-/read-modules-dir-2.0.3.tgz", + "integrity": "sha512-i9OgRvSlxrTS9a2oXokhDxvQzDtfqtsooJ9jaGoHkznue5aFCTSrNZFQ6M18o8hC03QWfnxaKi0BtOvNkKu2+A==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "mz": "^2.7.0" }, "engines": { - "node": ">= 4" + "node": ">=10.13" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "node_modules/@pnpm/read-package-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@pnpm/read-package-json/-/read-package-json-4.0.0.tgz", + "integrity": "sha512-1cr2tEwe4YU6SI0Hmg+wnsr6yxBt2iJtqv6wrF84On8pS9hx4A2PLw3CIgbwxaG0b+ur5wzhNogwl4qD5FLFNg==", "dev": true, "dependencies": { - "figgy-pudding": "^3.5.1" + "@pnpm/error": "1.4.0", + "@pnpm/types": "6.4.0", + "load-json-file": "^6.2.0", + "normalize-package-data": "^3.0.2" + }, + "engines": { + "node": ">=10.16" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "node_modules/@pnpm/read-package-json/node_modules/@pnpm/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-6.4.0.tgz", + "integrity": "sha512-nco4+4sZqNHn60Y4VE/fbtlShCBqipyUO+nKRPvDHqLrecMW9pzHWMVRxk4nrMRoeowj3q0rX3GYRBa8lsHTAg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10.16" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "node_modules/@pnpm/read-project-manifest": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@pnpm/read-project-manifest/-/read-project-manifest-1.1.7.tgz", + "integrity": "sha512-tj8ExXZeDcMmMUj7D292ETe/RiEirr1X1wpT6Zy85z2MrFYoG9jfCJpps40OdZBNZBhxbuKtGPWKVSgXD0yrVw==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "@pnpm/error": "1.4.0", + "@pnpm/types": "6.4.0", + "@pnpm/write-project-manifest": "1.1.7", + "detect-indent": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "graceful-fs": "4.2.4", + "is-windows": "^1.0.2", + "json5": "^2.1.3", + "parse-json": "^5.1.0", + "read-yaml-file": "^2.0.0", + "sort-keys": "^4.1.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "node": ">=10.16" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@pnpm/read-project-manifest/node_modules/@pnpm/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-6.4.0.tgz", + "integrity": "sha512-nco4+4sZqNHn60Y4VE/fbtlShCBqipyUO+nKRPvDHqLrecMW9pzHWMVRxk4nrMRoeowj3q0rX3GYRBa8lsHTAg==", "dev": true, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/@microsoft/sp-build-web/node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "node": ">=10.16" }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "node_modules/@pnpm/read-project-manifest/node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "node_modules/@pnpm/types": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-9.4.2.tgz", + "integrity": "sha512-g1hcF8Nv4gd76POilz9gD4LITAPXOe5nX4ijgr8ixCbLQZfcpYiMfJ+C1RlMNRUDo8vhlNB4O3bUlxmT6EAQXA==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, "engines": { - "node": ">=6.11.5" + "node": ">=16.14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/@microsoft/sp-build-web/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/@pnpm/write-project-manifest": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@pnpm/write-project-manifest/-/write-project-manifest-1.1.7.tgz", + "integrity": "sha512-OLkDZSqkA1mkoPNPvLFXyI6fb0enCuFji6Zfditi/CLAo9kmIhQFmEUDu4krSB8i908EljG8YwL5Xjxzm5wsWA==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "@pnpm/types": "6.4.0", + "json5": "^2.1.3", + "mz": "^2.7.0", + "write-file-atomic": "^3.0.3", + "write-yaml-file": "^4.1.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.16" }, - "optionalDependencies": { - "commander": "^9.4.1" + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-build-web/node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/@pnpm/write-project-manifest/node_modules/@pnpm/types": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-6.4.0.tgz", + "integrity": "sha512-nco4+4sZqNHn60Y4VE/fbtlShCBqipyUO+nKRPvDHqLrecMW9pzHWMVRxk4nrMRoeowj3q0rX3GYRBa8lsHTAg==", "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@microsoft/sp-component-base": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-component-base/-/sp-component-base-1.16.1.tgz", - "integrity": "sha512-fS7E2fUgyUAn5YpdJUvG0T7kQejU3EHWD58GKK6boa1hD4FcDvAnBxt2yiqKffxtGt44CsGdHqiuK9olyFMFQw==", - "dependencies": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-http": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "office-ui-fabric-react": "^7.199.1", - "tslib": "2.3.1" - }, - "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" - } - }, - "node_modules/@microsoft/sp-core-library": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-core-library/-/sp-core-library-1.16.1.tgz", - "integrity": "sha512-1BwUFqW0rycMI7WJ4WJya/VSxnOmsPlSIY4ZXoI9IMGl0JR2E0pZWd23Z7oQAmqUmohyHssIpOjaQF/qo1fSmg==", - "dependencies": { - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-odata-types": "1.16.1", - "tslib": "2.3.1" - }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=10.16" }, - "peerDependencies": { - "@types/react": ">=16.9.51 <18.0.0", - "@types/react-dom": ">=16.9.8 <18.0.0", - "react": ">=16.13.1 <18.0.0", - "react-dom": ">=16.13.1 <18.0.0" + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/@microsoft/sp-css-loader": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-css-loader/-/sp-css-loader-1.16.1.tgz", - "integrity": "sha512-4wNATfkBcK29k+vKn86/QwCSijjpLEqXi5/pYvvgOjhzKfHP2MC3mIU8SsWRUpN5XG8Z3DnDU9P0G2q2hk18hA==", + "node_modules/@rushstack/debug-certificate-manager": { + "version": "1.1.84", + "resolved": "https://registry.npmjs.org/@rushstack/debug-certificate-manager/-/debug-certificate-manager-1.1.84.tgz", + "integrity": "sha512-GondfbezgkjT9U6WdMRdjJMkkYkUf/w2YiFKX2wUrmXyNmoApzpu8fXC3sDHb2LXKR7MvBNDY5YrpLooEYJhUg==", "dev": true, "dependencies": { - "@microsoft/load-themed-styles": "1.10.292", - "@rushstack/node-core-library": "3.52.0", - "autoprefixer": "9.7.1", - "css-loader": "3.4.2", - "cssnano": "~4.1.10", - "loader-utils": "1.2.3", - "postcss": "~8.1.0", - "postcss-modules-extract-imports": "~3.0.0", - "postcss-modules-local-by-default": "~4.0.0", - "postcss-modules-scope": "~3.0.0", - "postcss-modules-values": "~4.0.0", - "webpack": "~4.44.2" + "@rushstack/node-core-library": "3.53.2", + "node-forge": "~1.3.1", + "sudo": "~1.0.3" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@microsoft/load-themed-styles": { - "version": "1.10.292", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", - "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", - "dev": true - }, - "node_modules/@microsoft/sp-css-loader/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@rushstack/debug-certificate-manager/node_modules/@rushstack/node-core-library": { + "version": "3.53.2", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.2.tgz", + "integrity": "sha512-FggLe5DQs0X9MNFeJN3/EXwb+8hyZUTEp2i+V1e8r4Va4JgkjBNY0BuEaQI+3DW6S4apV3UtXU3im17MSY00DA==", "dev": true, "dependencies": { "@types/node": "12.20.24", @@ -5199,1071 +5351,1117 @@ "z-schema": "~5.0.2" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@types/node": { + "node_modules/@rushstack/debug-certificate-manager/node_modules/@types/node": { "version": "12.20.24", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", "dev": true }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@rushstack/debug-certificate-manager/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true + "node_modules/@rushstack/debug-certificate-manager/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@rushstack/debug-certificate-manager/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@rushstack/eslint-config": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-config/-/eslint-config-2.5.1.tgz", + "integrity": "sha512-pcDQ/fmJEIqe5oZiP84bYZ1N7QoDfd+5G+e7GIobOwM793dX/SdRKqcJvGlzyBB92eo6rG7/qRnP2VVQN2pdbQ==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@rushstack/eslint-patch": "1.1.0", + "@rushstack/eslint-plugin": "0.8.4", + "@rushstack/eslint-plugin-packlets": "0.3.4", + "@rushstack/eslint-plugin-security": "0.2.4", + "@typescript-eslint/eslint-plugin": "~5.6.0", + "@typescript-eslint/experimental-utils": "~5.6.0", + "@typescript-eslint/parser": "~5.6.0", + "@typescript-eslint/typescript-estree": "~5.6.0", + "eslint-plugin-promise": "~6.0.0", + "eslint-plugin-react": "~7.27.1", + "eslint-plugin-tsdoc": "~0.2.14" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0", + "typescript": ">=3.0.0" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@rushstack/eslint-config/node_modules/@typescript-eslint/experimental-utils": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz", + "integrity": "sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.6.0", + "@typescript-eslint/types": "5.6.0", + "@typescript-eslint/typescript-estree": "5.6.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "node_modules/@rushstack/eslint-patch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", "dev": true }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@rushstack/eslint-plugin": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin/-/eslint-plugin-0.8.4.tgz", + "integrity": "sha512-c8cY9hvak+1EQUGlJxPihElFB/5FeQCGyULTGRLe5u6hSKKtXswRqc23DTo87ZMsGd4TaScPBRNKSGjU5dORkg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@rushstack/tree-pattern": "0.2.2", + "@typescript-eslint/experimental-utils": "~5.3.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@rushstack/eslint-plugin-packlets": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-packlets/-/eslint-plugin-packlets-0.3.4.tgz", + "integrity": "sha512-OSA58EZCx4Dw15UDdvNYGGHziQmhiozKQiOqDjn8ZkrCM3oyJmI6dduSJi57BGlb/C4SpY7+/88MImId7Y5cxA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@rushstack/tree-pattern": "0.2.2", + "@typescript-eslint/experimental-utils": "~5.3.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/experimental-utils": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", + "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.3.1", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/typescript-estree": "5.3.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/scope-manager": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", + "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/types": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", + "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", + "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=0.4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@microsoft/sp-css-loader/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", + "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@typescript-eslint/types": "5.3.1", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/autoprefixer": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", - "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "browserslist": "^4.7.2", - "caniuse-lite": "^1.0.30001006", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.21", - "postcss-value-parser": "^4.0.2" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { - "node": "*" - } - }, - "node_modules/@microsoft/sp-css-loader/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/@rushstack/eslint-plugin-packlets/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/sp-css-loader/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "node": ">= 8" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@rushstack/eslint-plugin-security": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.2.4.tgz", + "integrity": "sha512-MWvM7H4vTNHXIY/SFcFSVgObj5UD0GftBM8UcIE1vXrPwdVYXDgDYXrSXdx7scWS4LYKPLBVoB3v6/Trhm2wug==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@rushstack/tree-pattern": "0.2.2", + "@typescript-eslint/experimental-utils": "~5.3.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@microsoft/sp-css-loader/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/@microsoft/sp-css-loader/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@microsoft/sp-css-loader/node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/@microsoft/sp-css-loader/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/@microsoft/sp-css-loader/node_modules/css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/experimental-utils": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", + "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.3.1", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/typescript-estree": "5.3.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { - "node": ">= 8.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "eslint": "*" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/scope-manager": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", + "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", "dev": true, "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1" }, "engines": { - "node": ">=6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/types": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", + "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", + "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", "dev": true, "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", + "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", "dev": true, "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "@typescript-eslint/types": "5.3.1", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/css-loader/node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "engines": { + "node": ">=8" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">= 4" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@rushstack/eslint-plugin-security/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">= 8" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/experimental-utils": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", + "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.3.1", + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/typescript-estree": "5.3.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", + "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1" + }, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", + "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", + "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "@typescript-eslint/types": "5.3.1", + "@typescript-eslint/visitor-keys": "5.3.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@microsoft/sp-css-loader/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", + "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "@typescript-eslint/types": "5.3.1", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/@rushstack/eslint-plugin/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@rushstack/eslint-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@rushstack/eslint-plugin/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/@rushstack/eslint-plugin/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/@rushstack/heft-config-file": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.14.1.tgz", + "integrity": "sha512-PO4NvZX/HtasfRh6Izt/kGxZ0RxFF5CEu+0KER2/0y4KBPsSpuLhNOIwiQpAkYqWjCs95DEl8FZDSRCSRpZwiw==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "@rushstack/node-core-library": "3.60.1", + "@rushstack/rig-package": "0.5.1", + "jsonpath-plus": "~4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/@rushstack/heft-config-file/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/sp-css-loader/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-css-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/@rushstack/heft-config-file/node_modules/@rushstack/rig-package": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.1.tgz", + "integrity": "sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/@rushstack/heft-config-file/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "optional": true, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "node_modules/@rushstack/heft-config-file/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "node_modules/@rushstack/heft-config-file/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=4.0.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/@rushstack/heft-config-file/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/@rushstack/heft-config-file/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } + "node_modules/@rushstack/heft-config-file/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/@microsoft/sp-css-loader/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/@rushstack/heft-config-file/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, + "node_modules/@rushstack/loader-raw-script": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@rushstack/loader-raw-script/-/loader-raw-script-1.4.7.tgz", + "integrity": "sha512-Yvna4J0RWH5ATT7RCfsjvJbIMLtDB3OUhVCd7WQWBFh04zbiBK7U1lmdoGt0tr0C+X2yzK9EM8X3Of6VXOHVIw==", "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "loader-utils": "1.4.2" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@rushstack/localization-utilities": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@rushstack/localization-utilities/-/localization-utilities-0.9.7.tgz", + "integrity": "sha512-uLmHD9PPOOaqCT9JqhtHVvzuE8moaTHgTMH6Gj1KqqqtshOF6VLZEm6OyUQRq6s4Dg4iLzNp8wt/GqK5yGD1vQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@rushstack/node-core-library": "3.61.0", + "@rushstack/typings-generator": "0.12.7", + "pseudolocale": "~1.1.0", + "xmldoc": "~1.1.2" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/@rushstack/localization-utilities/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-css-loader/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/@rushstack/localization-utilities/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "optional": true, "engines": { - "node": ">=4" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/@rushstack/localization-utilities/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/@rushstack/localization-utilities/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "find-up": "^3.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=6" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/postcss": { - "version": "8.1.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.14.tgz", - "integrity": "sha512-KatkyVPBKfENS+c3dpXJoDXnDD5UZs5exAnDksLqaRJPKwYphEPZt4N0m0i049v2/BtWVQibAhxW4ilXXcolpA==", + "node_modules/@rushstack/localization-utilities/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "colorette": "^1.2.1", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" + "lru-cache": "^6.0.0" }, - "engines": { - "node": "^10 || ^12 || >=14" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "node_modules/@rushstack/localization-utilities/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/postcss-modules-local-by-default": { + "node_modules/@rushstack/localization-utilities/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/localization-utilities/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=8.0.0" }, - "peerDependencies": { - "postcss": "^8.1.0" + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/postcss-modules-local-by-default/node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/@rushstack/module-minifier": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@rushstack/module-minifier/-/module-minifier-0.4.7.tgz", + "integrity": "sha512-NChoobb+ceYD4fz0vfc6jnVMjR7mwocp+O9bzZzyjmp4+DeSfU1ALHHKMcSKqs5b09Okj7u6ui4I0ZVEjPDK6A==", "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" + "dependencies": { + "@rushstack/worker-pool": "0.4.7", + "serialize-javascript": "6.0.0", + "source-map": "~0.7.3", + "terser": "^5.9.0" }, "peerDependencies": { - "postcss": "^8.1.0" + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-css-loader/node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/@rushstack/module-minifier/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 8" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/@rushstack/package-deps-hash": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@rushstack/package-deps-hash/-/package-deps-hash-4.1.5.tgz", + "integrity": "sha512-FKNaypRvnX1DZVcAmZsjk9DgiZkK8E8jiWF1On8XUANBaNUMmVi11lSbnbQSpeOm5Eym6aiQTVm/Kic/xyqNFw==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" + "@rushstack/node-core-library": "3.60.1" + } + }, + "node_modules/@rushstack/package-deps-hash/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", + "dev": true, + "dependencies": { + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, "peerDependencies": { - "postcss": "^8.1.0" + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-css-loader/node_modules/postcss-modules-values/node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/@rushstack/package-deps-hash/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "optional": true, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/@rushstack/package-deps-hash/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "yallist": "^4.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "node_modules/@rushstack/package-deps-hash/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "figgy-pudding": "^3.5.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@rushstack/package-deps-hash/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "node_modules/@rushstack/package-deps-hash/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "node_modules/@rushstack/package-deps-hash/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/package-deps-hash/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" }, "bin": { - "terser": "bin/terser" + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=6.0.0" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "node_modules/@rushstack/package-extractor": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@rushstack/package-extractor/-/package-extractor-0.6.6.tgz", + "integrity": "sha512-qzZ/MXQ9SGWooFfSECEst6HbX34li3spgl//0Srx2YEghcSYAeJo26x5Ani+86GWXFpw3WifnZnXQ4k6sfJr5w==", "dev": true, "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" + "@pnpm/link-bins": "~5.3.7", + "@rushstack/node-core-library": "3.60.1", + "@rushstack/terminal": "0.7.5", + "ignore": "~5.1.6", + "jszip": "~3.8.0", + "minimatch": "~3.0.3", + "npm-packlist": "~2.1.2", + "semver": "~7.5.4" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/@rushstack/package-extractor/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/package-extractor/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, "engines": { - "node": ">= 4" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/@rushstack/package-extractor/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@rushstack/package-extractor/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">= 0.10" + "node": "*" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "node_modules/@rushstack/package-extractor/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "node_modules/@rushstack/package-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" + "lru-cache": "^6.0.0" }, "bin": { - "webpack": "bin/webpack.js" + "semver": "bin/semver.js" }, "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } + "node": ">=10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/@rushstack/package-extractor/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, "engines": { - "node": ">= 4" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "node_modules/@rushstack/package-extractor/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@microsoft/sp-css-loader/node_modules/z-schema": { + "node_modules/@rushstack/package-extractor/node_modules/z-schema": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", @@ -6283,7 +6481,52 @@ "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-css-loader/node_modules/z-schema/node_modules/commander": { + "node_modules/@rushstack/rig-package": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.2.12.tgz", + "integrity": "sha512-nbePcvF8hQwv0ql9aeQxcaMPK/h1OLAC00W7fWCRWIvD2MchZOE8jumIIr66HGrfG2X1sw++m/ZYI4D+BM5ovQ==", + "dev": true, + "dependencies": { + "resolve": "~1.17.0", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin": { + "version": "5.107.4", + "resolved": "https://registry.npmjs.org/@rushstack/rush-amazon-s3-build-cache-plugin/-/rush-amazon-s3-build-cache-plugin-5.107.4.tgz", + "integrity": "sha512-H0/1kK1SPCzBpIgKZ5ZZp904jPoTD/oe+Oac1sXyIUf436/oTFzsode2CJJClAD3NzjKAX/+PHBsWrfaYkDJmg==", + "dev": true, + "dependencies": { + "@rushstack/node-core-library": "3.60.1", + "@rushstack/rush-sdk": "5.107.4", + "https-proxy-agent": "~5.0.0", + "node-fetch": "2.6.7" + } + }, + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", + "dev": true, + "dependencies": { + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", @@ -6293,212 +6536,195 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-diagnostics": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-diagnostics/-/sp-diagnostics-1.16.1.tgz", - "integrity": "sha512-xmMGGzmT2xSLddYZSliDXyq9xAO/cZbiJopFvjEIkX0ottgbudi73TuwaO81d4FGMm7eSEKFXocSBRr1wAxxEg==", + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-dynamic-data": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-dynamic-data/-/sp-dynamic-data-1.16.1.tgz", - "integrity": "sha512-YmF5Gk/Ttx7W6bwMYmw3I/ZraLSGEWIrKljOl++z5xyxiskMIlAZg2wQxAXu9QLZ1P2DjuYC4ZYSVFByMScC+Q==", - "dependencies": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "tslib": "2.3.1" + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-http": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-http/-/sp-http-1.16.1.tgz", - "integrity": "sha512-wsKyiH1lqCuN7aeHkpc5GWZ+ezIJ4nUT6zQmKgvugayQroOhS/G4caw0FxqBA8Qs+SiUF9FE8plPHyivaA1IZw==", + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { - "@microsoft/microsoft-graph-clientv1": "npm:@microsoft/microsoft-graph-client@1.7.2-spfx", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-http-msgraph": "1.16.1", - "tslib": "2.3.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-http-base": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-http-base/-/sp-http-base-1.16.1.tgz", - "integrity": "sha512-67ycRRAz19OoKzYgLTYvaZaBnH4yARJYB395ZIbf+QT9eHZLIZoGVxZotNrGQoIyMV3+uazkbyyvEvOGggCeMw==", - "dependencies": { - "@azure/msal-browser": "2.28.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "@microsoft/teams-js": "1.12.1", - "@microsoft/teams-js-v2": "npm:@microsoft/teams-js@2.4.1", - "adal-angular": "1.0.16", - "msal": "1.4.17", - "msalBrowserLegacy": "npm:@azure/msal-browser@2.22.0", - "msalLegacy": "npm:msal@1.4.12", - "tslib": "2.3.1" + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, + "engines": { + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-http-msgraph": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-http-msgraph/-/sp-http-msgraph-1.16.1.tgz", - "integrity": "sha512-0/KxNJ2Cq8fn6u+uLf5rlLnOu+XIrP3H60lO4haILYYNuG3fJh3aLCiHFLSCv4RatWMjk2e2NeaieD2266yVRQ==", - "dependencies": { - "@microsoft/microsoft-graph-clientv1": "npm:@microsoft/microsoft-graph-client@1.7.2-spfx", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-loader": "1.16.1", - "tslib": "2.3.1" - } + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/@microsoft/sp-image-helper": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-image-helper/-/sp-image-helper-1.16.1.tgz", - "integrity": "sha512-GHc4Wry31s6Y+qS8CVY6gqwCpJwXfAS+uss5ntKBZPBzFKl5qW8HEFAD8SHu9G00zb33LJ+7HHSpcFqZGlD7BQ==", - "dependencies": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-http": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-loader": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "tslib": "2.3.1" - }, - "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" }, - "peerDependencies": { - "@types/react": ">=16.9.51 <18.0.0", - "@types/react-dom": ">=16.9.8 <18.0.0", - "react": ">=16.13.1 <18.0.0", - "react-dom": ">=16.13.1 <18.0.0" - } - }, - "node_modules/@microsoft/sp-loader": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-loader/-/sp-loader-1.16.1.tgz", - "integrity": "sha512-EEVr5+MbwceQWBUCXXZbaq8yDLyl20W52lt5J8oLkL/Un3i5IphzPwRVx5I7RuhgdIz6MDNpiADXBEu84YpNGw==", - "dependencies": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-odata-types": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "@rushstack/loader-raw-script": "1.3.260", - "@types/requirejs": "2.1.29", - "office-ui-fabric-react": "^7.199.1", - "raw-loader": "~0.5.1", - "react": "17.0.1", - "react-dom": "17.0.1", - "requirejs": "2.3.6", - "tslib": "2.3.1" + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=8.0.0" }, - "peerDependencies": { - "@types/react": ">=16.9.51 <18.0.0", - "@types/react-dom": ">=16.9.8 <18.0.0" + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-loader/node_modules/react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin": { + "version": "5.107.4", + "resolved": "https://registry.npmjs.org/@rushstack/rush-azure-storage-build-cache-plugin/-/rush-azure-storage-build-cache-plugin-5.107.4.tgz", + "integrity": "sha512-OQTaGxyrnGrC4/yCjkB4Pb/qPefTACmeZqJnOZ1oFPkeuc4o4bB7D0d4mCrKeFL3P47qfhEkuEYDEErQ8Wm9qg==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" + "@azure/identity": "~2.1.0", + "@azure/storage-blob": "~12.11.0", + "@rushstack/node-core-library": "3.60.1", + "@rushstack/rush-sdk": "5.107.4", + "@rushstack/terminal": "0.7.5" } }, - "node_modules/@microsoft/sp-loader/node_modules/react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.1" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, "peerDependencies": { - "react": "17.0.1" + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-lodash-subset": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-lodash-subset/-/sp-lodash-subset-1.16.1.tgz", - "integrity": "sha512-WRgN4na/lHijQlKAElc+hthtQNMKBbvmWTK7NoQa6D+tOnEc9ay1VCY06NKgGRK8M74xodODjYVO5shRhBFWcw==", + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { - "@types/lodash": "4.14.117", - "tslib": "2.3.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-module-interfaces": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-module-interfaces/-/sp-module-interfaces-1.16.1.tgz", - "integrity": "sha512-1bSz90Hs50Uf5X44MkHN23QXuybZ0Pz3ZsQ52aJ7C6A79rnZ/yG+JROWmkYNxw2cO1vh0sQZHIWXXndlHC97wQ==", + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "z-schema": "4.2.4" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-module-interfaces/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/sp-module-interfaces/node_modules/@rushstack/node-core-library/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true, + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-module-interfaces/node_modules/@rushstack/node-core-library/node_modules/z-schema": { + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/z-schema": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, "dependencies": { "lodash.get": "^4.4.2", "lodash.isequal": "^4.5.0", @@ -6514,1155 +6740,1255 @@ "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-module-interfaces/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==" - }, - "node_modules/@microsoft/sp-module-interfaces/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "engines": { - "node": ">= 0.10" + "node_modules/@rushstack/rush-http-build-cache-plugin": { + "version": "5.107.4", + "resolved": "https://registry.npmjs.org/@rushstack/rush-http-build-cache-plugin/-/rush-http-build-cache-plugin-5.107.4.tgz", + "integrity": "sha512-fJrE9g5LBobvDLCWqwk9UjkAdEdPE81HCO80kE8DfmCTLqSqEFbonCB49ReIGOsdRg9JxIULYSNc1Owa9yy8UQ==", + "dev": true, + "dependencies": { + "@rushstack/node-core-library": "3.60.1", + "@rushstack/rush-sdk": "5.107.4", + "https-proxy-agent": "~5.0.0", + "node-fetch": "2.6.7" } }, - "node_modules/@microsoft/sp-module-interfaces/node_modules/z-schema": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.4.tgz", - "integrity": "sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==", + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", + "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.6.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "bin": { - "z-schema": "bin/z-schema" + "peerDependencies": { + "@types/node": "*" }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, "engines": { - "node": ">=6.0.0" - }, - "optionalDependencies": { - "commander": "^2.7.1" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-odata-types": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-odata-types/-/sp-odata-types-1.16.1.tgz", - "integrity": "sha512-rwLz1E6rCb+Bo8xDoPafqn2Y5B92u8+Ruma0Vp0WKeGsP634d9FrvCWISxyYr7IcK3vn6qdoEwCAwpRH4kwnDw==", + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { - "tslib": "2.3.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-office-ui-fabric-core": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-office-ui-fabric-core/-/sp-office-ui-fabric-core-1.16.1.tgz", - "integrity": "sha512-MymuL8DbDT7m5NQS+skMdCmhYTtfmAzdYrdPVjdSBQaFQjHp4IOCqs1Rm81VM8p6zm7Jh2Fxg4fYXDO2OBEmcQ==", + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "dependencies": { - "office-ui-fabric-core": "11.0.1", - "tslib": "2.3.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/sp-page-context": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-page-context/-/sp-page-context-1.16.1.tgz", - "integrity": "sha512-JUH35LBI0sgPh2zPvD8bEO6K+G3uBegOfYXu1xQq/vZ3xUbl2WiDUHywKBW2A53mROazPJkC1iszf1auPH+mvA==", - "dependencies": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-odata-types": "1.16.1", - "tslib": "2.3.1" + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node": ">=10" } }, - "node_modules/@microsoft/sp-property-pane": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-property-pane/-/sp-property-pane-1.16.1.tgz", - "integrity": "sha512-6Gs2v1vLjNZCxW6XFjoznkI5klanxQs4bZLvxWQbmOK4PI1UPfWV0Fiej4d1KgYFAnkIktCIEaiX28vlOFo1jQ==", - "dependencies": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-component-base": "1.16.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-image-helper": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "office-ui-fabric-react": "^7.199.1", - "react": "17.0.1", - "react-dom": "17.0.1", - "tslib": "2.3.1" - }, + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" - }, - "peerDependencies": { - "@types/react": ">=16.9.51 <18.0.0", - "@types/react-dom": ">=16.9.8 <18.0.0" + "node": ">= 0.10" } }, - "node_modules/@microsoft/sp-property-pane/node_modules/react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/rush-http-build-cache-plugin/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@microsoft/sp-property-pane/node_modules/react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.1" + "node": ">=8.0.0" }, - "peerDependencies": { - "react": "17.0.1" + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/sp-top-actions": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-top-actions/-/sp-top-actions-1.16.1.tgz", - "integrity": "sha512-VoT6zmqhRRHAB9gFItwG2OMOpE5nfVy6uaNNolHY8Fi42aQlGD2oPOV3Wu7FyowJUtGIASWJrfCC2vFDCAggeA==", + "node_modules/@rushstack/rush-sdk": { + "version": "5.107.4", + "resolved": "https://registry.npmjs.org/@rushstack/rush-sdk/-/rush-sdk-5.107.4.tgz", + "integrity": "sha512-SJyr6ZQqLTc58sxnI50WzDRegIv+KkgKpixjrUz/rOJJfeiw5aBO+DU/tSGDOnuAdJUWYZFUGiLCLmMOrJmDOQ==", + "dev": true, "dependencies": { - "@microsoft/sp-property-pane": "1.16.1" + "@rushstack/node-core-library": "3.60.1", + "@types/node-fetch": "2.6.2", + "tapable": "2.2.1" } }, - "node_modules/@microsoft/sp-webpart-base": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-webpart-base/-/sp-webpart-base-1.16.1.tgz", - "integrity": "sha512-eZ2WvFCOoHiUTavgXjAVyj0IxbxG51zA7hRXAYktOfPshrJAy5NQpPM2zdEqToMX4cNlOnjSaOKrk0cB4PS0HA==", - "dependencies": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-component-base": "1.16.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-http": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-loader": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "@microsoft/sp-property-pane": "1.16.1", - "@microsoft/sp-top-actions": "1.16.1", - "@microsoft/teams-js": "1.12.1", - "@microsoft/teams-js-v2": "npm:@microsoft/teams-js@2.4.1", - "@types/office-js": "1.0.36", - "office-ui-fabric-react": "^7.199.1", - "react": "17.0.1", - "react-dom": "17.0.1", - "tslib": "2.3.1" - }, - "engines": { - "node": ">=12.13.0 <13.0.0 || >=14.15.0 <15.0.0 || >=16.13.0 <17.0.0" + "node_modules/@rushstack/rush-sdk/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", + "dev": true, + "dependencies": { + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, "peerDependencies": { - "@types/react": ">=16.9.51 <18.0.0", - "@types/react-dom": ">=16.9.8 <18.0.0" + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/sp-webpart-base/node_modules/react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, + "node_modules/@rushstack/rush-sdk/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/sp-webpart-base/node_modules/react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", + "node_modules/@rushstack/rush-sdk/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.1" + "yallist": "^4.0.0" }, - "peerDependencies": { - "react": "17.0.1" + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/spfx-heft-plugins/-/spfx-heft-plugins-1.16.1.tgz", - "integrity": "sha512-2FdsLiw5kD+nJpVDvD5NAdXOvT0wbUY52Xm9n4ZDV2Cnwv9VQFZ2pf2KU4oGYQO1xII3pOhGhc6tEOO+vgCxRQ==", + "node_modules/@rushstack/rush-sdk/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "@azure/storage-blob": "~12.11.0", - "@microsoft/loader-load-themed-styles": "1.9.174", - "@microsoft/rush-lib": "5.79.0", - "@microsoft/sp-css-loader": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@rushstack/heft-config-file": "0.11.0", - "@rushstack/localization-utilities": "0.8.25", - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rig-package": "0.3.15", - "@rushstack/set-webpack-public-path-plugin": "3.3.69", - "@rushstack/terminal": "0.3.75", - "@rushstack/webpack4-localization-plugin": "0.15.25", - "@rushstack/webpack4-module-minifier-plugin": "0.9.31", - "@types/tapable": "1.0.6", - "autoprefixer": "9.7.1", - "colors": "~1.2.1", - "copy-webpack-plugin": "~6.0.3", - "css-loader": "~3.2.0", - "cssnano": "~4.1.10", - "express": "4.18.1", - "file-loader": "6.1.0", - "git-repo-info": "~2.1.1", - "glob": "~7.0.5", - "html-loader": "~0.5.1", - "jszip": "3.5.0", - "lodash": "4.17.21", - "mime": "2.5.2", - "postcss-loader": "3.0.0", - "resolve": "~1.17.0", - "sass": "1.44.0", - "sass-loader": "8.0.2", - "source-map": "0.6.1", - "source-map-loader": "1.1.3", - "tapable": "1.1.3", - "true-case-path": "~2.2.1", - "uuid": "~3.1.0", - "webpack": "~4.44.2", - "webpack-dev-server": "~4.9.3", - "webpack-sources": "1.4.3", - "xml": "~1.0.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/heft-config-file": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.11.0.tgz", - "integrity": "sha512-QyDzzpXIgR5f0Esagm8pV3hlKMmgtV+EJ9RJvMKnWMuj+13FLN0d/ax63NwCRgXfgttpRCmwaJti+igPPsqZfQ==", + "node_modules/@rushstack/rush-sdk/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rig-package": "0.3.15", - "jsonpath-plus": "~4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@rushstack/rush-sdk/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "engines": { + "node": ">= 0.10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/rig-package": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.15.tgz", - "integrity": "sha512-jxVfvO5OnkRlYRhcVDZWvwiI2l4pv37HDJRtyg5HbD8Z/I8Xj32RICgrxS5xMeGGytobrg5S6OfPOHskg7Nw+A==", + "node_modules/@rushstack/rush-sdk/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/rush-sdk/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/terminal": { - "version": "0.3.75", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.3.75.tgz", - "integrity": "sha512-2IT6Pv8B2s8cOae2UjFeE1S4JfEQuS3om1AbZAI3wmzTSjEqXKj6m5hPnjDW8Gzbi9gBctcDD6Zj5Oq7afqsyw==", + "node_modules/@rushstack/set-webpack-public-path-plugin": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@rushstack/set-webpack-public-path-plugin/-/set-webpack-public-path-plugin-4.1.7.tgz", + "integrity": "sha512-YE34bL7XiCpBbU4OC9yNzMp96GMqaVOVyMK6AqgA8CZQixev9CHGIB3AJI+/nvZmLH3b/Hi7J3M301oy+zHk/Q==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "wordwrap": "~1.0.0" + "@rushstack/node-core-library": "3.61.0", + "@rushstack/webpack-plugin-utilities": "0.3.7" + }, + "peerDependencies": { + "@types/webpack": "^4.39.8" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/webpack4-localization-plugin": { - "version": "0.15.25", - "resolved": "https://registry.npmjs.org/@rushstack/webpack4-localization-plugin/-/webpack4-localization-plugin-0.15.25.tgz", - "integrity": "sha512-Drha8bEGrWb+PfX61hQcqcDeAgTs6RZQ+sD7iL1oaR5XnL1F8DSr/BCY3b1JdfKjGz+z5H/sJccbppUITsKawg==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "@rushstack/localization-utilities": "0.8.25", - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "@types/tapable": "1.0.6", - "loader-utils": "~1.1.0", - "lodash": "~4.17.15", - "minimatch": "~3.0.3" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, "peerDependencies": { - "@rushstack/set-webpack-public-path-plugin": "^3.3.69", - "@types/webpack": "^4.39.0", - "webpack": "^4.31.0" + "@types/node": "*" }, "peerDependenciesMeta": { - "@rushstack/set-webpack-public-path-plugin": { - "optional": true - }, - "@types/webpack": { + "@types/node": { "optional": true } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@rushstack/webpack4-module-minifier-plugin": { - "version": "0.9.31", - "resolved": "https://registry.npmjs.org/@rushstack/webpack4-module-minifier-plugin/-/webpack4-module-minifier-plugin-0.9.31.tgz", - "integrity": "sha512-LZpqwVChZGBoc0ttdKLe07R2RlIIprYyuZuBkUlXdhhEu8Brob+k8Ign6+kg4fBF9G6W/db2OMSPZ0jh0ipzqw==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@rushstack/webpack-plugin-utilities": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@rushstack/webpack-plugin-utilities/-/webpack-plugin-utilities-0.3.7.tgz", + "integrity": "sha512-YGQ0+EltiKkkuW3VNIeKcrV67TeKtP2lzSHNcSQspWqDovGuHcW81oSB7P8Sxz3LM9y5r8oYB6uGgqqm05G10g==", "dev": true, "dependencies": { - "@rushstack/module-minifier": "0.1.32", - "@rushstack/worker-pool": "0.1.32", - "@types/node": "12.20.24", - "@types/tapable": "1.0.6", - "tapable": "1.1.3" - }, - "engines": { - "node": ">=10.17.1" + "memfs": "3.4.3", + "webpack-merge": "~5.8.0" }, "peerDependencies": { - "@types/webpack": "*", - "@types/webpack-sources": "*", - "webpack": "^4.31.0", - "webpack-sources": "~1.4.3" + "@types/webpack": "^4.39.8", + "webpack": "^5.35.1" }, "peerDependenciesMeta": { "@types/webpack": { "optional": true }, - "@types/webpack-sources": { + "webpack": { "optional": true } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "optional": true, + "peer": true }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "optional": true, + "peer": true }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "optional": true, + "peer": true }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "optional": true, + "peer": true }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, + "optional": true, "engines": { - "node": ">=0.4.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/autoprefixer": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", - "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "browserslist": "^4.7.2", - "caniuse-lite": "^1.0.30001006", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.21", - "postcss-value-parser": "^4.0.2" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10.13.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": "*" + "node": ">=6.11.5" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/memfs": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.3.tgz", + "integrity": "sha512-eivjfi7Ahr6eQTn44nvTnR60e4a1Fs1Via2kCR5lHo/kyNoiMWaXCNJ/GpSd0ilXas2JSOl9B5FTIhflXu0hlg==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "fs-monkey": "1.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "randombytes": "^2.1.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/cacache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/cacache/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" }, "engines": { - "node": "*" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "color-name": "1.1.3" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/webpack": { + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "safe-buffer": "5.2.1" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.16.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">= 0.6" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=10.13.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/css-loader": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.2.1.tgz", - "integrity": "sha512-q40kYdcBNzMvkIImCL2O+wk8dh+RGwPPV9Dfz3n7XtOYPXqe2Z6VgtvoxjkLHz02gmhepG9sOAJOUlx+3hHsBg==", + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/set-webpack-public-path-plugin/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">= 8.9.0" + "node": ">=8.0.0" }, - "peerDependencies": { - "webpack": "^4.0.0" + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/css-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/@rushstack/stream-collator": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@rushstack/stream-collator/-/stream-collator-4.1.6.tgz", + "integrity": "sha512-rJbQmEsEEPE4guuQuppaSF3XayDya5lSexFE4GK35rMo51CWvKYP94e0RZ13bd0GgipaAy3x2ASMtifbr8ShnA==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "@rushstack/node-core-library": "3.60.1", + "@rushstack/terminal": "0.7.5" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@rushstack/stream-collator/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", "dev": true, "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@rushstack/stream-collator/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "optional": true, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/@rushstack/stream-collator/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "node_modules/@rushstack/stream-collator/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=6.9.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/@rushstack/stream-collator/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@rushstack/stream-collator/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">= 0.10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/@rushstack/stream-collator/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/stream-collator/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "node_modules/@rushstack/terminal": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.7.5.tgz", + "integrity": "sha512-eDrGrhlOi2IOR5bjJ5ILjNz2Q4B8VpCtUnVPBrLZEhjDqlHzblzEt/AeKRo1aIk0n2NsbgdQH9pi8+0TJLDLrA==", "dev": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@rushstack/node-core-library": "3.60.1" }, - "engines": { - "node": ">= 0.10.0" + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/@rushstack/terminal/node_modules/@rushstack/node-core-library": { + "version": "3.60.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.60.1.tgz", + "integrity": "sha512-cWKCImfezPvILKu5eUPkz0Mp/cO/zOSJdPD64KHliBcdmbPHg/sF4rEL7WJkWywXT1RQ/U/N8uKdXMe7jDCXNw==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/@rushstack/terminal/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, + "optional": true, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/@rushstack/terminal/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/@rushstack/terminal/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=6" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/@rushstack/terminal/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@rushstack/terminal/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/@rushstack/terminal/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/terminal/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">= 0.8" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/@rushstack/tree-pattern": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@rushstack/tree-pattern/-/tree-pattern-0.2.2.tgz", + "integrity": "sha512-0KdqI7hGtVIlxobOBLWet0WGiD70V/QoYQr5A2ikACeQmIaN4WT6Fn9BcvgwgaSIMcazEcD8ql7Fb9N4dKdQlA==", + "dev": true + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.7.10", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.7.10.tgz", + "integrity": "sha512-8t042g8eerypNOEcdpxwRA3uCmz0duMo21rG4Z2mdz7JxJeylDmzjlU3wDdef2t3P1Z61JCdZB6fbm1Mh0zi7w==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "colors": "~1.2.1", + "string-argv": "~0.3.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/@rushstack/typings-generator": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/@rushstack/typings-generator/-/typings-generator-0.12.7.tgz", + "integrity": "sha512-uCNn3P20qdM4bj+BGT8On59awBKahWO1eYzmtY2Jjr620rCL6SJfQHRSHyPMEqwqP/M6WN6nVeJPCwovLIV91w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@rushstack/node-core-library": "3.61.0", + "chokidar": "~3.4.0", + "fast-glob": "~3.3.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/@rushstack/typings-generator/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/@rushstack/typings-generator/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, + "optional": true, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "node_modules/@rushstack/typings-generator/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/@rushstack/typings-generator/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "json5": "lib/cli.js" + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", + "node_modules/@rushstack/typings-generator/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/@rushstack/typings-generator/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "node_modules/@rushstack/typings-generator/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/typings-generator/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/@rushstack/webpack4-localization-plugin": { + "version": "0.18.7", + "resolved": "https://registry.npmjs.org/@rushstack/webpack4-localization-plugin/-/webpack4-localization-plugin-0.18.7.tgz", + "integrity": "sha512-O5sU5OO6ClJl4XNMweq0Xey0I1fzSbji3WEeR1rPm9z1cfEnTpSSiQDCTTim26mE/2NrwF/3HwDG8jUT+bQdmA==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@rushstack/localization-utilities": "0.9.7", + "@rushstack/node-core-library": "3.61.0", + "@types/tapable": "1.0.6", + "loader-utils": "1.4.2", + "minimatch": "~3.0.3" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@rushstack/set-webpack-public-path-plugin": "^4.1.7", + "@types/node": "*", + "@types/webpack": "^4.39.0", + "webpack": "^4.31.0" + }, + "peerDependenciesMeta": { + "@rushstack/set-webpack-public-path-plugin": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/webpack": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/@rushstack/node-core-library": { + "version": "3.61.0", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.61.0.tgz", + "integrity": "sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==", "dev": true, "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "colors": "~1.2.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "bin": { - "semver": "bin/semver" + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/minimatch": { + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", @@ -7674,1027 +8000,1095 @@ "node": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "mkdirp": "bin/cmd.js" + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "ee-first": "1.1.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/webpack4-localization-plugin/node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "node_modules/@rushstack/webpack4-module-minifier-plugin": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@rushstack/webpack4-module-minifier-plugin/-/webpack4-module-minifier-plugin-0.13.7.tgz", + "integrity": "sha512-bwu453kIEMsEa6npg4rSKC64e06VomxePOQXHI8m7wmppuPDkv8w7Nt1wF9rK4xqhXozuhu2gMTv7MMkCDG6EA==", "dev": true, + "dependencies": { + "@rushstack/module-minifier": "0.4.7", + "@rushstack/worker-pool": "0.4.7", + "@types/tapable": "1.0.6", + "tapable": "1.1.3" + }, "engines": { - "node": ">=4" + "node": ">=10.17.1" + }, + "peerDependencies": { + "@types/node": "*", + "@types/webpack": "*", + "@types/webpack-sources": "*", + "webpack": "^4.31.0", + "webpack-sources": "~1.4.3" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@types/webpack": { + "optional": true + }, + "@types/webpack-sources": { + "optional": true + } } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/@rushstack/webpack4-module-minifier-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "node_modules/@rushstack/worker-pool": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@rushstack/worker-pool/-/worker-pool-0.4.7.tgz", + "integrity": "sha512-gTULPgOJmsHjPR48m9Uqb4/LCv5MEJX1FZq5TwXfuXE1xM2Q9Y//2f7ZpiFdloWBZPEUO4sNE12ntc5jT2ixHA==", "dev": true, - "dependencies": { - "find-up": "^3.0.0" + "peerDependencies": { + "@types/node": "*" }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "dependencies": { - "postcss": "^7.0.5" - }, - "engines": { - "node": ">= 6" + "type-detect": "4.0.8" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, + "node_modules/@swc/helpers": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.8.tgz", + "integrity": "sha512-lruDGw3pnfM3wmZHeW7JuhkGQaJjPyiKjxeGhdmfoOT53Ic9qb5JLDNaK2HUdl1zLDeX28H221UvKjfdvSLVMg==", "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": ">= 6" + "tslib": "^2.4.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "node_modules/@swc/helpers/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "defer-to-connect": "^1.0.1" }, "engines": { - "node": ">= 6" + "node": ">=6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/postcss-modules-values": { + "node_modules/@types/anymatch": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-3.0.0.tgz", + "integrity": "sha512-qLChUo6yhpQ9k905NwL74GU7TxH+9UODwwQ6ICNI+O6EDMExqH/Cv9NsbmcZ7yC/rRXJ/AHCzfgjsFRY5fKjYw==", + "deprecated": "This is a stub types definition. anymatch provides its own type definitions, so you do not need this installed.", "dev": true, "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "anymatch": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@babel/types": "^7.0.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@babel/types": "^7.20.7" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dependencies": { + "@types/node": "*" + } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "node_modules/@types/chalk": { + "version": "0.4.31", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", + "integrity": "sha512-nF0fisEPYMIyfrFgabFimsz9Lnuu9MwkNrrlATm2E4E46afKDyeelT+8bXfw1VSc7sLBxMxRgT7PxTC2JcqN4Q==", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" + "@types/node": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/@types/eslint": { + "version": "8.56.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", + "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "optional": true, + "peer": true }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { - "figgy-pudding": "^3.5.1" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/@types/express-serve-static-core": { + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", "dev": true, - "engines": { - "node": ">= 0.8" + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@types/glob": { + "version": "5.0.30", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.30.tgz", + "integrity": "sha512-ZM05wDByI+WA153sfirJyEHoYYoIuZ7lA2dB/Gl8ymmpMTR78fNRtDMqa7Z6SdH4fZdLWZNRE6mZpx3XqBOrHw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "node_modules/@types/glob-stream": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "@types/node": "*", + "@types/picomatch": "*", + "@types/streamx": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" + "@types/node": "*" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "node_modules/@types/gulp": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.6.tgz", + "integrity": "sha512-0E8/iV/7FKWyQWSmi7jnUvgXXgaw+pfAzEB06Xu+l0iXVJppLbpOye5z7E2klw5akXd+8kPtYuk65YBcZPM4ow==", "dev": true, "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" + "@types/undertaker": "*", + "@types/vinyl-fs": "*", + "chokidar": "^2.1.2" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/@types/gulp/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/to-regex-range": { + "node_modules/@types/gulp/node_modules/anymatch/node_modules/normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "remove-trailing-separator": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@types/gulp/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "node_modules/@types/gulp/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "node_modules/@types/gulp/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/webpack/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/@types/gulp/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" }, - "engines": { - "node": ">=4.0.0" + "optionalDependencies": { + "fsevents": "^1.2.7" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/@types/gulp/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/@types/gulp/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">=0.10.0" } }, - "node_modules/@microsoft/spfx-heft-plugins/node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/@types/gulp/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, + "hasInstallScript": true, "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">= 4.0" } }, - "node_modules/@microsoft/teams-js": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-1.12.1.tgz", - "integrity": "sha512-BRy6vZOseN9F/MG0NWTojYpenuo9XlZ4AfAvwnsG+C36UDPPgW0skWlZ6ub+7RBPhOHcxz8sNg2uHOdGRebWkQ==" - }, - "node_modules/@microsoft/teams-js-v2": { - "name": "@microsoft/teams-js", - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-2.4.1.tgz", - "integrity": "sha512-rHOVt3Duw1HJrsZq0FO09qMGVGI5eg6hkVKIxsuyJQ5WMPaGMAcF5A0QlXBzVwa9cocNyv8JYeMeJAh+svnLnw==", + "node_modules/@types/gulp/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, "dependencies": { - "debug": "4.3.3" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "node_modules/@microsoft/teams-js-v2/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/@types/gulp/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, "dependencies": { - "ms": "2.1.2" + "is-extglob": "^2.1.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/@microsoft/tsdoc": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", - "dev": true - }, - "node_modules/@microsoft/tsdoc-config": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", - "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "node_modules/@types/gulp/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, "dependencies": { - "@microsoft/tsdoc": "0.13.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/@types/gulp/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@types/gulp/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@types/gulp/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@types/gulp/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "node_modules/@types/gulp/node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/@types/gulp/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/@opentelemetry/api": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", - "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==", + "node_modules/@types/gulp/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@pnp/core": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.13.0.tgz", - "integrity": "sha512-BYOV08daCoH8x36z3MVP7kkjyaKBHWccvkwjjMV7CdRYnFaUQfUnqWPgM8KFzoHIQEH7pGKZmay4Dhlh85abmw==", "dependencies": { - "tslib": "2.4.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">=14.15.1" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/patrick-rodgers/" + "node": ">=0.10.0" } }, - "node_modules/@pnp/core/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true }, - "node_modules/@pnp/graph": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/graph/-/graph-3.13.0.tgz", - "integrity": "sha512-DPsSIoqbxyWAoaRl7r3IFxzu51SBH3SWtKEO5aH+Cx2hRcDfbZ2q6H9YVAk0I80diHfrvsvaTROmUU7wX/T5fA==", - "hasInstallScript": true, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, "dependencies": { - "@microsoft/microsoft-graph-types": "2.26.0", - "@pnp/core": "3.13.0", - "@pnp/queryable": "3.13.0", - "tslib": "2.4.1" - }, - "engines": { - "node": ">=14.15.1" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/patrick-rodgers/" + "@types/node": "*" } }, - "node_modules/@pnp/graph/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, - "node_modules/@pnp/logging": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.13.0.tgz", - "integrity": "sha512-2H+cWBPeHvh5uFHfhBlkY1W990uM0xy9sTJ4u/P2Qpt1lLg9Pypdv8BQvG+F2dRWSYeFi6oOHkCypsNkWCQRuQ==", + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, "dependencies": { - "tslib": "2.4.1" - }, - "engines": { - "node": ">=14.15.1" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/patrick-rodgers/" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@pnp/logging/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/@pnp/queryable": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/queryable/-/queryable-3.13.0.tgz", - "integrity": "sha512-MxdWF+uYMzAP6o/9GHr4rVruLyvBmJ49T8O3hxKgsZfZyVOjk8ckMBTH3XSG+oK2ZnrLOpz0wsFk3Cgq2RVHrw==", + "node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, "dependencies": { - "@pnp/core": "3.13.0", - "tslib": "2.4.1" - }, - "engines": { - "node": ">=14.15.1" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/patrick-rodgers/" + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "node_modules/@pnp/queryable/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/@pnp/sp": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/sp/-/sp-3.13.0.tgz", - "integrity": "sha512-GYrBMxdhAiJd08XLMzydoyqCNlIL8kr3/C7wLHNfX0yliXSJvDk+EFX46fB35PXTnK9I1FEWx1Zs+DpC6t1Fgw==", - "hasInstallScript": true, + "node_modules/@types/jest": { + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz", + "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==", + "dev": true, "dependencies": { - "@pnp/core": "3.13.0", - "@pnp/queryable": "3.13.0", - "tslib": "2.4.1" - }, - "engines": { - "node": ">=14.15.1" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/patrick-rodgers/" + "jest-diff": "^25.2.1", + "pretty-format": "^25.2.1" } }, - "node_modules/@pnp/sp/node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true }, - "node_modules/@pnpm/error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@pnpm/error/-/error-1.4.0.tgz", - "integrity": "sha512-vxkRrkneBPVmP23kyjnYwVOtipwlSl6UfL+h+Xa3TrABJTz5rYBXemlTsU5BzST8U4pD7YDkTb3SQu+MMuIDKA==", + "node_modules/@types/lodash": { + "version": "4.14.117", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.117.tgz", + "integrity": "sha512-xyf2m6tRbz8qQKcxYZa7PA4SllYcay+eh25DN3jmNYY6gSTL7Htc/bttVdkqj2wfJGbeWlQiX8pIyJpKU+tubw==" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==", + "devOptional": true + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "dev": true, - "engines": { - "node": ">=10.16" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" } }, - "node_modules/@pnpm/link-bins": { - "version": "5.3.25", - "resolved": "https://registry.npmjs.org/@pnpm/link-bins/-/link-bins-5.3.25.tgz", - "integrity": "sha512-9Xq8lLNRHFDqvYPXPgaiKkZ4rtdsm7izwM/cUsFDc5IMnG0QYIVBXQbgwhz2UvjUotbJrvfKLJaCfA3NGBnLDg==", + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "dependencies": { - "@pnpm/error": "1.4.0", - "@pnpm/package-bins": "4.1.0", - "@pnpm/read-modules-dir": "2.0.3", - "@pnpm/read-package-json": "4.0.0", - "@pnpm/read-project-manifest": "1.1.7", - "@pnpm/types": "6.4.0", - "@zkochan/cmd-shim": "^5.0.0", - "is-subdir": "^1.1.1", - "is-windows": "^1.0.2", - "mz": "^2.7.0", - "normalize-path": "^3.0.0", - "p-settle": "^4.1.1", - "ramda": "^0.27.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=10.16" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "node": ">= 6" } }, - "node_modules/@pnpm/package-bins": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/package-bins/-/package-bins-4.1.0.tgz", - "integrity": "sha512-57/ioGYLBbVRR80Ux9/q2i3y8Q+uQADc3c+Yse8jr/60YLOi3jcWz13e2Jy+ANYtZI258Qc5wk2X077rp0Ly/Q==", + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, "dependencies": { - "@pnpm/types": "6.4.0", - "fast-glob": "^3.2.4", - "is-subdir": "^1.1.1" - }, - "engines": { - "node": ">=10.16" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "@types/node": "*" } }, - "node_modules/@pnpm/read-modules-dir": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@pnpm/read-modules-dir/-/read-modules-dir-2.0.3.tgz", - "integrity": "sha512-i9OgRvSlxrTS9a2oXokhDxvQzDtfqtsooJ9jaGoHkznue5aFCTSrNZFQ6M18o8hC03QWfnxaKi0BtOvNkKu2+A==", + "node_modules/@types/node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-5v0PhPv0AManpxT7W25Zipmj/Lxp1WqfkcpZHyqSloB+gGoAHRBuzhrCelFKrPvNF5ki3gAcO4kxaGO2/21u8g==", "dev": true, "dependencies": { - "mz": "^2.7.0" - }, - "engines": { - "node": ">=10.13" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "@types/node": "*" } }, - "node_modules/@pnpm/read-package-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/read-package-json/-/read-package-json-4.0.0.tgz", - "integrity": "sha512-1cr2tEwe4YU6SI0Hmg+wnsr6yxBt2iJtqv6wrF84On8pS9hx4A2PLw3CIgbwxaG0b+ur5wzhNogwl4qD5FLFNg==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/office-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/office-js/-/office-js-1.0.36.tgz", + "integrity": "sha512-v5jOXCPS0nbbuVzZThhDMzttuJrpzzvx1GsPo5Qed8Cs9uzMwEV1vdkKN5zLFnAUlEF4s8Szl9KXnhnSvH89Kw==" + }, + "node_modules/@types/orchestrator": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/orchestrator/-/orchestrator-0.0.30.tgz", + "integrity": "sha512-rT9So631KbmirIGsZ5m6T15FKHqiWhYRULdl03l/WBezzZ8wwhYTS2zyfHjsvAGYFVff1wtmGFd0akRCBDSZrA==", "dev": true, "dependencies": { - "@pnpm/error": "1.4.0", - "@pnpm/types": "6.4.0", - "load-json-file": "^6.2.0", - "normalize-package-data": "^3.0.2" - }, - "engines": { - "node": ">=10.16" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "@types/q": "*" } }, - "node_modules/@pnpm/read-project-manifest": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@pnpm/read-project-manifest/-/read-project-manifest-1.1.7.tgz", - "integrity": "sha512-tj8ExXZeDcMmMUj7D292ETe/RiEirr1X1wpT6Zy85z2MrFYoG9jfCJpps40OdZBNZBhxbuKtGPWKVSgXD0yrVw==", - "dev": true, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@types/picomatch": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.3.tgz", + "integrity": "sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "peer": true + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/react": { + "version": "17.0.56", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.56.tgz", + "integrity": "sha512-Z13f9Qz7Hg8f2g2NsBjiJSVWmON2b3K8RIqFK8mMKCIgvD0CD0ZChTukz87H3lI28X3ukXoNFGzo3ZW1ICTtPA==", + "peer": true, "dependencies": { - "@pnpm/error": "1.4.0", - "@pnpm/types": "6.4.0", - "@pnpm/write-project-manifest": "1.1.7", - "detect-indent": "^6.0.0", - "fast-deep-equal": "^3.1.3", - "graceful-fs": "4.2.4", - "is-windows": "^1.0.2", - "json5": "^2.1.3", - "parse-json": "^5.1.0", - "read-yaml-file": "^2.0.0", - "sort-keys": "^4.1.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=10.16" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, - "node_modules/@pnpm/read-project-manifest/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "node_modules/@types/react-dom": { + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", + "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", + "peer": true, + "dependencies": { + "@types/react": "^17" + } + }, + "node_modules/@types/requirejs": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.29.tgz", + "integrity": "sha512-61MNgoBY6iEsHhFGiElSjEu8HbHOahJLGh9BdGSfzgAN+2qOuFJKuG3f7F+/ggKr+0yEM3Y4fCWAgxU6es0otg==" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "node_modules/@pnpm/types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-6.4.0.tgz", - "integrity": "sha512-nco4+4sZqNHn60Y4VE/fbtlShCBqipyUO+nKRPvDHqLrecMW9pzHWMVRxk4nrMRoeowj3q0rX3GYRBa8lsHTAg==", + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "peer": true + }, + "node_modules/@types/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-iotVxtCCsPLRAvxMFFgxL8HD2l4mAZ2Oin7/VJ2ooWO0VOK4EGOGmZWZn1uCq7RofR3I/1IOSjCHlFT71eVK0Q==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, - "engines": { - "node": ">=10.16" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/@pnpm/write-project-manifest": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@pnpm/write-project-manifest/-/write-project-manifest-1.1.7.tgz", - "integrity": "sha512-OLkDZSqkA1mkoPNPvLFXyI6fb0enCuFji6Zfditi/CLAo9kmIhQFmEUDu4krSB8i908EljG8YwL5Xjxzm5wsWA==", + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { - "@pnpm/types": "6.4.0", - "json5": "^2.1.3", - "mz": "^2.7.0", - "write-file-atomic": "^3.0.3", - "write-yaml-file": "^4.1.3" - }, - "engines": { - "node": ">=10.16" - }, - "funding": { - "url": "https://opencollective.com/pnpm" + "@types/express": "*" } }, - "node_modules/@rushstack/debug-certificate-manager": { - "version": "1.1.84", - "resolved": "https://registry.npmjs.org/@rushstack/debug-certificate-manager/-/debug-certificate-manager-1.1.84.tgz", - "integrity": "sha512-GondfbezgkjT9U6WdMRdjJMkkYkUf/w2YiFKX2wUrmXyNmoApzpu8fXC3sDHb2LXKR7MvBNDY5YrpLooEYJhUg==", + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.53.2", - "node-forge": "~1.3.1", - "sudo": "~1.0.3" + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/@rushstack/debug-certificate-manager/node_modules/@rushstack/node-core-library": { - "version": "3.53.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.2.tgz", - "integrity": "sha512-FggLe5DQs0X9MNFeJN3/EXwb+8hyZUTEp2i+V1e8r4Va4JgkjBNY0BuEaQI+3DW6S4apV3UtXU3im17MSY00DA==", + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "@types/node": "*" } }, - "node_modules/@rushstack/debug-certificate-manager/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "node_modules/@types/source-list-map": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", + "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", "dev": true }, - "node_modules/@rushstack/debug-certificate-manager/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } + "node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true }, - "node_modules/@rushstack/debug-certificate-manager/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@types/streamx": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@types/streamx/-/streamx-2.9.5.tgz", + "integrity": "sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "@types/node": "*" } }, - "node_modules/@rushstack/debug-certificate-manager/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "dev": true + }, + "node_modules/@types/through2": { + "version": "2.0.32", + "resolved": "https://registry.npmjs.org/@types/through2/-/through2-2.0.32.tgz", + "integrity": "sha512-VYclBauj55V0qPDHs9QMdKBdxdob6zta8mcayjTyOzlRgl+PNERnvNol99W1PBnvQXaYoTTqSce97rr9dz9oXQ==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, + "@types/node": "*" + } + }, + "node_modules/@types/tunnel": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", + "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/uglify-js": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", + "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/undertaker": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.11.tgz", + "integrity": "sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/undertaker-registry": "*", + "async-done": "~1.3.2" + } + }, + "node_modules/@types/undertaker-registry": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.4.tgz", + "integrity": "sha512-tW77pHh2TU4uebWXWeEM5laiw8BuJ7pyJYDh6xenOs75nhny2kVgwYbegJ4BoLMYsIrXaBpKYaPdYO3/udG+hg==", + "dev": true + }, + "node_modules/@types/vinyl": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.3.tgz", + "integrity": "sha512-hrT6xg16CWSmndZqOTJ6BGIn2abKyTw0B58bI+7ioUoj3Sma6u8ftZ1DTI2yCaJamOVGLOnQWiPH3a74+EaqTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/vinyl-fs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.5.tgz", + "integrity": "sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==", + "dev": true, + "dependencies": { + "@types/glob-stream": "*", + "@types/node": "*", + "@types/vinyl": "*" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.24", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.24.tgz", + "integrity": "sha512-1A0MXPwZiMOD3DPMuOKUKcpkdPo8Lq33UGggZ7xio6wJ/jV1dAu5cXDrOfGDnldUroPIRLsr/DT43/GqOA4RFQ==", + "dev": true, + "dependencies": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-env": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.15.3.tgz", + "integrity": "sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ==", + "dev": true + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">= 8" } }, - "node_modules/@rushstack/eslint-config": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-config/-/eslint-config-2.5.1.tgz", - "integrity": "sha512-pcDQ/fmJEIqe5oZiP84bYZ1N7QoDfd+5G+e7GIobOwM793dX/SdRKqcJvGlzyBB92eo6rG7/qRnP2VVQN2pdbQ==", + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { - "@rushstack/eslint-patch": "1.1.0", - "@rushstack/eslint-plugin": "0.8.4", - "@rushstack/eslint-plugin-packlets": "0.3.4", - "@rushstack/eslint-plugin-security": "0.2.4", - "@typescript-eslint/eslint-plugin": "~5.6.0", - "@typescript-eslint/experimental-utils": "~5.6.0", - "@typescript-eslint/parser": "~5.6.0", - "@typescript-eslint/typescript-estree": "~5.6.0", - "eslint-plugin-promise": "~6.0.0", - "eslint-plugin-react": "~7.27.1", - "eslint-plugin-tsdoc": "~0.2.14" + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-0.0.34.tgz", + "integrity": "sha512-Rrj9a2bqpcPKGYCIyQGkD24PeCZG3ow58cgaAtI4jwsUMe/9hDaCInMpXZ+PaUK3cVwsFUstpOEkSfMdQpCnYA==", + "dev": true + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.6.0.tgz", + "integrity": "sha512-MIbeMy5qfLqtgs1hWd088k1hOuRsN9JrHUPwVVKCD99EOUqScd7SrwoZl4Gso05EAP9w1kvLWUVGJOVpRPkDPA==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.6.0", + "@typescript-eslint/scope-manager": "5.6.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0", - "typescript": ">=3.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@rushstack/eslint-config/node_modules/@typescript-eslint/experimental-utils": { + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/experimental-utils": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz", "integrity": "sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA==", @@ -8718,50 +9112,60 @@ "eslint": "*" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", - "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", - "dev": true - }, - "node_modules/@rushstack/eslint-plugin": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin/-/eslint-plugin-0.8.4.tgz", - "integrity": "sha512-c8cY9hvak+1EQUGlJxPihElFB/5FeQCGyULTGRLe5u6hSKKtXswRqc23DTo87ZMsGd4TaScPBRNKSGjU5dORkg==", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.59.11.tgz", + "integrity": "sha512-GkQGV0UF/V5Ra7gZMBmiD1WrYUFOJNvCZs+XQnUyJoxmqfWMXVNyB2NVCPRKefoQcpvTv9UpJyfCvsJFs8NzzQ==", "dev": true, "dependencies": { - "@rushstack/tree-pattern": "0.2.2", - "@typescript-eslint/experimental-utils": "~5.3.0" + "@typescript-eslint/utils": "5.59.11" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@rushstack/eslint-plugin-packlets": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-packlets/-/eslint-plugin-packlets-0.3.4.tgz", - "integrity": "sha512-OSA58EZCx4Dw15UDdvNYGGHziQmhiozKQiOqDjn8ZkrCM3oyJmI6dduSJi57BGlb/C4SpY7+/88MImId7Y5cxA==", + "node_modules/@typescript-eslint/parser": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.6.0.tgz", + "integrity": "sha512-YVK49NgdUPQ8SpCZaOpiq1kLkYRPMv9U5gcMrywzI8brtwZjr/tG3sZpuHyODt76W/A0SufNjYt9ZOgrC4tLIQ==", "dev": true, "dependencies": { - "@rushstack/tree-pattern": "0.2.2", - "@typescript-eslint/experimental-utils": "~5.3.0" + "@typescript-eslint/scope-manager": "5.6.0", + "@typescript-eslint/types": "5.6.0", + "@typescript-eslint/typescript-estree": "5.6.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.6.0.tgz", + "integrity": "sha512-1U1G77Hw2jsGWVsO2w6eVCbOg0HZ5WxL/cozVSTfqnL/eB9muhb8THsP0G3w+BB5xAHv9KptwdfYFAUfzcIh4A==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/types": "5.6.0", + "@typescript-eslint/visitor-keys": "5.6.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -8769,19 +9173,18 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.11.tgz", + "integrity": "sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" + "@typescript-eslint/typescript-estree": "5.59.11", + "@typescript-eslint/utils": "5.59.11", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -8789,12 +9192,20 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", + "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -8804,18 +9215,18 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", + "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -8831,14 +9242,14 @@ } } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", + "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.3.1", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.59.11", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -8848,7 +9259,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/array-union": { + "node_modules/@typescript-eslint/type-utils/node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", @@ -8857,7 +9268,7 @@ "node": ">=8" } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/globby": { + "node_modules/@typescript-eslint/type-utils/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", @@ -8877,16 +9288,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/@rushstack/eslint-plugin-packlets/node_modules/merge2": { + "node_modules/@typescript-eslint/type-utils/node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", @@ -8895,64 +9306,10 @@ "node": ">= 8" } }, - "node_modules/@rushstack/eslint-plugin-security": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.2.4.tgz", - "integrity": "sha512-MWvM7H4vTNHXIY/SFcFSVgObj5UD0GftBM8UcIE1vXrPwdVYXDgDYXrSXdx7scWS4LYKPLBVoB3v6/Trhm2wug==", - "dev": true, - "dependencies": { - "@rushstack/tree-pattern": "0.2.2", - "@typescript-eslint/experimental-utils": "~5.3.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", + "node_modules/@typescript-eslint/types": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.6.0.tgz", + "integrity": "sha512-OIZffked7mXv4mXzWU5MgAEbCf9ecNJBKi+Si6/I9PpTaj+cf2x58h2oHW5/P/yTnPkKaayfjhLvx+crnl5ubA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -8962,14 +9319,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.6.0.tgz", + "integrity": "sha512-92vK5tQaE81rK7fOmuWMrSQtK1IMonESR+RJR2Tlc7w4o0MeEdjgidY/uO2Gobh7z4Q1hhS94Cr7r021fMVEeA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", + "@typescript-eslint/types": "5.6.0", + "@typescript-eslint/visitor-keys": "5.6.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -8989,24 +9346,7 @@ } } }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.3.1", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/array-union": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", @@ -9015,7 +9355,7 @@ "node": ">=8" } }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/globby": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", @@ -9035,7 +9375,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/ignore": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", @@ -9044,7 +9384,7 @@ "node": ">= 4" } }, - "node_modules/@rushstack/eslint-plugin-security/node_modules/merge2": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", @@ -9053,18 +9393,20 @@ "node": ">= 8" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", + "node_modules/@typescript-eslint/utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.11.tgz", + "integrity": "sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==", "dev": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -9074,17 +9416,23 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", + "node_modules/@typescript-eslint/utils/node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz", + "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -9094,10 +9442,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", + "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -9107,18 +9455,18 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", + "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -9134,14 +9482,14 @@ } } }, - "node_modules/@rushstack/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", + "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.3.1", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.59.11", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -9151,7 +9499,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/array-union": { + "node_modules/@typescript-eslint/utils/node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", @@ -9160,7 +9508,7 @@ "node": ">=8" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/globby": { + "node_modules/@typescript-eslint/utils/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", @@ -9180,16 +9528,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/@typescript-eslint/utils/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/@rushstack/eslint-plugin/node_modules/merge2": { + "node_modules/@typescript-eslint/utils/node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", @@ -9198,5117 +9546,5030 @@ "node": ">= 8" } }, - "node_modules/@rushstack/heft-config-file": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.10.0.tgz", - "integrity": "sha512-+vKbbNSEqZZpnWgH6QazoAOD9l2BEEW4ldTXAdHOr2HFfmT+debTqqib4t4c48+CroSeLcC1j3CwDzv5tBAxYg==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.6.0.tgz", + "integrity": "sha512-1p7hDp5cpRFUyE3+lvA74egs+RWSgumrBpzBCDzfTFv0aQ7lIeay80yU0hIxgAhwQ6PcasW35kaOCyDOv6O/Ng==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rig-package": "0.3.15", - "jsonpath-plus": "~4.0.0" + "@typescript-eslint/types": "5.6.0", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": ">=10.13.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@rushstack/heft-config-file/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@vue/compiler-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", + "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" } }, - "node_modules/@rushstack/heft-config-file/node_modules/@rushstack/rig-package": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.15.tgz", - "integrity": "sha512-jxVfvO5OnkRlYRhcVDZWvwiI2l4pv37HDJRtyg5HbD8Z/I8Xj32RICgrxS5xMeGGytobrg5S6OfPOHskg7Nw+A==", + "node_modules/@vue/compiler-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", + "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", "dev": true, "dependencies": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" + "@vue/compiler-core": "3.4.21", + "@vue/shared": "3.4.21" } }, - "node_modules/@rushstack/heft-config-file/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@rushstack/heft-config-file/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@rushstack/heft-config-file/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@vue/compiler-sfc": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", + "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.21", + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.7", + "postcss": "^8.4.35", + "source-map-js": "^1.0.2" } }, - "node_modules/@rushstack/heft-config-file/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/@vue/compiler-ssr": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", + "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "@vue/compiler-dom": "3.4.21", + "@vue/shared": "3.4.21" } }, - "node_modules/@rushstack/loader-raw-script": { - "version": "1.3.260", - "resolved": "https://registry.npmjs.org/@rushstack/loader-raw-script/-/loader-raw-script-1.3.260.tgz", - "integrity": "sha512-BMn1kYvEzZ3aYBWnmDpEtExhlfu72YB9IXvMqbIec7r3LNbxdGnoqU94YYCuGNzXQqtuo+90FtlEHE1+5laWdQ==", - "dependencies": { - "loader-utils": "~1.1.0" - } + "node_modules/@vue/shared": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==", + "dev": true }, - "node_modules/@rushstack/localization-utilities": { - "version": "0.8.25", - "resolved": "https://registry.npmjs.org/@rushstack/localization-utilities/-/localization-utilities-0.8.25.tgz", - "integrity": "sha512-8LfAEisUTuCrIzgXdO7brZOP33EuKtmoR4jp6jXENDrm55ym9LOUvCHvv6nGEg0X2qhOeDrUT0Qf5/XUU+XfWg==", + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/typings-generator": "0.8.1", - "pseudolocale": "~1.1.0", - "xmldoc": "~1.1.2" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, - "node_modules/@rushstack/localization-utilities/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true }, - "node_modules/@rushstack/localization-utilities/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, - "node_modules/@rushstack/localization-utilities/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true }, - "node_modules/@rushstack/localization-utilities/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" } }, - "node_modules/@rushstack/localization-utilities/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "@webassemblyjs/ast": "1.9.0" } }, - "node_modules/@rushstack/module-minifier": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@rushstack/module-minifier/-/module-minifier-0.1.32.tgz", - "integrity": "sha512-l5hkU/bK8fQuTEP+lXG9n44wuCQMt+AAzH6v88qzmwd60Y/Vc/aHdOu82TpuhhYdYKlvzSC1kn1fm5aGtRvplw==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@rushstack/worker-pool": "0.1.32", - "@types/node": "12.20.24", - "serialize-javascript": "6.0.0", - "source-map": "~0.7.3", - "terser": "5.9.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/@rushstack/module-minifier/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true + "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "optional": true, + "peer": true }, - "node_modules/@rushstack/module-minifier/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, - "node_modules/@rushstack/module-minifier/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, - "node_modules/@rushstack/module-minifier/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/@rushstack/module-minifier/node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" + "@xtuc/long": "4.2.2" } }, - "node_modules/@rushstack/node-core-library": { - "version": "3.44.3", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.44.3.tgz", - "integrity": "sha512-Bt+R5LAnVr2BImTJqPpton5rvhJ2Wq8x4BaTqaCHQMmfxqtz5lb4nLYT9kneMJTCDuRMBvvLpSuz4MBj50PV3w==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "timsort": "~0.3.0", - "z-schema": "~5.0.2" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, - "node_modules/@rushstack/node-core-library/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@rushstack/node-core-library/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, - "node_modules/@rushstack/node-core-library/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, - "node_modules/@rushstack/node-core-library/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, - "node_modules/@rushstack/package-deps-hash": { - "version": "3.2.51", - "resolved": "https://registry.npmjs.org/@rushstack/package-deps-hash/-/package-deps-hash-3.2.51.tgz", - "integrity": "sha512-UvbHA/2DpaEDsPmqsoW+RAYu6NhT56KptlBV/2LEeN3IyOvoSexjcG4U/7fbbJIv+ojzlf0r2/oP4C7zzzTJSQ==", + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/@rushstack/package-deps-hash/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/@rushstack/package-deps-hash/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "node_modules/@rushstack/package-deps-hash/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.0.2.tgz", + "integrity": "sha512-MqJ00WXw89ga0rK6GZkdmmgv3bAsxpJixyTthjcix73O44pBqotyU2BejBkLuIsaOBI6SEu77vAnSyLe5iIHkw==", + "dev": true + }, + "node_modules/@zkochan/cmd-shim": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-5.4.1.tgz", + "integrity": "sha512-odWb1qUzt0dIOEUPyWBEpFDYQPRjEMr/dbHHAfgBkVkYR9aO7Zo+I7oYWrXIxl+cKlC7+49ftPm8uJxL1MA9kw==", "dev": true, - "optional": true, + "dependencies": { + "cmd-extension": "^1.0.2", + "graceful-fs": "^4.2.10", + "is-windows": "^1.0.2" + }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=10.13" } }, - "node_modules/@rushstack/package-deps-hash/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { - "node": ">= 0.10" + "node": ">= 0.6" } }, - "node_modules/@rushstack/package-deps-hash/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, "bin": { - "z-schema": "bin/z-schema" + "acorn": "bin/acorn" }, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">=0.4.0" } }, - "node_modules/@rushstack/rig-package": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.2.12.tgz", - "integrity": "sha512-nbePcvF8hQwv0ql9aeQxcaMPK/h1OLAC00W7fWCRWIvD2MchZOE8jumIIr66HGrfG2X1sw++m/ZYI4D+BM5ovQ==", + "node_modules/acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "dev": true, "dependencies": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" } }, - "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@rushstack/rush-amazon-s3-build-cache-plugin/-/rush-amazon-s3-build-cache-plugin-5.79.0.tgz", - "integrity": "sha512-S+3Ta2dCRB3iyU4WSkTdeztbVfGol0nlhnT7vFfoSfDwAtoBymw3rUhLhA133OvDFPZXzF34c6JUlf5vs+VGkA==", + "node_modules/acorn-globals/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rush-sdk": "5.79.0", - "https-proxy-agent": "~5.0.0", - "node-fetch": "2.6.7" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "optional": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true, - "optional": true, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=0.4.0" } }, - "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true, + "node_modules/adal-angular": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/adal-angular/-/adal-angular-1.0.16.tgz", + "integrity": "sha512-tJf2bRwolKA8/J+wcy4CFOTAva8gpueHplptfjz3Wt1XOb7Y1jnwdm2VdkFZQUhxCtd/xPvcRSAQP2+ROtAD5g==", + "deprecated": "This package is no longer supported. Please migrate to @azure/msal-angular.", "engines": { - "node": ">= 0.10" + "node": ">=0.8.0" } }, - "node_modules/@rushstack/rush-amazon-s3-build-cache-plugin/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "debug": "^4.3.4" }, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">= 14" } }, - "node_modules/@rushstack/rush-azure-storage-build-cache-plugin": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@rushstack/rush-azure-storage-build-cache-plugin/-/rush-azure-storage-build-cache-plugin-5.79.0.tgz", - "integrity": "sha512-F7e1P1T9kXXoNa7HRx1VBLjgbUtr4gNPqM53+qH1KA18GFeAY8vsO1TokeWubfGs376KC6bbE5rVWb3k5x+VZw==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { - "@azure/identity": "~2.1.0", - "@azure/storage-blob": "~12.11.0", - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rush-sdk": "5.79.0", - "@rushstack/terminal": "0.3.74" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true, - "engines": { - "node": ">= 0.10" + "peerDependencies": { + "ajv": ">=5.0.0" } }, - "node_modules/@rushstack/rush-azure-storage-build-cache-plugin/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "ajv": "^8.0.0" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "ajv": "^8.0.0" }, - "optionalDependencies": { - "commander": "^9.4.1" + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/@rushstack/rush-sdk": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@rushstack/rush-sdk/-/rush-sdk-5.79.0.tgz", - "integrity": "sha512-32Z8mmVfhRBxsnzRKGv3YU8Jx6QbllqFkII1pV+t0OAPVaWXggLLRmXYZnUHWp6g8/qASFRqtE8fuUHEwp9Fxg==", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@types/node-fetch": "1.6.9", - "tapable": "2.2.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@rushstack/rush-sdk/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "node_modules/@rushstack/rush-sdk/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/@rushstack/rush-sdk/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/@rushstack/rush-sdk/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "string-width": "^4.1.0" } }, - "node_modules/@rushstack/rush-sdk/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "ansi-wrap": "^0.1.0" }, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">=0.10.0" } }, - "node_modules/@rushstack/set-webpack-public-path-plugin": { - "version": "3.3.69", - "resolved": "https://registry.npmjs.org/@rushstack/set-webpack-public-path-plugin/-/set-webpack-public-path-plugin-3.3.69.tgz", - "integrity": "sha512-8TFam4rhzwclWKrxvr5yLwmoL9Pk5vgf0v/ogxEYMr7G2pHhmZIYVePHShO3YnPWvbsIcRhmtu/afY1zg+PvZg==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "@rushstack/webpack-plugin-utilities": "0.1.36" + "type-fest": "^0.21.3" }, - "peerDependencies": { - "@types/webpack": "^4.39.8", - "webpack": "^5.35.1" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@rushstack/stream-collator": { - "version": "4.0.205", - "resolved": "https://registry.npmjs.org/@rushstack/stream-collator/-/stream-collator-4.0.205.tgz", - "integrity": "sha512-FbZDCLMwGFiOVP16U40Do+EjCFzbpIZNpbkihyEMsp6o8FGdS5At3DNLPKPgYLqyiSCxPxvA2a6bMr4yNDVtlA==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/terminal": "0.3.74" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rushstack/stream-collator/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", "dev": true, "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@rushstack/stream-collator/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@rushstack/stream-collator/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" } }, - "node_modules/@rushstack/stream-collator/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/@rushstack/stream-collator/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" }, - "optionalDependencies": { - "commander": "^9.4.1" - } - }, - "node_modules/@rushstack/terminal": { - "version": "0.3.74", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.3.74.tgz", - "integrity": "sha512-TXaHzq7HS0qickNjzAAZBhdWQwPaNtL4snJx+SKb3d6NxA+dWm+Tx0hIyo5CSgsTyLa0VD/9BBCDGJ3n1Qqbdw==", - "dev": true, - "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "wordwrap": "~1.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@rushstack/terminal/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@rushstack/terminal/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "node_modules/@rushstack/terminal/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@rushstack/terminal/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">= 0.10" + "node": ">= 8" } }, - "node_modules/@rushstack/terminal/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "buffer-equal": "^1.0.0" }, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">=0.10.0" } }, - "node_modules/@rushstack/tree-pattern": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@rushstack/tree-pattern/-/tree-pattern-0.2.2.tgz", - "integrity": "sha512-0KdqI7hGtVIlxobOBLWet0WGiD70V/QoYQr5A2ikACeQmIaN4WT6Fn9BcvgwgaSIMcazEcD8ql7Fb9N4dKdQlA==", + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "node_modules/@rushstack/ts-command-line": { - "version": "4.7.10", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.7.10.tgz", - "integrity": "sha512-8t042g8eerypNOEcdpxwRA3uCmz0duMo21rG4Z2mdz7JxJeylDmzjlU3wDdef2t3P1Z61JCdZB6fbm1Mh0zi7w==", - "dev": true, - "dependencies": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true }, - "node_modules/@rushstack/typings-generator": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@rushstack/typings-generator/-/typings-generator-0.8.1.tgz", - "integrity": "sha512-K0KtbA7HNAzZaf4A8olDhlX9stwA+CFrG7PTlmw3sZq3UWXZzbEu2ExG1LemMqjpsDwgDWbLHYCFTlU+KJoXyQ==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "chokidar": "~3.4.0", - "glob": "~7.0.5" + "sprintf-js": "~1.0.2" } }, - "node_modules/@rushstack/typings-generator/node_modules/@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, - "dependencies": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@rushstack/typings-generator/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@rushstack/typings-generator/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", "dev": true, - "optional": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=0.10.0" } }, - "node_modules/@rushstack/typings-generator/node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/@rushstack/typings-generator/node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", "dev": true, "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" + "make-iterator": "^1.0.0" }, "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" + "node": ">=0.10.0" } }, - "node_modules/@rushstack/webpack-plugin-utilities": { - "version": "0.1.36", - "resolved": "https://registry.npmjs.org/@rushstack/webpack-plugin-utilities/-/webpack-plugin-utilities-0.1.36.tgz", - "integrity": "sha512-Q58FIZ1rTCPtcQltWUtGrHK8vo0plZL74IMHD/5DK1AM6/sf2xisNJZi2gZtl9Brg8OAJTlZkSp6uoLScXE7Ew==", + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, - "peerDependencies": { - "@types/webpack": "^4.39.8", - "webpack": "^5.35.1" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "webpack": { - "optional": true - } + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@rushstack/worker-pool": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@rushstack/worker-pool/-/worker-pool-0.1.32.tgz", - "integrity": "sha512-HtajFVo6OPnYGT9eP0QOVwoP3AdNwvEnlQ/bkgLdY8oLuDqxx2vywO3qW7rA5OqRSH4GQyIwBf1LVVSslisZ3A==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "dependencies": { - "@types/node": "12.20.24" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rushstack/worker-pool/node_modules/@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", "dev": true, - "dependencies": { - "type-detect": "4.0.8" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=0.10.0" } }, - "node_modules/@types/anymatch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-3.0.0.tgz", - "integrity": "sha512-qLChUo6yhpQ9k905NwL74GU7TxH+9UODwwQ6ICNI+O6EDMExqH/Cv9NsbmcZ7yC/rRXJ/AHCzfgjsFRY5fKjYw==", - "deprecated": "This is a stub types definition. anymatch provides its own type definitions, so you do not need this installed.", + "node_modules/array-equal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.2.tgz", + "integrity": "sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==", "dev": true, - "dependencies": { - "anymatch": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, - "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0" + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha512-nF0fisEPYMIyfrFgabFimsz9Lnuu9MwkNrrlATm2E4E46afKDyeelT+8bXfw1VSc7sLBxMxRgT7PxTC2JcqN4Q==", - "dev": true - }, - "node_modules/@types/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==", - "deprecated": "This is a stub types definition. classnames provides its own type definitions, so you do not need this installed.", - "dependencies": { - "classnames": "*" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", "dev": true, "dependencies": { - "@types/node": "*" + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, - "peer": true + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/glob": { - "version": "5.0.30", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.30.tgz", - "integrity": "sha512-ZM05wDByI+WA153sfirJyEHoYYoIuZ7lA2dB/Gl8ymmpMTR78fNRtDMqa7Z6SdH4fZdLWZNRE6mZpx3XqBOrHw==", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "safer-buffer": "~2.1.0" } }, - "node_modules/@types/glob-stream": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", - "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "dependencies": { - "@types/glob": "*", - "@types/node": "*" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "dev": true, "dependencies": { - "@types/node": "*" + "object.assign": "^4.1.4", + "util": "^0.10.4" } }, - "node_modules/@types/gulp": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.6.tgz", - "integrity": "sha512-0E8/iV/7FKWyQWSmi7jnUvgXXgaw+pfAzEB06Xu+l0iXVJppLbpOye5z7E2klw5akXd+8kPtYuk65YBcZPM4ow==", + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, - "dependencies": { - "@types/undertaker": "*", - "@types/vinyl-fs": "*", - "chokidar": "^2.1.2" + "engines": { + "node": ">=0.8" } }, - "node_modules/@types/gulp/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "inherits": "2.0.3" } }, - "node_modules/@types/gulp/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/@types/gulp/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "node_modules/ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/@types/gulp/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/@types/gulp/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/@types/gulp/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, - "node_modules/@types/gulp/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "async-done": "^1.2.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/@types/gulp/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" + "bin": { + "atob": "bin/atob.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.5.0" } }, - "node_modules/@types/gulp/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" }, - "engines": { - "node": ">= 4.0" + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, - "node_modules/@types/gulp/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, - "node_modules/@types/gulp/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/autoprefixer/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/@types/gulp/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/gulp/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/@types/gulp/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", + "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@types/gulp/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/@types/gulp/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/@types/gulp/node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@types/gulp/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "node_modules/babel-plugin-jest-hoist": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", + "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=0.10" + "node": ">= 8.3" } }, - "node_modules/@types/gulp/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/babel-preset-current-node-syntax": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", + "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", + "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^25.5.0", + "babel-preset-current-node-syntax": "^0.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@types/http-proxy": { - "version": "1.17.10", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", - "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", "dev": true, "dependencies": { - "@types/node": "*" + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/jest": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz", - "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "dependencies": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.117", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.117.tgz", - "integrity": "sha512-xyf2m6tRbz8qQKcxYZa7PA4SllYcay+eh25DN3jmNYY6gSTL7Htc/bttVdkqj2wfJGbeWlQiX8pIyJpKU+tubw==" - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/@types/node": { - "version": "10.17.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", - "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==", + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, - "node_modules/@types/node-fetch": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-1.6.9.tgz", - "integrity": "sha512-n2r6WLoY7+uuPT7pnEtKJCmPUGyJ+cbyBR8Avnu4+m1nzz7DwBVuyIvvlBzCZ/nrpC7rIgb3D6pNavL7rFEa9g==", + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "dependencies": { - "@types/node": "*" + "tweetnacl": "^0.14.3" } }, - "node_modules/@types/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@types/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-5v0PhPv0AManpxT7W25Zipmj/Lxp1WqfkcpZHyqSloB+gGoAHRBuzhrCelFKrPvNF5ki3gAcO4kxaGO2/21u8g==", + "node_modules/beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/office-js": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/@types/office-js/-/office-js-1.0.36.tgz", - "integrity": "sha512-v5jOXCPS0nbbuVzZThhDMzttuJrpzzvx1GsPo5Qed8Cs9uzMwEV1vdkKN5zLFnAUlEF4s8Szl9KXnhnSvH89Kw==" - }, - "node_modules/@types/orchestrator": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/orchestrator/-/orchestrator-0.0.30.tgz", - "integrity": "sha512-rT9So631KbmirIGsZ5m6T15FKHqiWhYRULdl03l/WBezzZ8wwhYTS2zyfHjsvAGYFVff1wtmGFd0akRCBDSZrA==", + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", "dev": true, "dependencies": { - "@types/q": "*" - } - }, - "node_modules/@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "peer": true - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/react": { - "version": "17.0.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.56.tgz", - "integrity": "sha512-Z13f9Qz7Hg8f2g2NsBjiJSVWmON2b3K8RIqFK8mMKCIgvD0CD0ZChTukz87H3lI28X3ukXoNFGzo3ZW1ICTtPA==", - "peer": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", - "peer": true, - "dependencies": { - "@types/react": "^17" + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" } }, - "node_modules/@types/requirejs": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.29.tgz", - "integrity": "sha512-61MNgoBY6iEsHhFGiElSjEu8HbHOahJLGh9BdGSfzgAN+2qOuFJKuG3f7F+/ggKr+0yEM3Y4fCWAgxU6es0otg==" - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/rimraf": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.5.tgz", - "integrity": "sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "dependencies": { - "@types/glob": "*", - "@types/node": "*" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "peer": true - }, - "node_modules/@types/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-iotVxtCCsPLRAvxMFFgxL8HD2l4mAZ2Oin7/VJ2ooWO0VOK4EGOGmZWZn1uCq7RofR3I/1IOSjCHlFT71eVK0Q==", - "dev": true - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "optional": true, "dependencies": { - "@types/express": "*" + "file-uri-to-path": "1.0.0" } }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { - "@types/mime": "*", - "@types/node": "*" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "@types/node": "*" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "node_modules/@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, - "node_modules/@types/through2": { - "version": "2.0.32", - "resolved": "https://registry.npmjs.org/@types/through2/-/through2-2.0.32.tgz", - "integrity": "sha512-VYclBauj55V0qPDHs9QMdKBdxdob6zta8mcayjTyOzlRgl+PNERnvNol99W1PBnvQXaYoTTqSce97rr9dz9oXQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/tunnel": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", - "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", + "node_modules/body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==", "dev": true, "dependencies": { - "@types/node": "*" + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" } }, - "node_modules/@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", + "node_modules/body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", "dev": true, "dependencies": { - "source-map": "^0.6.1" + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@types/undertaker": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.8.tgz", - "integrity": "sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "@types/node": "*", - "@types/undertaker-registry": "*", - "async-done": "~1.3.2" + "ms": "2.0.0" } }, - "node_modules/@types/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/@types/vinyl": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.3.tgz", - "integrity": "sha512-hrT6xg16CWSmndZqOTJ6BGIn2abKyTw0B58bI+7ioUoj3Sma6u8ftZ1DTI2yCaJamOVGLOnQWiPH3a74+EaqTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/vinyl-fs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.1.tgz", - "integrity": "sha512-me2Gcxw23pZp62oqPoiTDDMz/txEmtEZzXM/D/VTr+xUX4LiNA+nQPs38SSPu5KHnsaEER4HEtzWU5qJRXigfA==", - "dev": true, - "dependencies": { - "@types/glob-stream": "*", - "@types/node": "*", - "@types/rimraf": "^2.0.3", - "@types/vinyl": "*" - } - }, - "node_modules/@types/webpack": { - "version": "4.41.24", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.24.tgz", - "integrity": "sha512-1A0MXPwZiMOD3DPMuOKUKcpkdPo8Lq33UGggZ7xio6wJ/jV1dAu5cXDrOfGDnldUroPIRLsr/DT43/GqOA4RFQ==", - "dev": true, - "dependencies": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-env": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.15.3.tgz", - "integrity": "sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ==", + "node_modules/body/node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==", "dev": true }, - "node_modules/@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "node_modules/body/node_modules/raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg==", "dev": true, "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, + "bytes": "1", + "string_decoder": "0.10" + }, "engines": { - "node": ">= 8" + "node": ">= 0.8.0" } }, - "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "node_modules/body/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { - "@types/node": "*" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "node_modules/@types/yargs": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-0.0.34.tgz", - "integrity": "sha512-Rrj9a2bqpcPKGYCIyQGkD24PeCZG3ow58cgaAtI4jwsUMe/9hDaCInMpXZ+PaUK3cVwsFUstpOEkSfMdQpCnYA==", - "dev": true - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.6.0.tgz", - "integrity": "sha512-MIbeMy5qfLqtgs1hWd088k1hOuRsN9JrHUPwVVKCD99EOUqScd7SrwoZl4Gso05EAP9w1kvLWUVGJOVpRPkDPA==", + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "5.6.0", - "@typescript-eslint/scope-manager": "5.6.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/experimental-utils": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz", - "integrity": "sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA==", + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.6.0", - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/typescript-estree": "5.6.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.30.7.tgz", - "integrity": "sha512-r218ZVL0zFBYzEq8/9K2ZhRgsmKUhm8xd3sWChgvTbmP98kHGuY83IUl64SS9fx9OSBM9vMLdzBfox4eDdm/ZQ==", + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.30.7" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.6.0.tgz", - "integrity": "sha512-YVK49NgdUPQ8SpCZaOpiq1kLkYRPMv9U5gcMrywzI8brtwZjr/tG3sZpuHyODt76W/A0SufNjYt9ZOgrC4tLIQ==", + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.6.0", - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/typescript-estree": "5.6.0", - "debug": "^4.3.2" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.6.0.tgz", - "integrity": "sha512-1U1G77Hw2jsGWVsO2w6eVCbOg0HZ5WxL/cozVSTfqnL/eB9muhb8THsP0G3w+BB5xAHv9KptwdfYFAUfzcIh4A==", + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/visitor-keys": "5.6.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz", - "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.6.0.tgz", - "integrity": "sha512-OIZffked7mXv4mXzWU5MgAEbCf9ecNJBKi+Si6/I9PpTaj+cf2x58h2oHW5/P/yTnPkKaayfjhLvx+crnl5ubA==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "fill-range": "^7.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=8" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.6.0.tgz", - "integrity": "sha512-92vK5tQaE81rK7fOmuWMrSQtK1IMonESR+RJR2Tlc7w4o0MeEdjgidY/uO2Gobh7z4Q1hhS94Cr7r021fMVEeA==", + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/visitor-keys": "5.6.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ] + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, "engines": { - "node": ">=8" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=6" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, "engines": { - "node": ">= 8" + "node": ">= 0.8" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz", - "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==", + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">= 10" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", + "node_modules/cacache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "yallist": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", + "node_modules/cacache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.30.7", - "eslint-visitor-keys": "^3.3.0" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "node_modules/@typescript-eslint/utils/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@typescript-eslint/utils/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/utils/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", "dev": true, "engines": { - "node": ">= 4" + "node": "*" } }, - "node_modules/@typescript-eslint/utils/node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/callsite-record": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/callsite-record/-/callsite-record-4.1.5.tgz", + "integrity": "sha512-OqeheDucGKifjQRx524URgV4z4NaKjocGhygTptDea+DLROre4ZEecA4KXDq+P7qlGCohYVNOh3qr+y5XH5Ftg==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "@devexpress/error-stack-parser": "^2.0.6", + "@types/lodash": "^4.14.72", + "callsite": "^1.0.0", + "chalk": "^2.4.0", + "highlight-es": "^1.0.0", + "lodash": "4.6.1 || ^4.16.1", + "pinkie-promise": "^2.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.6.0.tgz", - "integrity": "sha512-1p7hDp5cpRFUyE3+lvA74egs+RWSgumrBpzBCDzfTFv0aQ7lIeay80yU0hIxgAhwQ6PcasW35kaOCyDOv6O/Ng==", + "node_modules/callsite-record/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.6.0", - "eslint-visitor-keys": "^3.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=4" } }, - "node_modules/@uifabric/foundation": { - "version": "7.10.16", - "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-7.10.16.tgz", - "integrity": "sha512-x13xS9aKh6FEWsyQP2jrjyiXmUUdgyuAfWKMLhUTK4Rsc+vJANwwVk4fqGsU021WA6pghcIirvEVpWf5MlykDQ==", + "node_modules/callsite-record/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/@uifabric/foundation/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@uifabric/icons": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@uifabric/icons/-/icons-7.9.5.tgz", - "integrity": "sha512-0e2fEURtR7sNqoGr9gU/pzcOp24B/Lkdc05s1BSnIgXlaL2QxRszfaEsl3/E9vsNmqA3tvRwDJWbtRolDbjCpQ==", + "node_modules/callsite-record/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" + "color-name": "1.1.3" } }, - "node_modules/@uifabric/icons/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/callsite-record/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "node_modules/@uifabric/merge-styles": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-7.20.2.tgz", - "integrity": "sha512-cJy8hW9smlWOKgz9xSDMCz/A0yMl4mdo466pcGlIOn84vz+e94grfA7OoTuTzg3Cl0Gj6ODBSf1o0ZwIXYL1Xg==", - "dependencies": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" + "node_modules/callsite-record/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/@uifabric/merge-styles/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/callsite-record/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/@uifabric/react-hooks": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.16.4.tgz", - "integrity": "sha512-k8RJYTMICWA6varT5Y+oCf2VDHHXN0tC2GuPD4I2XqYCTLaXtNCm4+dMcVA2x8mv1HIO7khvm/8aqKheU/tDfQ==", + "node_modules/callsite-record/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { - "@fluentui/react-window-provider": "^1.0.6", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" + "has-flag": "^3.0.0" }, - "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/@uifabric/react-hooks/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@uifabric/set-version": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.24.tgz", - "integrity": "sha512-t0Pt21dRqdC707/ConVJC0WvcQ/KF7tKLU8AZY7YdjgJpMHi1c0C427DB4jfUY19I92f60LOQyhJ4efH+KpFEg==", - "dependencies": { - "tslib": "^1.10.0" + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" } }, - "node_modules/@uifabric/set-version/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@uifabric/styling": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.25.1.tgz", - "integrity": "sha512-bd4QDYyb0AS0+KmzrB8VsAfOkxZg0dpEpF1YN5Ben10COmT8L1DoE4bEF5NvybHEaoTd3SKxpJ42m+ceNzehSw==", + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, "dependencies": { - "@fluentui/theme": "^1.7.13", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, - "node_modules/@uifabric/styling/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/@uifabric/utilities": { - "version": "7.38.2", - "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.38.2.tgz", - "integrity": "sha512-5yM4sm142VEBg3/Q5SFheBXqnrZi9CNF5rjHNoex0GgGtG3AHPuS7U8gjm+/Io1MvbuCrn6lyyIw0MDvh1Ebkw==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, "dependencies": { - "@fluentui/dom-utilities": "^1.1.2", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, - "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@uifabric/utilities/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "node_modules/caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" } }, - "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" + "engines": { + "node": ">=6.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true, - "peer": true + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "peer": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "peer": true, "dependencies": { - "@xtuc/long": "4.2.2" + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" } }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" + "engines": { + "node": ">=6" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.0.2.tgz", - "integrity": "sha512-MqJ00WXw89ga0rK6GZkdmmgv3bAsxpJixyTthjcix73O44pBqotyU2BejBkLuIsaOBI6SEu77vAnSyLe5iIHkw==", - "dev": true - }, - "node_modules/@zkochan/cmd-shim": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-5.4.1.tgz", - "integrity": "sha512-odWb1qUzt0dIOEUPyWBEpFDYQPRjEMr/dbHHAfgBkVkYR9aO7Zo+I7oYWrXIxl+cKlC7+49ftPm8uJxL1MA9kw==", + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, - "dependencies": { - "cmd-extension": "^1.0.2", - "graceful-fs": "^4.2.10", - "is-windows": "^1.0.2" - }, "engines": { - "node": ">=10.13" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "node_modules/cli-table": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", + "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", "dev": true, "dependencies": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" } }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "node_modules/cli-table/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=0.1.90" } }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, - "peer": true, - "peerDependencies": { - "acorn": "^8" + "engines": { + "node": ">= 10" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, - "node_modules/acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "node_modules/cliui/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/adal-angular": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/adal-angular/-/adal-angular-1.0.16.tgz", - "integrity": "sha512-tJf2bRwolKA8/J+wcy4CFOTAva8gpueHplptfjz3Wt1XOb7Y1jnwdm2VdkFZQUhxCtd/xPvcRSAQP2+ROtAD5g==", + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/cliui/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "dependencies": { - "debug": "4" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=0.10.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=0.8" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" + "engines": { + "node": ">= 0.10" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { - "ajv": "^8.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, - "peerDependencies": { - "ajv": "^8.0.0" + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/clone-deep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "mimic-response": "^1.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "node_modules/clone-stats": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", "dev": true }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" } }, - "node_modules/alphanum-sort": { + "node_modules/cmd-extension": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", - "dev": true + "resolved": "https://registry.npmjs.org/cmd-extension/-/cmd-extension-1.0.2.tgz", + "integrity": "sha512-iWDjmP8kvsMdBmLTHxFaqXikO8EdFRDfim7k6vUHglY/2xJ5jLrPsnQGijdfp4U+sr/BeecG0wKm02dSIAeQ1g==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "node_modules/ansi-colors": { + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", "dev": true, "dependencies": { - "ansi-wrap": "^0.1.0" + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "ansi-wrap": "0.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], "bin": { - "ansi-html": "bin/ansi-html" + "color-support": "bin.js" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", "engines": { - "node": ">=8" + "node": ">=0.1.90" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "devOptional": true }, - "node_modules/any-promise": { + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/component-emitter": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "dependencies": { - "buffer-equal": "^1.0.0" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, + "engines": [ + "node >= 0.8" + ], "dependencies": { - "sprintf-js": "~1.0.2" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "dependencies": { - "make-iterator": "^1.0.0" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8" } }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "node_modules/connect-livereload": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz", + "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==", "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/array-differ": { + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", + "node_modules/continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==", "dev": true }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", + "node_modules/copy-concurrently/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "node_modules/copy-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { - "is-number": "^4.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" } }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "node_modules/copy-webpack-plugin": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.4.tgz", + "integrity": "sha512-zCazfdYAh3q/O4VzZFiadWGpDA2zTs6FC6D7YTHD6H1J40pzo0H4z22h1NYMCl4ArQP4CK8y/KWqPrJ4rVkZ5A==", "dev": true, "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" + "cacache": "^15.0.5", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^2.7.0", + "serialize-javascript": "^4.0.0", + "webpack-sources": "^1.4.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" } }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "node_modules/copy-webpack-plugin/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "node_modules/copy-webpack-plugin/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.9.0" } }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "node_modules/copy-webpack-plugin/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "randombytes": "^2.1.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { - "safer-buffer": "~2.1.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "node_modules/asn1.js/node_modules/bn.js": { + "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "engines": { - "node": ">=0.8" + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "inherits": "2.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==", + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "node_modules/css-loader": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", + "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.23", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.1.1", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.0.2", + "schema-utils": "^2.6.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "node_modules/css-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, - "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", + "node_modules/css-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "async-done": "^1.2.2" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 0.10" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/css-loader/node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "dev": true, - "bin": { - "atob": "bin/atob.js" + "dependencies": { + "postcss": "^7.0.5" }, "engines": { - "node": ">= 4.5.0" + "node": ">= 6" } }, - "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "node_modules/css-loader/node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dev": true, "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", + "icss-utils": "^4.1.1", "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" + "engines": { + "node": ">= 6" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/css-loader/node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 6" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "node_modules/css-loader/node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" } }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", + "node_modules/css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha512-XWOBwgy5nwBn76aA+6ybUGL/3JBnCtBX9Ay9/OWIpzKYWlVHMazvJ+WtHumfi+xxdPF440cWK7JCYtt8xDifew==", "dev": true, "dependencies": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=0.10.0" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/css-modules-loader-core/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/css-modules-loader-core/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/css-modules-loader-core/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", + "node_modules/css-modules-loader-core/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.8.0" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", + "node_modules/css-modules-loader-core/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", + "node_modules/css-modules-loader-core/node_modules/postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha512-VbGX1LQgQbf9l3cZ3qbUuC3hGqIEOGQFHAEHQ/Diaeo0yLgpgK5Rb8J+OcamIfQ9PbAU/fzBjVtQX3AhJHUvZw==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "engines": { - "node": ">= 8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=4.0.0" } }, - "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", + "node_modules/css-modules-loader-core/node_modules/postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha512-zF9+UIEvtpeqMGxhpeT9XaIevQSrBBCz9fi7SwfkmjVacsSj8DY5eFVgn+wY8I9vvdDDwK5xC8Myq4UkoLFIkA==", "dev": true, "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" + "postcss": "^6.0.1" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "node_modules/css-modules-loader-core/node_modules/postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==", + "dev": true, + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/css-modules-loader-core/node_modules/postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==", "dev": true, "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "node_modules/css-modules-loader-core/node_modules/postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==", + "dev": true, + "dependencies": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "node_modules/css-modules-loader-core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "node_modules/css-modules-loader-core/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/css-modules-loader-core/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { - "tweetnacl": "^0.14.3" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" } }, - "node_modules/better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "dependencies": { - "is-windows": "^1.0.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, "engines": { - "node": "*" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dev": true, - "optional": true, "dependencies": { - "file-uri-to-path": "1.0.0" + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "node_modules/body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "dev": true, - "dependencies": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, "engines": { - "node": ">= 0.8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "dependencies": { - "ms": "2.0.0" + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "node_modules/cssstyle": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", + "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", "dev": true, "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "cssom": "0.3.x" } }, - "node_modules/bonjour-service/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "peer": true }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "node_modules/cyclist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", "dev": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "assert-plus": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/brorand": { + "node_modules/data-urls": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", "dev": true, "dependencies": { - "resolve": "1.1.7" + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" } }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "node_modules/data-urls/node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "node_modules/dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "engines": { + "node": "*" } }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "engines": { + "node": "*" } }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "dependencies": { - "pako": "~1.0.5" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=0.10" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/decomment": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.5.tgz", + "integrity": "sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg==", "dev": true, "dependencies": { - "node-int64": "^0.4.0" + "esprima": "4.0.1" + }, + "engines": { + "node": ">=6.4", + "npm": ">=2.15" } }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0.0" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", "dev": true, + "dependencies": { + "kind-of": "^5.0.2" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "execa": "^5.0.0" }, "engines": { "node": ">= 10" } }, - "node_modules/cacache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/default-gateway/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "clone": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "dependencies": { - "callsites": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.8" } }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "caller-callsite": "^2.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { + "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "node_modules/del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", "dev": true, "dependencies": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "node_modules/del/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001474", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz", - "integrity": "sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "node_modules/depcheck": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.7.tgz", + "integrity": "sha512-1lklS/bV5chOxwNKA/2XUUk/hPORp8zihZsXflr8x0kLwmcZ9Y9BsS6Hs3ssvA+2wUVbG0U2Ciqvm1SokNjPkA==", "dev": true, "dependencies": { - "rsvp": "^4.8.4" + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@vue/compiler-sfc": "^3.3.4", + "callsite": "^1.0.0", + "camelcase": "^6.3.0", + "cosmiconfig": "^7.1.0", + "debug": "^4.3.4", + "deps-regex": "^0.2.0", + "findup-sync": "^5.0.0", + "ignore": "^5.2.4", + "is-core-module": "^2.12.0", + "js-yaml": "^3.14.1", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "minimatch": "^7.4.6", + "multimatch": "^5.0.0", + "please-upgrade-node": "^3.2.0", + "readdirp": "^3.6.0", + "require-package-name": "^2.0.1", + "resolve": "^1.22.3", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "yargs": "^16.2.0" + }, + "bin": { + "depcheck": "bin/depcheck.js" }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/depcheck/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "balanced-match": "^1.0.0" + } + }, + "node_modules/depcheck/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "node_modules/depcheck/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "node_modules/chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "node_modules/depcheck/node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.2" + "node": ">= 10.13.0" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/depcheck/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { - "node": ">=10" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "node_modules/depcheck/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { - "node": ">=6.0" + "node": ">= 4" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/depcheck/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/depcheck/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/depcheck/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/depcheck/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.10.0" } }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/depcheck/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/depcheck/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/depcheck/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/depcheck/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "node_modules/depcheck/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "node_modules/depcheck/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">= 4.0" + "node": ">=10" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/dependency-path": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/dependency-path/-/dependency-path-9.2.8.tgz", + "integrity": "sha512-S0OhIK7sIyAsph8hVH/LMCTDL3jozKtlrPx3dMQrlE2nAlXTquTT+AcOufphDMTQqLkfn4acvfiem9I1IWZ4jQ==", "dev": true, "dependencies": { - "restore-cursor": "^3.1.0" + "@pnpm/crypto.base32-hash": "1.0.1", + "@pnpm/types": "8.9.0", + "encode-registry": "^3.0.0", + "semver": "^7.3.8" }, "engines": { - "node": ">=8" + "node": ">=14.6" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", + "node_modules/dependency-path/node_modules/@pnpm/crypto.base32-hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pnpm/crypto.base32-hash/-/crypto.base32-hash-1.0.1.tgz", + "integrity": "sha512-pzAXNn6KxTA3kbcI3iEnYs4vtH51XEVqmK/1EiD18MaPKylhqy8UvMJK3zKG+jeP82cqQbozcTGm4yOQ8i3vNw==", "dev": true, "dependencies": { - "colors": "1.0.3" + "rfc4648": "^1.5.1" }, "engines": { - "node": ">= 0.2.0" + "node": ">=14.6" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/cli-table/node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "node_modules/dependency-path/node_modules/@pnpm/types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-8.9.0.tgz", + "integrity": "sha512-3MYHYm8epnciApn6w5Fzx6sepawmsNU7l6lvIq+ER22/DPSrr83YMhU/EQWnf4lORn2YyiXFj0FJSyJzEtIGmw==", "dev": true, "engines": { - "node": ">=0.1.90" + "node": ">=14.6" + }, + "funding": { + "url": "https://opencollective.com/pnpm" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } + "node_modules/deps-regex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.2.0.tgz", + "integrity": "sha512-PwuBojGMQAYbWkMXOY9Pd/NWCDNHVH12pnS7WHqZkTSeMESe4hwnKKRp0yR87g37113x4JPbo/oIvXY+s/f56Q==", + "dev": true }, - "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/diff-sequences": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", + "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", "dev": true, "engines": { - "node": ">=0.8" + "node": ">= 8.3" } }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/cmd-extension": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cmd-extension/-/cmd-extension-1.0.2.tgz", - "integrity": "sha512-iWDjmP8kvsMdBmLTHxFaqXikO8EdFRDfim7k6vUHglY/2xJ5jLrPsnQGijdfp4U+sr/BeecG0wKm02dSIAeQ1g==", + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=0.4", + "npm": ">=1.2" } }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">= 4.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "is-obj": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "readable-stream": "~1.1.9" } }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/duplexer2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", "dev": true, "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "node_modules/each-props/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "safe-buffer": "^5.0.1" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } + "node_modules/electron-to-chromium": { + "version": "1.4.721", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.721.tgz", + "integrity": "sha512-k1x2r6foI8iJOp+1qTxbbrrWMsOiHkzGBYwYigaq+apO1FSqtn44KTo3Sy69qt7CRr7149zTcsDvH7MUKsOuIQ==", + "dev": true }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/elliptic": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "engines": { - "node": ">=0.1.90" + "node": ">= 4" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/encode-registry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/encode-registry/-/encode-registry-3.0.1.tgz", + "integrity": "sha512-6qOwkl1g0fv0DN3Y3ggr2EaZXN71aoAqPp3p/pVaWSBSIo+YjLOWN61Fva43oVyQNPf7kgm8lkudzlzojwE2jw==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "mem": "^8.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "devOptional": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/end-of-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", + "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", "dev": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "once": "~1.3.0" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/end-of-stream/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", "dev": true, "dependencies": { - "ms": "2.0.0" + "wrappy": "1" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, - "engines": [ - "node >= 0.8" - ], "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" }, "engines": { - "node": ">= 0.10.0" + "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "node_modules/connect-livereload": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", - "integrity": "sha512-3KnRwsWf4VmP01I4hCDQqTc4e2UxOvJIi8i08GiwqX2oymzxNFY7PqjFkwHglYTJ0yzUJkO5yqdPxVaIz3Pbug==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { - "node": "*" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "dependencies": { - "ms": "2.0.0" + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" } }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "string-template": "~0.2.1" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { + "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "node_modules/es-module-lexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", + "dev": true, + "optional": true, + "peer": true }, - "node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "has": "^1.0.3" } }, - "node_modules/copy-concurrently/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, + "hasInstallScript": true, "dependencies": { - "minimist": "^1.2.6" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=0.10" } }, - "node_modules/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" }, - "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, "dependencies": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/copy-webpack-plugin": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.4.tgz", - "integrity": "sha512-zCazfdYAh3q/O4VzZFiadWGpDA2zTs6FC6D7YTHD6H1J40pzo0H4z22h1NYMCl4ArQP4CK8y/KWqPrJ4rVkZ5A==", + "node_modules/es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha512-sziUVwcvQ+lOsrTyUY0Q11ilAPj+dy7AQ1E1MgSaHTaaAFTffaa08QSlGNU61iyVaroyb6nYdBV6oD7nzn6i8w==", "dev": true, "dependencies": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "recast": "~0.11.12", + "through": "~2.3.6" } }, - "node_modules/copy-webpack-plugin/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/copy-webpack-plugin/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/copy-webpack-plugin/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { "node": ">=10" }, @@ -14316,2156 +14577,2040 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/copy-webpack-plugin/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=8.9.0" + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/copy-webpack-plugin/node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=4.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": ">=4" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "node": ">= 0.8.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">= 0.8.0" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "prelude-ls": "~1.1.2" }, "engines": { - "node": "*" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "dev": true, - "engines": { - "node": "*" + "node": ">= 0.8.0" } }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "node_modules/eslint": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", + "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", "dev": true, "dependencies": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - }, - "engines": { - "node": ">4" - } - }, - "node_modules/css-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha512-XWOBwgy5nwBn76aA+6ybUGL/3JBnCtBX9Ay9/OWIpzKYWlVHMazvJ+WtHumfi+xxdPF440cWK7JCYtt8xDifew==", - "dev": true, - "dependencies": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/css-modules-loader-core/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/eslint-plugin-promise": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", + "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/css-modules-loader-core/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/eslint-plugin-react": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", + "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/css-modules-loader-core/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/css-modules-loader-core/node_modules/chalk/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/css-modules-loader-core/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "engines": { - "node": ">=0.8.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/css-modules-loader-core/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "node_modules/eslint-plugin-tsdoc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", + "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "0.16.2" } }, - "node_modules/css-modules-loader-core/node_modules/postcss": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha512-VbGX1LQgQbf9l3cZ3qbUuC3hGqIEOGQFHAEHQ/Diaeo0yLgpgK5Rb8J+OcamIfQ9PbAU/fzBjVtQX3AhJHUvZw==", + "node_modules/eslint-plugin-tsdoc/node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true + }, + "node_modules/eslint-plugin-tsdoc/node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", "dev": true, "dependencies": { - "chalk": "^1.1.3", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=4.0.0" + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" } }, - "node_modules/css-modules-loader-core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/eslint-plugin-tsdoc/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/css-modules-loader-core/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/css-modules-loader-core/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, "engines": { - "node": ">=0.8.0" + "node": ">=4.0" } }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "node_modules/css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" + "engines": { + "node": ">=10" } }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=6.9.0" + "node": ">=10.13.0" } }, - "node_modules/cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "node_modules/eslint/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">= 4" } }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "node_modules/espree": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "dev": true, "dependencies": { - "postcss": "^7.0.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/cssnano-util-same-parent": { + "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "css-tree": "^1.1.2" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4.0" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "node_modules/cssstyle": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", - "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "dependencies": { - "cssom": "0.3.x" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "peer": true - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "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", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=0.10" + "node": "^8.12.0 || >=9.7.0" } }, - "node_modules/data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, - "dependencies": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/data-urls/node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/decomment": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.5.tgz", - "integrity": "sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg==", + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, "dependencies": { - "esprima": "4.0.1" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=6.4", - "npm": ">=2.15" + "node": ">=0.10.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "kind-of": "^5.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "dependencies": { - "execa": "^5.0.0" + "homedir-polyfill": "^1.0.1" }, "engines": { - "node": ">= 10" + "node": ">=0.10.0" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 8.3" } }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": ">=10.17.0" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/default-resolution": { + "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "type": "^2.7.2" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "dependencies": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/del/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-descriptor": "^1.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/del/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "is-extendable": "^0.1.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "engines": [ + "node >=0.6.0" + ] }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/fast-glob/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/detect-node": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "reusify": "^1.0.4" } }, - "node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, "engines": { - "node": ">= 8.3" + "node": ">=0.4.0" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bser": "2.1.1" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "deprecated": "This module is no longer supported.", "dev": true }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/figures": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=8" } }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz", - "integrity": "sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=6" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/file-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.0.tgz", + "integrity": "sha512-26qPdHyTsArQ6gU4P1HJbAbnFTyT2r0pG7czh1GFAd9TZbj0n94wWbupgixZH/ET/meqi2/5+F7DhW4OAXD+Lg==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "optional": true }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=0.4", - "npm": ">=1.2" + "node": ">=8" } }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "node_modules/finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "dependencies": { - "webidl-conversions": "^4.0.2" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "ms": "2.0.0" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "dependencies": { - "is-obj": "^2.0.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "readable-stream": "~1.1.9" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" } }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "node_modules/findup-sync/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/each-props/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "node_modules/findup-sync/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.350", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.350.tgz", - "integrity": "sha512-XnXcWpVnOfHZ4C3NPiL+SubeoGV8zc/pg8GEubRtc1dPA/9jKS2vsOPmtClJHhWxUb2RSGC1OBLCbgNUJMtZPw==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/findup-sync/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/findup-sync/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/end-of-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", + "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "once": "~1.3.0" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/end-of-stream/node_modules/once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "node_modules/findup-sync/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "wrappy": "1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "node_modules/findup-sync/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "peer": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/findup-sync/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "dependencies": { - "prr": "~1.0.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "node_modules/fined/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true, - "peer": true + "engines": { + "node": ">= 0.10" + } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "dependencies": { - "has": "^1.0.3" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" + "node": ">=4.0" }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "is-callable": "^1.1.3" } }, - "node_modules/es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha512-sziUVwcvQ+lOsrTyUY0Q11ilAPj+dy7AQ1E1MgSaHTaaAFTffaa08QSlGNU61iyVaroyb6nYdBV6oD7nzn6i8w==", + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, - "dependencies": { - "recast": "~0.11.12", - "through": "~2.3.6" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "node_modules/fork-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", + "integrity": "sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==", "dev": true }, - "node_modules/escape-string-regexp": { + "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">= 6" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">= 0.6" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "map-cache": "^0.2.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.6" } }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dependencies": { - "prelude-ls": "~1.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==", + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.37.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "minipass": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 8" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", - "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "engines": { + "node": ">= 0.10" } }, - "node_modules/eslint-plugin-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", - "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-tsdoc": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", - "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "0.16.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-tsdoc/node_modules/@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, - "node_modules/eslint-plugin-tsdoc/node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", - "dev": true, - "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - } - }, - "node_modules/eslint-plugin-tsdoc/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "loader-utils": "^1.1.0" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=6.9.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "peer": true - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, - "peer": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-repo-info": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", + "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/giturl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/giturl/-/giturl-1.0.3.tgz", + "integrity": "sha512-qVDEXufVtYUzYqI5hoDUONh9GCEPi0n+e35KNDafdsNt9fPxB0nvFW/kFiw7W42wkg8TUyhBqb+t24yyaoc87A==", "dev": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.10.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha512-f8c0rE8JiCxpa52kWPAOa3ZaYEnzofDzCQLCn3Vdk0Z5OVLq3BsRFJI4S4ykpeVW6QMGBUkMeUpoEgWnMTnw5Q==", "dev": true, - "peer": true, "dependencies": { - "type-fest": "^0.20.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/glob-escape": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/glob-escape/-/glob-escape-0.0.2.tgz", + "integrity": "sha512-L/cXYz8x7qer1HAyUQ+mbjcUsJVdpRxpAf7CwqHoNBs9vTpABlGfNN4tzkDxt+u3Z7ZncVyKlCNPtzb0R/7WbA==", "dev": true, - "peer": true, "engines": { - "node": ">= 4" + "node": ">= 0.10" } }, - "node_modules/eslint/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "peer": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, - "peer": true, "dependencies": { - "argparse": "^2.0.1" + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.10" } }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/glob-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "peer": true, "dependencies": { - "p-locate": "^5.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, - "peer": true, "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "node_modules/eslint/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, - "peer": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "optional": true, + "peer": true }, - "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "dev": true, "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "remove-trailing-separator": "^1.0.1" }, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/event-stream": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", - "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, "engines": { - "node": ">=0.8.x" + "node": ">=0.10.0" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "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", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "bindings": "^1.5.0", + "nan": "^2.12.1" }, "engines": { - "node": "^8.12.0 || >=9.7.0" + "node": ">= 4.0" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "is-extglob": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "binary-extensions": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/glob-watcher/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/glob-watcher/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "dependencies": { "kind-of": "^3.0.2" @@ -16474,7 +16619,7 @@ "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "node_modules/glob-watcher/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", @@ -16486,2309 +16631,2191 @@ "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/glob-watcher/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/glob-watcher/node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/glob-watcher/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "dependencies": { - "homedir-polyfill": "^1.0.1" + "ini": "2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, "engines": { - "node": ">= 8.3" + "node": ">=10" } }, - "node_modules/express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "dependencies": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">=0.10.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "dependencies": { - "ms": "2.0.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { - "type": "^2.7.2" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", "dev": true, "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "sparkles": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/extsprintf": { + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/growly": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", "dev": true, "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" }, "engines": { "node": ">= 0.10" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" }, "engines": { - "node": ">=8.6.0" + "node": ">= 0.10" } }, - "node_modules/fast-glob/node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/gulp-cli/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "node_modules/gulp-cli/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "node_modules/gulp-cli/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "dependencies": { - "websocket-driver": ">=0.5.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/gulp-cli/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "dependencies": { - "bser": "2.1.1" + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/gulp-cli/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "dependencies": { - "escape-string-regexp": "^1.0.5" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/gulp-cli/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/gulp-cli/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "error-ex": "^1.2.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/file-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.0.tgz", - "integrity": "sha512-26qPdHyTsArQ6gU4P1HJbAbnFTyT2r0pG7czh1GFAd9TZbj0n94wWbupgixZH/ET/meqi2/5+F7DhW4OAXD+Lg==", + "node_modules/gulp-cli/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.1" + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "node": ">=0.10.0" } }, - "node_modules/file-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/gulp-cli/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/file-loader/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/gulp-cli/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/gulp-cli/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "engines": { - "node": ">=8.9.0" + "node": ">=0.10.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "node_modules/gulp-cli/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "optional": true + "bin": { + "semver": "bin/semver" + } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/gulp-cli/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "node_modules/gulp-cli/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/gulp-cli/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, "dependencies": { - "ms": "2.0.0" + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "node_modules/gulp-cli/node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/gulp-cli/node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/gulp-connect": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/gulp-connect/-/gulp-connect-5.7.0.tgz", + "integrity": "sha512-8tRcC6wgXMLakpPw9M7GRJIhxkYdgZsXwn7n56BA2bQYGLR9NOPhMzx7js+qYDy6vhNkbApGKURjAw1FjY4pNA==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "ansi-colors": "^2.0.5", + "connect": "^3.6.6", + "connect-livereload": "^0.6.0", + "fancy-log": "^1.3.2", + "map-stream": "^0.0.7", + "send": "^0.16.2", + "serve-index": "^1.9.1", + "serve-static": "^1.13.2", + "tiny-lr": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "node_modules/gulp-connect/node_modules/ansi-colors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-2.0.5.tgz", + "integrity": "sha512-yAdfUZ+c2wetVNIFsNRn44THW+Lty6S5TwMpUfLA/UaGhiXbBv/F8E60/1hMLd0cnF/CDoWH8vzVaI5bAcHCjw==", "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, "engines": { - "node": ">= 0.10" + "node": ">=6" } }, - "node_modules/findup-sync/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/gulp-flatten": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.2.0.tgz", + "integrity": "sha512-8kKeBDfHGx0CEWoB6BPh5bsynUG2VGmSz6hUlX531cfDz/+PRYZa9i3e3+KYuaV0GuCsRZNThSRjBfHOyypy8Q==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "gulp-util": "^3.0.1", + "through2": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, - "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/gulp-if": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", + "integrity": "sha512-tV0UfXkZodpFq6CYxEqH8tqLQgN6yR9qOhpEEN3O6N5Hfqk3fFLcbAavSex5EqnmoQjyaZ/zvgwclvlTI1KGfw==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "gulp-match": "^1.0.3", + "ternary-stream": "^2.0.1", + "through2": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/findup-sync/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/gulp-match": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", + "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "minimatch": "^3.0.3" } }, - "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", + "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, - "node_modules/findup-sync/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/gulp-util/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/gulp-util/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/gulp-util/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/gulp-util/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8" } }, - "node_modules/findup-sync/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/gulp-util/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "dev": true + }, + "node_modules/gulp-util/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/findup-sync/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/gulp-util/node_modules/object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "node_modules/gulp-util/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/fined/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/gulp-util/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "node_modules/gulp-util/node_modules/vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", "dev": true, + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">= 0.9" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "glogg": "^1.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.10" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "engines": { + "node": ">=4" } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "engines": { + "node": ">=6" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "dependencies": { - "is-callable": "^1.1.3" + "engines": { + "node": ">=6" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4.0" } }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "dependencies": { - "for-in": "^1.0.1" + "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/fork-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "integrity": "sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==", - "dev": true + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/form-data": { + "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.10" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "map-cache": "^0.2.2" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/fs-mkdirp-stream": { + "node_modules/has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/generic-names": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", - "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", "dev": true, "dependencies": { - "loader-utils": "^1.1.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "function-bind": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "engines": { - "node": ">=8.0.0" + "bin": { + "he": "bin/he" } }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "node_modules/highlight-es": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/highlight-es/-/highlight-es-1.0.3.tgz", + "integrity": "sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "chalk": "^2.4.0", + "is-es2016-keyword": "^1.0.0", + "js-tokens": "^3.0.0" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/highlight-es/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/highlight-es/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "node_modules/highlight-es/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "node_modules/highlight-es/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/highlight-es/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/git-repo-info": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", - "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==", + "node_modules/highlight-es/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { - "node": ">= 4.0" + "node": ">=4" } }, - "node_modules/glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha512-f8c0rE8JiCxpa52kWPAOa3ZaYEnzofDzCQLCn3Vdk0Z5OVLq3BsRFJI4S4ykpeVW6QMGBUkMeUpoEgWnMTnw5Q==", + "node_modules/highlight-es/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/highlight-es/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/glob-escape": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/glob-escape/-/glob-escape-0.0.2.tgz", - "integrity": "sha512-L/cXYz8x7qer1HAyUQ+mbjcUsJVdpRxpAf7CwqHoNBs9vTpABlGfNN4tzkDxt+u3Z7ZncVyKlCNPtzb0R/7WbA==", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "parse-passwd": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10" } }, - "node_modules/glob-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "whatwg-encoding": "^1.0.1" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, - "peer": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] }, - "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, - "node_modules/glob-watcher/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/html-loader": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", + "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", "dev": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/glob-watcher/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "engines": { + "node": ">= 14" } }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=0.10.0" - } + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } }, - "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" }, "engines": { - "node": ">= 4.0" + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/glob-watcher/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true }, - "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/glob-watcher/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "binary-extensions": "^1.0.0" + "debug": "4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6.0.0" } }, - "node_modules/glob-watcher/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8.12.0" } }, - "node_modules/glob-watcher/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "dev": true + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "postcss": "^7.0.14" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/glob-watcher/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/icss-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/icss-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/glob-watcher/node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/glob-watcher/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" + "minimatch": "^3.0.4" } }, - "node_modules/glob-watcher/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { - "which": "bin/which" + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.8.19" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/glogg": { + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inpath": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "resolved": "https://registry.npmjs.org/inpath/-/inpath-1.0.2.tgz", + "integrity": "sha512-DTt55ovuYFC62a8oJxRjV2MmTPUdxN43Gd8I2ZgawxbAha6PvJkDQy/RbZGFCJF5IXrpp4PAYtW1w3aV7jXkew==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "dependencies": { - "sparkles": "^1.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">= 0.10" + "node": ">=8.0.0" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true, - "peer": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, - "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" } }, - "node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, "engines": { "node": ">= 0.10" } }, - "node_modules/gulp-cli/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-cli/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/gulp-cli/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/gulp-cli/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { + "node_modules/is-absolute": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "dependencies": { - "number-is-nan": "^1.0.0" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-cli/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-cli/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/gulp-cli/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-cli/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { - "pinkie-promise": "^2.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/gulp-cli/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ci-info": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/gulp-cli/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "ansi-regex": "^2.0.0" + "hasown": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "dependencies": { - "is-utf8": "^0.2.0" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-cli/node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/gulp-cli/node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-connect": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/gulp-connect/-/gulp-connect-5.5.0.tgz", - "integrity": "sha512-oRBLjw/4EVaZb8g8OcxOVdGD8ZXYrRiWKcNxlrGjxb/6Cp0GDdqw7ieX7D8xJrQS7sbXT+G94u63pMJF3MMjQA==", + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "dependencies": { - "ansi-colors": "^1.0.1", - "connect": "^3.6.5", - "connect-livereload": "^0.5.4", - "event-stream": "^3.3.2", - "fancy-log": "^1.3.2", - "send": "^0.13.2", - "serve-index": "^1.9.1", - "serve-static": "^1.13.1", - "tiny-lr": "^0.2.1" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-connect/node_modules/debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "ms": "0.7.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/gulp-connect/node_modules/etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha512-Mbv5pNpLNPrm1b4rzZlZlfTRpdDr31oiD43N362sIyvSWVNu5Du33EcJGzvEV4YdYLuENB1HzND907cQkFmXNw==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-connect/node_modules/fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha512-akx5WBKAwMSg36qoHTuMMVncHWctlaDGslJASDYAhoLrzDUDCjZlOngNa/iC6lPm9aA0qk8pN5KnpmbJHSIIQQ==", + "node_modules/is-es2016-keyword": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz", + "integrity": "sha512-JtZWPUwjdbQ1LIo9OSZ8MdkWEve198ors27vH+RzUUvZXXZkzXCxFnlUhzWYxy5IexQSRiXVw9j2q/tHMmkVYQ==", + "dev": true + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/gulp-connect/node_modules/http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha512-gMygNskMurDCWfoCdyh1gOeDfSbkAHXqz94QoPj5IHIUjC/BG8/xv7FSEUr7waR5RcAya4j58bft9Wu/wHNeXA==", + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "inherits": "~2.0.1", - "statuses": "1" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/gulp-connect/node_modules/mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha512-sAaYXszED5ALBt665F0wMQCUXpGuZsGdopoqcHPdL39ZYdi7uHoZlhrfZfhv8WzivhBzr/oXwaj+yiK5wY8MXQ==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "bin": { - "mime": "cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/gulp-connect/node_modules/ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/gulp-connect/node_modules/range-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", - "integrity": "sha512-nDsRrtIxVUO5opg/A8T2S3ebULVIfuh8ECbh4w3N4mWxIiT3QILDJDUQayPqm2e8Q8NUa0RSUkGCfe33AfjR3Q==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/gulp-connect/node_modules/send": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", - "integrity": "sha512-cQ0rmXHrdO2Iof08igV2bG/yXWD106ANwBg6DkGQNT2Vsznbgq6T0oAIQboy1GoFsIuy51jCim26aA9tj3Z3Zg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "debug": "~2.2.0", - "depd": "~1.1.0", - "destroy": "~1.0.4", - "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/gulp-connect/node_modules/statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha512-pVEuxHdSGrt8QmQ3LOZXLhSA6MP/iPqKzZeO6Squ7PNGkA/9MBsSfV0/L+bIxkoDmjF4tZcLpcVq/fkqoHvuKg==", - "dev": true - }, - "node_modules/gulp-flatten": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.2.0.tgz", - "integrity": "sha512-8kKeBDfHGx0CEWoB6BPh5bsynUG2VGmSz6hUlX531cfDz/+PRYZa9i3e3+KYuaV0GuCsRZNThSRjBfHOyypy8Q==", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "dependencies": { - "gulp-util": "^3.0.1", - "through2": "^2.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-if": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", - "integrity": "sha512-tV0UfXkZodpFq6CYxEqH8tqLQgN6yR9qOhpEEN3O6N5Hfqk3fFLcbAavSex5EqnmoQjyaZ/zvgwclvlTI1KGfw==", + "node_modules/is-installed-globally/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "gulp-match": "^1.0.3", - "ternary-stream": "^2.0.1", - "through2": "^2.0.1" - }, "engines": { - "node": ">= 0.10.0" + "node": ">=8" } }, - "node_modules/gulp-match": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", - "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "dependencies": { - "minimatch": "^3.0.3" + "engines": { + "node": ">=8" } }, - "node_modules/gulp-open": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gulp-open/-/gulp-open-3.0.1.tgz", - "integrity": "sha512-dohokw+npnt48AsD0hhvCLEHLnDMqM35F+amvIfJlX1H2nNHYUClR0Oy1rI0TvbL1/pHiHGNLmohhk+kvwIKjA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, - "dependencies": { - "colors": "^1.1.2", - "opn": "5.2.0", - "plugin-log": "^0.1.0", - "through2": "^2.0.1" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", - "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "dependencies": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-util/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-util/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/gulp-util/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-util/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "engines": { - "node": ">=0.8" + "node": ">=8" } }, - "node_modules/gulp-util/node_modules/clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true - }, - "node_modules/gulp-util/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/gulp-util/node_modules/object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, + "dependencies": { + "is-path-inside": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-util/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "path-is-inside": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-util/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/gulp-util/node_modules/vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.9" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulplog": { + "node_modules/is-relative": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "dependencies": { - "glogg": "^1.0.0" + "is-unc-path": "^1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { - "node": ">= 0.4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, "dependencies": { - "sparkles": "^1.0.0" + "better-path-resolve": "1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=4" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "has-symbols": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -18796,11 +18823,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -18808,3492 +18842,3602 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { + "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "unc-path-regex": "^0.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-value": { + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-valid-glob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" } }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { - "he": "bin/he" + "semver": "bin/semver.js" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "parse-passwd": "^1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "semver": "^7.5.3" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/hosted-git-info/node_modules/yallist": { + "node_modules/istanbul-lib-report/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", - "dev": true - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { - "whatwg-encoding": "^1.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", - "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { - "es6-templates": "^0.2.3", - "fastparse": "^1.1.1", - "html-minifier": "^3.5.8", - "loader-utils": "^1.1.0", - "object-assign": "^4.1.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "node_modules/jest": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-25.4.0.tgz", + "integrity": "sha512-XWipOheGB4wai5JfCYXd6vwsWNwM/dirjRoZgAa7H2wd8ODWbli2AiKjqG8AYhyx+8+5FBEdpO92VhGlBydzbw==", "dev": true, "dependencies": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "@jest/core": "^25.4.0", + "import-local": "^3.0.2", + "jest-cli": "^25.4.0" }, "bin": { - "html-minifier": "cli.js" + "jest": "bin/jest.js" }, "engines": { - "node": ">=4" + "node": ">= 8.3" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "node_modules/jest-changed-files": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", + "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "@jest/types": "^25.5.0", + "execa": "^3.2.0", + "throat": "^5.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 8.3" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/jest-cli": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.4.0.tgz", + "integrity": "sha512-usyrj1lzCJZMRN1r3QEdnn8e6E6yCx/QN7+B1sLoA68V7f3WlsxSSQfy0+BAwRiF4Hz2eHauf11GZG3PIfWTXQ==", "dev": true, "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "@jest/core": "^25.4.0", + "@jest/test-result": "^25.4.0", + "@jest/types": "^25.4.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^25.4.0", + "jest-util": "^25.4.0", + "jest-validate": "^25.4.0", + "prompts": "^2.0.1", + "realpath-native": "^2.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=8.0.0" + "node": ">= 8.3" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/jest-cli/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/jest-cli/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/jest-cli/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "node_modules/jest-cli/node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/jest-cli/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=8" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "node_modules/jest-cli/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/jest-cli/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { - "node": ">=8.12.0" + "node": ">=6" } }, - "node_modules/iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "node_modules/jest-config": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", + "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^25.5.4", + "@jest/types": "^25.5.0", + "babel-jest": "^25.5.1", + "chalk": "^3.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^25.5.0", + "jest-environment-node": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-jasmine2": "^25.5.4", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "micromatch": "^4.0.2", + "pretty-format": "^25.5.0", + "realpath-native": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "node_modules/jest-config/node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, - "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "node_modules/jest-config/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "dependencies": { - "postcss": "^7.0.14" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">= 6" + "node": ">=0.4.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "node_modules/jest-config/node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, - "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "node_modules/jest-config/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "node_modules/jest-config/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, - "node_modules/import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "import-from": "^2.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=4" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "node_modules/jest-config/node_modules/jest-environment-jsdom": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", + "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", "dev": true, "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "jsdom": "^15.2.1" }, "engines": { - "node": ">=4" + "node": ">= 8.3" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "node_modules/jest-config/node_modules/jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", "dev": true, + "dependencies": { + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", + "node_modules/jest-config/node_modules/parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "node_modules/jest-config/node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, "dependencies": { - "resolve-from": "^3.0.0" + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "node_modules/jest-config/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "node_modules/jest-config/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/jest-diff": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", + "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8.3" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-docblock": { + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", + "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">= 8.3" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/jest-each": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", + "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0" + }, "engines": { - "node": ">=8" + "node": ">= 8.3" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", - "dev": true - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/jest-environment-jsdom": { + "version": "25.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.4.0.tgz", + "integrity": "sha512-KTitVGMDrn2+pt7aZ8/yUTuS333w3pWt1Mf88vMntw7ZSBNDkRS6/4XLbFpWXYfWfp1FjcjQTOKzbK20oIehWQ==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@jest/environment": "^25.4.0", + "@jest/fake-timers": "^25.4.0", + "@jest/types": "^25.4.0", + "jest-mock": "^25.4.0", + "jest-util": "^25.4.0", + "jsdom": "^15.2.1" + }, + "engines": { + "node": ">= 8.3" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/jest-environment-jsdom/node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true }, - "node_modules/inpath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inpath/-/inpath-1.0.2.tgz", - "integrity": "sha512-DTt55ovuYFC62a8oJxRjV2MmTPUdxN43Gd8I2ZgawxbAha6PvJkDQy/RbZGFCJF5IXrpp4PAYtW1w3aV7jXkew==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/jest-environment-jsdom/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.4.0" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-environment-jsdom/node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cssom": "~0.3.6" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "abab": "^2.0.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", + "array-equal": "^1.0.0", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.1", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.2.0", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^3.0.1", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^7.0.0", + "xml-name-validator": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } + "node_modules/jest-environment-jsdom/node_modules/parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "node_modules/jest-environment-jsdom/node_modules/tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, + "dependencies": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/jest-environment-jsdom/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "node_modules/jest-environment-node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", + "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", "dev": true, "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "@jest/environment": "^25.5.0", + "@jest/fake-timers": "^25.5.0", + "@jest/types": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-util": "^25.5.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/jest-environment-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/jest-get-type": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/jest-haste-map": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", + "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "@jest/types": "^25.5.0", + "@types/graceful-fs": "^4.1.2", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-serializer": "^25.5.0", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7", + "which": "^2.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8.3" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/jest-jasmine2": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", + "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "@babel/traverse": "^7.1.0", + "@jest/environment": "^25.5.0", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "co": "^4.6.0", + "expect": "^25.5.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^25.5.0", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-runtime": "^25.5.4", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "pretty-format": "^25.5.0", + "throat": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8.3" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/jest-leak-detector": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", + "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" }, "engines": { - "node": ">=8" + "node": ">= 8.3" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/jest-matcher-utils": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", + "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8.3" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/jest-message-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", + "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8.3" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/jest-mock": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", + "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", "dev": true, "dependencies": { - "ci-info": "^2.0.0" + "@jest/types": "^25.5.0" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">= 8.3" } }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "node_modules/jest-nunit-reporter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jest-nunit-reporter/-/jest-nunit-reporter-1.3.1.tgz", + "integrity": "sha512-yeERKTYPZutqdNIe3EHjoSAjhPxd5J5Svd8ULB/eiqDkn0EI2n8W4OVTuyFwY5b23hw5f0RLDuEvBjy5V95Ffw==", "dev": true, "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "mkdirp": "^0.5.1", + "read-pkg": "^3.0.0", + "xml": "^1.0.1" } }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "node_modules/jest-nunit-reporter/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "minimist": "^1.2.6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/jest-regex-util": { + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/jest-resolve": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", + "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/types": "^25.5.0", + "browser-resolve": "^1.11.3", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.1", + "read-pkg-up": "^7.0.1", + "realpath-native": "^2.0.0", + "resolve": "^1.17.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8.3" } }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/jest-resolve-dependencies": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", + "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "@jest/types": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-snapshot": "^25.5.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "node_modules/jest-runner": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", + "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-docblock": "^25.3.0", + "jest-haste-map": "^25.5.1", + "jest-jasmine2": "^25.5.4", + "jest-leak-detector": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "jest-runtime": "^25.5.4", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/jest-runtime": { + "version": "25.5.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", + "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", "dev": true, + "dependencies": { + "@jest/console": "^25.5.0", + "@jest/environment": "^25.5.0", + "@jest/globals": "^25.5.2", + "@jest/source-map": "^25.5.0", + "@jest/test-result": "^25.5.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^25.5.4", + "jest-haste-map": "^25.5.1", + "jest-message-util": "^25.5.0", + "jest-mock": "^25.5.0", + "jest-regex-util": "^25.2.6", + "jest-resolve": "^25.5.1", + "jest-snapshot": "^25.5.1", + "jest-util": "^25.5.0", + "jest-validate": "^25.5.0", + "realpath-native": "^2.0.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.3.1" + }, "bin": { - "is-docker": "cli.js" + "jest-runtime": "bin/jest-runtime.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8.3" } }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "15.0.19", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", + "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "@types/yargs-parser": "*" } }, - "node_modules/is-extendable/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/jest-runtime/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-runtime/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-runtime/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/jest-runtime/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-runtime/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "node_modules/jest-serializer": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", + "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/jest-snapshot": { + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", + "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/prettier": "^1.19.0", + "chalk": "^3.0.0", + "expect": "^25.5.0", + "graceful-fs": "^4.2.4", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-resolve": "^25.5.1", + "make-dir": "^3.0.0", + "natural-compare": "^1.4.0", + "pretty-format": "^25.5.0", + "semver": "^6.3.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8.3" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": ">=0.12.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/jest-util": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/types": "^25.5.0", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "make-dir": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8.3" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/jest-validate": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "jest-get-type": "^25.2.6", + "leven": "^3.1.0", + "pretty-format": "^25.5.0" + }, "engines": { - "node": ">=8" + "node": ">= 8.3" } }, - "node_modules/is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", + "node_modules/jest-watcher": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", + "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", "dev": true, + "dependencies": { + "@jest/test-result": "^25.5.0", + "@jest/types": "^25.5.0", + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "jest-util": "^25.5.0", + "string-length": "^3.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "node_modules/jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", "dev": true, "dependencies": { - "is-path-inside": "^1.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "dependencies": { - "path-is-inside": "^1.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "node_modules/jsdom": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", + "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.3.1 < 0.4.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwsapi": "^2.0.0", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/jsdom/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8" } }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, - "node_modules/is-shared-array-buffer": { + "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2" + "bin": { + "json5": "lib/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath-plus": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-4.0.0.tgz", + "integrity": "sha512-e0Jtg4KAzDJKKwzbLaUtinCn0RZseWBVRTRGihSpvFlM3wTR7ExSp+PTdeTsDrLNJUe7L7JYJe8mblHX5SCT6A==", "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, "dependencies": { - "better-path-resolve": "1.0.0" - }, - "engines": { - "node": ">=4" + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { - "unc-path-regex": "^0.1.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.6.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" }, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/jszip": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.8.0.tgz", + "integrity": "sha512-cnpQrXvFSLdsR9KR5/x7zdf6c3m8IhZfZzSblFEHSqBaVwD2nvJ4CuCKLyvKvwBgZm08CgfSoiTBQLm5WW9hGw==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", "dev": true }, - "node_modules/isexe": { + "node_modules/jwa": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" + "json-buffer": "3.0.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "package-json": "^6.3.0" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "readable-stream": "^2.0.5" }, "engines": { - "node": ">=10" + "node": ">= 0.6.3" } }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "invert-kv": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.4.0.tgz", - "integrity": "sha512-XWipOheGB4wai5JfCYXd6vwsWNwM/dirjRoZgAa7H2wd8ODWbli2AiKjqG8AYhyx+8+5FBEdpO92VhGlBydzbw==", + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", "dev": true, "dependencies": { - "@jest/core": "^25.4.0", - "import-local": "^3.0.2", - "jest-cli": "^25.4.0" - }, - "bin": { - "jest": "bin/jest.js" + "flush-write-stream": "^1.0.2" }, "engines": { - "node": ">= 8.3" + "node": ">= 0.10" } }, - "node_modules/jest-changed-files": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", - "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", + "node_modules/left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "deprecated": "use String.prototype.padStart()", + "dev": true + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "execa": "^3.2.0", - "throat": "^5.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 8.3" + "node": ">= 0.8.0" } }, - "node_modules/jest-cli": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.4.0.tgz", - "integrity": "sha512-usyrj1lzCJZMRN1r3QEdnn8e6E6yCx/QN7+B1sLoA68V7f3WlsxSSQfy0+BAwRiF4Hz2eHauf11GZG3PIfWTXQ==", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "dependencies": { - "@jest/core": "^25.4.0", - "@jest/test-result": "^25.4.0", - "@jest/types": "^25.4.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^25.4.0", - "jest-util": "^25.4.0", - "jest-validate": "^25.4.0", - "prompts": "^2.0.1", - "realpath-native": "^2.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "immediate": "~3.0.5" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" }, "engines": { - "node": ">= 8.3" + "node": ">= 0.8" } }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jest-cli/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" } }, - "node_modules/jest-cli/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/jest-cli/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "node_modules/livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", "dev": true }, - "node_modules/jest-cli/node_modules/wrap-ansi": { + "node_modules/load-json-file": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, - "node_modules/jest-cli/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, "engines": { "node": ">=8" } }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/load-yaml-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", + "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "graceful-fs": "^4.1.5", + "js-yaml": "^3.13.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", + "node_modules/load-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=6" } }, - "node_modules/jest-config/node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/jest-config/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/load-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/jest-config/node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/jest-config/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, "engines": { - "node": ">=8" + "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/jest-config/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4.0.0" } }, - "node_modules/jest-config/node_modules/jest-environment-jsdom": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", - "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", - "dev": true, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "jsdom": "^15.2.1" + "minimist": "^1.2.0" }, - "engines": { - "node": ">= 8.3" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/jest-config/node_modules/jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } } }, - "node_modules/jest-config/node_modules/parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/jest-config/node_modules/tough-cookie": { + "node_modules/lodash._basecopy": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=6" - } + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", + "dev": true }, - "node_modules/jest-config/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } + "node_modules/lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", + "dev": true }, - "node_modules/jest-config/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } + "node_modules/lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", + "dev": true }, - "node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "node_modules/lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", + "dev": true + }, + "node_modules/lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", + "dev": true + }, + "node_modules/lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", + "dev": true + }, + "node_modules/lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", + "dev": true + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "dev": true + }, + "node_modules/lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", + "dev": true + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", "dev": true, "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" + "lodash._root": "^3.0.0" } }, - "node_modules/jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "dev": true + }, + "node_modules/lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "dev": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, + "node_modules/lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, - "node_modules/jest-each": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", - "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, - "node_modules/jest-environment-jsdom": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.4.0.tgz", - "integrity": "sha512-KTitVGMDrn2+pt7aZ8/yUTuS333w3pWt1Mf88vMntw7ZSBNDkRS6/4XLbFpWXYfWfp1FjcjQTOKzbK20oIehWQ==", + "node_modules/lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", "dev": true, "dependencies": { - "@jest/environment": "^25.4.0", - "@jest/fake-timers": "^25.4.0", - "@jest/types": "^25.4.0", - "jest-mock": "^25.4.0", - "jest-util": "^25.4.0", - "jsdom": "^15.2.1" - }, - "engines": { - "node": ">= 8.3" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "node_modules/jest-environment-jsdom/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", + "node_modules/lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", "dev": true, "dependencies": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "canvas": "^2.5.0" + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/jest-environment-jsdom/node_modules/parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", "dev": true }, - "node_modules/jest-environment-jsdom/node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "yallist": "^3.0.2" } }, - "node_modules/jest-environment-jsdom/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "node_modules/jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" + "semver": "^6.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-node/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, - "node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" + "kind-of": "^6.0.2" }, "engines": { - "node": ">= 8.3" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" + "node": ">=0.10.0" } }, - "node_modules/jest-jasmine2": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", - "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.5.0", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "co": "^4.6.0", - "expect": "^25.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0", - "throat": "^5.0.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" + "tmpl": "1.0.5" } }, - "node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" + "p-defer": "^1.0.0" }, "engines": { - "node": ">= 8.3" + "node": ">=6" } }, - "node_modules/jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-nunit-reporter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jest-nunit-reporter/-/jest-nunit-reporter-1.3.1.tgz", - "integrity": "sha512-yeERKTYPZutqdNIe3EHjoSAjhPxd5J5Svd8ULB/eiqDkn0EI2n8W4OVTuyFwY5b23hw5f0RLDuEvBjy5V95Ffw==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1", - "read-pkg": "^3.0.0", - "xml": "^1.0.1" - } + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", + "dev": true }, - "node_modules/jest-nunit-reporter/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "object-visit": "^1.0.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", + "node_modules/matchdep/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", + "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", - "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", + "node_modules/matchdep/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-snapshot": "^25.5.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", + "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", "dev": true, "dependencies": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 8.3" + "node": ">= 0.10" } }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", + "node_modules/matchdep/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/matchdep/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true + "node_modules/matchdep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/matchdep/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/matchdep/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", + "node_modules/mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.4" + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/mem?sponsor=1" } }, - "node_modules/jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" + "fs-monkey": "^1.0.4" }, "engines": { - "node": ">= 8.3" + "node": ">= 4.0.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, - "node_modules/jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "dependencies": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.0.3.tgz", + "integrity": "sha512-KgI4P7MSM31MNBftGJ07WBsLYLx7z9mQsL6+bcHk80AdmUA3cPzX69MK6dSgEgSF9TXLOl040pgo0XP/VTMENA==", "dev": true, - "dependencies": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - }, "engines": { - "node": ">= 8.3" + "node": ">=0.10" } }, - "node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, "engines": { - "node": ">= 8.3" + "node": ">= 0.6" } }, - "node_modules/jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "miller-rabin": "bin/miller-rabin" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/jsdom": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", - "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true, - "dependencies": { - "abab": "^1.0.4", - "acorn": "^5.3.0", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.3.1 < 0.4.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.0", - "escodegen": "^1.9.0", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.2.0", - "nwsapi": "^2.0.0", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.83.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^4.0.0", - "xml-name-validator": "^3.0.0" + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">= 0.6" } }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "mime-db": "1.52.0" }, "engines": { - "node": ">=0.8" + "node": ">= 0.6" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/json-stable-stringify-without-jsonify": { + "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": "*" } }, - "node_modules/jsonpath-plus": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-4.0.0.tgz", - "integrity": "sha512-e0Jtg4KAzDJKKwzbLaUtinCn0RZseWBVRTRGihSpvFlM3wTR7ExSp+PTdeTsDrLNJUe7L7JYJe8mblHX5SCT6A==", - "dev": true, - "engines": { - "node": ">=10.0" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">= 6" } }, - "node_modules/jsonwebtoken/node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "node_modules/minimist-options/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jsonwebtoken/node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">= 8" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "minipass": "^3.0.0" }, "engines": { - "node": ">=4.0" + "node": ">= 8" } }, - "node_modules/jszip": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/jws": { + "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", "dev": true, "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, - "engines": { - "node": ">= 0.10" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "node_modules/move-concurrently/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "readable-stream": "^2.0.5" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.6.3" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "node_modules/move-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "invert-kv": "^1.0.0" + "minimist": "^1.2.6" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { - "flush-write-stream": "^1.0.2" + "glob": "^7.1.3" }, - "engines": { - "node": ">= 0.10" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "deprecated": "use String.prototype.padStart()", - "dev": true + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, + "node_modules/msalBrowserLegacy": { + "name": "@azure/msal-browser", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.22.0.tgz", + "integrity": "sha512-ZpnbnzjYGRGHjWDPOLjSp47CQvhK927+W9avtLoNNCMudqs2dBfwj76lnJwObDE7TAKmCUueTiieglBiPb1mgQ==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", + "dependencies": { + "@azure/msal-common": "^6.1.0" + }, "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, + "node_modules/msalBrowserLegacy/node_modules/@azure/msal-common": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.4.0.tgz", + "integrity": "sha512-WZdgq9f9O8cbxGzdRwLLMM5xjmLJ2mdtuzgXeiGxIRkVVlJ9nZ6sWnDFKa2TX8j72UXD1IfL0p/RYNoTXYoGfg==", "engines": { - "node": ">= 0.8.0" + "node": ">=0.8.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, + "node_modules/msalLegacy": { + "name": "msal", + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.12.tgz", + "integrity": "sha512-gjupwQ6nvNL6mZkl5NIXyUmZhTiEMRu5giNdgHMh8l5EPOnV2Xj6nukY1NIxFacSTkEYUSDB47Pej9GxDYf+1w==", + "deprecated": "This package is no longer supported. Please use @azure/msal-browser instead.", "dependencies": { - "immediate": "~3.0.5" + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "node_modules/msalLegacy/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "engines": { - "node": ">= 0.8" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/liftoff/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "node_modules/multimatch/node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "node_modules/multimatch/node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, "engines": { "node": ">=8" } }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/multimatch/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, - "peer": true, "engines": { - "node": ">=6.11.5" + "node": ">=8" } }, - "node_modules/loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha512-gkD9aSEG9UGglyPcDJqY9YBTUtCLKaBK6ihD2VP1d1X60lTfFspNZNulGBBbUZLkPygy4LySYHyxBpq+VhjObQ==", + "node_modules/multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", + "dev": true, "dependencies": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", - "bin": { - "json5": "lib/cli.js" + "duplexer2": "0.0.2" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", - "dev": true - }, - "node_modules/lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", - "dev": true - }, - "node_modules/lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", - "dev": true - }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true - }, - "node_modules/lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", - "dev": true - }, - "node_modules/lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", - "dev": true - }, - "node_modules/lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, - "node_modules/lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", - "dev": true + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "node_modules/nanocolors": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", "dev": true }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "node_modules/lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "dependencies": { - "lodash._root": "^3.0.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node_modules/lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "dependencies": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "lower-case": "^1.1.1" } }, - "node_modules/lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "lodash": "^4.17.21" } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { - "@sinonjs/commons": "^1.7.0" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "dependencies": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 6.13.0" } }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "dependencies": { - "yallist": "^3.0.2" + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/node-notifier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" } }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "kind-of": "^6.0.2" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/make-iterator/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "dev": true - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, "dependencies": { - "object-visit": "^1.0.0" + "once": "^1.3.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" + "npm-normalize-package-bin": "^1.0.1" } }, - "node_modules/matchdep/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/npm-check": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/npm-check/-/npm-check-6.0.1.tgz", + "integrity": "sha512-tlEhXU3689VLUHYEZTS/BC61vfeN2xSSZwoWDT6WLuenZTpDmGmNT5mtl15erTR0/A15ldK06/NEKg9jYJ9OTQ==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "callsite-record": "^4.1.3", + "chalk": "^4.1.0", + "co": "^4.6.0", + "depcheck": "^1.3.1", + "execa": "^5.0.0", + "giturl": "^1.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.2", + "inquirer": "^7.3.3", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "meow": "^9.0.0", + "minimatch": "^3.0.2", + "node-emoji": "^1.10.0", + "ora": "^5.3.0", + "package-json": "^6.5.0", + "path-exists": "^4.0.0", + "pkg-dir": "^5.0.0", + "preferred-pm": "^3.0.3", + "rc-config-loader": "^4.0.0", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "strip-ansi": "^6.0.0", + "text-table": "^0.2.0", + "throat": "^6.0.1", + "update-notifier": "^5.1.0", + "xtend": "^4.0.2" + }, + "bin": { + "npm-check": "bin/cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.9.0" } }, - "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/npm-check/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/matchdep/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/npm-check/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/npm-check/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", + "node_modules/npm-check/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matchdep/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/npm-check/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/npm-check/node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" + "global-prefix": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/matchdep/node_modules/is-number": { + "node_modules/npm-check/node_modules/global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/npm-check/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matchdep/node_modules/kind-of": { + "node_modules/npm-check/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/npm-check/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-check/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", @@ -22302,4671 +22446,4737 @@ "node": ">=0.10.0" } }, - "node_modules/matchdep/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/npm-check/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matchdep/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/npm-check/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm-check/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/npm-check/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "node_modules/npm-check/node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", "dev": true }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/npm-check/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "engines": { - "node": ">= 0.6" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-packlist": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.5.tgz", + "integrity": "sha512-KCfK3Vi2F+PH1klYauoQzg81GQ8/GGjQRKYY6tRnpQUPKTs/1gBZSRWtTEd7jGdSn1LZL7gpAmJT+BcS55k2XQ==", "dev": true, "dependencies": { - "fs-monkey": "^1.0.3" + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" }, "engines": { - "node": ">= 4.0.0" + "node": ">=10" } }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "node_modules/npm-packlist/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/meow/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "boolbase": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true }, - "node_modules/meow/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "engines": { + "node": "*" } }, - "node_modules/meow/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, "dependencies": { - "error-ex": "^1.2.0" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "dependencies": { - "pinkie-promise": "^2.0.0" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "is-utf8": "^0.2.0" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.0.3.tgz", - "integrity": "sha512-KgI4P7MSM31MNBftGJ07WBsLYLx7z9mQsL6+bcHk80AdmUA3cPzX69MK6dSgEgSF9TXLOl040pgo0XP/VTMENA==", + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "isobject": "^3.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=0.10.0" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "dependencies": { - "mime-db": "1.52.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "node": ">= 0.4" }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } + "node_modules/office-ui-fabric-core": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/office-ui-fabric-core/-/office-ui-fabric-core-11.0.1.tgz", + "integrity": "sha512-jcfycbVOm2aUoI+AGtHW24HvM7nUVFr44hR5NIE56EobK67bVwbNAQL15CJj3vNz5PBrnitsV9ROOB+KOEWn8g==" }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "wrappy": "1" } }, - "node_modules/move-concurrently/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "*" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/move-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=6" } }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/msal": { - "version": "1.4.17", - "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.17.tgz", - "integrity": "sha512-RjHwP2cCIWQ9iUIk1SziUMb9+jj5mC4OqG2w16E5yig8jySi/TwiFvKlwcjNrPsndph0HtgCtbENnk5julf3yQ==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "dependencies": { - "tslib": "^1.9.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.8.0" } }, - "node_modules/msal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/msalBrowserLegacy": { - "name": "@azure/msal-browser", - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.22.0.tgz", - "integrity": "sha512-ZpnbnzjYGRGHjWDPOLjSp47CQvhK927+W9avtLoNNCMudqs2dBfwj76lnJwObDE7TAKmCUueTiieglBiPb1mgQ==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, "dependencies": { - "@azure/msal-common": "^6.1.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msalBrowserLegacy/node_modules/@azure/msal-common": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.4.0.tgz", - "integrity": "sha512-WZdgq9f9O8cbxGzdRwLLMM5xjmLJ2mdtuzgXeiGxIRkVVlJ9nZ6sWnDFKa2TX8j72UXD1IfL0p/RYNoTXYoGfg==", - "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/msalLegacy": { - "name": "msal", - "version": "1.4.12", - "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.12.tgz", - "integrity": "sha512-gjupwQ6nvNL6mZkl5NIXyUmZhTiEMRu5giNdgHMh8l5EPOnV2Xj6nukY1NIxFacSTkEYUSDB47Pej9GxDYf+1w==", + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "tslib": "^1.9.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/msalLegacy/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha512-DrQ43ngaJ0e36j2CHyoDoIg1K4zbc78GnTQESebK9vu6hj4W5/pvfSFO/kgM620Yd0YnhseSNYsLK3/SszZ5NQ==", "dev": true, "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" } }, - "node_modules/multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", + "node_modules/orchestrator/node_modules/end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha512-go5TQkd0YRXYhX+Lc3UrXkoKU5j+m72jEP5lHWr2Nh82L8wfZtH8toKgcg4T10o23ELIMGXQdwCbl+qAXIPDrw==", "dev": true, "dependencies": { - "duplexer2": "0.0.2" + "once": "~1.3.0" } }, - "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "node_modules/orchestrator/node_modules/once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "wrappy": "1" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", "dev": true, "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "readable-stream": "^2.0.1" } }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "node_modules/nanocolors": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", - "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=0.10.0" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "lcid": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, - "engines": { - "node": ">= 0.6" + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { + "node_modules/p-cancelable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", "dev": true, - "dependencies": { - "lower-case": "^1.1.1" + "engines": { + "node": ">=4" } }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": ">= 6.13.0" + "node": ">=8" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/p-reflect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", + "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=8" } }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "@types/retry": "0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/p-settle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", + "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", "dev": true, + "dependencies": { + "p-limit": "^2.2.2", + "p-reflect": "^2.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/p-settle/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, "dependencies": { - "once": "^1.3.2" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "node_modules/package-json/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "node_modules/npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "dependencies": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "no-case": "^2.2.0" } }, - "node_modules/npm-packlist": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.5.tgz", - "integrity": "sha512-KCfK3Vi2F+PH1klYauoQzg81GQ8/GGjQRKYY6tRnpQUPKTs/1gBZSRWtTEd7jGdSn1LZL7gpAmJT+BcS55k2XQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" + "callsites": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/npm-packlist/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.10" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/parse-asn1/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" }, "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { - "boolbase": "~1.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", - "dev": true - }, - "node_modules/number-is-nan": { + "node_modules/parse-node-version": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "node_modules/parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "engines": { - "node": "*" + "node": ">= 0.8" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "path-root-regex": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12" } }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "engines": { + "node": ">=8.6" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/pidof": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pidof/-/pidof-1.0.2.tgz", + "integrity": "sha512-LLJhTVEUCZnotdAM5rd7KiTdLGgk6i763/hsd5pO+8yuF7mdgg0ob8w/98KrTAcPsj6YzGrkFLPVtBOr1uW2ag==", "dev": true, "engines": { - "node": ">= 0.4" + "node": "*" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" + "pinkie": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "node_modules/pkg-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", + "integrity": "sha512-9hHgE5+Xai/ChrnahNP8Ke0VNF/s41IZIB/d24eMHEaRamdPg+wwlRm2lTb5wMvE8eTIKrYZsrxfuOwt3dpsIQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "find-up": "^1.0.0", + "load-json-file": "^1.1.0", + "object-assign": "^4.0.1", + "symbol": "^0.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "node_modules/pkg-conf/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "node_modules/pkg-conf/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "node_modules/pkg-conf/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "error-ex": "^1.2.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "pinkie-promise": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", + "node_modules/pkg-conf/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "is-utf8": "^0.2.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "find-up": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/office-ui-fabric-core": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/office-ui-fabric-core/-/office-ui-fabric-core-11.0.1.tgz", - "integrity": "sha512-jcfycbVOm2aUoI+AGtHW24HvM7nUVFr44hR5NIE56EobK67bVwbNAQL15CJj3vNz5PBrnitsV9ROOB+KOEWn8g==" - }, - "node_modules/office-ui-fabric-react": { - "version": "7.204.0", - "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-7.204.0.tgz", - "integrity": "sha512-W1xIsYEwxPrGYojvVtGTGvSfdnUoPEm8w6hhMlW/uFr5YwIB1isG/dVk4IZxWbcbea7612u059p+jRf+RjPW0w==", + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, "dependencies": { - "@fluentui/date-time-utilities": "^7.9.1", - "@fluentui/react-focus": "^7.18.17", - "@fluentui/react-theme-provider": "^0.19.16", - "@fluentui/react-window-provider": "^1.0.6", - "@fluentui/theme": "^1.7.13", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/foundation": "^7.10.16", - "@uifabric/icons": "^7.9.5", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/react-hooks": "^7.16.4", - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" - }, - "peerDependencies": { - "@types/react": ">=16.8.0 <18.0.0", - "@types/react-dom": ">=16.8.0 <18.0.0", - "react": ">=16.8.0 <18.0.0", - "react-dom": ">=16.8.0 <18.0.0" + "semver-compare": "^1.0.0" } }, - "node_modules/office-ui-fabric-react/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, "engines": { - "node": ">= 0.8" + "node": "^10 || ^12 || >=14" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "dependencies": { - "wrappy": "1" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=12" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/opn": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", - "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, "engines": { - "node": ">= 0.8.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha512-DrQ43ngaJ0e36j2CHyoDoIg1K4zbc78GnTQESebK9vu6hj4W5/pvfSFO/kgM620Yd0YnhseSNYsLK3/SszZ5NQ==", + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "dependencies": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/orchestrator/node_modules/end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha512-go5TQkd0YRXYhX+Lc3UrXkoKU5j+m72jEP5lHWr2Nh82L8wfZtH8toKgcg4T10o23ELIMGXQdwCbl+qAXIPDrw==", + "node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", "dev": true, "dependencies": { - "once": "~1.3.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/orchestrator/node_modules/once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "node_modules/postcss-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "dependencies": { - "wrappy": "1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true, + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "dependencies": { - "lcid": "^1.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/postcss-modules": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-1.5.0.tgz", + "integrity": "sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, + "css-modules-loader-core": "^1.1.0", + "generic-names": "^2.0.1", + "lodash.camelcase": "^4.3.0", + "postcss": "^7.0.1", + "string-hash": "^1.1.1" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, "dependencies": { - "aggregate-error": "^3.0.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/p-reflect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", - "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", + "node_modules/postcss-modules-local-by-default/node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/p-settle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", - "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" - }, - "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/p-settle/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "icss-utils": "^5.0.0" }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/postcss-modules-values/node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "node_modules/postcss-modules/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "node_modules/postcss-modules/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, - "dependencies": { - "no-case": "^2.2.0" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">= 0.10" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/postcss-normalize-url/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { - "path-root-regex": "^0.1.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, "dependencies": { - "pify": "^3.0.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/path-type/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "node_modules/preferred-pm": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.3.tgz", + "integrity": "sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==", "dev": true, "dependencies": { - "through": "~2.3" + "find-up": "^5.0.0", + "find-yarn-workspace-root2": "1.2.16", + "path-exists": "^4.0.0", + "which-pm": "2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "node_modules/preferred-pm/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/preferred-pm/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pidof": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pidof/-/pidof-1.0.2.tgz", - "integrity": "sha512-LLJhTVEUCZnotdAM5rd7KiTdLGgk6i763/hsd5pO+8yuF7mdgg0ob8w/98KrTAcPsj6YzGrkFLPVtBOr1uW2ag==", + "node_modules/preferred-pm/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "dev": true, "dependencies": { - "pinkie": "^2.0.0" + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 0.8" } }, - "node_modules/pkg-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", - "integrity": "sha512-9hHgE5+Xai/ChrnahNP8Ke0VNF/s41IZIB/d24eMHEaRamdPg+wwlRm2lTb5wMvE8eTIKrYZsrxfuOwt3dpsIQ==", + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "load-json-file": "^1.1.0", - "object-assign": "^4.0.1", - "symbol": "^0.2.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.0" } }, - "node_modules/pkg-conf/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, - "node_modules/pkg-conf/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { - "error-ex": "^1.2.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/pkg-conf/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "dependencies": { - "is-utf8": "^0.2.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "node_modules/pseudolocale": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-1.1.0.tgz", + "integrity": "sha512-OZ8I/hwYEJ3beN3IEcNnt8EpcqblH0/x23hulKBXjs+WhTTEle+ijCHCkh2bd+cIIeCuCwSCbBe93IthGG6hLw==", "dev": true, "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "commander": "*" } }, - "node_modules/plugin-log": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/plugin-log/-/plugin-log-0.1.0.tgz", - "integrity": "sha512-TzmfWRMEFAnrZbI4GfyXv9Gp5E71eby3gmvnP6LEfmYbVC8FPN2RBRhwxg4sjIg+fy8AJ3mczhLXvk0pzHPeMg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "dependencies": { - "chalk": "^1.1.1", - "dateformat": "^1.0.11" - }, - "engines": { - "node": ">= 0.9.0" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/plugin-log/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/plugin-log/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "node_modules/plugin-log/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/plugin-log/node_modules/dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==", + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, "dependencies": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - }, - "bin": { - "dateformat": "bin/cli.js" + "escape-goat": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/plugin-log/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=0.6" } }, - "node_modules/plugin-log/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.x" } }, - "node_modules/plugin-log/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "node_modules/ramda": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", + "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", "dev": true }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/postcss": { - "version": "7.0.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.38.tgz", - "integrity": "sha512-wNrSHWjHDQJR/IZL5IKGxRtFgrYNaAA/UrkW2WqbtZO6uxSLMxMN+s2iqUMwnAWm3fMROlDYZB41dr0Mt7vBwQ==", + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "dependencies": { - "nanocolors": "^0.2.2", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "engines": { + "node": ">= 0.6" } }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "node_modules/raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.8" } }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "node_modules/raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "engines": { - "node": ">=6.9.0" + "bin": { + "rc": "cli.js" } }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "node_modules/rc-config-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "js-yaml": "^4.1.0", + "json5": "^2.2.2", + "require-from-string": "^2.0.2" + } + }, + "node_modules/rc-config-loader/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "node_modules/rc-config-loader/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "postcss": "^7.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=6.9.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "peer": true, "dependencies": { - "postcss": "^7.0.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "peer": true, "dependencies": { - "postcss": "^7.0.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "17.0.2" } }, - "node_modules/postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "dependencies": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" + "mute-stream": "~0.0.4" }, "engines": { - "node": ">= 4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=0.8" } }, - "node_modules/postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "node_modules/read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", "dev": true, "dependencies": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "engines": { - "node": ">= 6" + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" } }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "node_modules/read-package-json/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 4" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "node_modules/read-package-json/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "node_modules/read-package-tree": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.1.6.tgz", + "integrity": "sha512-FCX1aT3GWyY658wzDICef4p+n0dB+ENRct8E/Qyvppj6xVpOYerBHfUu7OP5Rt1/393Tdglguf5ju5DEX4wZNg==", + "deprecated": "The functionality that this package provided is now in @npmcli/arborist", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" } }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "node_modules/read-pkg-up/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/postcss-modules": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-1.5.0.tgz", - "integrity": "sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==", + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "dependencies": { - "css-modules-loader-core": "^1.1.0", - "generic-names": "^2.0.1", - "lodash.camelcase": "^4.3.0", - "postcss": "^7.0.1", - "string-hash": "^1.1.1" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha512-zF9+UIEvtpeqMGxhpeT9XaIevQSrBBCz9fi7SwfkmjVacsSj8DY5eFVgn+wY8I9vvdDDwK5xC8Myq4UkoLFIkA==", + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "postcss": "^6.0.1" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/postcss-modules-extract-imports/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { "node": ">=4" } }, - "node_modules/postcss-modules-extract-imports/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/postcss-modules-extract-imports/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=4" } }, - "node_modules/postcss-modules-extract-imports/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/postcss-modules-extract-imports/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "engines": { - "node": ">=0.8.0" + "bin": { + "semver": "bin/semver" } }, - "node_modules/postcss-modules-extract-imports/node_modules/has-flag": { + "node_modules/read-pkg/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/postcss-modules-extract-imports/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "node_modules/read-yaml-file": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz", + "integrity": "sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "js-yaml": "^4.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=10.13" } }, - "node_modules/postcss-modules-extract-imports/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/read-yaml-file/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/read-yaml-file/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==", + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/postcss-modules-local-by-default/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" } }, - "node_modules/postcss-modules-local-by-default/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/postcss-modules-local-by-default/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" + "node": ">=8.10.0" } }, - "node_modules/postcss-modules-local-by-default/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/realpath-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", + "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "node_modules/recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.8" } }, - "node_modules/postcss-modules-local-by-default/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/recast/node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, - "node_modules/postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==", + "node_modules/recast/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "dependencies": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-scope/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "resolve": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/postcss-modules-scope/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-modules-scope/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "peer": true + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-scope/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/postcss-modules-scope/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-modules-scope/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/postcss-modules-scope/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "rc": "1.2.8" }, "engines": { - "node": ">=4.0.0" + "node": ">=6.0.0" } }, - "node_modules/postcss-modules-scope/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "rc": "^1.2.8" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==", + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, - "dependencies": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "engines": { + "node": ">= 0.10" } }, - "node_modules/postcss-modules-values/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-values/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/postcss-modules-values/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-modules-values/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/postcss-modules-values/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=0.10" } }, - "node_modules/postcss-modules-values/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/postcss-modules-values/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.10" } }, - "node_modules/postcss-modules-values/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "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": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "dev": true, "dependencies": { - "postcss": "^7.0.0" + "lodash": "^4.17.19" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" } }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "node_modules/request-promise-native/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.8" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.12" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.8" } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "node_modules/require-package-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", + "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", + "dev": true + }, + "node_modules/requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.4.0" } }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "path-parse": "^1.0.6" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", "dev": true, "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "value-or-function": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.10" } }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "lowercase-keys": "^1.0.0" } }, - "node_modules/postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">= 4" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfc4648": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", + "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==", "dev": true }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 8.3" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "engines": { - "node": ">= 0.8" + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true, "engines": { - "node": ">= 0.6" + "node": "6.* || >= 7.*" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { - "node": ">= 0.6.0" + "node": ">=0.12.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" + "queue-microtask": "^1.2.2" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "aproba": "^1.1.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "tslib": "^1.9.0" }, "engines": { - "node": ">= 0.10" + "npm": ">=2.0.0" } }, - "node_modules/prr": { + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-json-parse": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==", "dev": true }, - "node_modules/pseudolocale": { + "node_modules/safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-1.1.0.tgz", - "integrity": "sha512-OZ8I/hwYEJ3beN3IEcNnt8EpcqblH0/x23hulKBXjs+WhTTEle+ijCHCkh2bd+cIIeCuCwSCbBe93IthGG6hLw==", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, "dependencies": { - "commander": "*" + "ret": "~0.1.10" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "node": ">=4.8" } }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, "engines": { - "node": ">=0.6" + "node": ">=6" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, "engines": { - "node": ">=0.4.x" + "node": ">=0.10.0" } }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">=0.4.x" + "node": ">=0.10.0" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ramda": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", - "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "dependencies": { - "safe-buffer": "^5.1.0" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" + "node_modules/sane/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "dependencies": { - "mute-stream": "~0.0.4" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, - "node_modules/read-package-json": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", - "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/read-package-json/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "path-key": "^2.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "node_modules/sane/node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/read-package-json/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "engines": { + "node": ">=4" } }, - "node_modules/read-package-json/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/sane/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" } }, - "node_modules/read-package-tree": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.1.6.tgz", - "integrity": "sha512-FCX1aT3GWyY658wzDICef4p+n0dB+ENRct8E/Qyvppj6xVpOYerBHfUu7OP5Rt1/393Tdglguf5ju5DEX4wZNg==", - "deprecated": "The functionality that this package provided is now in @npmcli/arborist", + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "once": "^1.3.0", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0" + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/read-pkg-up/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg-up/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/sass": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz", + "integrity": "sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw==", "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, + "sass": "sass.js" + }, "engines": { - "node": ">=8" + "node": ">=8.9.0" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", "dev": true }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "node_modules/saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "xmlchars": "^2.1.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/read-yaml-file": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz", - "integrity": "sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==", + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { - "js-yaml": "^4.0.0", - "strip-bom": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=10.13" + "node": ">=10" } }, - "node_modules/read-yaml-file/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true }, - "node_modules/read-yaml-file/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "semver": "^6.3.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8" } }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/readdir-scoped-modules": { + "node_modules/semver-greatest-satisfied-range": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", "dev": true, "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" } }, - "node_modules/realpath-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", - "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "engines": { - "node": ">= 0.8" + "ms": "2.0.0" } }, - "node_modules/recast/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "node_modules/send/node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "mime": "cli.js" } }, - "node_modules/recast/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/send/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/sequencify": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha512-YL8BPm0tp6SlXef/VqYpA/ijmTsDP2ZEXzsnqjkaWS7NP7Bfvw18NboL0O8WCIjy67sOCG3MYSK1PB4GC9XdtQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" + "randombytes": "^2.1.0" } }, - "node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/redent/node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "ms": "2.0.0" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=0.10.0" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/remove-trailing-separator": { + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "is-finite": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "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": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "dependencies": { - "lodash": "^4.17.19" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "engines": { "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" } }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" + "node": ">=0.10.0" } }, - "node_modules/request-promise-native/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "is-descriptor": "^1.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "kind-of": "^3.2.0" }, "engines": { - "node": ">= 0.12" + "node": ">=0.10.0" } }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "bin": { - "uuid": "bin/uuid" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "node_modules/requirejs": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", - "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", - "bin": { - "r_js": "bin/r.js", - "r.js": "bin/r.js" + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" }, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, "dependencies": { - "path-parse": "^1.0.6" + "is-buffer": "^1.1.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "dependencies": { - "value-or-function": "^3.0.0" - }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, - "engines": { - "node": ">=0.12" + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/sockjs/node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, "engines": { - "node": ">= 4" + "node": ">=0.8.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", "dev": true, + "dependencies": { + "is-plain-obj": "^2.0.0" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", - "dev": true + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz", + "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.6.1", + "whatwg-mimetype": "^2.3.0" }, "engines": { - "node": "*" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } + "node_modules/source-map-loader/node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": "6.* || >= 7.*" + "node": ">=0.10.0" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/source-map-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, "engines": { - "node": ">=0.12.0" + "node": ">=8.9.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/source-map-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "queue-microtask": "^1.2.2" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, "dependencies": { - "aproba": "^1.1.1" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { - "ret": "~0.1.10" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=6.0.0" } }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "extend-shallow": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "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" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">=4.8" + "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "minipass": "^3.1.1" }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", "dev": true, "dependencies": { "kind-of": "^3.0.2" @@ -26975,7 +27185,7 @@ "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", @@ -26987,2308 +27197,2193 @@ "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/sane/node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", "dev": true, "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "node": ">=4", + "npm": ">=6" } }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/stream-consume": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", + "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", + "dev": true }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, - "node_modules/sass": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz", - "integrity": "sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw==", + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0" - }, - "bin": { - "sass": "sass.js" - }, "engines": { - "node": ">=8.9.0" + "node": ">=4" } }, - "node_modules/sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0", - "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } + "safe-buffer": "~5.1.0" } }, - "node_modules/sass-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, "engines": { - "node": "*" + "node": ">=0.6.19" } }, - "node_modules/sass-loader/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", + "dev": true }, - "node_modules/sass-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/sass-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/string-length/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, "engines": { - "node": ">=4.0.0" + "node": ">=6" } }, - "node_modules/sass-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/string-length/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==", "dev": true }, - "node_modules/saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "xmlchars": "^2.1.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dev": true, "dependencies": { - "node-forge": "^1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "node": ">= 0.4" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { - "sver-compat": "^1.5.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, - "engines": { - "node": ">= 0.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/send/node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, - "bin": { - "mime": "cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/send/node_modules/ms": { + "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha512-YL8BPm0tp6SlXef/VqYpA/ijmTsDP2ZEXzsnqjkaWS7NP7Bfvw18NboL0O8WCIjy67sOCG3MYSK1PB4GC9XdtQ==", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + "node": ">=6" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "min-indent": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">= 0.8.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", + "node_modules/sudo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sudo/-/sudo-1.0.3.tgz", + "integrity": "sha512-3xMsaPg+8Xm+4LQm0b2V+G3lz3YxtDBzlqiU8CXw2AOIIDSvC1kBxIxBjnoCTq8dTTXAy23m58g6mdClUocpmQ==", "dev": true, + "dependencies": { + "inpath": "~1.0.2", + "pidof": "~1.0.2", + "read": "~1.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", "dev": true, "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "bin": { - "sha.js": "bin.js" + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/symbol": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz", + "integrity": "sha512-IUW+ek7apEaW5bFhS6WpYoNtVpNTlNoqB/PH7YiMWQTxSPeXCzG4PILVakwXivJt3ZXWeO1fIJnUd/L9A/VeGA==", + "dev": true + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "node_modules/ternary-stream": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.1.1.tgz", + "integrity": "sha512-j6ei9hxSoyGlqTmoMjOm+QNvUKDOIY6bNl4Uh1lhBvl6yjPW2iLqxDUYyfDPZknQ4KdRziFl+ec99iT4l7g0cw==", "dev": true, "dependencies": { - "is-arrayish": "^0.3.1" + "duplexify": "^3.5.0", + "fork-stream": "^0.0.4", + "merge-stream": "^1.0.0", + "through2": "^2.0.1" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/ternary-stream/node_modules/merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "readable-stream": "^2.0.1" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/terser": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.0.tgz", + "integrity": "sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw==", "dev": true, "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "node_modules/terser-webpack-plugin/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" } }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/terser-webpack-plugin/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "dependencies": { - "kind-of": "^3.2.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/terser-webpack-plugin/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "locate-path": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/terser-webpack-plugin/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "ms": "2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/terser-webpack-plugin/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/terser-webpack-plugin/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/terser-webpack-plugin/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/terser-webpack-plugin/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "minimist": "^1.2.6" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "p-try": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/terser-webpack-plugin/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "p-limit": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/terser-webpack-plugin/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/terser-webpack-plugin/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "node_modules/terser-webpack-plugin/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/sockjs/node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "dependencies": { - "websocket-driver": ">=0.5.1" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" }, "engines": { - "node": ">=0.8.0" + "node": ">= 4" } }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/terser-webpack-plugin/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { - "uuid": "dist/bin/uuid" + "semver": "bin/semver" } }, - "node_modules/sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, "dependencies": { - "is-plain-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "randombytes": "^2.1.0" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/terser-webpack-plugin/node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "figgy-pudding": "^3.5.1" } }, - "node_modules/source-map-loader": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz", - "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==", + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.6.1", - "whatwg-mimetype": "^2.3.0" - }, - "engines": { - "node": ">= 10.13.0" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "bin": { + "terser": "bin/terser" }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/source-map-loader/node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "node_modules/terser-webpack-plugin/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, - "node_modules/source-map-loader/node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/source-map-loader/node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/source-map-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" + "any-promise": "^1.0.0" } }, - "node_modules/source-map-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "thenify": ">= 3.1.0 < 4" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=0.8" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", "dev": true }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" + "ms": "^2.1.1" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" } }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/split": { + "node_modules/to-arraybuffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "dependencies": { - "through": "2" - }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, "dependencies": { - "extend-shallow": "^3.0.0" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "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" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": "*" + "node": ">=8.0" } }, - "node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" + "through2": "^2.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.6" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" - }, + "punycode": "^2.1.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "tslib": "^1.8.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, "engines": { - "node": ">=4", - "npm": ">=6" + "node": ">= 0.6" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" + "is-typedarray": "^1.0.0" } }, - "node_modules/stream-consume": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", - "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", - "dev": true + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", "dev": true, "engines": { - "node": ">=0.6.19" + "node": ">= 0.10" } }, - "node_modules/string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", + "node_modules/undertaker/node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", "dev": true }, - "node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "unique-slug": "^2.0.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "imurmurhash": "^0.1.4" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=4", + "yarn": "*" } }, - "node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "get-stdin": "^4.0.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, "bin": { - "strip-indent": "cli.js" + "update-browserslist-db": "cli.js" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "node_modules/update-notifier/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/sudo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sudo/-/sudo-1.0.3.tgz", - "integrity": "sha512-3xMsaPg+8Xm+4LQm0b2V+G3lz3YxtDBzlqiU8CXw2AOIIDSvC1kBxIxBjnoCTq8dTTXAy23m58g6mdClUocpmQ==", + "node_modules/update-notifier/node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true, - "dependencies": { - "inpath": "~1.0.2", - "pidof": "~1.0.2", - "read": "~1.0.3" - }, "engines": { - "node": ">=0.8" + "node": ">=4" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" + "punycode": "^2.1.0" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" } }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" + "prepend-http": "^2.0.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=4" } }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/url/node_modules/qs": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", + "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "side-channel": "^1.0.6" }, "engines": { - "node": ">=4" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "inherits": "2.0.3" } }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">= 0.4.0" } }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "engines": { - "node": ">=4" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/svgo/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/v8-to-istanbul": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", + "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" }, "engines": { - "node": ">=4" + "node": "8.x.x || >=10.10.0" } }, - "node_modules/symbol": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz", - "integrity": "sha512-IUW+ek7apEaW5bFhS6WpYoNtVpNTlNoqB/PH7YiMWQTxSPeXCzG4PILVakwXivJt3ZXWeO1fIJnUd/L9A/VeGA==", - "dev": true - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "homedir-polyfill": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.10" } }, - "node_modules/tar/node_modules/minipass": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", - "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "builtins": "^1.0.3" } }, - "node_modules/ternary-stream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.1.1.tgz", - "integrity": "sha512-j6ei9hxSoyGlqTmoMjOm+QNvUKDOIY6bNl4Uh1lhBvl6yjPW2iLqxDUYyfDPZknQ4KdRziFl+ec99iT4l7g0cw==", + "node_modules/validator": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", + "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==", "dev": true, - "dependencies": { - "duplexify": "^3.5.0", - "fork-stream": "^0.0.4", - "merge-stream": "^1.0.0", - "through2": "^2.0.1" - }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.10" } }, - "node_modules/ternary-stream/node_modules/merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==", + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" + "engines": { + "node": ">= 0.10" } }, - "node_modules/terser": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", - "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, - "peer": true, + "engines": [ + "node >=0.6.0" + ], "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.10" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, - "peer": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">= 0.10" } }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", "dev": true, - "peer": true, "dependencies": { - "randombytes": "^2.1.0" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "remove-trailing-separator": "^1.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/vinyl/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, - "peer": true + "engines": { + "node": ">= 0.10" + } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" + "browser-process-hrtime": "^1.0.0" } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "any-promise": "^1.0.0" + "makeerror": "1.0.12" } }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "dependencies": { - "thenify": ">= 3.1.0 < 4" + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" }, - "engines": { - "node": ">=0.8" + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" } }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, + "optional": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "chokidar": "^2.1.8" } }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, + "optional": true, "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, + "optional": true, "engines": { - "node": ">=0.6.0" + "node": ">=0.10.0" } }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "dev": true - }, - "node_modules/tiny-lr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "integrity": "sha512-cmC4iw/nymXg+dc57AQ8Xv3bHxNQOGyQC3Ht5xLN67hksk6ucshrLk/VKiXuMbnZgToQ2NbnICxYj63xVw+Qbw==", + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "optional": true, "dependencies": { - "body-parser": "~1.14.0", - "debug": "~2.2.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.2.0", - "parseurl": "~1.3.0", - "qs": "~5.1.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/tiny-lr/node_modules/body-parser": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "integrity": "sha512-6D9uiWn7dbnDAhlDikccybuqKCmsoest0es3VSQO8Doz/fzx6Ls7kJNxKBYTjbzu4/RzNsf9zuACnS3UYjVH8Q==", + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "optional": true, "dependencies": { - "bytes": "2.2.0", - "content-type": "~1.0.1", - "debug": "~2.2.0", - "depd": "~1.1.0", - "http-errors": "~1.3.1", - "iconv-lite": "0.4.13", - "on-finished": "~2.3.0", - "qs": "5.2.0", - "raw-body": "~2.1.5", - "type-is": "~1.6.10" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/tiny-lr/node_modules/body-parser/node_modules/qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", - "integrity": "sha512-VH4FeG98gs6AkHivaW2O14vsOPBL9E80Sj7fITunoDijiYQ1lsVwJYmm1CSL+oLyO2N5HPdo23GXAG64uKOAZQ==", - "dev": true, - "engines": ">=0.10.40" - }, - "node_modules/tiny-lr/node_modules/bytes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "integrity": "sha512-zGRpnr2l5w/s8PxkrquUJoVeR06KvqPelrYqiSyQV7QEBqCYivpb6UzXYWC6JDBVtNFOT0rzJRFhkfJgxzmILA==", - "dev": true - }, - "node_modules/tiny-lr/node_modules/debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, + "optional": true, "dependencies": { - "ms": "0.7.1" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" } }, - "node_modules/tiny-lr/node_modules/http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha512-gMygNskMurDCWfoCdyh1gOeDfSbkAHXqz94QoPj5IHIUjC/BG8/xv7FSEUr7waR5RcAya4j58bft9Wu/wHNeXA==", + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, + "optional": true, "dependencies": { - "inherits": "~2.0.1", - "statuses": "1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/tiny-lr/node_modules/iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha512-QwVuTNQv7tXC5mMWFX5N5wGjmybjNBBD8P3BReTkPmipoxTUFgWM2gXNvldHQr6T14DH0Dh6qBVg98iJt7u4mQ==", + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/tiny-lr/node_modules/ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", - "dev": true - }, - "node_modules/tiny-lr/node_modules/qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", - "integrity": "sha512-SGDM48EwFLWnYYpNlOkEIRJb4wil5FKJxpR6NVfQjz6qJmX53ki7Xj1cLNEAkb70vUfJmdVLOwODyABgZyDMZw==", - "dev": true, - "engines": ">=0.10.40" - }, - "node_modules/tiny-lr/node_modules/raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha512-x4d27vsIG04gZ1imkuDXB9Rd/EkAx5kYzeMijIYw1PAor0Ld3nTlkQQwDjKu42GdRUFCX1AfGnTSQB4O57eWVg==", + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "dependencies": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", - "unpipe": "1.0.0" + "bindings": "^1.5.0", + "nan": "^2.12.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 4.0" } }, - "node_modules/tiny-lr/node_modules/raw-body/node_modules/bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha512-SvUX8+c/Ga454a4fprIdIUzUN9xfd1YTvYh7ub5ZPJ+ZJ/+K2Bp6IpWGmnw8r3caLTsmhvJAKZz3qjIo9+XuCQ==", - "dev": true + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "optional": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "is-extglob": "^2.1.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=0.10.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, + "optional": true, "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" + "binary-extensions": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "optional": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "optional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -29296,11 +29391,12 @@ "node": ">=0.10.0" } }, - "node_modules/to-object-path/node_modules/kind-of": { + "node_modules/watchpack-chokidar2/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "optional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -29308,986 +29404,812 @@ "node": ">=0.10.0" } }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "optional": true, "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/watchpack-chokidar2/node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, + "optional": true, "dependencies": { - "is-number": "^7.0.0" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" }, "engines": { - "node": ">=8.0" + "node": ">=0.10" } }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, + "optional": true, "dependencies": { - "through2": "^2.0.3" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/toidentifier": { + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "engines": { - "node": ">=0.6" + "dependencies": { + "defaults": "^1.0.3" } }, - "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/webpack": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", "dev": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=6" + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 6" + "node": ">= 12.13.0" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "node_modules/webpack-dev-server": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", + "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": "*" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/webpack-dev-server/node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/webpack-dev-server/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=10" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/webpack-dev-server/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "node_modules/webpack-dev-server/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.6" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "is-typedarray": "^1.0.0" + "ms": "2.0.0" } }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "node_modules/webpack-dev-server/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, "engines": { - "node": ">=4.2.0" + "node": ">= 0.8" } }, - "node_modules/uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "node_modules/webpack-dev-server/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "dependencies": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/uglify-js/node_modules/commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/webpack-dev-server/node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "node_modules/webpack-dev-server/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.8" } }, - "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.10" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/undertaker/node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/webpack-dev-server/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/webpack-dev-server/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "dev": true - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", - "dev": true - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">= 4.0.0" + "node": ">= 10" } }, - "node_modules/unpipe": { + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "bin": { + "mime": "cli.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "node_modules/webpack-dev-server/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "node_modules/webpack-dev-server/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "node_modules/webpack-dev-server/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "node_modules/webpack-dev-server/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { - "isarray": "1.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, "engines": { - "node": ">=4", - "yarn": "*" + "node": ">=8.10.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "node_modules/webpack-dev-server/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - ], + ] + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, - "bin": { - "browserslist-lint": "cli.js" + "engines": { + "node": ">= 12.13.0" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/update-browserslist-db/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/webpack-dev-server/node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "node_modules/webpack-dev-server/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/webpack-dev-server/node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "node_modules/webpack-dev-server/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "node_modules/webpack-dev-server/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, - "dependencies": { - "inherits": "2.0.3" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, - "engines": { - "node": ">= 0.4.0" + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "node_modules/webpack/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, "bin": { - "uuid": "bin/uuid" + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", - "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "engines": { - "node": "8.x.x || >=10.10.0" + "node": ">=0.10.0" } }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "node_modules/webpack/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "dependencies": { - "homedir-polyfill": "^1.0.1" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 0.10" + "node": ">=4.0.0" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/validator": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", - "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vinyl/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "dependencies": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "node": ">=4.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "node_modules/webpack/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, - "optional": true, "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -30298,12 +30220,11 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "optional": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -30311,78 +30232,20 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "node_modules/webpack/node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { + "node_modules/webpack/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "optional": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -30390,12 +30253,11 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/kind-of": { + "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "optional": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -30403,12 +30265,20 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "node_modules/webpack/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "optional": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -30428,26674 +30298,451 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/webpack": { - "version": "5.77.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.77.0.tgz", - "integrity": "sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==", + "node_modules/webpack/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "peer": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "minimist": "^1.2.6" }, "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "mkdirp": "bin/cmd.js" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", - "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/webpack-dev-server/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/webpack-dev-server/node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/webpack-dev-server/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/webpack-dev-server/node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/webpack-dev-server/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true, - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write-yaml-file": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/write-yaml-file/-/write-yaml-file-4.2.0.tgz", - "integrity": "sha512-LwyucHy0uhWqbrOkh9cBluZBeNVxzHjDaE9mwepZG3n3ZlbM4v3ndrFw51zW/NXYFFqP+QWZ72ihtLWTh05e4Q==", - "dev": true, - "dependencies": { - "js-yaml": "^4.0.0", - "write-file-atomic": "^3.0.3" - }, - "engines": { - "node": ">=10.13" - } - }, - "node_modules/write-yaml-file/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/write-yaml-file/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "dev": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xmldoc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.4.tgz", - "integrity": "sha512-rQshsBGR5s7pUNENTEncpI2LTCuzicri0DyE4SCV5XmS0q81JS8j1iPijP0Q5c4WLGbKh3W92hlOwY6N9ssW1w==", - "dev": true, - "dependencies": { - "sax": "^1.2.4" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.6.0.tgz", - "integrity": "sha512-KmjJbWBkYiSRUChcOSa4rtBxDXf0j4ISz+tpeNa4LKIBllgKnkemJ3x4yo4Yydp3wPU4/xJTaKTLLZ8V7zhI7A==", - "dev": true, - "dependencies": { - "camelcase": "^2.0.1", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "pkg-conf": "^1.1.2", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1", - "string-width": "^1.0.1", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.0" - } - }, - "node_modules/yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/yargs/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yargs/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/z-schema": { - "version": "3.18.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.4.tgz", - "integrity": "sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw==", - "dev": true, - "dependencies": { - "lodash.get": "^4.0.0", - "lodash.isequal": "^4.0.0", - "validator": "^8.0.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "optionalDependencies": { - "commander": "^2.7.1" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "dev": true, - "requires": { - "tslib": "^2.2.0" - } - }, - "@azure/core-auth": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz", - "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "tslib": "^2.2.0" - } - }, - "@azure/core-client": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.2.tgz", - "integrity": "sha512-ye5554gnVnXdfZ64hptUtETgacXoRWxYv1JF5MctoAzTSH5dXhDPZd9gOjDPyWMcLIk58pnP5+p5vGX6PYn1ag==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.9.1", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.2.0" - }, - "dependencies": { - "@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", - "dev": true, - "requires": { - "tslib": "^2.2.0" - } - } - } - }, - "@azure/core-http": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.1.tgz", - "integrity": "sha512-cur03BUwV0Tbv81bQBOLafFB02B6G++K6F2O3IMl8pSE2QlXm3cu11bfyBNlDUKi5U+xnB3GC63ae3athhkx6Q==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-tracing": "1.0.0-preview.13", - "@azure/core-util": "^1.1.1", - "@azure/logger": "^1.0.0", - "@types/node-fetch": "^2.5.0", - "@types/tunnel": "^0.0.3", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7", - "process": "^0.11.10", - "tough-cookie": "^4.0.0", - "tslib": "^2.2.0", - "tunnel": "^0.0.6", - "uuid": "^8.3.0", - "xml2js": "^0.4.19" - }, - "dependencies": { - "@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "@azure/core-lro": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.5.1.tgz", - "integrity": "sha512-JHQy/bA3NOz2WuzOi5zEk6n/TJdAropupxUT521JIJvW7EXV2YN2SFYZrf/2RHeD28QAClGdynYadZsbmP+nyQ==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "@azure/logger": "^1.0.0", - "tslib": "^2.2.0" - } - }, - "@azure/core-paging": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.5.0.tgz", - "integrity": "sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==", - "dev": true, - "requires": { - "tslib": "^2.2.0" - } - }, - "@azure/core-rest-pipeline": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.2.tgz", - "integrity": "sha512-e3WzAsRKLor5EgK2bQqR1OY5D7VBqzORHtlqtygZZQGCYOIBsynqrZBa8MFD1Ue9r8TPtofOLditalnlQHS45Q==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.0.0", - "@azure/logger": "^1.0.0", - "form-data": "^4.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "tslib": "^2.2.0", - "uuid": "^8.3.0" - }, - "dependencies": { - "@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", - "dev": true, - "requires": { - "tslib": "^2.2.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "@azure/core-tracing": { - "version": "1.0.0-preview.13", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", - "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", - "dev": true, - "requires": { - "@opentelemetry/api": "^1.0.1", - "tslib": "^2.2.0" - } - }, - "@azure/core-util": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.2.0.tgz", - "integrity": "sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "tslib": "^2.2.0" - } - }, - "@azure/identity": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz", - "integrity": "sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-client": "^1.4.0", - "@azure/core-rest-pipeline": "^1.1.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^2.26.0", - "@azure/msal-common": "^7.0.0", - "@azure/msal-node": "^1.10.0", - "events": "^3.0.0", - "jws": "^4.0.0", - "open": "^8.0.0", - "stoppable": "^1.1.0", - "tslib": "^2.2.0", - "uuid": "^8.3.0" - }, - "dependencies": { - "@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", - "dev": true, - "requires": { - "tslib": "^2.2.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "@azure/logger": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", - "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==", - "dev": true, - "requires": { - "tslib": "^2.2.0" - } - }, - "@azure/msal-browser": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.28.1.tgz", - "integrity": "sha512-5uAfwpNGBSRzBGTSS+5l4Zw6msPV7bEmq99n0U3n/N++iTcha+nIp1QujxTPuOLHmTNCeySdMx9qzGqWuy22zQ==", - "requires": { - "@azure/msal-common": "^7.3.0" - } - }, - "@azure/msal-common": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.6.0.tgz", - "integrity": "sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==" - }, - "@azure/msal-node": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.17.0.tgz", - "integrity": "sha512-aOKykKxDc+Kf5vcdOUPdKlJ96YAIyrHyl4W8RyfMqw0iApDckOuhejNwlZr6/M7U40wo1Wj4PwxRVx7d8OFBFg==", - "dev": true, - "requires": { - "@azure/msal-common": "^12.0.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "dependencies": { - "@azure/msal-common": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-12.0.0.tgz", - "integrity": "sha512-SvQl4JWy1yZnxyq0xng/urf103wz68UJG0K9Dq2NM2to7ePA+R1hMisKnXELJvZrEGYANGbh/Hc0T9piGqOteQ==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "@azure/storage-blob": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.11.0.tgz", - "integrity": "sha512-na+FisoARuaOWaHWpmdtk3FeuTWf2VWamdJ9/TJJzj5ZdXPLC3juoDgFs6XVuJIoK30yuBpyFBEDXVRK4pB7Tg==", - "dev": true, - "requires": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-http": "^2.0.0", - "@azure/core-lro": "^2.2.0", - "@azure/core-paging": "^1.1.1", - "@azure/core-tracing": "1.0.0-preview.13", - "@azure/logger": "^1.0.0", - "events": "^3.0.0", - "tslib": "^2.2.0" - } - }, - "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true - }, - "@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", - "dev": true, - "requires": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.21.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.4", - "@babel/types": "^7.21.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "peer": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", - "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", - "dev": true, - "peer": true - }, - "@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", - "dev": true, - "peer": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.1", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "peer": true - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "peer": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "peer": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "peer": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "peer": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true - } - } - }, - "@eslint/js": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz", - "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==", - "dev": true, - "peer": true - }, - "@fluentui/date-time-utilities": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-7.9.1.tgz", - "integrity": "sha512-o8iU1VIY+QsqVRWARKiky29fh4KR1xaKSgMClXIi65qkt8EDDhjmlzL0KVDEoDA2GWukwb/1PpaVCWDg4v3cUQ==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/dom-utilities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-1.1.2.tgz", - "integrity": "sha512-XqPS7l3YoMwxdNlaYF6S2Mp0K3FmVIOIy2K3YkMc+eRxu9wFK6emr2Q/3rBhtG5u/On37NExRT7/5CTLnoi9gw==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/keyboard-key": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.2.17.tgz", - "integrity": "sha512-iT1bU56rKrKEOfODoW6fScY11qj3iaYrZ+z11T6fo5+TDm84UGkkXjLXJTE57ZJzg0/gbccHQWYv+chY7bJN8Q==", - "requires": { - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/react": { - "version": "7.204.0", - "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-7.204.0.tgz", - "integrity": "sha512-WQKHcO6cboGO0eCPsiNSzUwnMWBmAvdltu4X0tvXwb+q8W3wZzCQiU1voDVYNm4Nz/Jgiiy8jbMcesmNAq7jsw==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "office-ui-fabric-react": "^7.204.0", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/react-compose": { - "version": "0.19.24", - "resolved": "https://registry.npmjs.org/@fluentui/react-compose/-/react-compose-0.19.24.tgz", - "integrity": "sha512-4PO7WSIZjwBGObpknjK8d1+PhPHJGSlVSXKFHGEoBjLWVlCTMw6Xa1S4+3K6eE3TEBbe9rsqwwocMTFHjhWwtQ==", - "requires": { - "@types/classnames": "^2.2.9", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "classnames": "^2.2.6", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/react-focus": { - "version": "7.18.17", - "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-7.18.17.tgz", - "integrity": "sha512-W+sLIhX7wLzMsJ0jhBrDAblkG3DNbRbF8UoSieRVdAAm7xVf5HpiwJ6tb6nGqcFOnpRh8y+fjyVM+dV3K6GNHA==", - "requires": { - "@fluentui/keyboard-key": "^0.2.12", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/react-stylesheets": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-stylesheets/-/react-stylesheets-0.2.9.tgz", - "integrity": "sha512-6GDU/cUEG/eJ4owqQXDWPmP5L1zNh2NLEDKdEzxd7cWtGnoXLeMjbs4vF4t5wYGzGaxZmUQILOvJdgCIuc9L9Q==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/react-theme-provider": { - "version": "0.19.16", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme-provider/-/react-theme-provider-0.19.16.tgz", - "integrity": "sha512-Kf7z4ZfNLS/onaFL5eQDSlizgwy2ytn6SDyjEKV+9VhxIXdDtOh8AaMXWE7dsj1cRBfBUvuGPVnsnoaGdHxJ+A==", - "requires": { - "@fluentui/react-compose": "^0.19.24", - "@fluentui/react-stylesheets": "^0.2.9", - "@fluentui/react-window-provider": "^1.0.6", - "@fluentui/theme": "^1.7.13", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/react-hooks": "^7.16.4", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "classnames": "^2.2.6", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/react-window-provider": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-1.0.6.tgz", - "integrity": "sha512-m2HoxhU2m/yWxUauf79y+XZvrrWNx+bMi7ZiL6DjiAKHjTSa8KOyvicbOXd/3dvuVzOaNTnLDdZAvhRFcelOIA==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@fluentui/theme": { - "version": "1.7.13", - "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-1.7.13.tgz", - "integrity": "sha512-/1ZDHZNzV7Wgohay47DL9TAH4uuib5+B2D6Rxoc3T6ULoWcFzwLeVb+VZB/WOCTUbG+NGTrmsWPBOz5+lbuOxA==", - "requires": { - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "peer": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "peer": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-25.5.0.tgz", - "integrity": "sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-message-util": "^25.5.0", - "jest-util": "^25.5.0", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-25.4.0.tgz", - "integrity": "sha512-h1x9WSVV0+TKVtATGjyQIMJENs8aF6eUjnCoi4jyRemYZmekLr8EJOGQqTWEX8W6SbZ6Skesy9pGXrKeAolUJw==", - "dev": true, - "requires": { - "@jest/console": "^25.4.0", - "@jest/reporters": "^25.4.0", - "@jest/test-result": "^25.4.0", - "@jest/transform": "^25.4.0", - "@jest/types": "^25.4.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.3", - "jest-changed-files": "^25.4.0", - "jest-config": "^25.4.0", - "jest-haste-map": "^25.4.0", - "jest-message-util": "^25.4.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.4.0", - "jest-resolve-dependencies": "^25.4.0", - "jest-runner": "^25.4.0", - "jest-runtime": "^25.4.0", - "jest-snapshot": "^25.4.0", - "jest-util": "^25.4.0", - "jest-validate": "^25.4.0", - "jest-watcher": "^25.4.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "realpath-native": "^2.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-25.5.0.tgz", - "integrity": "sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0" - } - }, - "@jest/fake-timers": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-25.5.0.tgz", - "integrity": "sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "lolex": "^5.0.0" - } - }, - "@jest/globals": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-25.5.2.tgz", - "integrity": "sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==", - "dev": true, - "requires": { - "@jest/environment": "^25.5.0", - "@jest/types": "^25.5.0", - "expect": "^25.5.0" - } - }, - "@jest/reporters": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-25.4.0.tgz", - "integrity": "sha512-bhx/buYbZgLZm4JWLcRJ/q9Gvmd3oUh7k2V7gA4ZYBx6J28pIuykIouclRdiAC6eGVX1uRZT+GK4CQJLd/PwPg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^25.4.0", - "@jest/test-result": "^25.4.0", - "@jest/transform": "^25.4.0", - "@jest/types": "^25.4.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^25.4.0", - "jest-resolve": "^25.4.0", - "jest-util": "^25.4.0", - "jest-worker": "^25.4.0", - "node-notifier": "^6.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^3.1.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^4.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "node-notifier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz", - "integrity": "sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.1.1", - "semver": "^6.3.0", - "shellwords": "^0.1.1", - "which": "^1.3.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "optional": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz", - "integrity": "sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-25.5.0.tgz", - "integrity": "sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/types": "^25.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz", - "integrity": "sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==", - "dev": true, - "requires": { - "@jest/test-result": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-runner": "^25.5.4", - "jest-runtime": "^25.5.4" - } - }, - "@jest/transform": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", - "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^25.5.0", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^3.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^25.5.1", - "jest-regex-util": "^25.2.6", - "jest-util": "^25.5.0", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "dependencies": { - "@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@microsoft/api-extractor": { - "version": "7.15.2", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.15.2.tgz", - "integrity": "sha512-/Y/n+QOc1vM6Vg3OAUByT/wXdZciE7jV3ay33+vxl3aKva5cNsuOauL14T7XQWUiLko3ilPwrcnFcEjzXpLsuA==", - "dev": true, - "requires": { - "@microsoft/api-extractor-model": "7.13.2", - "@microsoft/tsdoc": "0.13.2", - "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.38.0", - "@rushstack/rig-package": "0.2.12", - "@rushstack/ts-command-line": "4.7.10", - "colors": "~1.2.1", - "lodash": "~4.17.15", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "source-map": "~0.6.1", - "typescript": "~4.2.4" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.38.0.tgz", - "integrity": "sha512-cmvl0yQx8sSmbuXwiRYJi8TO+jpTtrLJQ8UmFHhKvgPVJAW8cV8dnpD1Xx/BvTGrJZ2XtRAIkAhBS9okBnap4w==", - "dev": true, - "requires": { - "@types/node": "10.17.13", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "timsort": "~0.3.0", - "z-schema": "~3.18.3" - } - }, - "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true - } - } - }, - "@microsoft/api-extractor-model": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.13.2.tgz", - "integrity": "sha512-gA9Q8q5TPM2YYk7rLinAv9KqcodrmRC13BVmNzLswjtFxpz13lRh0BmrqD01/sddGpGMIuWFYlfUM4VSWxnggA==", - "dev": true, - "requires": { - "@microsoft/tsdoc": "0.13.2", - "@microsoft/tsdoc-config": "~0.15.2", - "@rushstack/node-core-library": "3.38.0" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.38.0.tgz", - "integrity": "sha512-cmvl0yQx8sSmbuXwiRYJi8TO+jpTtrLJQ8UmFHhKvgPVJAW8cV8dnpD1Xx/BvTGrJZ2XtRAIkAhBS9okBnap4w==", - "dev": true, - "requires": { - "@types/node": "10.17.13", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "timsort": "~0.3.0", - "z-schema": "~3.18.3" - } - } - } - }, - "@microsoft/eslint-config-spfx": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/eslint-config-spfx/-/eslint-config-spfx-1.16.1.tgz", - "integrity": "sha512-WJVgoqTUQdlX2r6dY2ETmssXXNr5XwakBdvvPA9KM0Smu9quSbrsyka1fNDRrsuku5pOp5zwfpHn+aK9qg9C9w==", - "dev": true, - "requires": { - "@microsoft/eslint-plugin-spfx": "1.16.1", - "@rushstack/eslint-config": "3.0.1", - "@typescript-eslint/experimental-utils": "5.30.7" - }, - "dependencies": { - "@rushstack/eslint-config": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-config/-/eslint-config-3.0.1.tgz", - "integrity": "sha512-9OIB2T6fYsgMNUVGjopgT8NZv7x4shXsq1KqT8fX0VVVzJ6/XA7+nSBXHYFzYH+8Liux7ApdzyaZNxaF0Ex7Sw==", - "dev": true, - "requires": { - "@rushstack/eslint-patch": "1.2.0", - "@rushstack/eslint-plugin": "0.10.0", - "@rushstack/eslint-plugin-packlets": "0.5.0", - "@rushstack/eslint-plugin-security": "0.4.0", - "@typescript-eslint/eslint-plugin": "~5.30.3", - "@typescript-eslint/experimental-utils": "~5.30.3", - "@typescript-eslint/parser": "~5.30.3", - "@typescript-eslint/typescript-estree": "~5.30.3", - "eslint-plugin-promise": "~6.0.0", - "eslint-plugin-react": "~7.27.1", - "eslint-plugin-tsdoc": "~0.2.16" - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", - "dev": true - }, - "@rushstack/eslint-plugin": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin/-/eslint-plugin-0.10.0.tgz", - "integrity": "sha512-39DCBD6s7Y5XQxvcMmitXfupkReGcg0lmtil9mrGHkDoyiUln90sOWtpkSl6LqUrSL3lx7N2wRvJiJlwGIPYFQ==", - "dev": true, - "requires": { - "@rushstack/tree-pattern": "0.2.4", - "@typescript-eslint/experimental-utils": "~5.30.3" - } - }, - "@rushstack/eslint-plugin-packlets": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-packlets/-/eslint-plugin-packlets-0.5.0.tgz", - "integrity": "sha512-I160nHeAGzA0q4g3cR7kiHNgiU1HqrYto52+lEmxLAdbBllqc6IOyiWQfCDb5ug0f+Y8bTwMQHiUrI7XclZB/Q==", - "dev": true, - "requires": { - "@rushstack/tree-pattern": "0.2.4", - "@typescript-eslint/experimental-utils": "~5.30.3" - } - }, - "@rushstack/eslint-plugin-security": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.4.0.tgz", - "integrity": "sha512-jRFtrOnZZcuJ2MRA9RtoeyKiFQ60iKu7SDF1wkc7M9nHL5C1HkFApX6nTlAjY7C5B7UlV+9BP9fDmOJJmB4FSw==", - "dev": true, - "requires": { - "@rushstack/tree-pattern": "0.2.4", - "@typescript-eslint/experimental-utils": "~5.30.3" - } - }, - "@rushstack/tree-pattern": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@rushstack/tree-pattern/-/tree-pattern-0.2.4.tgz", - "integrity": "sha512-H8i0OinWsdKM1TKEKPeRRTw85e+/7AIFpxm7q1blceZJhuxRBjCGAUZvQXZK4CMLx75xPqh/h1t5WHwFmElAPA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz", - "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/type-utils": "5.30.7", - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz", - "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" - } - }, - "@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "eslint-visitor-keys": "^3.3.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "typescript": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz", - "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==", - "dev": true, - "peer": true - } - } - }, - "@microsoft/eslint-plugin-spfx": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/eslint-plugin-spfx/-/eslint-plugin-spfx-1.16.1.tgz", - "integrity": "sha512-CN91uwrZ6/huwzWmD/NDF5cx6KQq11rt1JI5l/5kK1CvXKpaoU8XUGL8WCy9Ed7C0VD/DoZAtiapjp2rtc517g==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.30.7" - } - }, - "@microsoft/gulp-core-build": { - "version": "3.17.19", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.17.19.tgz", - "integrity": "sha512-izeW3DDC9KC5NYqwHqddY0KElO7YYLtbXvH30JJnYFVlpaXTl23opv5XFZYpWe6LKGuNVGnbTNwYqEuxiGiTVg==", - "dev": true, - "requires": { - "@jest/core": "~25.4.0", - "@jest/reporters": "~25.4.0", - "@rushstack/node-core-library": "~3.44.1", - "@types/chalk": "0.4.31", - "@types/gulp": "4.0.6", - "@types/jest": "25.2.1", - "@types/node": "10.17.13", - "@types/node-notifier": "8.0.2", - "@types/orchestrator": "0.0.30", - "@types/semver": "7.3.5", - "@types/through2": "2.0.32", - "@types/vinyl": "2.0.3", - "@types/yargs": "0.0.34", - "colors": "~1.2.1", - "del": "^2.2.2", - "end-of-stream": "~1.1.0", - "glob": "~7.0.5", - "glob-escape": "~0.0.2", - "globby": "~5.0.0", - "gulp": "~4.0.2", - "gulp-flatten": "~0.2.0", - "gulp-if": "^2.0.1", - "jest": "~25.4.0", - "jest-cli": "~25.4.0", - "jest-environment-jsdom": "~25.4.0", - "jest-nunit-reporter": "~1.3.1", - "jsdom": "~11.11.0", - "lodash.merge": "~4.6.2", - "merge2": "~1.0.2", - "node-notifier": "~10.0.1", - "object-assign": "~4.1.0", - "orchestrator": "~0.3.8", - "pretty-hrtime": "~1.0.2", - "semver": "~7.3.0", - "through2": "~2.0.1", - "vinyl": "~2.2.0", - "xml": "~1.0.1", - "yargs": "~4.6.0", - "z-schema": "~3.18.3" - } - }, - "@microsoft/gulp-core-build-sass": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-sass/-/gulp-core-build-sass-4.16.0.tgz", - "integrity": "sha512-sDwUyTsnRBvnMntiIGtElcaYejK17/WZRiXXXaS8VkrTNfBjdcifPnnuojKawGYnE3kFC2PrP+TwB2BI9rvVKg==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.17.20", - "@microsoft/load-themed-styles": "~1.10.172", - "@rushstack/node-core-library": "~3.53.0", - "@types/gulp": "4.0.6", - "@types/node": "10.17.13", - "autoprefixer": "~9.8.8", - "clean-css": "4.2.1", - "glob": "~7.0.5", - "postcss": "7.0.38", - "postcss-modules": "~1.5.0", - "sass": "1.44.0" - }, - "dependencies": { - "@microsoft/gulp-core-build": { - "version": "3.17.20", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build/-/gulp-core-build-3.17.20.tgz", - "integrity": "sha512-VBZY08BhygVV9WeIY8lo9yUoe51+5mMjdfx8Bqle40k+/V7br0d93LXeUcMqaCJ5J6C3ribx2mrzaYhkj1l//g==", - "dev": true, - "requires": { - "@jest/core": "~25.4.0", - "@jest/reporters": "~25.4.0", - "@rushstack/node-core-library": "~3.53.0", - "@types/chalk": "0.4.31", - "@types/gulp": "4.0.6", - "@types/jest": "25.2.1", - "@types/node": "10.17.13", - "@types/node-notifier": "8.0.2", - "@types/orchestrator": "0.0.30", - "@types/semver": "7.3.5", - "@types/through2": "2.0.32", - "@types/vinyl": "2.0.3", - "@types/yargs": "0.0.34", - "colors": "~1.2.1", - "del": "^2.2.2", - "end-of-stream": "~1.1.0", - "glob": "~7.0.5", - "glob-escape": "~0.0.2", - "globby": "~5.0.0", - "gulp": "~4.0.2", - "gulp-flatten": "~0.2.0", - "gulp-if": "^2.0.1", - "jest": "~25.4.0", - "jest-cli": "~25.4.0", - "jest-environment-jsdom": "~25.4.0", - "jest-nunit-reporter": "~1.3.1", - "jsdom": "~11.11.0", - "lodash.merge": "~4.6.2", - "merge2": "~1.0.2", - "node-notifier": "~10.0.1", - "object-assign": "~4.1.0", - "orchestrator": "~0.3.8", - "pretty-hrtime": "~1.0.2", - "semver": "~7.3.0", - "through2": "~2.0.1", - "vinyl": "~2.2.0", - "xml": "~1.0.1", - "yargs": "~4.6.0", - "z-schema": "~3.18.3" - } - }, - "@rushstack/node-core-library": { - "version": "3.53.3", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.3.tgz", - "integrity": "sha512-H0+T5koi5MFhJUd5ND3dI3bwLhvlABetARl78L3lWftJVQEPyzcgTStvTTRiIM5mCltyTM8VYm6BuCtNUuxD0Q==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - }, - "dependencies": { - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - } - } - }, - "@microsoft/gulp-core-build-serve": { - "version": "3.9.22", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-serve/-/gulp-core-build-serve-3.9.22.tgz", - "integrity": "sha512-gIhu1TBIft4ofWLulAZG17cEta0UU91d9p/idAkyGG3DL4aAfKNrCTXcie3X915N3sNjz1feeCWnkkxM1vB5/Q==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.17.19", - "@rushstack/debug-certificate-manager": "~1.1.19", - "@rushstack/node-core-library": "~3.44.1", - "@types/node": "10.17.13", - "colors": "~1.2.1", - "express": "~4.16.2", - "gulp": "~4.0.2", - "gulp-connect": "~5.5.0", - "gulp-open": "~3.0.1", - "sudo": "~1.0.3" - } - }, - "@microsoft/gulp-core-build-typescript": { - "version": "8.5.33", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-typescript/-/gulp-core-build-typescript-8.5.33.tgz", - "integrity": "sha512-+ykMtWF8Skcl2QpGPzJYmSf/cdq6tZ0a+ph1I0GnRalaJo+KpVKzlAhUUkxG3lVmo0pbXYBICl6PK3l3UZAEHg==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.17.19", - "@rushstack/node-core-library": "~3.44.1", - "@types/node": "10.17.13", - "decomment": "~0.9.1", - "glob": "~7.0.5", - "glob-escape": "~0.0.2", - "resolve": "~1.17.0" - } - }, - "@microsoft/gulp-core-build-webpack": { - "version": "5.2.28", - "resolved": "https://registry.npmjs.org/@microsoft/gulp-core-build-webpack/-/gulp-core-build-webpack-5.2.28.tgz", - "integrity": "sha512-EMu5P62rKvU9QlFJMg8r7ANyb+we2DQna1z2uz6tDm4S9DomnULvX6eCeB3za4JH+QJtO5LOU5RV9JaZF3auig==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.17.19", - "@types/gulp": "4.0.6", - "@types/node": "10.17.13", - "colors": "~1.2.1", - "gulp": "~4.0.2", - "webpack": "~4.44.2" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - } - } - }, - "@microsoft/load-themed-styles": { - "version": "1.10.295", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", - "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==" - }, - "@microsoft/loader-load-themed-styles": { - "version": "1.9.174", - "resolved": "https://registry.npmjs.org/@microsoft/loader-load-themed-styles/-/loader-load-themed-styles-1.9.174.tgz", - "integrity": "sha512-BmsuGqKEq3faLOpfTj+k2BYa3CnxuoaRusOVc4WkY84Ycv+IBX1WW3jhslwWbmAOt7ryb6/RZpxZ7sHw6Iy8ow==", - "dev": true, - "requires": { - "@microsoft/load-themed-styles": "1.10.292", - "loader-utils": "~1.1.0" - }, - "dependencies": { - "@microsoft/load-themed-styles": { - "version": "1.10.292", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", - "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", - "dev": true - } - } - }, - "@microsoft/microsoft-graph-clientv1": { - "version": "npm:@microsoft/microsoft-graph-client@1.7.2-spfx", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-client/-/microsoft-graph-client-1.7.2-spfx.tgz", - "integrity": "sha512-BQN50r3tohWYOaQ0de7LJ5eCRjI6eg4RQqLhGDlgRmZIZhWzH0bhR6QBMmmxtYtwKWifhPhJSxYDW+cP67TJVw==", - "requires": { - "es6-promise": "^4.2.6", - "isomorphic-fetch": "^3.0.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@microsoft/microsoft-graph-types": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@microsoft/microsoft-graph-types/-/microsoft-graph-types-2.26.0.tgz", - "integrity": "sha512-ABYHb80BRF5Sjo1CdbRdZpI4O0Jal85XVAGmTfnpSMOjUZi0HkESHP+oajVsPSQJyRTjEKrbneUC2qheBBdQGg==" - }, - "@microsoft/rush-lib": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@microsoft/rush-lib/-/rush-lib-5.79.0.tgz", - "integrity": "sha512-9FKABGIUiFZxgEVPVY7ObcoJ2OtIcaan1KeykjgcCYGjYOGliN4hl9FQ5e7UdpokNWU62c1zLfESQfnJPsyCGA==", - "dev": true, - "requires": { - "@pnpm/link-bins": "~5.3.7", - "@rushstack/heft-config-file": "0.10.0", - "@rushstack/node-core-library": "3.52.0", - "@rushstack/package-deps-hash": "3.2.51", - "@rushstack/rig-package": "0.3.15", - "@rushstack/rush-amazon-s3-build-cache-plugin": "5.79.0", - "@rushstack/rush-azure-storage-build-cache-plugin": "5.79.0", - "@rushstack/stream-collator": "4.0.205", - "@rushstack/terminal": "0.3.74", - "@rushstack/ts-command-line": "4.12.3", - "@types/node-fetch": "1.6.9", - "@yarnpkg/lockfile": "~1.0.2", - "builtin-modules": "~3.1.0", - "cli-table": "~0.3.1", - "colors": "~1.2.1", - "git-repo-info": "~2.1.0", - "glob": "~7.0.5", - "glob-escape": "~0.0.2", - "https-proxy-agent": "~5.0.0", - "ignore": "~5.1.6", - "inquirer": "~7.3.3", - "js-yaml": "~3.13.1", - "jszip": "~3.7.1", - "lodash": "~4.17.15", - "node-fetch": "2.6.7", - "npm-package-arg": "~6.1.0", - "npm-packlist": "~2.1.2", - "read-package-tree": "~5.1.5", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "ssri": "~8.0.0", - "strict-uri-encode": "~2.0.0", - "tapable": "2.2.1", - "tar": "~6.1.11", - "true-case-path": "~2.2.1" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@rushstack/rig-package": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.15.tgz", - "integrity": "sha512-jxVfvO5OnkRlYRhcVDZWvwiI2l4pv37HDJRtyg5HbD8Z/I8Xj32RICgrxS5xMeGGytobrg5S6OfPOHskg7Nw+A==", - "dev": true, - "requires": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" - } - }, - "@rushstack/ts-command-line": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.12.3.tgz", - "integrity": "sha512-Pdij22RotMXzI+HWHyYCvw0RMZhiP5a6Za/96XamZ1+mxmpSm4ujf8TROKxGAHySmR5A8iNVSlzhNMnUlFQE6g==", - "dev": true, - "requires": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@microsoft/rush-stack-compiler-4.5": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@microsoft/rush-stack-compiler-4.5/-/rush-stack-compiler-4.5-0.2.2.tgz", - "integrity": "sha512-nRlomAZwOYUR3qmFxxVcn8A3wmkjQ4eS3hoKzYylOqEU8SYPFxDFSN4I+2Y+hGTYG0gpm3NSL4Wvb0I180pCbg==", - "dev": true, - "requires": { - "@microsoft/api-extractor": "~7.15.2", - "@rushstack/eslint-config": "~2.5.0", - "@rushstack/node-core-library": "~3.44.1", - "@types/node": "10.17.13", - "eslint": "8.7.0", - "import-lazy": "~4.0.0", - "typescript": "~4.5.5" - }, - "dependencies": { - "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@microsoft/sp-build-core-tasks": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-build-core-tasks/-/sp-build-core-tasks-1.16.1.tgz", - "integrity": "sha512-TXFQkzxPXYdc0rvI6vEc0VhuytKZy8TDlAW3K5bzC5DGm87QB+2N/IYVFMQ6jxavXO7uDFuItgavSGraOyeN1Q==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.17.19", - "@microsoft/gulp-core-build-serve": "3.9.22", - "@microsoft/gulp-core-build-webpack": "5.2.28", - "@microsoft/spfx-heft-plugins": "1.16.1", - "@rushstack/node-core-library": "3.52.0", - "@types/glob": "5.0.30", - "@types/lodash": "4.14.117", - "@types/webpack": "4.41.24", - "colors": "~1.2.1", - "glob": "~7.0.5", - "gulp": "4.0.2", - "lodash": "4.17.21", - "webpack": "~4.44.2" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - } - } - } - } - }, - "@microsoft/sp-build-web": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-build-web/-/sp-build-web-1.16.1.tgz", - "integrity": "sha512-qiZT6yU9EkAHOsq0r65cDgalWYUfdB7GFrvxJHUbOUlFtbkjOfzujddyGBH5JK/xJ6bPTZMZRFKFh1xzElVwBQ==", - "dev": true, - "requires": { - "@microsoft/gulp-core-build": "3.17.19", - "@microsoft/gulp-core-build-sass": "4.16.0", - "@microsoft/gulp-core-build-serve": "3.9.22", - "@microsoft/gulp-core-build-typescript": "8.5.33", - "@microsoft/gulp-core-build-webpack": "5.2.28", - "@microsoft/rush-lib": "5.79.0", - "@microsoft/sp-build-core-tasks": "1.16.1", - "@rushstack/node-core-library": "3.52.0", - "@types/webpack": "4.41.24", - "gulp": "4.0.2", - "semver": "~7.3.2", - "true-case-path": "~2.2.1", - "webpack": "~4.44.2", - "yargs": "~4.6.0" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - } - } - } - } - }, - "@microsoft/sp-component-base": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-component-base/-/sp-component-base-1.16.1.tgz", - "integrity": "sha512-fS7E2fUgyUAn5YpdJUvG0T7kQejU3EHWD58GKK6boa1hD4FcDvAnBxt2yiqKffxtGt44CsGdHqiuK9olyFMFQw==", - "requires": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-http": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "office-ui-fabric-react": "^7.199.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-core-library": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-core-library/-/sp-core-library-1.16.1.tgz", - "integrity": "sha512-1BwUFqW0rycMI7WJ4WJya/VSxnOmsPlSIY4ZXoI9IMGl0JR2E0pZWd23Z7oQAmqUmohyHssIpOjaQF/qo1fSmg==", - "requires": { - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-odata-types": "1.16.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-css-loader": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-css-loader/-/sp-css-loader-1.16.1.tgz", - "integrity": "sha512-4wNATfkBcK29k+vKn86/QwCSijjpLEqXi5/pYvvgOjhzKfHP2MC3mIU8SsWRUpN5XG8Z3DnDU9P0G2q2hk18hA==", - "dev": true, - "requires": { - "@microsoft/load-themed-styles": "1.10.292", - "@rushstack/node-core-library": "3.52.0", - "autoprefixer": "9.7.1", - "css-loader": "3.4.2", - "cssnano": "~4.1.10", - "loader-utils": "1.2.3", - "postcss": "~8.1.0", - "postcss-modules-extract-imports": "~3.0.0", - "postcss-modules-local-by-default": "~4.0.0", - "postcss-modules-scope": "~3.0.0", - "postcss-modules-values": "~4.0.0", - "webpack": "~4.44.2" - }, - "dependencies": { - "@microsoft/load-themed-styles": { - "version": "1.10.292", - "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.292.tgz", - "integrity": "sha512-LQWGImtpv2zHKIPySLalR1aFXumXfOq8UuJvR15mIZRKXIoM+KuN9wZq+ved2FyeuePjQSJGOxYynxtCLLwDBA==", - "dev": true - }, - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "autoprefixer": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", - "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", - "dev": true, - "requires": { - "browserslist": "^4.7.2", - "caniuse-lite": "^1.0.30001006", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.21", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - } - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "postcss": { - "version": "8.1.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.14.tgz", - "integrity": "sha512-KatkyVPBKfENS+c3dpXJoDXnDD5UZs5exAnDksLqaRJPKwYphEPZt4N0m0i049v2/BtWVQibAhxW4ilXXcolpA==", - "dev": true, - "requires": { - "colorette": "^1.2.1", - "nanoid": "^3.1.20", - "source-map": "^0.6.1" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - } - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - }, - "dependencies": { - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - } - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - } - } - } - } - }, - "@microsoft/sp-diagnostics": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-diagnostics/-/sp-diagnostics-1.16.1.tgz", - "integrity": "sha512-xmMGGzmT2xSLddYZSliDXyq9xAO/cZbiJopFvjEIkX0ottgbudi73TuwaO81d4FGMm7eSEKFXocSBRr1wAxxEg==", - "requires": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1" - } - }, - "@microsoft/sp-dynamic-data": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-dynamic-data/-/sp-dynamic-data-1.16.1.tgz", - "integrity": "sha512-YmF5Gk/Ttx7W6bwMYmw3I/ZraLSGEWIrKljOl++z5xyxiskMIlAZg2wQxAXu9QLZ1P2DjuYC4ZYSVFByMScC+Q==", - "requires": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-http": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-http/-/sp-http-1.16.1.tgz", - "integrity": "sha512-wsKyiH1lqCuN7aeHkpc5GWZ+ezIJ4nUT6zQmKgvugayQroOhS/G4caw0FxqBA8Qs+SiUF9FE8plPHyivaA1IZw==", - "requires": { - "@microsoft/microsoft-graph-clientv1": "npm:@microsoft/microsoft-graph-client@1.7.2-spfx", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-http-msgraph": "1.16.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-http-base": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-http-base/-/sp-http-base-1.16.1.tgz", - "integrity": "sha512-67ycRRAz19OoKzYgLTYvaZaBnH4yARJYB395ZIbf+QT9eHZLIZoGVxZotNrGQoIyMV3+uazkbyyvEvOGggCeMw==", - "requires": { - "@azure/msal-browser": "2.28.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "@microsoft/teams-js": "1.12.1", - "@microsoft/teams-js-v2": "npm:@microsoft/teams-js@2.4.1", - "adal-angular": "1.0.16", - "msal": "1.4.17", - "msalBrowserLegacy": "npm:@azure/msal-browser@2.22.0", - "msalLegacy": "npm:msal@1.4.12", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-http-msgraph": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-http-msgraph/-/sp-http-msgraph-1.16.1.tgz", - "integrity": "sha512-0/KxNJ2Cq8fn6u+uLf5rlLnOu+XIrP3H60lO4haILYYNuG3fJh3aLCiHFLSCv4RatWMjk2e2NeaieD2266yVRQ==", - "requires": { - "@microsoft/microsoft-graph-clientv1": "npm:@microsoft/microsoft-graph-client@1.7.2-spfx", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-loader": "1.16.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-image-helper": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-image-helper/-/sp-image-helper-1.16.1.tgz", - "integrity": "sha512-GHc4Wry31s6Y+qS8CVY6gqwCpJwXfAS+uss5ntKBZPBzFKl5qW8HEFAD8SHu9G00zb33LJ+7HHSpcFqZGlD7BQ==", - "requires": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-http": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-loader": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-loader": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-loader/-/sp-loader-1.16.1.tgz", - "integrity": "sha512-EEVr5+MbwceQWBUCXXZbaq8yDLyl20W52lt5J8oLkL/Un3i5IphzPwRVx5I7RuhgdIz6MDNpiADXBEu84YpNGw==", - "requires": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-odata-types": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "@rushstack/loader-raw-script": "1.3.260", - "@types/requirejs": "2.1.29", - "office-ui-fabric-react": "^7.199.1", - "raw-loader": "~0.5.1", - "react": "17.0.1", - "react-dom": "17.0.1", - "requirejs": "2.3.6", - "tslib": "2.3.1" - }, - "dependencies": { - "react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.1" - } - } - } - }, - "@microsoft/sp-lodash-subset": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-lodash-subset/-/sp-lodash-subset-1.16.1.tgz", - "integrity": "sha512-WRgN4na/lHijQlKAElc+hthtQNMKBbvmWTK7NoQa6D+tOnEc9ay1VCY06NKgGRK8M74xodODjYVO5shRhBFWcw==", - "requires": { - "@types/lodash": "4.14.117", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-module-interfaces": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-module-interfaces/-/sp-module-interfaces-1.16.1.tgz", - "integrity": "sha512-1bSz90Hs50Uf5X44MkHN23QXuybZ0Pz3ZsQ52aJ7C6A79rnZ/yG+JROWmkYNxw2cO1vh0sQZHIWXXndlHC97wQ==", - "requires": { - "@rushstack/node-core-library": "3.52.0", - "z-schema": "4.2.4" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "optional": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==" - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==" - }, - "z-schema": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.4.tgz", - "integrity": "sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==", - "requires": { - "commander": "^2.7.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.6.0" - } - } - } - }, - "@microsoft/sp-odata-types": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-odata-types/-/sp-odata-types-1.16.1.tgz", - "integrity": "sha512-rwLz1E6rCb+Bo8xDoPafqn2Y5B92u8+Ruma0Vp0WKeGsP634d9FrvCWISxyYr7IcK3vn6qdoEwCAwpRH4kwnDw==", - "requires": { - "tslib": "2.3.1" - } - }, - "@microsoft/sp-office-ui-fabric-core": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-office-ui-fabric-core/-/sp-office-ui-fabric-core-1.16.1.tgz", - "integrity": "sha512-MymuL8DbDT7m5NQS+skMdCmhYTtfmAzdYrdPVjdSBQaFQjHp4IOCqs1Rm81VM8p6zm7Jh2Fxg4fYXDO2OBEmcQ==", - "requires": { - "office-ui-fabric-core": "11.0.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-page-context": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-page-context/-/sp-page-context-1.16.1.tgz", - "integrity": "sha512-JUH35LBI0sgPh2zPvD8bEO6K+G3uBegOfYXu1xQq/vZ3xUbl2WiDUHywKBW2A53mROazPJkC1iszf1auPH+mvA==", - "requires": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-odata-types": "1.16.1", - "tslib": "2.3.1" - } - }, - "@microsoft/sp-property-pane": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-property-pane/-/sp-property-pane-1.16.1.tgz", - "integrity": "sha512-6Gs2v1vLjNZCxW6XFjoznkI5klanxQs4bZLvxWQbmOK4PI1UPfWV0Fiej4d1KgYFAnkIktCIEaiX28vlOFo1jQ==", - "requires": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-component-base": "1.16.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-image-helper": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "office-ui-fabric-react": "^7.199.1", - "react": "17.0.1", - "react-dom": "17.0.1", - "tslib": "2.3.1" - }, - "dependencies": { - "react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.1" - } - } - } - }, - "@microsoft/sp-top-actions": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-top-actions/-/sp-top-actions-1.16.1.tgz", - "integrity": "sha512-VoT6zmqhRRHAB9gFItwG2OMOpE5nfVy6uaNNolHY8Fi42aQlGD2oPOV3Wu7FyowJUtGIASWJrfCC2vFDCAggeA==", - "requires": { - "@microsoft/sp-property-pane": "1.16.1" - } - }, - "@microsoft/sp-webpart-base": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/sp-webpart-base/-/sp-webpart-base-1.16.1.tgz", - "integrity": "sha512-eZ2WvFCOoHiUTavgXjAVyj0IxbxG51zA7hRXAYktOfPshrJAy5NQpPM2zdEqToMX4cNlOnjSaOKrk0cB4PS0HA==", - "requires": { - "@fluentui/react": "^7.199.1", - "@microsoft/sp-component-base": "1.16.1", - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-diagnostics": "1.16.1", - "@microsoft/sp-dynamic-data": "1.16.1", - "@microsoft/sp-http": "1.16.1", - "@microsoft/sp-http-base": "1.16.1", - "@microsoft/sp-loader": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@microsoft/sp-page-context": "1.16.1", - "@microsoft/sp-property-pane": "1.16.1", - "@microsoft/sp-top-actions": "1.16.1", - "@microsoft/teams-js": "1.12.1", - "@microsoft/teams-js-v2": "npm:@microsoft/teams-js@2.4.1", - "@types/office-js": "1.0.36", - "office-ui-fabric-react": "^7.199.1", - "react": "17.0.1", - "react-dom": "17.0.1", - "tslib": "2.3.1" - }, - "dependencies": { - "react": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz", - "integrity": "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.1.tgz", - "integrity": "sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.1" - } - } - } - }, - "@microsoft/spfx-heft-plugins": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@microsoft/spfx-heft-plugins/-/spfx-heft-plugins-1.16.1.tgz", - "integrity": "sha512-2FdsLiw5kD+nJpVDvD5NAdXOvT0wbUY52Xm9n4ZDV2Cnwv9VQFZ2pf2KU4oGYQO1xII3pOhGhc6tEOO+vgCxRQ==", - "dev": true, - "requires": { - "@azure/storage-blob": "~12.11.0", - "@microsoft/loader-load-themed-styles": "1.9.174", - "@microsoft/rush-lib": "5.79.0", - "@microsoft/sp-css-loader": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", - "@rushstack/heft-config-file": "0.11.0", - "@rushstack/localization-utilities": "0.8.25", - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rig-package": "0.3.15", - "@rushstack/set-webpack-public-path-plugin": "3.3.69", - "@rushstack/terminal": "0.3.75", - "@rushstack/webpack4-localization-plugin": "0.15.25", - "@rushstack/webpack4-module-minifier-plugin": "0.9.31", - "@types/tapable": "1.0.6", - "autoprefixer": "9.7.1", - "colors": "~1.2.1", - "copy-webpack-plugin": "~6.0.3", - "css-loader": "~3.2.0", - "cssnano": "~4.1.10", - "express": "4.18.1", - "file-loader": "6.1.0", - "git-repo-info": "~2.1.1", - "glob": "~7.0.5", - "html-loader": "~0.5.1", - "jszip": "3.5.0", - "lodash": "4.17.21", - "mime": "2.5.2", - "postcss-loader": "3.0.0", - "resolve": "~1.17.0", - "sass": "1.44.0", - "sass-loader": "8.0.2", - "source-map": "0.6.1", - "source-map-loader": "1.1.3", - "tapable": "1.1.3", - "true-case-path": "~2.2.1", - "uuid": "~3.1.0", - "webpack": "~4.44.2", - "webpack-dev-server": "~4.9.3", - "webpack-sources": "1.4.3", - "xml": "~1.0.1" - }, - "dependencies": { - "@rushstack/heft-config-file": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.11.0.tgz", - "integrity": "sha512-QyDzzpXIgR5f0Esagm8pV3hlKMmgtV+EJ9RJvMKnWMuj+13FLN0d/ax63NwCRgXfgttpRCmwaJti+igPPsqZfQ==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rig-package": "0.3.15", - "jsonpath-plus": "~4.0.0" - } - }, - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@rushstack/rig-package": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.15.tgz", - "integrity": "sha512-jxVfvO5OnkRlYRhcVDZWvwiI2l4pv37HDJRtyg5HbD8Z/I8Xj32RICgrxS5xMeGGytobrg5S6OfPOHskg7Nw+A==", - "dev": true, - "requires": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" - } - }, - "@rushstack/terminal": { - "version": "0.3.75", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.3.75.tgz", - "integrity": "sha512-2IT6Pv8B2s8cOae2UjFeE1S4JfEQuS3om1AbZAI3wmzTSjEqXKj6m5hPnjDW8Gzbi9gBctcDD6Zj5Oq7afqsyw==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "wordwrap": "~1.0.0" - } - }, - "@rushstack/webpack4-localization-plugin": { - "version": "0.15.25", - "resolved": "https://registry.npmjs.org/@rushstack/webpack4-localization-plugin/-/webpack4-localization-plugin-0.15.25.tgz", - "integrity": "sha512-Drha8bEGrWb+PfX61hQcqcDeAgTs6RZQ+sD7iL1oaR5XnL1F8DSr/BCY3b1JdfKjGz+z5H/sJccbppUITsKawg==", - "dev": true, - "requires": { - "@rushstack/localization-utilities": "0.8.25", - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "@types/tapable": "1.0.6", - "loader-utils": "~1.1.0", - "lodash": "~4.17.15", - "minimatch": "~3.0.3" - } - }, - "@rushstack/webpack4-module-minifier-plugin": { - "version": "0.9.31", - "resolved": "https://registry.npmjs.org/@rushstack/webpack4-module-minifier-plugin/-/webpack4-module-minifier-plugin-0.9.31.tgz", - "integrity": "sha512-LZpqwVChZGBoc0ttdKLe07R2RlIIprYyuZuBkUlXdhhEu8Brob+k8Ign6+kg4fBF9G6W/db2OMSPZ0jh0ipzqw==", - "dev": true, - "requires": { - "@rushstack/module-minifier": "0.1.32", - "@rushstack/worker-pool": "0.1.32", - "@types/node": "12.20.24", - "@types/tapable": "1.0.6", - "tapable": "1.1.3" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "autoprefixer": { - "version": "9.7.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", - "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", - "dev": true, - "requires": { - "browserslist": "^4.7.2", - "caniuse-lite": "^1.0.30001006", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.21", - "postcss-value-parser": "^4.0.2" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "css-loader": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.2.1.tgz", - "integrity": "sha512-q40kYdcBNzMvkIImCL2O+wk8dh+RGwPPV9Dfz3n7XtOYPXqe2Z6VgtvoxjkLHz02gmhepG9sOAJOUlx+3hHsBg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jszip": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", - "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - } - } - } - } - }, - "@microsoft/teams-js": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-1.12.1.tgz", - "integrity": "sha512-BRy6vZOseN9F/MG0NWTojYpenuo9XlZ4AfAvwnsG+C36UDPPgW0skWlZ6ub+7RBPhOHcxz8sNg2uHOdGRebWkQ==" - }, - "@microsoft/teams-js-v2": { - "version": "npm:@microsoft/teams-js@2.4.1", - "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-2.4.1.tgz", - "integrity": "sha512-rHOVt3Duw1HJrsZq0FO09qMGVGI5eg6hkVKIxsuyJQ5WMPaGMAcF5A0QlXBzVwa9cocNyv8JYeMeJAh+svnLnw==", - "requires": { - "debug": "4.3.3" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - } - } - }, - "@microsoft/tsdoc": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", - "dev": true - }, - "@microsoft/tsdoc-config": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", - "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", - "dev": true, - "requires": { - "@microsoft/tsdoc": "0.13.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - }, - "dependencies": { - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@opentelemetry/api": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", - "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==", - "dev": true - }, - "@pnp/core": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-3.13.0.tgz", - "integrity": "sha512-BYOV08daCoH8x36z3MVP7kkjyaKBHWccvkwjjMV7CdRYnFaUQfUnqWPgM8KFzoHIQEH7pGKZmay4Dhlh85abmw==", - "requires": { - "tslib": "2.4.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - } - } - }, - "@pnp/graph": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/graph/-/graph-3.13.0.tgz", - "integrity": "sha512-DPsSIoqbxyWAoaRl7r3IFxzu51SBH3SWtKEO5aH+Cx2hRcDfbZ2q6H9YVAk0I80diHfrvsvaTROmUU7wX/T5fA==", - "requires": { - "@microsoft/microsoft-graph-types": "2.26.0", - "@pnp/core": "3.13.0", - "@pnp/queryable": "3.13.0", - "tslib": "2.4.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - } - } - }, - "@pnp/logging": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/logging/-/logging-3.13.0.tgz", - "integrity": "sha512-2H+cWBPeHvh5uFHfhBlkY1W990uM0xy9sTJ4u/P2Qpt1lLg9Pypdv8BQvG+F2dRWSYeFi6oOHkCypsNkWCQRuQ==", - "requires": { - "tslib": "2.4.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - } - } - }, - "@pnp/queryable": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/queryable/-/queryable-3.13.0.tgz", - "integrity": "sha512-MxdWF+uYMzAP6o/9GHr4rVruLyvBmJ49T8O3hxKgsZfZyVOjk8ckMBTH3XSG+oK2ZnrLOpz0wsFk3Cgq2RVHrw==", - "requires": { - "@pnp/core": "3.13.0", - "tslib": "2.4.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - } - } - }, - "@pnp/sp": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@pnp/sp/-/sp-3.13.0.tgz", - "integrity": "sha512-GYrBMxdhAiJd08XLMzydoyqCNlIL8kr3/C7wLHNfX0yliXSJvDk+EFX46fB35PXTnK9I1FEWx1Zs+DpC6t1Fgw==", - "requires": { - "@pnp/core": "3.13.0", - "@pnp/queryable": "3.13.0", - "tslib": "2.4.1" - }, - "dependencies": { - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - } - } - }, - "@pnpm/error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@pnpm/error/-/error-1.4.0.tgz", - "integrity": "sha512-vxkRrkneBPVmP23kyjnYwVOtipwlSl6UfL+h+Xa3TrABJTz5rYBXemlTsU5BzST8U4pD7YDkTb3SQu+MMuIDKA==", - "dev": true - }, - "@pnpm/link-bins": { - "version": "5.3.25", - "resolved": "https://registry.npmjs.org/@pnpm/link-bins/-/link-bins-5.3.25.tgz", - "integrity": "sha512-9Xq8lLNRHFDqvYPXPgaiKkZ4rtdsm7izwM/cUsFDc5IMnG0QYIVBXQbgwhz2UvjUotbJrvfKLJaCfA3NGBnLDg==", - "dev": true, - "requires": { - "@pnpm/error": "1.4.0", - "@pnpm/package-bins": "4.1.0", - "@pnpm/read-modules-dir": "2.0.3", - "@pnpm/read-package-json": "4.0.0", - "@pnpm/read-project-manifest": "1.1.7", - "@pnpm/types": "6.4.0", - "@zkochan/cmd-shim": "^5.0.0", - "is-subdir": "^1.1.1", - "is-windows": "^1.0.2", - "mz": "^2.7.0", - "normalize-path": "^3.0.0", - "p-settle": "^4.1.1", - "ramda": "^0.27.1" - } - }, - "@pnpm/package-bins": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/package-bins/-/package-bins-4.1.0.tgz", - "integrity": "sha512-57/ioGYLBbVRR80Ux9/q2i3y8Q+uQADc3c+Yse8jr/60YLOi3jcWz13e2Jy+ANYtZI258Qc5wk2X077rp0Ly/Q==", - "dev": true, - "requires": { - "@pnpm/types": "6.4.0", - "fast-glob": "^3.2.4", - "is-subdir": "^1.1.1" - } - }, - "@pnpm/read-modules-dir": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@pnpm/read-modules-dir/-/read-modules-dir-2.0.3.tgz", - "integrity": "sha512-i9OgRvSlxrTS9a2oXokhDxvQzDtfqtsooJ9jaGoHkznue5aFCTSrNZFQ6M18o8hC03QWfnxaKi0BtOvNkKu2+A==", - "dev": true, - "requires": { - "mz": "^2.7.0" - } - }, - "@pnpm/read-package-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/read-package-json/-/read-package-json-4.0.0.tgz", - "integrity": "sha512-1cr2tEwe4YU6SI0Hmg+wnsr6yxBt2iJtqv6wrF84On8pS9hx4A2PLw3CIgbwxaG0b+ur5wzhNogwl4qD5FLFNg==", - "dev": true, - "requires": { - "@pnpm/error": "1.4.0", - "@pnpm/types": "6.4.0", - "load-json-file": "^6.2.0", - "normalize-package-data": "^3.0.2" - } - }, - "@pnpm/read-project-manifest": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@pnpm/read-project-manifest/-/read-project-manifest-1.1.7.tgz", - "integrity": "sha512-tj8ExXZeDcMmMUj7D292ETe/RiEirr1X1wpT6Zy85z2MrFYoG9jfCJpps40OdZBNZBhxbuKtGPWKVSgXD0yrVw==", - "dev": true, - "requires": { - "@pnpm/error": "1.4.0", - "@pnpm/types": "6.4.0", - "@pnpm/write-project-manifest": "1.1.7", - "detect-indent": "^6.0.0", - "fast-deep-equal": "^3.1.3", - "graceful-fs": "4.2.4", - "is-windows": "^1.0.2", - "json5": "^2.1.3", - "parse-json": "^5.1.0", - "read-yaml-file": "^2.0.0", - "sort-keys": "^4.1.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "@pnpm/types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-6.4.0.tgz", - "integrity": "sha512-nco4+4sZqNHn60Y4VE/fbtlShCBqipyUO+nKRPvDHqLrecMW9pzHWMVRxk4nrMRoeowj3q0rX3GYRBa8lsHTAg==", - "dev": true - }, - "@pnpm/write-project-manifest": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@pnpm/write-project-manifest/-/write-project-manifest-1.1.7.tgz", - "integrity": "sha512-OLkDZSqkA1mkoPNPvLFXyI6fb0enCuFji6Zfditi/CLAo9kmIhQFmEUDu4krSB8i908EljG8YwL5Xjxzm5wsWA==", - "dev": true, - "requires": { - "@pnpm/types": "6.4.0", - "json5": "^2.1.3", - "mz": "^2.7.0", - "write-file-atomic": "^3.0.3", - "write-yaml-file": "^4.1.3" - } - }, - "@rushstack/debug-certificate-manager": { - "version": "1.1.84", - "resolved": "https://registry.npmjs.org/@rushstack/debug-certificate-manager/-/debug-certificate-manager-1.1.84.tgz", - "integrity": "sha512-GondfbezgkjT9U6WdMRdjJMkkYkUf/w2YiFKX2wUrmXyNmoApzpu8fXC3sDHb2LXKR7MvBNDY5YrpLooEYJhUg==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.53.2", - "node-forge": "~1.3.1", - "sudo": "~1.0.3" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.53.2", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.2.tgz", - "integrity": "sha512-FggLe5DQs0X9MNFeJN3/EXwb+8hyZUTEp2i+V1e8r4Va4JgkjBNY0BuEaQI+3DW6S4apV3UtXU3im17MSY00DA==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/eslint-config": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-config/-/eslint-config-2.5.1.tgz", - "integrity": "sha512-pcDQ/fmJEIqe5oZiP84bYZ1N7QoDfd+5G+e7GIobOwM793dX/SdRKqcJvGlzyBB92eo6rG7/qRnP2VVQN2pdbQ==", - "dev": true, - "requires": { - "@rushstack/eslint-patch": "1.1.0", - "@rushstack/eslint-plugin": "0.8.4", - "@rushstack/eslint-plugin-packlets": "0.3.4", - "@rushstack/eslint-plugin-security": "0.2.4", - "@typescript-eslint/eslint-plugin": "~5.6.0", - "@typescript-eslint/experimental-utils": "~5.6.0", - "@typescript-eslint/parser": "~5.6.0", - "@typescript-eslint/typescript-estree": "~5.6.0", - "eslint-plugin-promise": "~6.0.0", - "eslint-plugin-react": "~7.27.1", - "eslint-plugin-tsdoc": "~0.2.14" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz", - "integrity": "sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.6.0", - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/typescript-estree": "5.6.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", - "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", - "dev": true - }, - "@rushstack/eslint-plugin": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin/-/eslint-plugin-0.8.4.tgz", - "integrity": "sha512-c8cY9hvak+1EQUGlJxPihElFB/5FeQCGyULTGRLe5u6hSKKtXswRqc23DTo87ZMsGd4TaScPBRNKSGjU5dORkg==", - "dev": true, - "requires": { - "@rushstack/tree-pattern": "0.2.2", - "@typescript-eslint/experimental-utils": "~5.3.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" - } - }, - "@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "eslint-visitor-keys": "^3.0.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - } - } - }, - "@rushstack/eslint-plugin-packlets": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-packlets/-/eslint-plugin-packlets-0.3.4.tgz", - "integrity": "sha512-OSA58EZCx4Dw15UDdvNYGGHziQmhiozKQiOqDjn8ZkrCM3oyJmI6dduSJi57BGlb/C4SpY7+/88MImId7Y5cxA==", - "dev": true, - "requires": { - "@rushstack/tree-pattern": "0.2.2", - "@typescript-eslint/experimental-utils": "~5.3.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" - } - }, - "@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "eslint-visitor-keys": "^3.0.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - } - } - }, - "@rushstack/eslint-plugin-security": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-plugin-security/-/eslint-plugin-security-0.2.4.tgz", - "integrity": "sha512-MWvM7H4vTNHXIY/SFcFSVgObj5UD0GftBM8UcIE1vXrPwdVYXDgDYXrSXdx7scWS4LYKPLBVoB3v6/Trhm2wug==", - "dev": true, - "requires": { - "@rushstack/tree-pattern": "0.2.2", - "@typescript-eslint/experimental-utils": "~5.3.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" - } - }, - "@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.3.1", - "eslint-visitor-keys": "^3.0.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - } - } - }, - "@rushstack/heft-config-file": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@rushstack/heft-config-file/-/heft-config-file-0.10.0.tgz", - "integrity": "sha512-+vKbbNSEqZZpnWgH6QazoAOD9l2BEEW4ldTXAdHOr2HFfmT+debTqqib4t4c48+CroSeLcC1j3CwDzv5tBAxYg==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rig-package": "0.3.15", - "jsonpath-plus": "~4.0.0" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@rushstack/rig-package": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.3.15.tgz", - "integrity": "sha512-jxVfvO5OnkRlYRhcVDZWvwiI2l4pv37HDJRtyg5HbD8Z/I8Xj32RICgrxS5xMeGGytobrg5S6OfPOHskg7Nw+A==", - "dev": true, - "requires": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/loader-raw-script": { - "version": "1.3.260", - "resolved": "https://registry.npmjs.org/@rushstack/loader-raw-script/-/loader-raw-script-1.3.260.tgz", - "integrity": "sha512-BMn1kYvEzZ3aYBWnmDpEtExhlfu72YB9IXvMqbIec7r3LNbxdGnoqU94YYCuGNzXQqtuo+90FtlEHE1+5laWdQ==", - "requires": { - "loader-utils": "~1.1.0" - } - }, - "@rushstack/localization-utilities": { - "version": "0.8.25", - "resolved": "https://registry.npmjs.org/@rushstack/localization-utilities/-/localization-utilities-0.8.25.tgz", - "integrity": "sha512-8LfAEisUTuCrIzgXdO7brZOP33EuKtmoR4jp6jXENDrm55ym9LOUvCHvv6nGEg0X2qhOeDrUT0Qf5/XUU+XfWg==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/typings-generator": "0.8.1", - "pseudolocale": "~1.1.0", - "xmldoc": "~1.1.2" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/module-minifier": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@rushstack/module-minifier/-/module-minifier-0.1.32.tgz", - "integrity": "sha512-l5hkU/bK8fQuTEP+lXG9n44wuCQMt+AAzH6v88qzmwd60Y/Vc/aHdOu82TpuhhYdYKlvzSC1kn1fm5aGtRvplw==", - "dev": true, - "requires": { - "@rushstack/worker-pool": "0.1.32", - "@types/node": "12.20.24", - "serialize-javascript": "6.0.0", - "source-map": "~0.7.3", - "terser": "5.9.0" - }, - "dependencies": { - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - } - } - } - }, - "@rushstack/node-core-library": { - "version": "3.44.3", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.44.3.tgz", - "integrity": "sha512-Bt+R5LAnVr2BImTJqPpton5rvhJ2Wq8x4BaTqaCHQMmfxqtz5lb4nLYT9kneMJTCDuRMBvvLpSuz4MBj50PV3w==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "timsort": "~0.3.0", - "z-schema": "~5.0.2" - }, - "dependencies": { - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/package-deps-hash": { - "version": "3.2.51", - "resolved": "https://registry.npmjs.org/@rushstack/package-deps-hash/-/package-deps-hash-3.2.51.tgz", - "integrity": "sha512-UvbHA/2DpaEDsPmqsoW+RAYu6NhT56KptlBV/2LEeN3IyOvoSexjcG4U/7fbbJIv+ojzlf0r2/oP4C7zzzTJSQ==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/rig-package": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.2.12.tgz", - "integrity": "sha512-nbePcvF8hQwv0ql9aeQxcaMPK/h1OLAC00W7fWCRWIvD2MchZOE8jumIIr66HGrfG2X1sw++m/ZYI4D+BM5ovQ==", - "dev": true, - "requires": { - "resolve": "~1.17.0", - "strip-json-comments": "~3.1.1" - } - }, - "@rushstack/rush-amazon-s3-build-cache-plugin": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@rushstack/rush-amazon-s3-build-cache-plugin/-/rush-amazon-s3-build-cache-plugin-5.79.0.tgz", - "integrity": "sha512-S+3Ta2dCRB3iyU4WSkTdeztbVfGol0nlhnT7vFfoSfDwAtoBymw3rUhLhA133OvDFPZXzF34c6JUlf5vs+VGkA==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rush-sdk": "5.79.0", - "https-proxy-agent": "~5.0.0", - "node-fetch": "2.6.7" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/rush-azure-storage-build-cache-plugin": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@rushstack/rush-azure-storage-build-cache-plugin/-/rush-azure-storage-build-cache-plugin-5.79.0.tgz", - "integrity": "sha512-F7e1P1T9kXXoNa7HRx1VBLjgbUtr4gNPqM53+qH1KA18GFeAY8vsO1TokeWubfGs376KC6bbE5rVWb3k5x+VZw==", - "dev": true, - "requires": { - "@azure/identity": "~2.1.0", - "@azure/storage-blob": "~12.11.0", - "@rushstack/node-core-library": "3.52.0", - "@rushstack/rush-sdk": "5.79.0", - "@rushstack/terminal": "0.3.74" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/rush-sdk": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/@rushstack/rush-sdk/-/rush-sdk-5.79.0.tgz", - "integrity": "sha512-32Z8mmVfhRBxsnzRKGv3YU8Jx6QbllqFkII1pV+t0OAPVaWXggLLRmXYZnUHWp6g8/qASFRqtE8fuUHEwp9Fxg==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@types/node-fetch": "1.6.9", - "tapable": "2.2.1" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/set-webpack-public-path-plugin": { - "version": "3.3.69", - "resolved": "https://registry.npmjs.org/@rushstack/set-webpack-public-path-plugin/-/set-webpack-public-path-plugin-3.3.69.tgz", - "integrity": "sha512-8TFam4rhzwclWKrxvr5yLwmoL9Pk5vgf0v/ogxEYMr7G2pHhmZIYVePHShO3YnPWvbsIcRhmtu/afY1zg+PvZg==", - "dev": true, - "requires": { - "@rushstack/webpack-plugin-utilities": "0.1.36" - } - }, - "@rushstack/stream-collator": { - "version": "4.0.205", - "resolved": "https://registry.npmjs.org/@rushstack/stream-collator/-/stream-collator-4.0.205.tgz", - "integrity": "sha512-FbZDCLMwGFiOVP16U40Do+EjCFzbpIZNpbkihyEMsp6o8FGdS5At3DNLPKPgYLqyiSCxPxvA2a6bMr4yNDVtlA==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@rushstack/terminal": "0.3.74" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/terminal": { - "version": "0.3.74", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.3.74.tgz", - "integrity": "sha512-TXaHzq7HS0qickNjzAAZBhdWQwPaNtL4snJx+SKb3d6NxA+dWm+Tx0hIyo5CSgsTyLa0VD/9BBCDGJ3n1Qqbdw==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/tree-pattern": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@rushstack/tree-pattern/-/tree-pattern-0.2.2.tgz", - "integrity": "sha512-0KdqI7hGtVIlxobOBLWet0WGiD70V/QoYQr5A2ikACeQmIaN4WT6Fn9BcvgwgaSIMcazEcD8ql7Fb9N4dKdQlA==", - "dev": true - }, - "@rushstack/ts-command-line": { - "version": "4.7.10", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.7.10.tgz", - "integrity": "sha512-8t042g8eerypNOEcdpxwRA3uCmz0duMo21rG4Z2mdz7JxJeylDmzjlU3wDdef2t3P1Z61JCdZB6fbm1Mh0zi7w==", - "dev": true, - "requires": { - "@types/argparse": "1.0.38", - "argparse": "~1.0.9", - "colors": "~1.2.1", - "string-argv": "~0.3.1" - } - }, - "@rushstack/typings-generator": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@rushstack/typings-generator/-/typings-generator-0.8.1.tgz", - "integrity": "sha512-K0KtbA7HNAzZaf4A8olDhlX9stwA+CFrG7PTlmw3sZq3UWXZzbEu2ExG1LemMqjpsDwgDWbLHYCFTlU+KJoXyQ==", - "dev": true, - "requires": { - "@rushstack/node-core-library": "3.52.0", - "@types/node": "12.20.24", - "chokidar": "~3.4.0", - "glob": "~7.0.5" - }, - "dependencies": { - "@rushstack/node-core-library": { - "version": "3.52.0", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.52.0.tgz", - "integrity": "sha512-Z+MAP//G3rEGZd3JxJcBGcPYJlh8pvPoLMTLa5Sy6FTE6hRPzN+5J8DT7BbTmlqZaL6SZpXF30heRUbnYOvujw==", - "dev": true, - "requires": { - "@types/node": "12.20.24", - "colors": "~1.2.1", - "fs-extra": "~7.0.1", - "import-lazy": "~4.0.0", - "jju": "~1.4.0", - "resolve": "~1.17.0", - "semver": "~7.3.0", - "z-schema": "~5.0.2" - } - }, - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "optional": true - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "requires": { - "commander": "^9.4.1", - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - } - } - } - }, - "@rushstack/webpack-plugin-utilities": { - "version": "0.1.36", - "resolved": "https://registry.npmjs.org/@rushstack/webpack-plugin-utilities/-/webpack-plugin-utilities-0.1.36.tgz", - "integrity": "sha512-Q58FIZ1rTCPtcQltWUtGrHK8vo0plZL74IMHD/5DK1AM6/sf2xisNJZi2gZtl9Brg8OAJTlZkSp6uoLScXE7Ew==", - "dev": true, - "requires": {} - }, - "@rushstack/worker-pool": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/@rushstack/worker-pool/-/worker-pool-0.1.32.tgz", - "integrity": "sha512-HtajFVo6OPnYGT9eP0QOVwoP3AdNwvEnlQ/bkgLdY8oLuDqxx2vywO3qW7rA5OqRSH4GQyIwBf1LVVSslisZ3A==", - "dev": true, - "requires": { - "@types/node": "12.20.24" - }, - "dependencies": { - "@types/node": { - "version": "12.20.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.24.tgz", - "integrity": "sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ==", - "dev": true - } - } - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@types/anymatch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-3.0.0.tgz", - "integrity": "sha512-qLChUo6yhpQ9k905NwL74GU7TxH+9UODwwQ6ICNI+O6EDMExqH/Cv9NsbmcZ7yC/rRXJ/AHCzfgjsFRY5fKjYw==", - "dev": true, - "requires": { - "anymatch": "*" - } - }, - "@types/argparse": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", - "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", - "dev": true - }, - "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha512-nF0fisEPYMIyfrFgabFimsz9Lnuu9MwkNrrlATm2E4E46afKDyeelT+8bXfw1VSc7sLBxMxRgT7PxTC2JcqN4Q==", - "dev": true - }, - "@types/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A==", - "requires": { - "classnames": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", - "dev": true, - "peer": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true, - "peer": true - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/glob": { - "version": "5.0.30", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.30.tgz", - "integrity": "sha512-ZM05wDByI+WA153sfirJyEHoYYoIuZ7lA2dB/Gl8ymmpMTR78fNRtDMqa7Z6SdH4fZdLWZNRE6mZpx3XqBOrHw==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/glob-stream": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.1.tgz", - "integrity": "sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/gulp": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.6.tgz", - "integrity": "sha512-0E8/iV/7FKWyQWSmi7jnUvgXXgaw+pfAzEB06Xu+l0iXVJppLbpOye5z7E2klw5akXd+8kPtYuk65YBcZPM4ow==", - "dev": true, - "requires": { - "@types/undertaker": "*", - "@types/vinyl-fs": "*", - "chokidar": "^2.1.2" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "@types/http-proxy": { - "version": "1.17.10", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", - "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.1.tgz", - "integrity": "sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==", - "dev": true, - "requires": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.117", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.117.tgz", - "integrity": "sha512-xyf2m6tRbz8qQKcxYZa7PA4SllYcay+eh25DN3jmNYY6gSTL7Htc/bttVdkqj2wfJGbeWlQiX8pIyJpKU+tubw==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "@types/node": { - "version": "10.17.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", - "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==", - "dev": true - }, - "@types/node-fetch": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-1.6.9.tgz", - "integrity": "sha512-n2r6WLoY7+uuPT7pnEtKJCmPUGyJ+cbyBR8Avnu4+m1nzz7DwBVuyIvvlBzCZ/nrpC7rIgb3D6pNavL7rFEa9g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@types/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-5v0PhPv0AManpxT7W25Zipmj/Lxp1WqfkcpZHyqSloB+gGoAHRBuzhrCelFKrPvNF5ki3gAcO4kxaGO2/21u8g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/office-js": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/@types/office-js/-/office-js-1.0.36.tgz", - "integrity": "sha512-v5jOXCPS0nbbuVzZThhDMzttuJrpzzvx1GsPo5Qed8Cs9uzMwEV1vdkKN5zLFnAUlEF4s8Szl9KXnhnSvH89Kw==" - }, - "@types/orchestrator": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/orchestrator/-/orchestrator-0.0.30.tgz", - "integrity": "sha512-rT9So631KbmirIGsZ5m6T15FKHqiWhYRULdl03l/WBezzZ8wwhYTS2zyfHjsvAGYFVff1wtmGFd0akRCBDSZrA==", - "dev": true, - "requires": { - "@types/q": "*" - } - }, - "@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "peer": true - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/react": { - "version": "17.0.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.56.tgz", - "integrity": "sha512-Z13f9Qz7Hg8f2g2NsBjiJSVWmON2b3K8RIqFK8mMKCIgvD0CD0ZChTukz87H3lI28X3ukXoNFGzo3ZW1ICTtPA==", - "peer": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", - "peer": true, - "requires": { - "@types/react": "^17" - } - }, - "@types/requirejs": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.29.tgz", - "integrity": "sha512-61MNgoBY6iEsHhFGiElSjEu8HbHOahJLGh9BdGSfzgAN+2qOuFJKuG3f7F+/ggKr+0yEM3Y4fCWAgxU6es0otg==" - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/rimraf": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.5.tgz", - "integrity": "sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "peer": true - }, - "@types/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-iotVxtCCsPLRAvxMFFgxL8HD2l4mAZ2Oin7/VJ2ooWO0VOK4EGOGmZWZn1uCq7RofR3I/1IOSjCHlFT71eVK0Q==", - "dev": true - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", - "dev": true - }, - "@types/through2": { - "version": "2.0.32", - "resolved": "https://registry.npmjs.org/@types/through2/-/through2-2.0.32.tgz", - "integrity": "sha512-VYclBauj55V0qPDHs9QMdKBdxdob6zta8mcayjTyOzlRgl+PNERnvNol99W1PBnvQXaYoTTqSce97rr9dz9oXQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/tunnel": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", - "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/undertaker": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.8.tgz", - "integrity": "sha512-gW3PRqCHYpo45XFQHJBhch7L6hytPsIe0QeLujlnFsjHPnXLhJcPdN6a9368d7aIQgH2I/dUTPFBlGeSNA3qOg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/undertaker-registry": "*", - "async-done": "~1.3.2" - } - }, - "@types/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==", - "dev": true - }, - "@types/vinyl": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.3.tgz", - "integrity": "sha512-hrT6xg16CWSmndZqOTJ6BGIn2abKyTw0B58bI+7ioUoj3Sma6u8ftZ1DTI2yCaJamOVGLOnQWiPH3a74+EaqTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/vinyl-fs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.1.tgz", - "integrity": "sha512-me2Gcxw23pZp62oqPoiTDDMz/txEmtEZzXM/D/VTr+xUX4LiNA+nQPs38SSPu5KHnsaEER4HEtzWU5qJRXigfA==", - "dev": true, - "requires": { - "@types/glob-stream": "*", - "@types/node": "*", - "@types/rimraf": "^2.0.3", - "@types/vinyl": "*" - } - }, - "@types/webpack": { - "version": "4.41.24", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.24.tgz", - "integrity": "sha512-1A0MXPwZiMOD3DPMuOKUKcpkdPo8Lq33UGggZ7xio6wJ/jV1dAu5cXDrOfGDnldUroPIRLsr/DT43/GqOA4RFQ==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - } - }, - "@types/webpack-env": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.15.3.tgz", - "integrity": "sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ==", - "dev": true - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-0.0.34.tgz", - "integrity": "sha512-Rrj9a2bqpcPKGYCIyQGkD24PeCZG3ow58cgaAtI4jwsUMe/9hDaCInMpXZ+PaUK3cVwsFUstpOEkSfMdQpCnYA==", - "dev": true - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.6.0.tgz", - "integrity": "sha512-MIbeMy5qfLqtgs1hWd088k1hOuRsN9JrHUPwVVKCD99EOUqScd7SrwoZl4Gso05EAP9w1kvLWUVGJOVpRPkDPA==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.6.0", - "@typescript-eslint/scope-manager": "5.6.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.6.0.tgz", - "integrity": "sha512-VDoRf3Qj7+W3sS/ZBXZh3LBzp0snDLEgvp6qj0vOAIiAPM07bd5ojQ3CTzF/QFl5AKh7Bh1ycgj6lFBJHUt/DA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.6.0", - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/typescript-estree": "5.6.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.30.7.tgz", - "integrity": "sha512-r218ZVL0zFBYzEq8/9K2ZhRgsmKUhm8xd3sWChgvTbmP98kHGuY83IUl64SS9fx9OSBM9vMLdzBfox4eDdm/ZQ==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.7" - } - }, - "@typescript-eslint/parser": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.6.0.tgz", - "integrity": "sha512-YVK49NgdUPQ8SpCZaOpiq1kLkYRPMv9U5gcMrywzI8brtwZjr/tG3sZpuHyODt76W/A0SufNjYt9ZOgrC4tLIQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.6.0", - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/typescript-estree": "5.6.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.6.0.tgz", - "integrity": "sha512-1U1G77Hw2jsGWVsO2w6eVCbOg0HZ5WxL/cozVSTfqnL/eB9muhb8THsP0G3w+BB5xAHv9KptwdfYFAUfzcIh4A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/visitor-keys": "5.6.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz", - "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.30.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.6.0.tgz", - "integrity": "sha512-OIZffked7mXv4mXzWU5MgAEbCf9ecNJBKi+Si6/I9PpTaj+cf2x58h2oHW5/P/yTnPkKaayfjhLvx+crnl5ubA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.6.0.tgz", - "integrity": "sha512-92vK5tQaE81rK7fOmuWMrSQtK1IMonESR+RJR2Tlc7w4o0MeEdjgidY/uO2Gobh7z4Q1hhS94Cr7r021fMVEeA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.6.0", - "@typescript-eslint/visitor-keys": "5.6.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - } - } - }, - "@typescript-eslint/utils": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz", - "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.7", - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/typescript-estree": "5.30.7", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz", - "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7" - } - }, - "@typescript-eslint/types": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz", - "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz", - "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "@typescript-eslint/visitor-keys": "5.30.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.30.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz", - "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.30.7", - "eslint-visitor-keys": "^3.3.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.6.0.tgz", - "integrity": "sha512-1p7hDp5cpRFUyE3+lvA74egs+RWSgumrBpzBCDzfTFv0aQ7lIeay80yU0hIxgAhwQ6PcasW35kaOCyDOv6O/Ng==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.6.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "@uifabric/foundation": { - "version": "7.10.16", - "resolved": "https://registry.npmjs.org/@uifabric/foundation/-/foundation-7.10.16.tgz", - "integrity": "sha512-x13xS9aKh6FEWsyQP2jrjyiXmUUdgyuAfWKMLhUTK4Rsc+vJANwwVk4fqGsU021WA6pghcIirvEVpWf5MlykDQ==", - "requires": { - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@uifabric/icons": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@uifabric/icons/-/icons-7.9.5.tgz", - "integrity": "sha512-0e2fEURtR7sNqoGr9gU/pzcOp24B/Lkdc05s1BSnIgXlaL2QxRszfaEsl3/E9vsNmqA3tvRwDJWbtRolDbjCpQ==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@uifabric/merge-styles": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@uifabric/merge-styles/-/merge-styles-7.20.2.tgz", - "integrity": "sha512-cJy8hW9smlWOKgz9xSDMCz/A0yMl4mdo466pcGlIOn84vz+e94grfA7OoTuTzg3Cl0Gj6ODBSf1o0ZwIXYL1Xg==", - "requires": { - "@uifabric/set-version": "^7.0.24", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@uifabric/react-hooks": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@uifabric/react-hooks/-/react-hooks-7.16.4.tgz", - "integrity": "sha512-k8RJYTMICWA6varT5Y+oCf2VDHHXN0tC2GuPD4I2XqYCTLaXtNCm4+dMcVA2x8mv1HIO7khvm/8aqKheU/tDfQ==", - "requires": { - "@fluentui/react-window-provider": "^1.0.6", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@uifabric/set-version": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/@uifabric/set-version/-/set-version-7.0.24.tgz", - "integrity": "sha512-t0Pt21dRqdC707/ConVJC0WvcQ/KF7tKLU8AZY7YdjgJpMHi1c0C427DB4jfUY19I92f60LOQyhJ4efH+KpFEg==", - "requires": { - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@uifabric/styling": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@uifabric/styling/-/styling-7.25.1.tgz", - "integrity": "sha512-bd4QDYyb0AS0+KmzrB8VsAfOkxZg0dpEpF1YN5Ben10COmT8L1DoE4bEF5NvybHEaoTd3SKxpJ42m+ceNzehSw==", - "requires": { - "@fluentui/theme": "^1.7.13", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "@uifabric/utilities": "^7.38.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@uifabric/utilities": { - "version": "7.38.2", - "resolved": "https://registry.npmjs.org/@uifabric/utilities/-/utilities-7.38.2.tgz", - "integrity": "sha512-5yM4sm142VEBg3/Q5SFheBXqnrZi9CNF5rjHNoex0GgGtG3AHPuS7U8gjm+/Io1MvbuCrn6lyyIw0MDvh1Ebkw==", - "requires": { - "@fluentui/dom-utilities": "^1.1.2", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/set-version": "^7.0.24", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - } - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - } - } - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "peer": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "peer": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true, - "peer": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - }, - "dependencies": { - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - } - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.0.2.tgz", - "integrity": "sha512-MqJ00WXw89ga0rK6GZkdmmgv3bAsxpJixyTthjcix73O44pBqotyU2BejBkLuIsaOBI6SEu77vAnSyLe5iIHkw==", - "dev": true - }, - "@zkochan/cmd-shim": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-5.4.1.tgz", - "integrity": "sha512-odWb1qUzt0dIOEUPyWBEpFDYQPRjEMr/dbHHAfgBkVkYR9aO7Zo+I7oYWrXIxl+cKlC7+49ftPm8uJxL1MA9kw==", - "dev": true, - "requires": { - "cmd-extension": "^1.0.2", - "graceful-fs": "^4.2.10", - "is-windows": "^1.0.2" - } - }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - } - } - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peer": true, - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "adal-angular": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/adal-angular/-/adal-angular-1.0.16.tgz", - "integrity": "sha512-tJf2bRwolKA8/J+wcy4CFOTAva8gpueHplptfjz3Wt1XOb7Y1jnwdm2VdkFZQUhxCtd/xPvcRSAQP2+ROtAD5g==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", - "dev": true - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - } - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", - "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", - "dev": true, - "requires": { - "async-done": "^1.2.2" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "babel-jest": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", - "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", - "dev": true, - "requires": { - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-jest-hoist": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", - "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz", - "integrity": "sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", - "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^25.5.0", - "babel-preset-current-node-syntax": "^0.1.2" - } - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", - "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", - "dev": true - }, - "better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", - "dev": true, - "requires": { - "is-windows": "^1.0.0" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true - } - } - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001474", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz", - "integrity": "sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", - "dev": true, - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "cmd-extension": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cmd-extension/-/cmd-extension-1.0.2.tgz", - "integrity": "sha512-iWDjmP8kvsMdBmLTHxFaqXikO8EdFRDfim7k6vUHglY/2xJ5jLrPsnQGijdfp4U+sr/BeecG0wKm02dSIAeQ1g==", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "devOptional": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "connect-livereload": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", - "integrity": "sha512-3KnRwsWf4VmP01I4hCDQqTc4e2UxOvJIi8i08GiwqX2oymzxNFY7PqjFkwHglYTJ0yzUJkO5yqdPxVaIz3Pbug==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "dev": true - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, - "copy-webpack-plugin": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.4.tgz", - "integrity": "sha512-zCazfdYAh3q/O4VzZFiadWGpDA2zTs6FC6D7YTHD6H1J40pzo0H4z22h1NYMCl4ArQP4CK8y/KWqPrJ4rVkZ5A==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-modules-loader-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", - "integrity": "sha512-XWOBwgy5nwBn76aA+6ybUGL/3JBnCtBX9Ay9/OWIpzKYWlVHMazvJ+WtHumfi+xxdPF440cWK7JCYtt8xDifew==", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.1", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true - }, - "postcss": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", - "integrity": "sha512-VbGX1LQgQbf9l3cZ3qbUuC3hGqIEOGQFHAEHQ/Diaeo0yLgpgK5Rb8J+OcamIfQ9PbAU/fzBjVtQX3AhJHUvZw==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", - "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "peer": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true - }, - "decomment": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.5.tgz", - "integrity": "sha512-h0TZ8t6Dp49duwyDHo3iw67mnh9/UpFiSSiOb5gDK1sqoXzrfX/SQxIUQd2R2QEiSnqib0KF2fnKnGfAhAs6lg==", - "dev": true, - "requires": { - "esprima": "4.0.1" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "requires": { - "kind-of": "^5.0.2" - } - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - } - } - }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", - "dev": true - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz", - "integrity": "sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.350", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.350.tgz", - "integrity": "sha512-XnXcWpVnOfHZ4C3NPiL+SubeoGV8zc/pg8GEubRtc1dPA/9jKS2vsOPmtClJHhWxUb2RSGC1OBLCbgNUJMtZPw==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "end-of-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz", - "integrity": "sha512-EoulkdKF/1xa92q25PbjuDcgJ9RDHYU2Rs3SCIvs2/dSQ3BpmxneNHmA/M7fe60M3PrV7nNGTTNbkK62l6vXiQ==", - "dev": true, - "requires": { - "once": "~1.3.0" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", - "dev": true, - "requires": { - "wrappy": "1" - } - } - } - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true, - "peer": true - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha512-sziUVwcvQ+lOsrTyUY0Q11ilAPj+dy7AQ1E1MgSaHTaaAFTffaa08QSlGNU61iyVaroyb6nYdBV6oD7nzn6i8w==", - "dev": true, - "requires": { - "recast": "~0.11.12", - "through": "~2.3.6" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==", - "dev": true, - "peer": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.37.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "peer": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "peer": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "peer": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "peer": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "peer": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-promise": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", - "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", - "dev": true, - "requires": {} - }, - "eslint-plugin-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz", - "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-tsdoc": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", - "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", - "dev": true, - "requires": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "0.16.2" - }, - "dependencies": { - "@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", - "dev": true - }, - "@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", - "dev": true, - "requires": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", - "dev": true - }, - "espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "event-stream": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", - "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "execa": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", - "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", - "dev": true, - "requires": { - "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", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.0.tgz", - "integrity": "sha512-26qPdHyTsArQ6gU4P1HJbAbnFTyT2r0pG7czh1GFAd9TZbj0n94wWbupgixZH/ET/meqi2/5+F7DhW4OAXD+Lg==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.1" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "fork-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "integrity": "sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "generic-names": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", - "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-repo-info": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", - "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==", - "dev": true - }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha512-f8c0rE8JiCxpa52kWPAOa3ZaYEnzofDzCQLCn3Vdk0Z5OVLq3BsRFJI4S4ykpeVW6QMGBUkMeUpoEgWnMTnw5Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-escape": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/glob-escape/-/glob-escape-0.0.2.tgz", - "integrity": "sha512-L/cXYz8x7qer1HAyUQ+mbjcUsJVdpRxpAf7CwqHoNBs9vTpABlGfNN4tzkDxt+u3Z7ZncVyKlCNPtzb0R/7WbA==", - "dev": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true - }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true, - "peer": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - } - }, - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - }, - "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - } - } - }, - "gulp-connect": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/gulp-connect/-/gulp-connect-5.5.0.tgz", - "integrity": "sha512-oRBLjw/4EVaZb8g8OcxOVdGD8ZXYrRiWKcNxlrGjxb/6Cp0GDdqw7ieX7D8xJrQS7sbXT+G94u63pMJF3MMjQA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "connect": "^3.6.5", - "connect-livereload": "^0.5.4", - "event-stream": "^3.3.2", - "fancy-log": "^1.3.2", - "send": "^0.13.2", - "serve-index": "^1.9.1", - "serve-static": "^1.13.1", - "tiny-lr": "^0.2.1" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha512-Mbv5pNpLNPrm1b4rzZlZlfTRpdDr31oiD43N362sIyvSWVNu5Du33EcJGzvEV4YdYLuENB1HzND907cQkFmXNw==", - "dev": true - }, - "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha512-akx5WBKAwMSg36qoHTuMMVncHWctlaDGslJASDYAhoLrzDUDCjZlOngNa/iC6lPm9aA0qk8pN5KnpmbJHSIIQQ==", - "dev": true - }, - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha512-gMygNskMurDCWfoCdyh1gOeDfSbkAHXqz94QoPj5IHIUjC/BG8/xv7FSEUr7waR5RcAya4j58bft9Wu/wHNeXA==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha512-sAaYXszED5ALBt665F0wMQCUXpGuZsGdopoqcHPdL39ZYdi7uHoZlhrfZfhv8WzivhBzr/oXwaj+yiK5wY8MXQ==", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", - "dev": true - }, - "range-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", - "integrity": "sha512-nDsRrtIxVUO5opg/A8T2S3ebULVIfuh8ECbh4w3N4mWxIiT3QILDJDUQayPqm2e8Q8NUa0RSUkGCfe33AfjR3Q==", - "dev": true - }, - "send": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", - "integrity": "sha512-cQ0rmXHrdO2Iof08igV2bG/yXWD106ANwBg6DkGQNT2Vsznbgq6T0oAIQboy1GoFsIuy51jCim26aA9tj3Z3Zg==", - "dev": true, - "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", - "destroy": "~1.0.4", - "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" - } - }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha512-pVEuxHdSGrt8QmQ3LOZXLhSA6MP/iPqKzZeO6Squ7PNGkA/9MBsSfV0/L+bIxkoDmjF4tZcLpcVq/fkqoHvuKg==", - "dev": true - } - } - }, - "gulp-flatten": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.2.0.tgz", - "integrity": "sha512-8kKeBDfHGx0CEWoB6BPh5bsynUG2VGmSz6hUlX531cfDz/+PRYZa9i3e3+KYuaV0GuCsRZNThSRjBfHOyypy8Q==", - "dev": true, - "requires": { - "gulp-util": "^3.0.1", - "through2": "^2.0.0" - } - }, - "gulp-if": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", - "integrity": "sha512-tV0UfXkZodpFq6CYxEqH8tqLQgN6yR9qOhpEEN3O6N5Hfqk3fFLcbAavSex5EqnmoQjyaZ/zvgwclvlTI1KGfw==", - "dev": true, - "requires": { - "gulp-match": "^1.0.3", - "ternary-stream": "^2.0.1", - "through2": "^2.0.1" - } - }, - "gulp-match": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.1.0.tgz", - "integrity": "sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.3" - } - }, - "gulp-open": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gulp-open/-/gulp-open-3.0.1.tgz", - "integrity": "sha512-dohokw+npnt48AsD0hhvCLEHLnDMqM35F+amvIfJlX1H2nNHYUClR0Oy1rI0TvbL1/pHiHGNLmohhk+kvwIKjA==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "opn": "5.2.0", - "plugin-log": "^0.1.0", - "through2": "^2.0.1" - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - } - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", - "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", - "dev": true, - "requires": { - "es6-templates": "^0.2.3", - "fastparse": "^1.1.1", - "html-minifier": "^3.5.8", - "loader-utils": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", - "dev": true - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, - "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true - } - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true - } - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inpath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inpath/-/inpath-1.0.2.tgz", - "integrity": "sha512-DTt55ovuYFC62a8oJxRjV2MmTPUdxN43Gd8I2ZgawxbAha6PvJkDQy/RbZGFCJF5IXrpp4PAYtW1w3aV7jXkew==", - "dev": true - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "dev": true - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - }, - "dependencies": { - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - } - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "peer": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", - "dev": true, - "requires": { - "better-path-resolve": "1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "requires": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-25.4.0.tgz", - "integrity": "sha512-XWipOheGB4wai5JfCYXd6vwsWNwM/dirjRoZgAa7H2wd8ODWbli2AiKjqG8AYhyx+8+5FBEdpO92VhGlBydzbw==", - "dev": true, - "requires": { - "@jest/core": "^25.4.0", - "import-local": "^3.0.2", - "jest-cli": "^25.4.0" - } - }, - "jest-changed-files": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-25.5.0.tgz", - "integrity": "sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "execa": "^3.2.0", - "throat": "^5.0.0" - } - }, - "jest-cli": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-25.4.0.tgz", - "integrity": "sha512-usyrj1lzCJZMRN1r3QEdnn8e6E6yCx/QN7+B1sLoA68V7f3WlsxSSQfy0+BAwRiF4Hz2eHauf11GZG3PIfWTXQ==", - "dev": true, - "requires": { - "@jest/core": "^25.4.0", - "@jest/test-result": "^25.4.0", - "@jest/types": "^25.4.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^25.4.0", - "jest-util": "^25.4.0", - "jest-validate": "^25.4.0", - "prompts": "^2.0.1", - "realpath-native": "^2.0.0", - "yargs": "^15.3.1" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-config": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-25.5.4.tgz", - "integrity": "sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^25.5.4", - "@jest/types": "^25.5.0", - "babel-jest": "^25.5.1", - "chalk": "^3.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^25.5.0", - "jest-environment-node": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-jasmine2": "^25.5.4", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "micromatch": "^4.0.2", - "pretty-format": "^25.5.0", - "realpath-native": "^2.0.0" - }, - "dependencies": { - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "jest-environment-jsdom": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz", - "integrity": "sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==", - "dev": true, - "requires": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "jsdom": "^15.2.1" - } - }, - "jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - } - } - }, - "jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - } - }, - "jest-docblock": { - "version": "25.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz", - "integrity": "sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-25.5.0.tgz", - "integrity": "sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0" - } - }, - "jest-environment-jsdom": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-25.4.0.tgz", - "integrity": "sha512-KTitVGMDrn2+pt7aZ8/yUTuS333w3pWt1Mf88vMntw7ZSBNDkRS6/4XLbFpWXYfWfp1FjcjQTOKzbK20oIehWQ==", - "dev": true, - "requires": { - "@jest/environment": "^25.4.0", - "@jest/fake-timers": "^25.4.0", - "@jest/types": "^25.4.0", - "jest-mock": "^25.4.0", - "jest-util": "^25.4.0", - "jsdom": "^15.2.1" - }, - "dependencies": { - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "jsdom": { - "version": "15.2.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", - "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^7.1.0", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.4.1", - "cssstyle": "^2.0.0", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.2.0", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - } - } - }, - "jest-environment-node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-25.5.0.tgz", - "integrity": "sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==", - "dev": true, - "requires": { - "@jest/environment": "^25.5.0", - "@jest/fake-timers": "^25.5.0", - "@jest/types": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-util": "^25.5.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true - }, - "jest-haste-map": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", - "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "@types/graceful-fs": "^4.1.2", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-serializer": "^25.5.0", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7", - "which": "^2.0.2" - } - }, - "jest-jasmine2": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz", - "integrity": "sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^25.5.0", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "co": "^4.6.0", - "expect": "^25.5.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-runtime": "^25.5.4", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "pretty-format": "^25.5.0", - "throat": "^5.0.0" - } - }, - "jest-leak-detector": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz", - "integrity": "sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==", - "dev": true, - "requires": { - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - } - }, - "jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - } - }, - "jest-message-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-25.5.0.tgz", - "integrity": "sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-25.5.0.tgz", - "integrity": "sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0" - } - }, - "jest-nunit-reporter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jest-nunit-reporter/-/jest-nunit-reporter-1.3.1.tgz", - "integrity": "sha512-yeERKTYPZutqdNIe3EHjoSAjhPxd5J5Svd8ULB/eiqDkn0EI2n8W4OVTuyFwY5b23hw5f0RLDuEvBjy5V95Ffw==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1", - "read-pkg": "^3.0.0", - "xml": "^1.0.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", - "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==", - "dev": true - }, - "jest-resolve": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-25.5.1.tgz", - "integrity": "sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "browser-resolve": "^1.11.3", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.1", - "read-pkg-up": "^7.0.1", - "realpath-native": "^2.0.0", - "resolve": "^1.17.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz", - "integrity": "sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-snapshot": "^25.5.1" - } - }, - "jest-runner": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-25.5.4.tgz", - "integrity": "sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-docblock": "^25.3.0", - "jest-haste-map": "^25.5.1", - "jest-jasmine2": "^25.5.4", - "jest-leak-detector": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "jest-runtime": "^25.5.4", - "jest-util": "^25.5.0", - "jest-worker": "^25.5.0", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - } - }, - "jest-runtime": { - "version": "25.5.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-25.5.4.tgz", - "integrity": "sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==", - "dev": true, - "requires": { - "@jest/console": "^25.5.0", - "@jest/environment": "^25.5.0", - "@jest/globals": "^25.5.2", - "@jest/source-map": "^25.5.0", - "@jest/test-result": "^25.5.0", - "@jest/transform": "^25.5.1", - "@jest/types": "^25.5.0", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^25.5.4", - "jest-haste-map": "^25.5.1", - "jest-message-util": "^25.5.0", - "jest-mock": "^25.5.0", - "jest-regex-util": "^25.2.6", - "jest-resolve": "^25.5.1", - "jest-snapshot": "^25.5.1", - "jest-util": "^25.5.0", - "jest-validate": "^25.5.0", - "realpath-native": "^2.0.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.3.1" - }, - "dependencies": { - "@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-serializer": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", - "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "25.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-25.5.1.tgz", - "integrity": "sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/prettier": "^1.19.0", - "chalk": "^3.0.0", - "expect": "^25.5.0", - "graceful-fs": "^4.2.4", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-resolve": "^25.5.1", - "make-dir": "^3.0.0", - "natural-compare": "^1.4.0", - "pretty-format": "^25.5.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "jest-util": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", - "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "make-dir": "^3.0.0" - } - }, - "jest-validate": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", - "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "jest-get-type": "^25.2.6", - "leven": "^3.1.0", - "pretty-format": "^25.5.0" - } - }, - "jest-watcher": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-25.5.0.tgz", - "integrity": "sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==", - "dev": true, - "requires": { - "@jest/test-result": "^25.5.0", - "@jest/types": "^25.5.0", - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "jest-util": "^25.5.0", - "string-length": "^3.1.0" - } - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" - }, - "js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true, - "peer": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "jsdom": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", - "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", - "dev": true, - "requires": { - "abab": "^1.0.4", - "acorn": "^5.3.0", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.3.1 < 0.4.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.0", - "escodegen": "^1.9.0", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.2.0", - "nwsapi": "^2.0.0", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.83.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^4.0.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonpath-plus": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-4.0.0.tgz", - "integrity": "sha512-e0Jtg4KAzDJKKwzbLaUtinCn0RZseWBVRTRGihSpvFlM3wTR7ExSp+PTdeTsDrLNJUe7L7JYJe8mblHX5SCT6A==", - "dev": true - }, - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "dependencies": { - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - } - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "jszip": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, - "requires": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", - "dev": true - }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha512-gkD9aSEG9UGglyPcDJqY9YBTUtCLKaBK6ihD2VP1d1X60lTfFspNZNulGBBbUZLkPygy4LySYHyxBpq+VhjObQ==", - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==" - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.0.3.tgz", - "integrity": "sha512-KgI4P7MSM31MNBftGJ07WBsLYLx7z9mQsL6+bcHk80AdmUA3cPzX69MK6dSgEgSF9TXLOl040pgo0XP/VTMENA==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "msal": { - "version": "1.4.17", - "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.17.tgz", - "integrity": "sha512-RjHwP2cCIWQ9iUIk1SziUMb9+jj5mC4OqG2w16E5yig8jySi/TwiFvKlwcjNrPsndph0HtgCtbENnk5julf3yQ==", - "requires": { - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "msalBrowserLegacy": { - "version": "npm:@azure/msal-browser@2.22.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.22.0.tgz", - "integrity": "sha512-ZpnbnzjYGRGHjWDPOLjSp47CQvhK927+W9avtLoNNCMudqs2dBfwj76lnJwObDE7TAKmCUueTiieglBiPb1mgQ==", - "requires": { - "@azure/msal-common": "^6.1.0" - }, - "dependencies": { - "@azure/msal-common": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-6.4.0.tgz", - "integrity": "sha512-WZdgq9f9O8cbxGzdRwLLMM5xjmLJ2mdtuzgXeiGxIRkVVlJ9nZ6sWnDFKa2TX8j72UXD1IfL0p/RYNoTXYoGfg==" - } - } - }, - "msalLegacy": { - "version": "npm:msal@1.4.12", - "resolved": "https://registry.npmjs.org/msal/-/msal-1.4.12.tgz", - "integrity": "sha512-gjupwQ6nvNL6mZkl5NIXyUmZhTiEMRu5giNdgHMh8l5EPOnV2Xj6nukY1NIxFacSTkEYUSDB47Pej9GxDYf+1w==", - "requires": { - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "nanocolors": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", - "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - } - } - }, - "node-notifier": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.5", - "shellwords": "^0.1.1", - "uuid": "^8.3.2", - "which": "^2.0.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "npm-packlist": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.5.tgz", - "integrity": "sha512-KCfK3Vi2F+PH1klYauoQzg81GQ8/GGjQRKYY6tRnpQUPKTs/1gBZSRWtTEd7jGdSn1LZL7gpAmJT+BcS55k2XQ==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, - "nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "office-ui-fabric-core": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/office-ui-fabric-core/-/office-ui-fabric-core-11.0.1.tgz", - "integrity": "sha512-jcfycbVOm2aUoI+AGtHW24HvM7nUVFr44hR5NIE56EobK67bVwbNAQL15CJj3vNz5PBrnitsV9ROOB+KOEWn8g==" - }, - "office-ui-fabric-react": { - "version": "7.204.0", - "resolved": "https://registry.npmjs.org/office-ui-fabric-react/-/office-ui-fabric-react-7.204.0.tgz", - "integrity": "sha512-W1xIsYEwxPrGYojvVtGTGvSfdnUoPEm8w6hhMlW/uFr5YwIB1isG/dVk4IZxWbcbea7612u059p+jRf+RjPW0w==", - "requires": { - "@fluentui/date-time-utilities": "^7.9.1", - "@fluentui/react-focus": "^7.18.17", - "@fluentui/react-theme-provider": "^0.19.16", - "@fluentui/react-window-provider": "^1.0.6", - "@fluentui/theme": "^1.7.13", - "@microsoft/load-themed-styles": "^1.10.26", - "@uifabric/foundation": "^7.10.16", - "@uifabric/icons": "^7.9.5", - "@uifabric/merge-styles": "^7.20.2", - "@uifabric/react-hooks": "^7.16.4", - "@uifabric/set-version": "^7.0.24", - "@uifabric/styling": "^7.25.1", - "@uifabric/utilities": "^7.38.2", - "prop-types": "^15.7.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opn": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", - "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - } - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha512-DrQ43ngaJ0e36j2CHyoDoIg1K4zbc78GnTQESebK9vu6hj4W5/pvfSFO/kgM620Yd0YnhseSNYsLK3/SszZ5NQ==", - "dev": true, - "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" - }, - "dependencies": { - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha512-go5TQkd0YRXYhX+Lc3UrXkoKU5j+m72jEP5lHWr2Nh82L8wfZtH8toKgcg4T10o23ELIMGXQdwCbl+qAXIPDrw==", - "dev": true, - "requires": { - "once": "~1.3.0" - } - }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", - "dev": true, - "requires": { - "wrappy": "1" - } - } - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-reflect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", - "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", - "dev": true - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-settle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", - "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", - "dev": true, - "requires": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - } - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidof": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pidof/-/pidof-1.0.2.tgz", - "integrity": "sha512-LLJhTVEUCZnotdAM5rd7KiTdLGgk6i763/hsd5pO+8yuF7mdgg0ob8w/98KrTAcPsj6YzGrkFLPVtBOr1uW2ag==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz", - "integrity": "sha512-9hHgE5+Xai/ChrnahNP8Ke0VNF/s41IZIB/d24eMHEaRamdPg+wwlRm2lTb5wMvE8eTIKrYZsrxfuOwt3dpsIQ==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "load-json-file": "^1.1.0", - "object-assign": "^4.0.1", - "symbol": "^0.2.1" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "plugin-log": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/plugin-log/-/plugin-log-0.1.0.tgz", - "integrity": "sha512-TzmfWRMEFAnrZbI4GfyXv9Gp5E71eby3gmvnP6LEfmYbVC8FPN2RBRhwxg4sjIg+fy8AJ3mczhLXvk0pzHPeMg==", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "dateformat": "^1.0.11" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha512-5sFRfAAmbHdIts+eKjR9kYJoF0ViCMVX9yqLu5A7S/v+nd077KgCITOMiirmyCBiZpKLDXbBOkYm6tu7rX/TKg==", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "postcss": { - "version": "7.0.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.38.tgz", - "integrity": "sha512-wNrSHWjHDQJR/IZL5IKGxRtFgrYNaAA/UrkW2WqbtZO6uxSLMxMN+s2iqUMwnAWm3fMROlDYZB41dr0Mt7vBwQ==", - "dev": true, - "requires": { - "nanocolors": "^0.2.2", - "source-map": "^0.6.1" - } - }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-1.5.0.tgz", - "integrity": "sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==", - "dev": true, - "requires": { - "css-modules-loader-core": "^1.1.0", - "generic-names": "^2.0.1", - "lodash.camelcase": "^4.3.0", - "postcss": "^7.0.1", - "string-hash": "^1.1.1" - } - }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", - "integrity": "sha512-zF9+UIEvtpeqMGxhpeT9XaIevQSrBBCz9fi7SwfkmjVacsSj8DY5eFVgn+wY8I9vvdDDwK5xC8Myq4UkoLFIkA==", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==", - "dev": true, - "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==", - "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "pseudolocale": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-1.1.0.tgz", - "integrity": "sha512-OZ8I/hwYEJ3beN3IEcNnt8EpcqblH0/x23hulKBXjs+WhTTEle+ijCHCkh2bd+cIIeCuCwSCbBe93IthGG6hLw==", - "dev": true, - "requires": { - "commander": "*" - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "ramda": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", - "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==" - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-package-json": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", - "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "read-package-tree": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.1.6.tgz", - "integrity": "sha512-FCX1aT3GWyY658wzDICef4p+n0dB+ENRct8E/Qyvppj6xVpOYerBHfUu7OP5Rt1/393Tdglguf5ju5DEX4wZNg==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "once": "^1.3.0", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "read-yaml-file": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz", - "integrity": "sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==", - "dev": true, - "requires": { - "js-yaml": "^4.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "realpath-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", - "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==", - "dev": true - }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==", - "dev": true, - "requires": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, - "dependencies": { - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - } - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "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": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "requirejs": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", - "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "sass": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.44.0.tgz", - "integrity": "sha512-0hLREbHFXGQqls/K8X+koeP+ogFRPF4ZqetVB19b7Cst9Er8cOR0rc6RU7MaI4W1JmUShd1BPgPoeqmmgMMYFw==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0" - } - }, - "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "dependencies": { - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "requires": { - "xmlchars": "^2.1.1" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha512-YL8BPm0tp6SlXef/VqYpA/ijmTsDP2ZEXzsnqjkaWS7NP7Bfvw18NboL0O8WCIjy67sOCG3MYSK1PB4GC9XdtQ==", - "dev": true - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-loader": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz", - "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.6.1", - "whatwg-mimetype": "^2.3.0" - }, - "dependencies": { - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "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" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "dev": true - }, - "stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "stream-consume": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", - "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", - "dev": true - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", - "dev": true - }, - "string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "sudo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sudo/-/sudo-1.0.3.tgz", - "integrity": "sha512-3xMsaPg+8Xm+4LQm0b2V+G3lz3YxtDBzlqiU8CXw2AOIIDSvC1kBxIxBjnoCTq8dTTXAy23m58g6mdClUocpmQ==", - "dev": true, - "requires": { - "inpath": "~1.0.2", - "pidof": "~1.0.2", - "read": "~1.0.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "symbol": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz", - "integrity": "sha512-IUW+ek7apEaW5bFhS6WpYoNtVpNTlNoqB/PH7YiMWQTxSPeXCzG4PILVakwXivJt3ZXWeO1fIJnUd/L9A/VeGA==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^4.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz", - "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "ternary-stream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.1.1.tgz", - "integrity": "sha512-j6ei9hxSoyGlqTmoMjOm+QNvUKDOIY6bNl4Uh1lhBvl6yjPW2iLqxDUYyfDPZknQ4KdRziFl+ec99iT4l7g0cw==", - "dev": true, - "requires": { - "duplexify": "^3.5.0", - "fork-stream": "^0.0.4", - "merge-stream": "^1.0.0", - "through2": "^2.0.1" - }, - "dependencies": { - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - } - } - }, - "terser": { - "version": "5.16.8", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz", - "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "peer": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "peer": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "dev": true - }, - "tiny-lr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "integrity": "sha512-cmC4iw/nymXg+dc57AQ8Xv3bHxNQOGyQC3Ht5xLN67hksk6ucshrLk/VKiXuMbnZgToQ2NbnICxYj63xVw+Qbw==", - "dev": true, - "requires": { - "body-parser": "~1.14.0", - "debug": "~2.2.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.2.0", - "parseurl": "~1.3.0", - "qs": "~5.1.0" - }, - "dependencies": { - "body-parser": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "integrity": "sha512-6D9uiWn7dbnDAhlDikccybuqKCmsoest0es3VSQO8Doz/fzx6Ls7kJNxKBYTjbzu4/RzNsf9zuACnS3UYjVH8Q==", - "dev": true, - "requires": { - "bytes": "2.2.0", - "content-type": "~1.0.1", - "debug": "~2.2.0", - "depd": "~1.1.0", - "http-errors": "~1.3.1", - "iconv-lite": "0.4.13", - "on-finished": "~2.3.0", - "qs": "5.2.0", - "raw-body": "~2.1.5", - "type-is": "~1.6.10" - }, - "dependencies": { - "qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", - "integrity": "sha512-VH4FeG98gs6AkHivaW2O14vsOPBL9E80Sj7fITunoDijiYQ1lsVwJYmm1CSL+oLyO2N5HPdo23GXAG64uKOAZQ==", - "dev": true - } - } - }, - "bytes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "integrity": "sha512-zGRpnr2l5w/s8PxkrquUJoVeR06KvqPelrYqiSyQV7QEBqCYivpb6UzXYWC6JDBVtNFOT0rzJRFhkfJgxzmILA==", - "dev": true - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha512-gMygNskMurDCWfoCdyh1gOeDfSbkAHXqz94QoPj5IHIUjC/BG8/xv7FSEUr7waR5RcAya4j58bft9Wu/wHNeXA==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha512-QwVuTNQv7tXC5mMWFX5N5wGjmybjNBBD8P3BReTkPmipoxTUFgWM2gXNvldHQr6T14DH0Dh6qBVg98iJt7u4mQ==", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", - "dev": true - }, - "qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", - "integrity": "sha512-SGDM48EwFLWnYYpNlOkEIRJb4wil5FKJxpR6NVfQjz6qJmX53ki7Xj1cLNEAkb70vUfJmdVLOwODyABgZyDMZw==", - "dev": true - }, - "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha512-x4d27vsIG04gZ1imkuDXB9Rd/EkAx5kYzeMijIYw1PAor0Ld3nTlkQQwDjKu42GdRUFCX1AfGnTSQB4O57eWVg==", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha512-SvUX8+c/Ga454a4fprIdIUzUN9xfd1YTvYh7ub5ZPJ+ZJ/+K2Bp6IpWGmnw8r3caLTsmhvJAKZz3qjIo9+XuCQ==", - "dev": true - } - } - } - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", - "dev": true - }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true - }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true - }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "dependencies": { - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", - "dev": true - } - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "unset-value": { + "node_modules/webpack/node_modules/schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz", - "integrity": "sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "validator": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-8.2.0.tgz", - "integrity": "sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA==", - "dev": true - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - } - } - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - } - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "peer": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "optional": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "5.77.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.77.0.tgz", - "integrity": "sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "peer": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", - "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - } + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/webpack/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "websocket-driver": { + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "requires": { + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "whatwg-encoding": { + "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, - "requires": { + "dependencies": { "iconv-lite": "0.4.24" - }, + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" }, - "whatwg-mimetype": { + "node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "dev": true, - "requires": { + "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "which-module": { + "node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", "dev": true }, - "which-typed-array": { + "node_modules/which-pm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", + "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", + "dev": true, + "dependencies": { + "load-yaml-file": "^0.2.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8.15" + } + }, + "node_modules/which-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, - "requires": { + "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "window-size": { + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/window-size": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true + "dev": true, + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } }, - "word-wrap": { + "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "worker-farm": { + "node_modules/worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, - "requires": { + "dependencies": { "errno": "~0.1.7" } }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, - "requires": { + "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "write-yaml-file": { + "node_modules/write-yaml-file": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/write-yaml-file/-/write-yaml-file-4.2.0.tgz", "integrity": "sha512-LwyucHy0uhWqbrOkh9cBluZBeNVxzHjDaE9mwepZG3n3ZlbM4v3ndrFw51zW/NXYFFqP+QWZ72ihtLWTh05e4Q==", "dev": true, - "requires": { + "dependencies": { "js-yaml": "^4.0.0", "write-file-atomic": "^3.0.3" }, + "engines": { + "node": ">=10.13" + } + }, + "node_modules/write-yaml-file/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/write-yaml-file/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "ws": { + "node_modules/ws": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "dev": true, - "requires": { + "dependencies": { "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0" } }, - "xml": { + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", "dev": true }, - "xml-name-validator": { + "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, - "requires": { + "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "xmlbuilder": { + "node_modules/xmlbuilder": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "xmlchars": { + "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "xmldoc": { + "node_modules/xmldoc": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.4.tgz", "integrity": "sha512-rQshsBGR5s7pUNENTEncpI2LTCuzicri0DyE4SCV5XmS0q81JS8j1iPijP0Q5c4WLGbKh3W92hlOwY6N9ssW1w==", "dev": true, - "requires": { + "dependencies": { "sax": "^1.2.4" } }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true }, - "yallist": { + "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yargs": { + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.6.0.tgz", "integrity": "sha512-KmjJbWBkYiSRUChcOSa4rtBxDXf0j4ISz+tpeNa4LKIBllgKnkemJ3x4yo4Yydp3wPU4/xJTaKTLLZ8V7zhI7A==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^2.0.1", "cliui": "^3.2.0", "decamelize": "^1.1.1", @@ -57108,191 +30755,252 @@ "window-size": "^0.2.0", "y18n": "^3.2.1", "yargs-parser": "^2.4.0" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/yargs/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yargs/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "yargs-parser": { + "node_modules/yargs/node_modules/yargs-parser": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^3.0.0", "lodash.assign": "^4.0.6" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - } } }, - "yocto-queue": { + "node_modules/yargs/node_modules/yargs-parser/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "z-schema": { + "node_modules/z-schema": { "version": "3.18.4", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.18.4.tgz", "integrity": "sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw==", "dev": true, - "requires": { - "commander": "^2.7.1", + "dependencies": { "lodash.get": "^4.0.0", "lodash.isequal": "^4.0.0", "validator": "^8.0.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "optionalDependencies": { + "commander": "^2.7.1" } } } diff --git a/debug/spfx/package.json b/debug/spfx/package.json index ac75e1a37..5b56ce540 100644 --- a/debug/spfx/package.json +++ b/debug/spfx/package.json @@ -1,9 +1,9 @@ { - "name": "spfx-1-16-1", - "version": "0.0.1", + "name": "spfx-1-18-2", + "version": "4.0.0", "private": true, "engines": { - "node": ">=16.13.0 <17.0.0" + "node": ">=16.13.0 <17.0.0 || >=18.17.1 <19.0.0" }, "main": "lib/index.js", "scripts": { @@ -12,27 +12,29 @@ "test": "gulp test" }, "dependencies": { - "@microsoft/sp-core-library": "1.16.1", - "@microsoft/sp-lodash-subset": "1.16.1", - "@microsoft/sp-office-ui-fabric-core": "1.16.1", - "@microsoft/sp-property-pane": "1.16.1", - "@microsoft/sp-webpart-base": "1.16.1", - "@pnp/core": "^3.13.0", - "@pnp/graph": "^3.13.0", - "@pnp/logging": "^3.13.0", - "@pnp/sp": "^3.13.0", + "@microsoft/sp-component-base": "1.18.2", + "@microsoft/sp-core-library": "1.18.2", + "@microsoft/sp-lodash-subset": "1.18.2", + "@microsoft/sp-office-ui-fabric-core": "1.18.2", + "@microsoft/sp-property-pane": "1.18.2", + "@microsoft/sp-webpart-base": "1.18.2", + "@pnp/core": "^4.0.0-alpha0-v4nightly.20240412", + "@pnp/graph": "^4.0.0-alpha0-v4nightly.20240412", + "@pnp/logging": "^4.0.0-alpha0-v4nightly.20240412", + "@pnp/sp": "^4.0.0-alpha0-v4nightly.20240412", "tslib": "2.3.1" }, "devDependencies": { - "@microsoft/eslint-config-spfx": "1.16.1", - "@microsoft/eslint-plugin-spfx": "1.16.1", - "@microsoft/rush-stack-compiler-4.5": "0.2.2", - "@microsoft/sp-build-web": "1.16.1", - "@microsoft/sp-module-interfaces": "1.16.1", + "@microsoft/eslint-config-spfx": "1.18.2", + "@microsoft/eslint-plugin-spfx": "1.18.2", + "@microsoft/rush-stack-compiler-4.7": "0.1.0", + "@microsoft/sp-build-web": "1.18.2", + "@microsoft/sp-module-interfaces": "1.18.2", "@rushstack/eslint-config": "2.5.1", "@types/webpack-env": "~1.15.2", "ajv": "^6.12.5", + "eslint": "8.7.0", "gulp": "4.0.2", - "typescript": "4.5.5" + "typescript": "4.7.4" } } diff --git a/debug/spfx/tsconfig.json b/debug/spfx/tsconfig.json index e7dfb62e4..25bf98547 100644 --- a/debug/spfx/tsconfig.json +++ b/debug/spfx/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "./node_modules/@microsoft/rush-stack-compiler-4.5/includes/tsconfig-web.json", + "extends": "./node_modules/@microsoft/rush-stack-compiler-4.7/includes/tsconfig-web.json", "compilerOptions": { "target": "es5", "forceConsistentCasingInFileNames": true, diff --git a/package-lock.json b/package-lock.json index 5553ac5e1..cdba8e238 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,37 +9,37 @@ "version": "4.0.0-alpha0", "license": "MIT", "devDependencies": { - "@azure/identity": "4.0.1", - "@azure/msal-browser": "3.10.0", - "@azure/msal-node": "2.6.4", + "@azure/identity": "4.1.0", + "@azure/msal-browser": "3.13.0", + "@azure/msal-node": "2.7.0", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.1", - "@pnp/logging": "^3.22.0", - "@types/chai": "4.3.11", + "@pnp/logging": "^3.24.0", + "@types/chai": "4.3.14", "@types/chai-as-promised": "7.1.8", "@types/core-js": "2.5.8", - "@types/findup-sync": "4.0.4", + "@types/findup-sync": "4.0.5", "@types/mocha": "10.0.6", "@types/node": "18.11.9", "@types/webpack": "5.28.5", "@types/yargs": "17.0.32", - "@typescript-eslint/eslint-plugin": "5.62.0", - "@typescript-eslint/parser": "5.62.0", + "@typescript-eslint/eslint-plugin": "6.21.0", + "@typescript-eslint/parser": "6.21.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "del-cli": "5.1.0", - "eslint": "8.55.0", + "eslint": "8.57.0", "findup-sync": "5.0.0", - "globby": "^14.0.0", - "mocha": "10.2.0", + "globby": "^14.0.1", + "mocha": "10.4.0", "node-fetch": "3.3.2", "prettyjson": "1.2.5", "string-replace-loader": "3.1.0", "tslib": "2.6.2", - "typescript": "4.5.5", - "webpack": "5.89.0", + "typescript": "4.7.4", + "webpack": "5.91.0", "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.1", + "webpack-dev-server": "5.0.4", "yargs": "17.7.2" }, "engines": { @@ -68,9 +68,9 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.1.tgz", - "integrity": "sha512-dyeQwvgthqs/SlPVQbZQetpslXceHd4i5a7M/7z/lGEAVwnSluabnQOjF2/dk/hhWgMISusv1Ytp4mQ8JNy62A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", + "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -82,9 +82,9 @@ } }, "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -94,9 +94,9 @@ } }, "node_modules/@azure/core-client": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.1.tgz", - "integrity": "sha512-hHYFx9lz0ZpbO5W+iotU9tmIX1jPcoIjYUEUaWGuMi1628LCQ/z05TUR4P+NRtMgyoHQuyVYyGQiD3PC47kaIA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", + "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -112,9 +112,9 @@ } }, "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -124,9 +124,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.1.tgz", - "integrity": "sha512-ZxS6i3eHxh86u+1eWZJiYywoN2vxvsSoAUx60Mny8cZ4nTwvt7UzVVBJO+m2PW2KIJfNiXMt59xBa59htOWL4g==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.2.tgz", + "integrity": "sha512-BmWfpjc/QXc2ipHOh6LbUzp3ONCaa6xzIssTU0DwH9bbYNXJlGUL6tujx5TrbVd/QQknmS+vlQJGrCq2oL1gZA==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -143,9 +143,9 @@ } }, "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -155,9 +155,9 @@ } }, "node_modules/@azure/core-tracing": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.1.tgz", - "integrity": "sha512-qPbYhN1pE5XQ2jPKIHP33x8l3oBu1UqIWnYqZZ3OYnYjzY0xqIHjn49C+ptsPD9yC7uyWI9Zm7iZUZLs2R4DhQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", + "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -167,9 +167,9 @@ } }, "node_modules/@azure/core-util": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.8.1.tgz", - "integrity": "sha512-L3voj0StUdJ+YKomvwnTv7gHzguJO+a6h30pmmZdRprJCM+RJlGMPxzuh4R7lhQu1jNmEtaHX5wvTgWLDAmbGQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dev": true, "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -180,9 +180,9 @@ } }, "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.1.tgz", - "integrity": "sha512-NhzeNm5zu2fPlwGXPUjzsRCRuPx5demaZyNcyNYJDqpa/Sbxzvo/RYt9IwUaAOnDW5+r7J9UOE6f22TQnb9nhQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -192,9 +192,9 @@ } }, "node_modules/@azure/identity": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.0.1.tgz", - "integrity": "sha512-yRdgF03SFLqUMZZ1gKWt0cs0fvrDIkq2bJ6Oidqcoo5uM85YMBnXWMzYKK30XqIT76lkFyAaoAAy5knXhrG4Lw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.1.0.tgz", + "integrity": "sha512-BhYkF8Xr2gXjyDxocm0pc9RI5J5a1jw8iW0dw6Bx95OGdYbuMyFZrrwNw4eYSqQ2BB6FZOqpJP3vjsAqRcvDhw==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -204,8 +204,8 @@ "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.3.0", "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^3.5.0", - "@azure/msal-node": "^2.5.1", + "@azure/msal-browser": "^3.11.1", + "@azure/msal-node": "^2.6.6", "events": "^3.0.0", "jws": "^4.0.0", "open": "^8.0.0", @@ -217,9 +217,9 @@ } }, "node_modules/@azure/logger": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.1.tgz", - "integrity": "sha512-/+4TtokaGgC+MnThdf6HyIH9Wrjp+CnCn3Nx3ggevN7FFjjNyjqg0yLlc2i9S+Z2uAzI8GYOo35Nzb1MhQ89MA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz", + "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==", "dev": true, "dependencies": { "tslib": "^2.6.2" @@ -229,33 +229,33 @@ } }, "node_modules/@azure/msal-browser": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.10.0.tgz", - "integrity": "sha512-mnmi8dCXVNZI+AGRq0jKQ3YiodlIC4W9npr6FCB9WN6NQT+6rq+cIlxgUb//BjLyzKsnYo+i4LROGeMyU+6v1A==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.13.0.tgz", + "integrity": "sha512-fD906nmJei3yE7la6DZTdUtXKvpwzJURkfsiz9747Icv4pit77cegSm6prJTKLQ1fw4iiZzrrWwxnhMLrTf5gQ==", "dev": true, "dependencies": { - "@azure/msal-common": "14.7.1" + "@azure/msal-common": "14.9.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "14.7.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.7.1.tgz", - "integrity": "sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==", + "version": "14.9.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.9.0.tgz", + "integrity": "sha512-yzBPRlWPnTBeixxLNI3BBIgF5/bHpbhoRVuuDBnYjCyWRavaPUsKAHUDYLqpGkBLDciA6TCc6GOxN4/S3WiSxg==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.4.tgz", - "integrity": "sha512-nNvEPx009/80UATCToF+29NZYocn01uKrB91xtFr7bSqkqO1PuQGXRyYwryWRztUrYZ1YsSbw9A+LmwOhpVvcg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.7.0.tgz", + "integrity": "sha512-wXD8LkUvHICeSWZydqg6o8Yvv+grlBEcmLGu+QEI4FcwFendbTEZrlSygnAXXSOCVaGAirWLchca35qrgpO6Jw==", "dev": true, "dependencies": { - "@azure/msal-common": "14.7.1", + "@azure/msal-common": "14.9.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -427,10 +427,32 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -450,6 +472,28 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -464,11 +508,107 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -528,9 +668,9 @@ } }, "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, "node_modules/@microsoft/microsoft-graph-types": { @@ -574,6 +714,16 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pnp/buildsystem": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@pnp/buildsystem/-/buildsystem-4.0.1.tgz", @@ -598,9 +748,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240321", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240321.tgz", - "integrity": "sha512-zaVhzMXFOb7QhrZkHy/eapNlaBwoId1hmgaM23ID6u+QymFpdtBaJqEoFqFHwxSaqcZNx01aunGPV8UL2j8wwg==", + "version": "4.0.0-alpha0-v4nightly.20240412", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240412.tgz", + "integrity": "sha512-CETGc6aYHRPSQtKRXLUKv5COLVy28QhKfjeqTEXmaleweRfRghvf3X0AYijYROQJL6//m5pHusA84skSwEI1iw==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -679,9 +829,9 @@ "dev": true }, "node_modules/@types/chai": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", - "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.14.tgz", + "integrity": "sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==", "dev": true }, "node_modules/@types/chai-as-promised": { @@ -719,9 +869,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.6.tgz", - "integrity": "sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==", + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -757,9 +907,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -769,12 +919,12 @@ } }, "node_modules/@types/findup-sync": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/findup-sync/-/findup-sync-4.0.4.tgz", - "integrity": "sha512-qqd9OF8p10kQguGbmKc9WZ8I1AJl5GS13I/pwaO9Qj8ld0B9/aCQL454bbUBKB5JF40jWpiKkQsvucIT4BnT0A==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/findup-sync/-/findup-sync-4.0.5.tgz", + "integrity": "sha512-Y4NCs+7uDZ3SFF0GWowN2IANqOJr+Cdvp9hfMSGzQYqJkyvAEJIq/s0/8AP88fq+yswykWPWZRBrqWPEhCLsgg==", "dev": true, "dependencies": { - "@types/micromatch": "*" + "@types/micromatch": "^4.0.0" } }, "node_modules/@types/http-errors": { @@ -799,9 +949,9 @@ "dev": true }, "node_modules/@types/micromatch": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.6.tgz", - "integrity": "sha512-2eulCHWqjEpk9/vyic4tBhI8a9qQEl6DaK2n/sF7TweX9YESlypgKyhXMDGt4DAOy/jhLPvVrZc8pTDAMsplJA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-C/FMQ8HJAZhTsDpl4wDKZdMeeW5USjgzOczUwTGbRc1ZopPgOhIEnxY2ZgUrsuyy4DwK1JVOJZKFakv3TbCKiA==", "dev": true, "dependencies": { "@types/braces": "*" @@ -859,9 +1009,9 @@ "dev": true }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "dev": true }, "node_modules/@types/semver": { @@ -890,14 +1040,14 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "@types/node": "*", + "@types/send": "*" } }, "node_modules/@types/sockjs": { @@ -945,32 +1095,33 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -979,25 +1130,26 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1006,16 +1158,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1023,25 +1175,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1050,12 +1202,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1063,21 +1215,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1119,42 +1272,41 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1413,9 +1565,9 @@ } }, "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -1711,13 +1863,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -1782,6 +1933,21 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -1862,9 +2028,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001599", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz", - "integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==", + "version": "1.0.30001610", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz", + "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==", "dev": true, "funding": [ { @@ -2305,6 +2471,34 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -2492,6 +2686,12 @@ "node": ">=6.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -2508,9 +2708,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.713", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.713.tgz", - "integrity": "sha512-vDarADhwntXiULEdmWd77g2dV6FrNGa8ecAC29MZ4TwPut2fvosD0/5sJd1qWNNe8HcJFAC+F5Lf9jW1NPtWmw==", + "version": "1.4.736", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.736.tgz", + "integrity": "sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==", "dev": true }, "node_modules/emoji-regex": { @@ -2551,9 +2751,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -2593,9 +2793,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.2.tgz", - "integrity": "sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true }, "node_modules/escalade": { @@ -2626,16 +2826,16 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -2681,16 +2881,19 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -2705,29 +2908,14 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint/node_modules/is-path-inside": { @@ -2739,6 +2927,18 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -2768,15 +2968,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -2789,7 +2980,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -2798,15 +2989,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3220,6 +3402,34 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -3250,12 +3460,6 @@ "node": ">= 0.6" } }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "dev": true - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3335,20 +3539,19 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3372,6 +3575,18 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -3966,6 +4181,51 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4107,6 +4367,24 @@ "node": ">=0.10.0" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -4486,15 +4764,19 @@ } }, "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.8.2.tgz", + "integrity": "sha512-j4WKth315edViMBGkHW6NTF0QBjsTrcRDmYNcGsPq+ozMEyCCCIlX2d2mJ5wuh6iHvJ3FevUrr48v58YRqVdYg==", "dev": true, "dependencies": { - "fs-monkey": "^1.0.4" + "tslib": "^2.0.0" }, "engines": { "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, "node_modules/meow": { @@ -4636,15 +4918,18 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -4670,10 +4955,19 @@ "node": ">= 6" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -4683,13 +4977,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -4704,19 +4997,6 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/cliui": { @@ -4809,30 +5089,12 @@ "multicast-dns": "cli.js" } }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -5116,16 +5378,20 @@ } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -5253,6 +5519,31 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -5741,6 +6032,60 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6237,6 +6582,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6249,6 +6609,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -6319,9 +6692,9 @@ } }, "node_modules/terser": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz", - "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==", + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", + "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6424,31 +6797,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" + "node": ">=16" }, "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "typescript": ">=4.2.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/type-check": { @@ -6498,9 +6862,9 @@ } }, "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6654,34 +7018,34 @@ } }, "node_modules/webpack": { - "version": "5.89.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", - "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -6755,26 +7119,32 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", "dev": true, "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, "node_modules/webpack-dev-middleware/node_modules/ajv": { @@ -6831,54 +7201,54 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", + "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -6917,12 +7287,133 @@ "ajv": "^8.8.2" } }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", @@ -6965,6 +7456,28 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -7032,6 +7545,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 0bf3f3744..131d422b7 100644 --- a/package.json +++ b/package.json @@ -5,37 +5,37 @@ "version": "4.0.0-alpha0", "description": "A JavaScript library for SharePoint & Graph development.", "devDependencies": { - "@azure/identity": "4.0.1", - "@azure/msal-browser": "3.10.0", - "@azure/msal-node": "2.6.4", + "@azure/identity": "4.1.0", + "@azure/msal-browser": "3.13.0", + "@azure/msal-node": "2.7.0", "@microsoft/microsoft-graph-types": "2.40.0", "@pnp/buildsystem": "^4.0.1", - "@pnp/logging": "^3.22.0", - "@types/chai": "4.3.11", + "@pnp/logging": "^3.24.0", + "@types/chai": "4.3.14", "@types/chai-as-promised": "7.1.8", "@types/core-js": "2.5.8", - "@types/findup-sync": "4.0.4", + "@types/findup-sync": "4.0.5", "@types/mocha": "10.0.6", "@types/node": "18.11.9", "@types/webpack": "5.28.5", "@types/yargs": "17.0.32", - "@typescript-eslint/eslint-plugin": "5.62.0", - "@typescript-eslint/parser": "5.62.0", + "@typescript-eslint/eslint-plugin": "6.21.0", + "@typescript-eslint/parser": "6.21.0", "chai": "4.3.10", "chai-as-promised": "7.1.1", "del-cli": "5.1.0", - "eslint": "8.55.0", + "eslint": "8.57.0", "findup-sync": "5.0.0", - "globby": "^14.0.0", - "mocha": "10.2.0", + "globby": "^14.0.1", + "mocha": "10.4.0", "node-fetch": "3.3.2", "prettyjson": "1.2.5", "string-replace-loader": "3.1.0", "tslib": "2.6.2", - "typescript": "4.5.5", - "webpack": "5.89.0", + "typescript": "4.7.4", + "webpack": "5.91.0", "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.1", + "webpack-dev-server": "5.0.4", "yargs": "17.7.2" }, "scripts": { diff --git a/packages/azidjsclient/package.json b/packages/azidjsclient/package.json index f64d2fb34..bcab34b95 100644 --- a/packages/azidjsclient/package.json +++ b/packages/azidjsclient/package.json @@ -7,7 +7,7 @@ "dependencies": { "@pnp/core": "0.0.0-PLACEHOLDER", "@pnp/queryable": "0.0.0-PLACEHOLDER", - "@azure/identity": "4.0.1", + "@azure/identity": "4.1.0", "tslib": "2.6.2" } } \ No newline at end of file diff --git a/packages/graph/mail/users.ts b/packages/graph/mail/users.ts index 571827bea..af84b9d85 100644 --- a/packages/graph/mail/users.ts +++ b/packages/graph/mail/users.ts @@ -1,5 +1,5 @@ import { _User, User } from "../users/types.js"; -import { IMessages, Messages, IMessage } from "./messages.js"; +import { IMessages, Messages } from "./messages.js"; import { IMailFolders, MailFolders } from "./folders.js"; import { IOutlook, Outlook } from "./categories.js"; import { FocusedInboxOverrides, IFocusedInboxOverrides, IMailboxSettings, MailboxSettings } from "./mailbox.js"; @@ -23,7 +23,7 @@ declare module "../users/types" { readonly mailFolders: IMailFolders; readonly outlook: IOutlook; readonly focusedInboxOverrides: IFocusedInboxOverrides; - sendMail(message: IMessage): Promise; + sendMail(message: IMessageType): Promise; translateExchangeIds(translateExchangeIds: ITranslateExchangeIds): Promise; } } diff --git a/packages/nodejs/package.json b/packages/nodejs/package.json index bf5ef6cd5..5ebac1762 100644 --- a/packages/nodejs/package.json +++ b/packages/nodejs/package.json @@ -5,7 +5,7 @@ "main": "./index.js", "typings": "./index", "dependencies": { - "@azure/msal-node": "2.6.4", + "@azure/msal-node": "2.7.0", "@pnp/core": "0.0.0-PLACEHOLDER", "@pnp/logging": "0.0.0-PLACEHOLDER", "@pnp/queryable": "0.0.0-PLACEHOLDER", diff --git a/test/graph/planner.ts b/test/graph/planner.ts index 1b5a9dfc6..a97f15f76 100644 --- a/test/graph/planner.ts +++ b/test/graph/planner.ts @@ -444,7 +444,14 @@ describe("Planner", function () { after(async function () { if (PlanIds.length > 0) { PlanIds.forEach(async (id) => { - await this.pnp.graph.planner.plans.getById(id).delete(); + try{ + const plan = await this.pnp.graph.planner.plans.getById(id)(); + if(plan != null){ + await this.pnp.graph.planner.plans.getById(id).delete(); + } + }catch(err){ + // ignore + } }); } }); From 65d6106deba80a6093e7deece0c1e931ac6cddb9 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Mon, 15 Apr 2024 20:46:55 +0000 Subject: [PATCH 155/171] V4 release WIP Working on tests fixes Added Azure Function sample - ready for v4 release Added updates (still WIP) for getting started docs --- docs/getting-started.md | 379 ++++++++++-------- packages/logging/index.js | 19 +- packages/logging/listeners.js | 10 +- samples/azure-function/.funcignore | 10 + samples/azure-function/.gitignore | 99 +++++ .../azure-function/.vscode/extensions.json | 5 + samples/azure-function/.vscode/launch.json | 12 + samples/azure-function/.vscode/settings.json | 13 + samples/azure-function/.vscode/tasks.json | 38 ++ samples/azure-function/README.md | 51 +++ samples/azure-function/host.json | 15 + .../local.settings.example.json | 17 + samples/azure-function/package.json | 28 ++ samples/azure-function/src/common/models.ts | 5 + .../azure-function/src/common/pnpjsService.ts | 86 ++++ .../src/functions/httpTrigger.ts | 83 ++++ samples/azure-function/tsconfig.json | 15 + test/graph/admin.ts | 52 +-- test/graph/analytics.ts | 8 +- test/graph/onenote.ts | 159 ++++---- 20 files changed, 832 insertions(+), 272 deletions(-) create mode 100644 samples/azure-function/.funcignore create mode 100644 samples/azure-function/.gitignore create mode 100644 samples/azure-function/.vscode/extensions.json create mode 100644 samples/azure-function/.vscode/launch.json create mode 100644 samples/azure-function/.vscode/settings.json create mode 100644 samples/azure-function/.vscode/tasks.json create mode 100644 samples/azure-function/README.md create mode 100644 samples/azure-function/host.json create mode 100644 samples/azure-function/local.settings.example.json create mode 100644 samples/azure-function/package.json create mode 100644 samples/azure-function/src/common/models.ts create mode 100644 samples/azure-function/src/common/pnpjsService.ts create mode 100644 samples/azure-function/src/functions/httpTrigger.ts create mode 100644 samples/azure-function/tsconfig.json diff --git a/docs/getting-started.md b/docs/getting-started.md index 373a5b379..bed2ebcd6 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -2,7 +2,7 @@ This library is geared towards folks working with TypeScript but will work equally well for JavaScript projects. To get started you need to install the libraries you need via npm. Many of the packages have a peer dependency to other packages with the @pnp namespace meaning you may need to install more than one package. All packages are released together eliminating version confusion - all packages will depend on packages with the same version number. -If you need to support older browsers, SharePoint on-premisis servers, or older versions of the SharePoint Framework, please revert to [version 2](./v2/SPFx-on-premises/index.html) of the library and see related documentation on [polyfills](./v2/concepts/polyfill/index.html) for required functionality. +If you need to support older browsers, SharePoint on premises servers, or older versions of the SharePoint Framework, please revert to [version 2](./v2/SPFx-on-premises/index.html) of the library and see related documentation on [polyfills](./v2/concepts/polyfill/index.html) for required functionality. ## Minimal Requirements @@ -18,16 +18,16 @@ First you will need to install those libraries you want to use in your applicati Next we can import and use the functionality within our application. Below is a very simple example, please see the individual package documentation for more details and examples. -```ts -import { getRandomString } from "@pnp/core"; + ```ts + import { getRandomString } from "@pnp/core"; -(function() { + (function() { - // get and log a random string - console.log(getRandomString(20)); + // get and log a random string + console.log(getRandomString(20)); -})() -``` + })() + ``` ## Getting Started with SharePoint Framework @@ -58,29 +58,29 @@ No additional steps required 1. Replace the contents of the gulpfile.js with: >Note: The only change is the addition of the line to disable tslint. - ```js - 'use strict'; + ```js + 'use strict'; - const build = require('@microsoft/sp-build-web'); + const build = require('@microsoft/sp-build-web'); - build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`); + build.addSuppression(`Warning - [sass] The local CSS class 'ms-Grid' is not camelCase and will not be type-safe.`); - var getTasks = build.rig.getTasks; - build.rig.getTasks = function () { - var result = getTasks.call(build.rig); + var getTasks = build.rig.getTasks; + build.rig.getTasks = function () { + var result = getTasks.call(build.rig); - result.set('serve', result.get('serve-deprecated')); + result.set('serve', result.get('serve-deprecated')); - return result; - }; + return result; + }; - // ********* ADDED ******* - // disable tslint - build.tslintCmd.enabled = false; - // ********* ADDED ******* + // ********* ADDED ******* + // disable tslint + build.tslintCmd.enabled = false; + // ********* ADDED ******* - build.initialize(require('gulp')); - ``` + build.initialize(require('gulp')); + ``` ### SPFx Version 1.11.0 & earlier @@ -96,60 +96,60 @@ Depending on how you architect your solution establishing context is done where ### Using @pnp/sp `spfi` factory interface in SPFx -```TypeScript -import { spfi, SPFx } from "@pnp/sp"; + ```TypeScript + import { spfi, SPFx } from "@pnp/sp"; -// ... + // ... -protected async onInit(): Promise { + protected async onInit(): Promise { - await super.onInit(); - const sp = spfi().using(SPFx(this.context)); - -} + await super.onInit(); + const sp = spfi().using(SPFx(this.context)); + + } -// ... + // ... -``` + ``` ### Using @pnp/graph `graphfi` factory interface in SPFx -```TypeScript -import { graphfi, SPFx } from "@pnp/graph"; + ```TypeScript + import { graphfi, SPFx } from "@pnp/graph"; -// ... + // ... -protected async onInit(): Promise { + protected async onInit(): Promise { - await super.onInit(); - const graph = graphfi().using(SPFx(this.context)); + await super.onInit(); + const graph = graphfi().using(SPFx(this.context)); -} + } -// ... + // ... -``` + ``` ### Using both @pnp/sp and @pnp/graph in SPFx -```TypeScript + ```TypeScript -import { spfi, SPFx as spSPFx } from "@pnp/sp"; -import { graphfi, SPFx as graphSPFx} from "@pnp/graph"; + import { spfi, SPFx as spSPFx } from "@pnp/sp"; + import { graphfi, SPFx as graphSPFx} from "@pnp/graph"; -// ... + // ... -protected async onInit(): Promise { + protected async onInit(): Promise { - await super.onInit(); - const sp = spfi().using(spSPFx(this.context)); - const graph = graphfi().using(graphSPFx(this.context)); + await super.onInit(); + const sp = spfi().using(spSPFx(this.context)); + const graph = graphfi().using(graphSPFx(this.context)); -} + } -// ... + // ... -``` + ``` ## Project Config/Services Setup @@ -162,21 +162,64 @@ Please see the [documentation](./concepts/project-preset.md) on setting up a con ### Importing NodeJS support > Note that the NodeJS integration relies on code in the module `@pnp/nodejs`. It is therefore required that you import this near the beginning of your program, using simply -> -> ```js -> import "@pnp/nodejs"; -> ``` + + ```js + import "@pnp/nodejs"; + ``` + +### Azure Functions - NodeJS usage + +As of now, by default the template for new Azure Functions uses CommonJS modules. Although you can use ESM in CommonJS projects you need to do the imports asynchronously. This works however it has the disadvantage of not working with intellisense which can be limiting. + + ```ts + const { MyClass } = await import("./myClass.js"); + + MyClass.init(); + ``` + +We recommend switching the project to ESModules by making the following changes: +> An [Azure Function sample](../samples/azure-function/) is available. + +#### Modification for `package.json` + + ```json + { + //... + "type": "module", + //... + } + ``` + +#### Sample `tsconfig.json` + + ```json + { + "compilerOptions": { + "module": "ESNext", + "target": "ESNext", + "outDir": "dist", + "rootDir": ".", + "sourceMap": true, + "strict": false, + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true, + "typeRoots": [ + "./node_modules/@types" + ], + } + } + ``` ### Authentication To call the SharePoint APIs via MSAL you are required to use certificate authentication with your application. Fully covering certificates is outside the scope of these docs, but the following commands were used with openssl to create testing certs for the sample code below. -```cmd -mkdir \temp -cd \temp -openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365 -passout pass:HereIsMySuperPass -subj '/C=US/ST=Washington/L=Seattle' -openssl rsa -in keytmp.pem -out key.pem -passin pass:HereIsMySuperPass -``` + ```cmd + mkdir \temp + cd \temp + openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365 -passout pass:HereIsMySuperPass -subj '/C=US/ST=Washington/L=Seattle' + openssl rsa -in keytmp.pem -out key.pem -passin pass:HereIsMySuperPass + ``` > Using the above code you end up with three files, "cert.pem", "key.pem", and "keytmp.pem". The "cert.pem" file is uploaded to your AAD application registration. The "key.pem" is read as the private key for the configuration. @@ -186,76 +229,76 @@ openssl rsa -in keytmp.pem -out key.pem -passin pass:HereIsMySuperPass The first step is to install the packages that will be needed. You can read more about what each package does starting on the [packages](packages.md) page. -```cmd -npm i @pnp/sp @pnp/nodejs -``` + ```cmd + npm i @pnp/sp @pnp/nodejs + ``` Once these are installed you need to import them into your project, to communicate with SharePoint from node we'll need the following imports: -```TypeScript - -import { SPDefault } from "@pnp/nodejs"; -import "@pnp/sp/webs/index.js"; -import { readFileSync } from 'fs'; -import { Configuration } from "@azure/msal-node"; - -function() { - // configure your node options (only once in your application) - const buffer = readFileSync("c:/temp/key.pem"); - - const config: Configuration = { - auth: { - authority: "https://login.microsoftonline.com/{tenant id or common}/", - clientId: "{application (client) i}", - clientCertificate: { - thumbprint: "{certificate thumbprint, displayed in AAD}", - privateKey: buffer.toString(), + ```TypeScript + + import { SPDefault } from "@pnp/nodejs"; + import "@pnp/sp/webs/index.js"; + import { readFileSync } from 'fs'; + import { Configuration } from "@azure/msal-node"; + + function() { + // configure your node options (only once in your application) + const buffer = readFileSync("c:/temp/key.pem"); + + const config: Configuration = { + auth: { + authority: "https://login.microsoftonline.com/{tenant id or common}/", + clientId: "{application (client) i}", + clientCertificate: { + thumbprint: "{certificate thumbprint, displayed in AAD}", + privateKey: buffer.toString(), + }, }, - }, - }; - - const sp = spfi().using(SPDefault({ - baseUrl: 'https://{my tenant}.sharepoint.com/sites/dev/', - msal: { - config: config, - scopes: [ 'https://{my tenant}.sharepoint.com/.default' ] - } - })); - - // make a call to SharePoint and log it in the console - const w = await sp.web.select("Title", "Description")(); - console.log(JSON.stringify(w, null, 4)); -}(); -``` + }; + + const sp = spfi().using(SPDefault({ + baseUrl: 'https://{my tenant}.sharepoint.com/sites/dev/', + msal: { + config: config, + scopes: [ 'https://{my tenant}.sharepoint.com/.default' ] + } + })); + + // make a call to SharePoint and log it in the console + const w = await sp.web.select("Title", "Description")(); + console.log(JSON.stringify(w, null, 4)); + }(); + ``` ### Using @pnp/graph `graphfi` factory interface in NodeJS Similar to the above you can also make calls to the Microsoft Graph API from node using the libraries. Again we start with installing the required resources. You can see [./debug/launch/graph.ts](https://github.com/pnp/pnpjs/blob/main/debug/launch/graph.ts) for a live example. -```cmd -npm i @pnp/graph @pnp/nodejs -``` + ```cmd + npm i @pnp/graph @pnp/nodejs + ``` Now we need to import what we'll need to call graph -```TypeScript -import { graphfi } from "@pnp/graph"; -import { GraphDefault } from "@pnp/nodejs"; -import "@pnp/graph/users/index.js"; - -function() { - const graph = graphfi().using(GraphDefault({ - baseUrl: 'https://graph.microsoft.com', - msal: { - config: config, - scopes: [ 'https://graph.microsoft.com/.default' ] - } - })); - // make a call to Graph and get all the groups - const userInfo = await graph.users.top(1)(); - console.log(JSON.stringify(userInfo, null, 4)); -}(); -``` + ```TypeScript + import { graphfi } from "@pnp/graph"; + import { GraphDefault } from "@pnp/nodejs"; + import "@pnp/graph/users/index.js"; + + function() { + const graph = graphfi().using(GraphDefault({ + baseUrl: 'https://graph.microsoft.com', + msal: { + config: config, + scopes: [ 'https://graph.microsoft.com/.default' ] + } + })); + // make a call to Graph and get all the groups + const userInfo = await graph.users.top(1)(); + console.log(JSON.stringify(userInfo, null, 4)); + }(); + ``` ### Node project using TypeScript producing commonjs modules @@ -267,45 +310,45 @@ You must install TypeScript @next or you will get errors using node12 module res The tsconfig file for your project should have the `"module": "CommonJS"` and `"moduleResolution": "node12",` settings in addition to whatever else you need. -_tsconfig.json_ +#### tsconfig.json -```JSON -{ - "compilerOptions": { - "module": "CommonJS", - "moduleResolution": "node12" -} -``` + ```JSON + { + "compilerOptions": { + "module": "CommonJS", + "moduleResolution": "node12" + } + ``` You must then import the esm dependencies using the async import pattern. This works as expected with our selective imports, and vscode will pick up the intellisense as expected. -_index.ts_ +#### index.ts -```TypeScript -import { settings } from "./settings.js"; + ```TypeScript + import { settings } from "./settings.js"; -// this is a simple example as async await is not supported with commonjs output -// at the root. -setTimeout(async () => { + // this is a simple example as async await is not supported with commonjs output + // at the root. + setTimeout(async () => { - const { spfi } = await import("@pnp/sp"); - const { SPDefault } = await import("@pnp/nodejs"); - await import("@pnp/sp/webs/index.js"); + const { spfi } = await import("@pnp/sp"); + const { SPDefault } = await import("@pnp/nodejs"); + await import("@pnp/sp/webs/index.js"); - const sp = spfi().using(SPDefault({ - baseUrl: settings.testing.sp.url, - msal: { - config: settings.testing.sp.msal.init, - scopes: settings.testing.sp.msal.scopes - } - })); - - // make a call to SharePoint and log it in the console - const w = await sp.web.select("Title", "Description")(); - console.log(JSON.stringify(w, null, 4)); + const sp = spfi().using(SPDefault({ + baseUrl: settings.testing.sp.url, + msal: { + config: settings.testing.sp.msal.init, + scopes: settings.testing.sp.msal.scopes + } + })); + + // make a call to SharePoint and log it in the console + const w = await sp.web.select("Title", "Description")(); + console.log(JSON.stringify(w, null, 4)); -}, 0); -``` + }, 0); + ``` Finally, when launching node you need to include the `` flag with a setting of 'node'. @@ -335,27 +378,27 @@ Because of the way the fluent library is designed by definition it's extendible. The new factory function allows you to create a connection to a different web maintaining the same setup as your existing interface. You have two options, either to 'AssignFrom' or 'CopyFrom' the base timeline's observers. The below example utilizes 'AssignFrom' but the method would be the same regadless of which route you choose. For more information on these behaviors see [Core/Behaviors](./core/behaviors.md). -```TypeScript -import { spfi, SPFx } from "@pnp/sp"; -import { AssignFrom } from "@pnp/core"; -import "@pnp/sp/webs"; + ```TypeScript + import { spfi, SPFx } from "@pnp/sp"; + import { AssignFrom } from "@pnp/core"; + import "@pnp/sp/webs"; -//Connection to the current context's Web -const sp = spfi(...); + //Connection to the current context's Web + const sp = spfi(...); -// Option 1: Create a new instance of Queryable -const spWebB = spfi({Other Web URL}).using(SPFx(this.context)); + // Option 1: Create a new instance of Queryable + const spWebB = spfi({Other Web URL}).using(SPFx(this.context)); -// Option 2: Copy/Assign a new instance of Queryable using the existing -const spWebB = spfi({Other Web URL}).using(AssignFrom(sp.web)); + // Option 2: Copy/Assign a new instance of Queryable using the existing + const spWebB = spfi({Other Web URL}).using(AssignFrom(sp.web)); -// Option 3: Create a new instance of Queryable using other credentials? -const spWebB = spfi({Other Web URL}).using(SPFx(this.context)); + // Option 3: Create a new instance of Queryable using other credentials? + const spWebB = spfi({Other Web URL}).using(SPFx(this.context)); -// Option 4: Create new Web instance by using copying SPQuerable and new pointing to new web url (e.g. https://contoso.sharepoint.com/sites/Web2) -const web = Web([sp.web, {Other Web URL}]); -``` + // Option 4: Create new Web instance by using copying SPQuerable and new pointing to new web url (e.g. https://contoso.sharepoint.com/sites/Web2) + const web = Web([sp.web, {Other Web URL}]); + ``` ## Next Steps -For more complicated authentication scnearios please [review the article describing all of the available authentication methods](./concepts/authentication.md). +For more complicated authentication scenarios please [review the article describing all of the available authentication methods](./concepts/authentication.md). diff --git a/packages/logging/index.js b/packages/logging/index.js index 8f6ab8e23..090bfbdf7 100644 --- a/packages/logging/index.js +++ b/packages/logging/index.js @@ -1,6 +1,17 @@ export * from "./listeners.js"; +/** + * A set of logging levels + */ +export var LogLevel; +(function (LogLevel) { + LogLevel[LogLevel["Verbose"] = 0] = "Verbose"; + LogLevel[LogLevel["Info"] = 1] = "Info"; + LogLevel[LogLevel["Warning"] = 2] = "Warning"; + LogLevel[LogLevel["Error"] = 3] = "Error"; + LogLevel[LogLevel["Off"] = 99] = "Off"; +})(LogLevel || (LogLevel = {})); const _subscribers = []; -let _activeLogLevel = 2 /* Warning */; +let _activeLogLevel = LogLevel.Warning; /** * Class used to subscribe ILogListener and log messages throughout an application * @@ -43,7 +54,7 @@ export class Logger { * @param message The message to write * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info) */ - static write(message, level = 1 /* Info */) { + static write(message, level = LogLevel.Info) { Logger.log({ level: level, message: message }); } /** @@ -52,7 +63,7 @@ export class Logger { * @param json The json object to stringify and write * @param level [Optional] if supplied will be used as the level of the entry (Default: LogLevel.Info) */ - static writeJSON(json, level = 1 /* Info */) { + static writeJSON(json, level = LogLevel.Info) { Logger.write(JSON.stringify(json), level); } /** @@ -71,7 +82,7 @@ export class Logger { * @param err The error object */ static error(err) { - Logger.log({ data: err, level: 3 /* Error */, message: err.message }); + Logger.log({ data: err, level: LogLevel.Error, message: err.message }); } } export function PnPLogging(activeLevel) { diff --git a/packages/logging/listeners.js b/packages/logging/listeners.js index fdc636b47..18aae193e 100644 --- a/packages/logging/listeners.js +++ b/packages/logging/listeners.js @@ -1,3 +1,5 @@ +/* eslint-disable no-console */ +import { LogLevel } from "./index.js"; export function ConsoleListener(prefix, colors) { return new _ConsoleListener(prefix, colors); } @@ -55,16 +57,16 @@ class _ConsoleListener { log(entry) { let logMethod = console.log; switch (entry.level) { - case 3 /* Error */: + case LogLevel.Error: logMethod = console.error; break; - case 2 /* Warning */: + case LogLevel.Warning: logMethod = console.warn; break; - case 0 /* Verbose */: + case LogLevel.Verbose: logMethod = console.debug; break; - case 1 /* Info */: + case LogLevel.Info: logMethod = console.info; break; default: diff --git a/samples/azure-function/.funcignore b/samples/azure-function/.funcignore new file mode 100644 index 000000000..d5b3b4a26 --- /dev/null +++ b/samples/azure-function/.funcignore @@ -0,0 +1,10 @@ +*.js.map +*.ts +.git* +.vscode +__azurite_db*__.json +__blobstorage__ +__queuestorage__ +local.settings.json +test +tsconfig.json \ No newline at end of file diff --git a/samples/azure-function/.gitignore b/samples/azure-function/.gitignore new file mode 100644 index 000000000..01774db7f --- /dev/null +++ b/samples/azure-function/.gitignore @@ -0,0 +1,99 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TypeScript output +dist +out + +# Azure Functions artifacts +bin +obj +appsettings.json +local.settings.json + +# Azurite artifacts +__blobstorage__ +__queuestorage__ +__azurite_db*__.json \ No newline at end of file diff --git a/samples/azure-function/.vscode/extensions.json b/samples/azure-function/.vscode/extensions.json new file mode 100644 index 000000000..036c40833 --- /dev/null +++ b/samples/azure-function/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "ms-azuretools.vscode-azurefunctions" + ] +} \ No newline at end of file diff --git a/samples/azure-function/.vscode/launch.json b/samples/azure-function/.vscode/launch.json new file mode 100644 index 000000000..1c6e50dac --- /dev/null +++ b/samples/azure-function/.vscode/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Node Functions", + "type": "node", + "request": "attach", + "port": 9229, + "preLaunchTask": "func: host start" + } + ] +} \ No newline at end of file diff --git a/samples/azure-function/.vscode/settings.json b/samples/azure-function/.vscode/settings.json new file mode 100644 index 000000000..4ba89dc09 --- /dev/null +++ b/samples/azure-function/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "azureFunctions.deploySubpath": ".", + "azureFunctions.postDeployTask": "npm install (functions)", + "azureFunctions.projectLanguage": "TypeScript", + "azureFunctions.projectRuntime": "~4", + "debug.internalConsoleOptions": "neverOpen", + "azureFunctions.projectLanguageModel": 4, + "azureFunctions.preDeployTask": "npm prune (functions)", + "cSpell.words": [ + "Entra" + ], + "azureFunctions.templateFilter": "Verified" +} \ No newline at end of file diff --git a/samples/azure-function/.vscode/tasks.json b/samples/azure-function/.vscode/tasks.json new file mode 100644 index 000000000..cef1341d6 --- /dev/null +++ b/samples/azure-function/.vscode/tasks.json @@ -0,0 +1,38 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "func", + "label": "func: host start", + "command": "host start", + "problemMatcher": "$func-node-watch", + "isBackground": true, + "dependsOn": "npm build (functions)" + }, + { + "type": "shell", + "label": "npm build (functions)", + "command": "npm run build", + "dependsOn": "npm clean (functions)", + "problemMatcher": "$tsc" + }, + { + "type": "shell", + "label": "npm install (functions)", + "command": "npm install" + }, + { + "type": "shell", + "label": "npm prune (functions)", + "command": "npm prune --production", + "dependsOn": "npm build (functions)", + "problemMatcher": [] + }, + { + "type": "shell", + "label": "npm clean (functions)", + "command": "npm run clean", + "dependsOn": "npm install (functions)" + } + ] +} \ No newline at end of file diff --git a/samples/azure-function/README.md b/samples/azure-function/README.md new file mode 100644 index 000000000..712b5bc94 --- /dev/null +++ b/samples/azure-function/README.md @@ -0,0 +1,51 @@ +# PnPjs - Azure Function v4 Support + +This sample project demonstrates how to use the PnPjs SDK inside of an Azure Function v4 with Application Insights, one of the most common scenarios when building extensibility solutions for Microsoft 365. + +By default Azure Functions are configured to use Node.js CommonJS modules. However, PnPjs only supports ESModules. This sample shows you how to reconfigure your solution so that you can use ESModules and import any other CommonJS modules that you have as dependencies. + +## List of changes + +- tsconfig.json: [Intro to TSConfig Reference](https://www.typescriptlang.org/tsconfig) + - "module": "ESNext" + - "target": "ESNext" + - "moduleResolution": "Node" + - "allowSyntheticDefaultImports": true + +- package.json + - "type": "module" + +## Importing CommonJS packages + +With these settings updated we can now import our CommonJS packages by using + +`import AppInsights from 'applicationinsights';` + +instead of + +`let appInsights = require('applicationinsights');` + +## Azure Identity + +Azure Identity is an SDK that provides Microsoft Entra ID (formerly Azure Active Directory - Azure AD) token authentication through a set of convenient TokenCredential implementations. [More information](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/identity/identity/README.md) + +This sample implements PnPjs security expecting Managed Identity has been configured for the Azure Function. + +> We find the [CLI for Microsoft 365](https://pnp.github.io/cli-microsoft365/) - [entra approleassignment add](https://pnp.github.io/cli-microsoft365/cmd/entra/approleassignment/approleassignment-add) especially handy for assigning the permissions necessary to your Azure Functions' system-managed identity. + +When in local development mode you can log into Azure by including the Azure Account extension for Visual Studio Code, or preferably you can configure 3 additional settings in your [local.settings.json](./local.settings.example.json) file to point to an Entra ID App Registration in your development tenant using Certificate authentication. + +```JSON +"AZURE_CLIENT_ID": "99999999-9999-9999-9999-999999999999", +"AZURE_TENANT_ID": "99999999-9999-9999-9999-999999999999", +// path to .pem file that is the companion the app registration certificate. +"AZURE_CLIENT_CERTIFICATE_PATH":"c:\\cert.pem" +``` + +See the more information link above for other supported authentication scenarios like Client Secret and Certificate. Be aware many SharePoint endpoint do not support Client Secret authentication. + +## Application Insights + +Azure Application Insights monitors your backend services and components after you deploy them to help you discover and rapidly diagnose performance and other issues. Add this SDK to your Node.js services to include deep info about Node.js processes and their external dependencies such as database and cache services. You can use this SDK for your Node.js services hosted anywhere: your datacenter, Azure VMs and Web Apps, and even other public clouds. + +To get [more information](https://github.com/microsoft/ApplicationInsights-node.js#readme) on Application Insights. diff --git a/samples/azure-function/host.json b/samples/azure-function/host.json new file mode 100644 index 000000000..852b7b7a4 --- /dev/null +++ b/samples/azure-function/host.json @@ -0,0 +1,15 @@ +{ + "version": "2.0", + "logging": { + "applicationInsights": { + "samplingSettings": { + "isEnabled": true, + "excludedTypes": "Request" + } + } + }, + "extensionBundle": { + "id": "Microsoft.Azure.Functions.ExtensionBundle", + "version": "[3.15.0, 4.0.0)" + } +} \ No newline at end of file diff --git a/samples/azure-function/local.settings.example.json b/samples/azure-function/local.settings.example.json new file mode 100644 index 000000000..49cbfc4df --- /dev/null +++ b/samples/azure-function/local.settings.example.json @@ -0,0 +1,17 @@ +{ + "IsEncrypted": false, + "Values": { + "AzureWebJobsStorage": "UseDevelopmentStorage=true", + "FUNCTIONS_WORKER_RUNTIME": "node", + "AzureWebJobsFeatureFlags": "EnableWorkerIndexing", + "APPLICATIONINSIGHTS_CONNECTION_STRING": "", + "SiteUrl": "https://contoso.sharepoint.com/sites/pnpjs", + "Tenant": "contoso", + "ListGUID": "99999999-9999-9999-9999-999999999999", + // Next 3 setting are only for local Azure Identity debugging + "AZURE_CLIENT_ID": "99999999-9999-9999-9999-999999999999", + "AZURE_TENANT_ID": "99999999-9999-9999-9999-999999999999", + // path to .pem file + "AZURE_CLIENT_CERTIFICATE_PATH":"c:\\cert.pem" + } +} \ No newline at end of file diff --git a/samples/azure-function/package.json b/samples/azure-function/package.json new file mode 100644 index 000000000..317be4d41 --- /dev/null +++ b/samples/azure-function/package.json @@ -0,0 +1,28 @@ +{ + "name": "azfuncnode", + "version": "1.0.0", + "description": "", + "type": "module", + "scripts": { + "build": "tsc", + "watch": "tsc -w", + "clean": "rimraf dist", + "prestart": "npm run clean && npm run build", + "start": "func start", + "test": "echo \"No tests yet...\"" + }, + "dependencies": { + "@azure/functions": "4.4.0", + "@pnp/azidjsclient": "4.0.0", + "@pnp/graph": "4.0.0", + "@pnp/nodejs": "4.0.0", + "@pnp/sp": "4.0.0", + "applicationinsights": "2.9.5" + }, + "devDependencies": { + "@types/node": "^18.x", + "typescript": "^5.0.0", + "rimraf": "^5.0.0" + }, + "main": "dist/src/functions/*.js" +} \ No newline at end of file diff --git a/samples/azure-function/src/common/models.ts b/samples/azure-function/src/common/models.ts new file mode 100644 index 000000000..d52e5bb72 --- /dev/null +++ b/samples/azure-function/src/common/models.ts @@ -0,0 +1,5 @@ +export interface MyItem { + Id: string; + Title: string; + Description: string; +} \ No newline at end of file diff --git a/samples/azure-function/src/common/pnpjsService.ts b/samples/azure-function/src/common/pnpjsService.ts new file mode 100644 index 000000000..77e7bed7a --- /dev/null +++ b/samples/azure-function/src/common/pnpjsService.ts @@ -0,0 +1,86 @@ +import AppInsights from 'applicationinsights'; +import { DefaultAzureCredential } from "@azure/identity"; +import { MyItem } from './models.js'; + +import { spfi, SPFI } from "@pnp/sp"; +import { AzureIdentity } from "@pnp/azidjsclient"; +import { GraphDefault, SPDefault } from "@pnp/nodejs"; +import "@pnp/sp/webs/index.js"; +import "@pnp/sp/lists/index.js"; +import "@pnp/sp/items/index.js"; +import { graphfi, GraphFI } from '@pnp/graph'; + +export interface IPnpjsService { + Init: () => Promise; + GetListItem: (id: string) => Promise; +} + +export class PnpjsService implements IPnpjsService { + private LOG_SOURCE = "PnpjsService"; + private _ready: boolean = false; + + private _sp: SPFI = null; + private _graph: GraphFI = null; + + public constructor() { } + + public async Init(): Promise { + let retVal = false; + try { + + const credential = new DefaultAzureCredential(); + + this._sp = spfi(process.env.SiteUrl).using(SPDefault({}), + AzureIdentity(credential, [`https://${process.env.Tenant}.sharepoint.com/.default`], null)); + + this._graph = graphfi().using(GraphDefault({}), AzureIdentity(credential, [`https://graph.microsoft.com/.default`], null)); + + this._ready = true; + retVal = true; + AppInsights.defaultClient.trackTrace({ + message: 'Init success', + properties: { + source: this.LOG_SOURCE, + method: "Init" + }, + severity: AppInsights.Contracts.SeverityLevel.Verbose + }); + } catch (err) { + AppInsights.defaultClient.trackException({ + exception: err, + severity: AppInsights.Contracts.SeverityLevel.Critical, + properties: { source: this.LOG_SOURCE, method: "Init" } + }); + } + return retVal; + } + + public get ready(): boolean { + return this._ready; + } + + public async GetListItem(id: string): Promise { + let retVal: MyItem = null; + try { + const item = await this._sp.web.lists.getById(process.env.ListGUID).items.getById(+id)(); + retVal = { Id: item.Id, Title: item.Title, Description: item.Description }; + AppInsights.defaultClient.trackTrace({ + message: 'GetListItem success', + properties: { + source: this.LOG_SOURCE, + method: "GetListItem" + }, + severity: AppInsights.Contracts.SeverityLevel.Verbose + }); + } catch (err) { + AppInsights.defaultClient.trackException({ + exception: err, + severity: AppInsights.Contracts.SeverityLevel.Critical, + properties: { source: this.LOG_SOURCE, method: "GetListItem" } + }); + } + return retVal; + } +} + +export const pnpjs: IPnpjsService = new PnpjsService(); diff --git a/samples/azure-function/src/functions/httpTrigger.ts b/samples/azure-function/src/functions/httpTrigger.ts new file mode 100644 index 000000000..a571e83cf --- /dev/null +++ b/samples/azure-function/src/functions/httpTrigger.ts @@ -0,0 +1,83 @@ +import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions"; +import AppInsights from 'applicationinsights'; +import { pnpjs } from "../common/pnpjsService.js"; + +export async function httpTrigger(request: HttpRequest, context: InvocationContext): Promise { + const LOG_SOURCE = "httpTrigger"; + // Initialize Application Insights, setting AutoDependencyCorrelation to true so that all logs for each run are correlated together in App Insights. + AppInsights.setup(process.env.APPLICATIONINSIGHTS_CONNECTION_STRING).setAutoDependencyCorrelation(true); + + // start the client + AppInsights.start(); + + AppInsights.defaultClient.trackEvent({ + name: `${LOG_SOURCE}/request`, + properties: { + source: LOG_SOURCE, + requestBody: JSON.stringify(request.body), + requestQuery: JSON.stringify(request.query) + } + }); + + // Set the default response to a 200 with an empty body. + let retVal: HttpResponseInit = { status: 200, body: "" }; + + try { + // If the request is a GET + if (request.method == "GET") { + const id = request.query.get("id"); + if (id != null) { + const ready = await pnpjs.Init(); + if (ready) { + const result = await pnpjs.GetListItem(id); + if (result != null) { + retVal = { status: 200, body: JSON.stringify(result) }; + AppInsights.defaultClient.trackTrace({ + message: 'Found item', + properties: { + source: LOG_SOURCE, + request_type: "GET" + }, + severity: AppInsights.Contracts.SeverityLevel.Verbose + }); + } else { + retVal = { status: 400, body: "Item not found." }; + AppInsights.defaultClient.trackTrace({ + message: 'Item not found', + properties: { + source: LOG_SOURCE, + request_type: "GET" + }, + severity: AppInsights.Contracts.SeverityLevel.Verbose + }); + } + } + } else { + retVal = { status: 400, body: "Invalid request" }; + AppInsights.defaultClient.trackTrace({ + message: 'Invalid Request', + properties: { + source: LOG_SOURCE, + request_type: "GET" + }, + severity: AppInsights.Contracts.SeverityLevel.Verbose + }); + } + } + } catch (err) { + AppInsights.defaultClient.trackException({ + exception: err, + severity: AppInsights.Contracts.SeverityLevel.Critical, + properties: { source: LOG_SOURCE, method: "httpTrigger" } + }); + } + + // Return the appropriate response to the requestor. + return retVal; +}; + +app.http('httpTrigger', { + methods: ['GET'], + authLevel: 'anonymous', + handler: httpTrigger +}); diff --git a/samples/azure-function/tsconfig.json b/samples/azure-function/tsconfig.json new file mode 100644 index 000000000..15e053853 --- /dev/null +++ b/samples/azure-function/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "ESNext", + "target": "ESNext", + "outDir": "dist", + "rootDir": ".", + "sourceMap": true, + "strict": false, + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true, + "typeRoots": [ + "./node_modules/@types" + ], + } +} \ No newline at end of file diff --git a/test/graph/admin.ts b/test/graph/admin.ts index 6dd5bc495..86e82045e 100644 --- a/test/graph/admin.ts +++ b/test/graph/admin.ts @@ -5,7 +5,7 @@ import "@pnp/graph/admin"; describe("Admin", function () { const customUserProperty = "CustomAttribute1"; - let propertyId = ""; + // let propertyId = ""; // Ensure we have the data to test against before(async function () { @@ -15,23 +15,24 @@ describe("Admin", function () { } // Get a sample property - try { - const property = await this.pnp.graph.admin.people.profileCardProperties.add({ - directoryPropertyName: customUserProperty, - annotations: [{ - displayName: "Cost Center", - localizations: [ - { - languageTag: "ru-RU", - displayName: "центр затрат", - }, - ], - }], - }); - propertyId = property.id; - } catch (err) { - console.log("Could not set test values for Admin"); - } + // This only works with delegated permissions as of 4/15/24 + // try { + // const property = await this.pnp.graph.admin.people.profileCardProperties.add({ + // directoryPropertyName: customUserProperty, + // annotations: [{ + // displayName: "Cost Center", + // localizations: [ + // { + // languageTag: "ru-RU", + // displayName: "центр затрат", + // }, + // ], + // }], + // }); + // propertyId = property.id; + // } catch (err) { + // console.log("Could not set test values for Admin"); + // } }); describe("SharePoint", function () { @@ -167,15 +168,16 @@ describe("Admin", function () { after(async function () { - if (!stringIsNullOrEmpty(propertyId)) { - try { + // Only needed when profile card properties can be created with application permissions + // if (!stringIsNullOrEmpty(propertyId)) { + // try { - await this.pnp.graph.admin.people.profileCardProperties.getById(propertyId).delete(); + // await this.pnp.graph.admin.people.profileCardProperties.getById(propertyId).delete(); - } catch (err) { - console.error(`Cannot clean up test property: ${propertyId}`); - } - } + // } catch (err) { + // console.error(`Cannot clean up test property: ${propertyId}`); + // } + // } return; }); }); diff --git a/test/graph/analytics.ts b/test/graph/analytics.ts index 14aa583d3..530008aba 100644 --- a/test/graph/analytics.ts +++ b/test/graph/analytics.ts @@ -22,11 +22,11 @@ describe("Analytics", function () { const fileOptions = { content: "This is some test content", - filePathName: "pnpTest.txt", + filePathName: `pnpTest${getRandomString(5)}.txt`, contentType: "text/plain;charset=utf-8", }; const sampleList: List = { - displayName: "PnPGraphTestListItemAnalytics", + displayName: `PnPGraphTestListItemAnalytics${getRandomString(5)}`, list: { "template": "genericList" }, }; @@ -48,12 +48,12 @@ describe("Analytics", function () { }); const listResult = await site.lists.add(sampleList); - listResultId = listResult.data.id; + listResultId = listResult.id; const listItemProps: any = { title: props.title, }; const listItem = await site.lists.getById(listResultId).items.add(listItemProps); - listItemId = listItem.data.id; + listItemId = listItem.id; } catch (err) { console.log("Could not create a sample list and item."); } diff --git a/test/graph/onenote.ts b/test/graph/onenote.ts index a5be833e3..91ac577f6 100644 --- a/test/graph/onenote.ts +++ b/test/graph/onenote.ts @@ -5,11 +5,11 @@ import "@pnp/graph/groups"; import "@pnp/graph/sites"; import "@pnp/graph/users"; import "@pnp/graph/onenote"; -import { Notebook } from "@microsoft/microsoft-graph-types"; +import "@pnp/graph/files"; import getValidUser from "./utilities/getValidUser.js"; describe("OneNote", function () { - let notebook: Notebook; + let notebookId: string; let testUserName: string; before(async function () { @@ -20,97 +20,119 @@ describe("OneNote", function () { const userInfo = await getValidUser.call(this); testUserName = userInfo.userPrincipalName; - notebook = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.add(getRandomString(10)); - - if(!notebook.id){ + const notebook = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.add(getRandomString(10)); + if(notebook != null){ + notebookId = notebook.id; + } + if (stringIsNullOrEmpty(notebookId)) { this.skip(); } }); - it("onenote - list notebooks", pnpTest("9d0fe4b3-dc62-4699-be83-cc6f72daa62", async function () { + after(async function () { + if (!stringIsNullOrEmpty(notebookId)) { + try { + const notebookFolder = await this.pnp.graph.users.getById(testUserName).drive.getItemByPath("notebooks").children(); + if(notebookFolder.length > 0){ + // Delete all notebooks + for(let i=0; i 0){ - const copy = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebooks[0].id).copy({renameAs:getRandomString(10)}); + if (notebooks.length > 0) { + const copy = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebooks[0].id).copy({ renameAs: getRandomString(10) }); return expect(copy.id).is.not.null; } this.skip(); })); - it("onenote - section copyToNotebook()", pnpTest("b5cc2f9b-0a19-4d42-a041-1a68a2cfd915", async function () { - const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); - if(section){ - const copy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).copyToNotebook({id:notebook.id, renameAs:getRandomString(10)}); + // TODO: Seeing if there's something we can do but throwing 500 errors + it.skip("Section copyToNotebook()", pnpTest("b5cc2f9b-0a19-4d42-a041-1a68a2cfd915", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections.add(getRandomString(10)); + if (section) { + const copy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).copyToNotebook({ id: notebookId, renameAs: getRandomString(10) }); return expect(copy.id).is.not.null; } this.skip(); })); - it("onenote - section copyToSectionGroup()", pnpTest("b48e5d00-7806-4bde-96fe-1650dea1e1e4", async function () { - const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); - const group = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sectionGroups.add(getRandomString(10)); - if(section.id && group.id){ - const copy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).copyToSectionGroup({id:group.id, renameAs:getRandomString(5)}); + // TODO: Seeing if there's something we can do but throwing 500 errors + it.skip("Section copyToSectionGroup()", pnpTest("b48e5d00-7806-4bde-96fe-1650dea1e1e4", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections.add(getRandomString(10)); + const group = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sectionGroups.add(getRandomString(10)); + if (section.id && group.id) { + const copy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).copyToSectionGroup({ id: group.id, renameAs: getRandomString(5) }); return expect(copy.id).is.not.null; } this.skip(); })); // doesn't work well with large onenotes. - it.skip("onenote - list pages", pnpTest("77d47760-0371-4045-898d-6a95d8e42cca", async function () { + it.skip("List pages", pnpTest("77d47760-0371-4045-898d-6a95d8e42cca", async function () { const pages = await this.pnp.graph.users.getById(testUserName).onenote.pages(); return expect(pages).to.be.an("array"); })); // doesn't work well with large onenotes. - it.skip("onenote - pages getById()", pnpTest("fcd78bde-69a0-4331-8aa4-389bba222963", async function () { + it.skip("Pages getById()", pnpTest("fcd78bde-69a0-4331-8aa4-389bba222963", async function () { const pages = await this.pnp.graph.users.getById(testUserName).onenote.pages(); - if(pages.length > 0){ + if (pages.length > 0) { const page = await this.pnp.graph.users.getById(testUserName).onenote.pages.getById(pages[0].id)(); return expect(page.id).is.not.null; } this.skip(); })); - it("onenote - pages copyToSection", pnpTest("e8c21973-8d90-4bc4-947f-ef39198832dd", async function () { - const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); - const pages = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages(); - if(section.id && pages.length > 0) { - const pageCopy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages.getById(pages[0].id).copyToSection({id:section.id}); - return expect(pageCopy).to.be.fulfilled; + it("Pages copyToSection", pnpTest("e8c21973-8d90-4bc4-947f-ef39198832dd", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections.add(getRandomString(10)); + const pages = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages(); + if (section.id && pages.length > 0) { + const pageCopy = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages.getById(pages[0].id).copyToSection({ id: section.id }); + return expect(pageCopy).to.be.fulfilled; } this.skip(); })); - it("onenote - add page", pnpTest("60a4fd91-3f6b-4f6f-a5bb-e11f57186eaf", async function () { - const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); - if(section.id){ - const pageData =` + it("Add page", pnpTest("60a4fd91-3f6b-4f6f-a5bb-e11f57186eaf", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections.add(getRandomString(10)); + if (section.id) { + const pageData = ` A page with <i>rendered</i> images and an <b>attached</b> file @@ -131,9 +153,9 @@ describe("OneNote", function () { this.skip(); })); - it("onenote - sections list pages", pnpTest("5f44bc04-6119-432e-ac92-602085c4dc91", async function () { - const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); - if(section.id){ + it("Sections list pages", pnpTest("5f44bc04-6119-432e-ac92-602085c4dc91", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections.add(getRandomString(10)); + if (section.id) { const pages = await this.pnp.graph.users.getById(testUserName).onenote.sections.getById(section.id).pages(); return expect(pages).to.be.an("array"); } @@ -141,10 +163,10 @@ describe("OneNote", function () { })); - it("onenote - sections add page", pnpTest("48744c5a-999a-40fb-9ab8-9d06e0b544a2", async function () { - const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); - if(section.id){ - const pageData =` + it("Sections add page", pnpTest("48744c5a-999a-40fb-9ab8-9d06e0b544a2", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections.add(getRandomString(10)); + if (section.id) { + const pageData = ` A page with <i>rendered</i> images and an <b>attached</b> file @@ -165,55 +187,58 @@ describe("OneNote", function () { this.skip(); })); - it("onenote - list section groups", pnpTest("df461253-a206-4ebf-b993-5b7a76d2ee5b", async function () { + it("List section groups", pnpTest("df461253-a206-4ebf-b993-5b7a76d2ee5b", async function () { const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); return expect(sectionGroups).to.be.an("array"); })); - it("onenote - sectionGroups getById()", pnpTest("4dd65bad-d8db-4b05-984a-ec06cd650c62", async function () { + it("SectionGroups getById()", pnpTest("4dd65bad-d8db-4b05-984a-ec06cd650c62", async function () { const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); - if(sectionGroups.length > 0){ + if (sectionGroups.length > 0) { const section = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups.getById(sectionGroups[0].id)(); return expect(section.id).is.not.null; } this.skip(); })); - it("onenote - list section groups sections", pnpTest("ef961253-a206-4ebf-b993-5a1a76d2ff5b", async function () { + it("List section groups sections", pnpTest("ef961253-a206-4ebf-b993-5a1a76d2ff5b", async function () { const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); - if(sectionGroups.length > 0){ + if (sectionGroups.length > 0) { const sections = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups.getById(sectionGroups[0].id).sections(); return expect(sections).to.be.an("array"); } this.skip(); })); - it("onenote - create section in section group", pnpTest("4959895e-404f-4068-bf5f-85b0d2db9bcf", async function () { + // TODO: Seeing if there's something we can do but throwing 500 errors + it.skip("Create section in section group", pnpTest("4959895e-404f-4068-bf5f-85b0d2db9bcf", async function () { const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups(); - if(sectionGroups.length > 0){ + if (sectionGroups.length > 0) { const section = await this.pnp.graph.users.getById(testUserName).onenote.sectionGroups.getById(sectionGroups[0].id).sections.add(getRandomString(10)); return expect(section.id).is.not.null; } this.skip(); })); - it("notebook - list sections", pnpTest("b746d08e-f07d-4df2-82a3-7e1c7522bef8", async function () { - const sections = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections(); - return expect(sections).to.be.an("array"); - })); + describe("Notebook", function () { + it("List sections", pnpTest("b746d08e-f07d-4df2-82a3-7e1c7522bef8", async function () { + const sections = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections(); + return expect(sections).to.be.an("array"); + })); - it("notebook - add section", pnpTest("1298ee0d-0566-4144-ab56-d8e3c89654c7", async function () { - const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sections.add(getRandomString(10)); - return expect(section.id).is.not.null; - })); + it("Add section", pnpTest("1298ee0d-0566-4144-ab56-d8e3c89654c7", async function () { + const section = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sections.add(getRandomString(10)); + return expect(section.id).is.not.null; + })); - it("notebook - list section groups", pnpTest("66f3aeaa-e9d2-4b26-8894-6ed226e1f180", async function () { - const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sectionGroups(); - return expect(sectionGroups).to.be.an("array"); - })); + it("List section groups", pnpTest("66f3aeaa-e9d2-4b26-8894-6ed226e1f180", async function () { + const sectionGroups = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sectionGroups(); + return expect(sectionGroups).to.be.an("array"); + })); - it("notebook - add section group", pnpTest("cb1d6d80-d5dc-4879-ac5a-288a5f0249ba", async function () { - const sectionGroup = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebook.id).sectionGroups.add(getRandomString(10)); - return expect(sectionGroup.id).is.not.null; - })); + it("Add section group", pnpTest("cb1d6d80-d5dc-4879-ac5a-288a5f0249ba", async function () { + const sectionGroup = await this.pnp.graph.users.getById(testUserName).onenote.notebooks.getById(notebookId).sectionGroups.add(getRandomString(10)); + return expect(sectionGroup.id).is.not.null; + })); + }); }); From b330225541bcde882511bd23b01a08c4b9aeaa2a Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Wed, 17 Apr 2024 10:11:52 -0600 Subject: [PATCH 156/171] Removing Data from Add/Updates --- docs/concepts/batching.md | 2 +- docs/graph/calendars.md | 2 +- docs/graph/items.md | 2 +- docs/sp/clientside-pages.md | 2 +- docs/sp/fields.md | 186 +++++++++--------------- docs/sp/folders.md | 2 +- docs/sp/items.md | 2 +- docs/sp/lists.md | 4 +- docs/sp/navigation.md | 14 +- docs/sp/site-users.md | 2 +- packages/graph/calendars/index.ts | 1 - packages/graph/calendars/types.ts | 8 - packages/graph/columns/addColumns.ts | 18 +-- packages/graph/columns/content-types.ts | 17 +-- packages/graph/columns/index.ts | 4 - packages/graph/columns/lists.ts | 6 +- packages/graph/columns/sites.ts | 6 +- packages/graph/contacts/index.ts | 2 - packages/graph/contacts/types.ts | 34 +---- packages/graph/groups/index.ts | 1 - packages/graph/groups/types.ts | 16 +- packages/graph/list-item/index.ts | 2 - packages/graph/list-item/types.ts | 16 -- packages/graph/lists/index.ts | 1 - packages/graph/lists/types.ts | 32 +--- packages/sp/appcatalog/index.ts | 1 - packages/sp/appcatalog/types.ts | 25 +--- packages/sp/comments/clientside-page.ts | 19 +-- packages/sp/fields/index.ts | 2 - packages/sp/fields/types.ts | 88 +++-------- packages/sp/files/index.ts | 1 - packages/sp/files/types.ts | 38 +---- packages/sp/folders/index.ts | 2 - packages/sp/folders/types.ts | 49 +------ packages/sp/items/index.ts | 3 - packages/sp/items/types.ts | 26 +--- packages/sp/lists/index.ts | 3 - packages/sp/lists/types.ts | 35 +---- packages/sp/navigation/index.ts | 1 - packages/sp/navigation/types.ts | 18 +-- packages/sp/site-groups/index.ts | 2 - packages/sp/site-groups/types.ts | 36 +---- packages/sp/site-users/index.ts | 2 - packages/sp/site-users/types.ts | 36 ++--- packages/sp/site-users/web.ts | 15 +- packages/sp/subscriptions/index.ts | 2 - packages/sp/subscriptions/types.ts | 30 +--- packages/sp/views/index.ts | 2 - packages/sp/views/types.ts | 27 +--- packages/sp/webs/index.ts | 2 - packages/sp/webs/types.ts | 28 +--- test/graph/columns.ts | 44 +++--- test/graph/contacts.ts | 34 ++--- test/graph/content-types.ts | 2 +- test/graph/directoryobjects.ts | 6 +- test/graph/groups.ts | 14 +- test/graph/list-items.ts | 3 +- test/graph/lists.ts | 14 +- test/graph/paging.ts | 2 +- test/graph/to-do.ts | 35 ++--- test/mocha-root-hooks.ts | 2 +- test/queryable/behaviors.ts | 2 +- test/sp/alias.ts | 5 +- test/sp/appcatalog.ts | 2 +- test/sp/attachments.ts | 42 +++--- test/sp/batch.ts | 10 +- test/sp/clientside-pages.ts | 4 +- test/sp/column-defaults.ts | 16 +- test/sp/comments.ts | 6 +- test/sp/fields.ts | 76 +++++----- test/sp/files.ts | 16 +- test/sp/folders.ts | 16 +- test/sp/groupsitemanager.ts | 9 +- test/sp/items.ts | 10 +- test/sp/lists.ts | 73 ++++++---- test/sp/navigation.ts | 23 +-- test/sp/related-items.ts | 20 +-- test/sp/sharing.ts | 5 +- test/sp/site-groups.ts | 25 ++-- test/sp/site-scripts.ts | 5 +- test/sp/site-users.ts | 6 +- test/sp/sites.ts | 10 +- test/sp/sputilities.ts | 2 +- test/sp/subscriptions.ts | 8 +- test/sp/views.ts | 20 +-- test/sp/webs.ts | 4 +- test/test-recording-setup.md | 12 +- 87 files changed, 504 insertions(+), 954 deletions(-) diff --git a/docs/concepts/batching.md b/docs/concepts/batching.md index ade964c84..c6d657954 100644 --- a/docs/concepts/batching.md +++ b/docs/concepts/batching.md @@ -251,7 +251,7 @@ let newItems: IItem[] = []; for(let i=0; i(); + const newItem = await res[i].select("Title")<{Title: string}>(); newItems.push(newItem); } ``` diff --git a/docs/graph/calendars.md b/docs/graph/calendars.md index e292d4206..287e74fa3 100644 --- a/docs/graph/calendars.md +++ b/docs/graph/calendars.md @@ -5,7 +5,7 @@ More information can be found in the official Graph documentation: - [Calendar Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/calendar?view=graph-rest-1.0) - [Event Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/event?view=graph-rest-1.0) -## ICalendar, ICalendars, ICalendarGroup, ICalendarGroups, ICalendarPermission, ICalendarPermissions, ICalendarView, IEvent, IEvents, IEventAddResult, IForwardEvent, IGetScheduleRequest +## ICalendar, ICalendars, ICalendarGroup, ICalendarGroups, ICalendarPermission, ICalendarPermissions, ICalendarView, IEvent, IEvents, IForwardEvent, IGetScheduleRequest [![Invokable Banner](https://img.shields.io/badge/Invokable-informational.svg)](../concepts/invokable.md) [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) diff --git a/docs/graph/items.md b/docs/graph/items.md index 20114a06a..e13a5e0b8 100644 --- a/docs/graph/items.md +++ b/docs/graph/items.md @@ -4,7 +4,7 @@ More information can be found in the official Graph documentation: - [List Item Resource Type](https://docs.microsoft.com/en-us/graph/api/resources/listitem?view=graph-rest-1.0) -## IListItems, IListItem, IListItemAddResult, IDocumentSetVersion, IDocumentSetVersions IDocumentSetVersionAddResult, +## IListItems, IListItem, IDocumentSetVersion, IDocumentSetVersions IDocumentSetVersionAddResult, [![Selective Imports Banner](https://img.shields.io/badge/Selective%20Imports-informational.svg)](../concepts/selective-imports.md) ### Get list items diff --git a/docs/sp/clientside-pages.md b/docs/sp/clientside-pages.md index 7b94d011d..224adcf7e 100644 --- a/docs/sp/clientside-pages.md +++ b/docs/sp/clientside-pages.md @@ -927,7 +927,7 @@ const far = await sp.web.getFolderByServerRelativePath("/sites/dev/Shared Docume const page = await sp.web.addClientsidePage("MyPage", "Page Title"); // set the banner image -page.setBannerImage(far.data.ServerRelativeUrl); +page.setBannerImage(far.ServerRelativeUrl); // publish the page await page.save(); diff --git a/docs/sp/fields.md b/docs/sp/fields.md index 8ec6ce5f8..5af47c73b 100644 --- a/docs/sp/fields.md +++ b/docs/sp/fields.md @@ -85,7 +85,7 @@ Create a new field by defining an XML schema that assigns all the properties for ```TypeScript import { spfi } from "@pnp/sp"; -import { IField, IFieldAddResult } from "@pnp/sp/fields/types"; +import { IField, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; @@ -97,15 +97,13 @@ const sp = spfi(...); const fieldSchema = `[today]`; // create the new field in the web -const field: IFieldAddResult = await sp.web.fields.createFieldAsXml(fieldSchema); +const field:IFieldInfo = await sp.web.fields.createFieldAsXml(fieldSchema); // create the new field in the list 'My List' -const field2: IFieldAddResult = await sp.web.lists.getByTitle("My List").fields.createFieldAsXml(fieldSchema); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.createFieldAsXml(fieldSchema); -// we can use this 'field' variable to run more queries on the list: -const r = await field.field.select("Id")(); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a New Field @@ -114,7 +112,7 @@ Use the add method to create a new field where you define the field type ```TypeScript import { spfi } from "@pnp/sp"; -import { IField, IFieldAddResult, FieldTypes } from "@pnp/sp/fields/types"; +import { IField, FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -122,15 +120,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new field called 'My Field' in web. -const field: IFieldAddResult = await sp.web.fields.add("My Field", FieldTypes.Text, { FieldTypeKind: 3, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.add("My Field", FieldTypes.Text, { FieldTypeKind: 3, Group: "My Group" }); // create a new field called 'My Field' in the list 'My List' -const field2: IFieldAddResult = await sp.web.lists.getByTitle("My List").fields.add("My Field", FieldTypes.Text, { FieldTypeKind: 3, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.add("My Field", FieldTypes.Text, { FieldTypeKind: 3, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Site Field to a List @@ -139,7 +134,7 @@ Use the createFieldAsXml method to add a site field to a list. ```TypeScript import { spfi } from "@pnp/sp"; -import { IFieldAddResult, FieldTypes } from "@pnp/sp/fields/types"; +import { FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -147,12 +142,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new field called 'My Field' in web. -const field: IFieldAddResult = await sp.web.fields.add("My Field", FieldTypes.Text, { FieldTypeKind: 3, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.add("My Field", FieldTypes.Text, { FieldTypeKind: 3, Group: "My Group" }); // add the site field 'My Field' to the list 'My List' -const r = await sp.web.lists.getByTitle("My List").fields.createFieldAsXml(field.data.SchemaXml as string); +const r:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.createFieldAsXml(field.SchemaXml as string); // log the field Id to console -console.log(r.data.Id); +console.log(r.Id); ``` ### Add a Text Field @@ -161,7 +156,7 @@ Use the addText method to create a new text field. ```TypeScript import { spfi } from "@pnp/sp"; -import { IFieldAddResult, FieldTypes } from "@pnp/sp/fields/types"; +import { FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -169,15 +164,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new text field called 'My Field' in web. -const field: IFieldAddResult = await sp.web.fields.addText("My Field", { MaxLength: 255, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.addText("My Field", { MaxLength: 255, Group: "My Group" }); // create a new text field called 'My Field' in the list 'My List'. -const field2: IFieldAddResult = await sp.web.lists.getByTitle("My List").fields.addText("My Field", { MaxLength: 255, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addText("My Field", { MaxLength: 255, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Calculated Field @@ -186,7 +178,7 @@ Use the addCalculated method to create a new calculated field. ```TypeScript import { spfi } from "@pnp/sp"; -import { DateTimeFieldFormatType, FieldTypes } from "@pnp/sp/fields/types"; +import { DateTimeFieldFormatType, FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -194,15 +186,13 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new calculated field called 'My Field' in web -const field = await sp.web.fields.addCalculated("My Field", { Formula: "=Modified+1", DateFormat: DateTimeFieldFormatType.DateOnly, FieldTypeKind: FieldTypes.Calculated, Group: "MyGroup" }); +const field:IFieldInfo = await sp.web.fields.addCalculated("My Field", { Formula: "=Modified+1", DateFormat: DateTimeFieldFormatType.DateOnly, FieldTypeKind: FieldTypes.Calculated, Group: "MyGroup" }); // create a new calculated field called 'My Field' in the list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addCalculated("My Field", { Formula: "=Modified+1", DateFormat: DateTimeFieldFormatType.DateOnly, FieldTypeKind: FieldTypes.Calculated, Group: "MyGroup" }); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addCalculated("My Field", { Formula: "=Modified+1", DateFormat: DateTimeFieldFormatType.DateOnly, FieldTypeKind: FieldTypes.Calculated, Group: "MyGroup" }); -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Date/Time Field @@ -211,7 +201,7 @@ Use the addDateTime method to create a new date/time field. ```TypeScript import { spfi } from "@pnp/sp"; -import { DateTimeFieldFormatType, CalendarType, DateTimeFieldFriendlyFormatType } from "@pnp/sp/fields/types"; +import { DateTimeFieldFormatType, CalendarType, DateTimeFieldFriendlyFormatType, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -219,15 +209,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new date/time field called 'My Field' in web -const field = await sp.web.fields.addDateTime("My Field", { DisplayFormat: DateTimeFieldFormatType.DateOnly, DateTimeCalendarType: CalendarType.Gregorian, FriendlyDisplayFormat: DateTimeFieldFriendlyFormatType.Disabled, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.addDateTime("My Field", { DisplayFormat: DateTimeFieldFormatType.DateOnly, DateTimeCalendarType: CalendarType.Gregorian, FriendlyDisplayFormat: DateTimeFieldFriendlyFormatType.Disabled, Group: "My Group" }); // create a new date/time field called 'My Field' in the list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addDateTime("My Field", { DisplayFormat: DateTimeFieldFormatType.DateOnly, DateTimeCalendarType: CalendarType.Gregorian, FriendlyDisplayFormat: DateTimeFieldFriendlyFormatType.Disabled, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addDateTime("My Field", { DisplayFormat: DateTimeFieldFormatType.DateOnly, DateTimeCalendarType: CalendarType.Gregorian, FriendlyDisplayFormat: DateTimeFieldFriendlyFormatType.Disabled, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Currency Field @@ -236,6 +223,7 @@ Use the addCurrency method to create a new currency field. ```TypeScript import { spfi } from "@pnp/sp"; +import { IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -243,15 +231,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new currency field called 'My Field' in web -const field = await sp.web.fields.addCurrency("My Field", { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.addCurrency("My Field", { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: "My Group" }); // create a new currency field called 'My Field' in list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addCurrency("My Field", { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addCurrency("My Field", { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add an Image Field @@ -260,7 +245,7 @@ Use the addImageField method to create a new image field. ```TypeScript import { spfi } from "@pnp/sp"; -import { IFieldAddResult, FieldTypes } from "@pnp/sp/fields/types"; +import { FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -268,15 +253,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new image field called 'My Field' in web. -const field: IFieldAddResult = await sp.web.fields.addImageField("My Field"); +const field:IFieldInfo = await sp.web.fields.addImageField("My Field"); // create a new image field called 'My Field' in the list 'My List'. -const field2: IFieldAddResult = await sp.web.lists.getByTitle("My List").fields.addImageField("My Field"); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addImageField("My Field"); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Multi-line Text Field @@ -286,6 +268,7 @@ Use the addMultilineText method to create a new multi-line text field. ```TypeScript import { spfi } from "@pnp/sp"; +import { FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -293,15 +276,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new multi-line text field called 'My Field' in web -const field = await sp.web.fields.addMultilineText("My Field", { NumberOfLines: 6, RichText: true, RestrictedMode: false, AppendOnly: false, AllowHyperlink: true, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.addMultilineText("My Field", { NumberOfLines: 6, RichText: true, RestrictedMode: false, AppendOnly: false, AllowHyperlink: true, Group: "My Group" }); // create a new multi-line text field called 'My Field' in list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addMultilineText("My Field", { NumberOfLines: 6, RichText: true, RestrictedMode: false, AppendOnly: false, AllowHyperlink: true, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addMultilineText("My Field", { NumberOfLines: 6, RichText: true, RestrictedMode: false, AppendOnly: false, AllowHyperlink: true, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Multi-line Text Field with Enhanced Rich Text @@ -310,6 +290,7 @@ The REST endpoint doesn't support setting the `RichTextMode` field therefore you ```TypeScript import { spfi } from "@pnp/sp"; +import { FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -317,15 +298,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); //Create a new multi-line text field called 'My Field' in web -const field = await sp.web.lists.getByTitle("My List").fields.createFieldAsXml( +const field:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.createFieldAsXml( `` ); -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); - // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Number Field @@ -334,6 +312,7 @@ Use the addNumber method to create a new number field. ```TypeScript import { spfi } from "@pnp/sp"; +import { FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -341,15 +320,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new number field called 'My Field' in web -const field = await sp.web.fields.addNumber("My Field", { MinimumValue: 1, MaximumValue: 100, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.addNumber("My Field", { MinimumValue: 1, MaximumValue: 100, Group: "My Group" }); // create a new number field called 'My Field' in list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addNumber("My Field", { MinimumValue: 1, MaximumValue: 100, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addNumber("My Field", { MinimumValue: 1, MaximumValue: 100, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a URL Field @@ -358,7 +334,7 @@ Use the addUrl method to create a new url field. ```TypeScript import { spfi } from "@pnp/sp"; -import { UrlFieldFormatType } from "@pnp/sp/fields/types"; +import { UrlFieldFormatType, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -366,15 +342,12 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new url field called 'My Field' in web -const field = await sp.web.fields.addUrl("My Field", { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.addUrl("My Field", { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: "My Group" }); // create a new url field called 'My Field' in list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addUrl("My Field", { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addUrl("My Field", { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field); ``` ### Add a User Field @@ -383,7 +356,7 @@ Use the addUser method to create a new user field. ```TypeScript import { spfi } from "@pnp/sp"; -import { FieldUserSelectionMode } from "@pnp/sp/fields/types"; +import { FieldUserSelectionMode, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; import "@pnp/sp/fields"; @@ -391,20 +364,17 @@ import "@pnp/sp/fields"; const sp = spfi(...); // create a new user field called 'My Field' in web -const field = await sp.web.fields.addUser("My Field", { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: "My Group" }); +const field:IFieldInfo = await sp.web.fields.addUser("My Field", { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: "My Group" }); // create a new user field called 'My Field' in list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addUser("My Field", { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: "My Group" }); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2:IFieldInfo = await sp.web.lists.getByTitle("My List").fields.addUser("My Field", { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: "My Group" }); // log the field Id to console -console.log(r.Id); +console.log(field.Id); // ** // Adding a lookup that supports multiple values takes two calls: -const fieldAddResult = await sp.web.fields.addUser("Multi User Field", { SelectionMode: FieldUserSelectionMode.PeopleOnly }); -await fieldAddResult.field.update({ AllowMultipleValues: true }, "SP.FieldUser"); +const fieldAdd = await sp.web.fields.addUser("Multi User Field", { SelectionMode: FieldUserSelectionMode.PeopleOnly }); +await sp.web.fields.getById(fieldAdd.Id).update({ AllowMultipleValues: true }, "SP.FieldUser"); ``` ### Add a Lookup Field @@ -413,7 +383,7 @@ Use the addLookup method to create a new lookup field. ```TypeScript import { spfi } from "@pnp/sp"; -import { FieldTypes } from "@pnp/sp/fields/types"; +import { FieldTypes, IFieldInfo } from "@pnp/sp/fields/types"; import "@pnp/sp/webs"; import "@pnp/sp/lists"; @@ -423,20 +393,17 @@ const sp = spfi(...); const list = await sp.web.lists.getByTitle("My Lookup List")(); // create a new lookup field called 'My Field' based on an existing list 'My Lookup List' showing 'Title' field in web. -const field = await sp.web.fields.addLookup("My Field", { LookupListId: list.data.Id, LookupFieldName: "Title" }); +const field = await sp.web.fields.addLookup("My Field", { LookupListId: list.Id, LookupFieldName: "Title" }); // create a new lookup field called 'My Field' based on an existing list 'My Lookup List' showing 'Title' field in list 'My List' -const field2 = await sp.web.lists.getByTitle("My List").fields.addLookup("My Field", {LookupListId: list.data.Id, LookupFieldName: "Title"}); - -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); +const field2 = await sp.web.lists.getByTitle("My List").fields.addLookup("My Field", {LookupListId: list.Id, LookupFieldName: "Title"}); // log the field Id to console -console.log(r.Id); +console.log(field.Id); // ** // Adding a lookup that supports multiple values takes two calls: -const fieldAddResult = await sp.web.fields.addLookup("Multi Lookup Field", { LookupListId: list.data.Id, LookupFieldName: "Title" }); -await fieldAddResult.field.update({ AllowMultipleValues: true }, "SP.FieldLookup"); +const fieldAdd = await sp.web.fields.addLookup("Multi Lookup Field", { LookupListId: list.Id, LookupFieldName: "Title" }); +await sp.web.fields.getById(fieldAdd.Id).update({ AllowMultipleValues: true }, "SP.FieldLookup"); ``` ### Add a Choice Field @@ -458,11 +425,8 @@ const field = await sp.web.fields.addChoice("My Field", { Choices: choices, Edit // create a new choice field called 'My Field' in list 'My List' const field2 = await sp.web.lists.getByTitle("My List").fields.addChoice("My Field", { Choices: choices, EditFormat: ChoiceFieldFormatType.Dropdown, FillInChoice: false, Group: "My Group" }); -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); - // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Multi-Choice Field @@ -484,11 +448,8 @@ const field = await sp.web.fields.addMultiChoice("My Field", { Choices: choices, // create a new multi-choice field called 'My Field' in list 'My List' const field2 = await sp.web.lists.getByTitle("My List").fields.addMultiChoice("My Field", { Choices: choices, FillInChoice: false, Group: "My Group" }); -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); - // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Boolean Field @@ -508,11 +469,8 @@ const field = await sp.web.fields.addBoolean("My Field", { Group: "My Group" }); // create a new boolean field called 'My Field' in list 'My List' const field2 = await sp.web.lists.getByTitle("My List").fields.addBoolean("My Field", { Group: "My Group" }); -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); - // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Add a Dependent Lookup Field @@ -529,16 +487,13 @@ const sp = spfi(...); const field = await sp.web.fields.addLookup("My Field", { LookupListId: list.Id, LookupFieldName: "Title" }); // create a new dependent lookup field called 'My Dep Field' showing 'Description' based on an existing 'My Field' lookup field in web. -const fieldDep = await sp.web.fields.addDependentLookupField("My Dep Field", field.data.Id as string, "Description"); +const fieldDep = await sp.web.fields.addDependentLookupField("My Dep Field", field.Id as string, "Description"); // create a new dependent lookup field called 'My Dep Field' showing 'Description' based on an existing 'My Field' lookup field in list 'My List' const field2 = await sp.web.lists.getByTitle("My List").fields.addLookup("My Field", { LookupListId: list.Id, LookupFieldName: "Title" }); -const fieldDep2 = await sp.web.lists.getByTitle("My List").fields.addDependentLookupField("My Dep Field", field2.data.Id as string, "Description"); +const fieldDep2 = await sp.web.lists.getByTitle("My List").fields.addDependentLookupField("My Dep Field", field2.Id as string, "Description"); -// we can use this 'fieldDep' variable to run more queries on the field: -const r = await fieldDep.field.select("Id")(); - -// log the field Id to console -console.log(r.Id); +// log the fieldDep Id to console +console.log(fieldDep.Id); ``` ### Add a Location Field @@ -558,11 +513,8 @@ const field = await sp.web.fields.addLocation("My Field", { Group: "My Group" }) // create a new location field called 'My Field' in list 'My List' const field2 = await sp.web.lists.getByTitle("My List").fields.addLocation("My Field", { Group: "My Group" }); -// we can use this 'field' variable to run more queries on the field: -const r = await field.field.select("Id")(); - // log the field Id to console -console.log(r.Id); +console.log(field.Id); ``` ### Delete a Field @@ -603,9 +555,9 @@ import "@pnp/sp/fields"; const sp = spfi(...); -// update the field called 'My Field' with a description in web, returns FieldUpdateResult +// update the field called 'My Field' with a description in web, returns IFieldInfo const fieldUpdate = await sp.web.fields.getByTitle("My Field").update({ Description: "My Description" }); -// update the field called 'My Field' with a description in list 'My List', returns FieldUpdateResult +// update the field called 'My Field' with a description in list 'My List', returns IFieldInfo const fieldUpdate2 = await sp.web.lists.getByTitle("My List").fields.getByTitle("My Field").update({ Description: "My Description" }); // if you need to update a field with properties for a specific field type you can optionally include the field type as a second param diff --git a/docs/sp/folders.md b/docs/sp/folders.md index 3f016c059..88df71f50 100644 --- a/docs/sp/folders.md +++ b/docs/sp/folders.md @@ -476,7 +476,7 @@ import "@pnp/sp/lists"; const sp = spfi(...); const newFolderResult = await sp.web.rootFolder.folders.getByUrl("Shared Documents").folders.addUsingPath("My New Folder"); -const item = await newFolderResult.folder.listItemAllFields(); +const item = await sp.web.rootFolder.folders.getByUrl("Shared Documents").folders.getByUrl(newFolderResult.Name).listItemAllFields(); await sp.web.lists.getByTitle("Documents").items.getById(item.ID).update({ ContentTypeId: "0x0120001E76ED75A3E3F3408811F0BF56C4CDDD", diff --git a/docs/sp/items.md b/docs/sp/items.md index cac7920e6..252d90a02 100644 --- a/docs/sp/items.md +++ b/docs/sp/items.md @@ -480,7 +480,7 @@ const newItem = await sp.web.lists.getByTitle("TestList").items.add({ const updateVal = {}; updateVal[fields[0].InternalName] = "-1;#New Term|bb046161-49cc-41bd-a459-5667175920d4;#-1;#New 2|0069972e-67f1-4c5e-99b6-24ac5c90b7c9"; // execute the update call -await newItem.item.update(updateVal); +await sp.web.lists.getByTitle("TestList").items.getById(newItem.Id).update(updateVal); ``` ### Update BCS Field diff --git a/docs/sp/lists.md b/docs/sp/lists.md index d33755245..286c2fd87 100644 --- a/docs/sp/lists.md +++ b/docs/sp/lists.md @@ -63,7 +63,7 @@ const sp = spfi(...); const listAddResult = await sp.web.lists.add("My new list"); // we can work with the list created using the IListAddResult.list property: -const r = await listAddResult.list.select("Title")(); +const r = await sp.web.lists.getByTitle(listAddResult.list.select("Title")(); // log newly created list title to console console.log(r.Title); @@ -457,7 +457,7 @@ import "@pnp/sp/lists"; const sp = spfi(...); const fld = await sp.site.rootWeb.fields.addText("MyField"); -await sp.web.lists.getByTitle("MyList").fields.createFieldAsXml(fld.data.SchemaXml); +await sp.web.lists.getByTitle("MyList").fields.createFieldAsXml(fld.SchemaXml); ``` ### folders diff --git a/docs/sp/navigation.md b/docs/sp/navigation.md index ac3a2cb80..79bedf013 100644 --- a/docs/sp/navigation.md +++ b/docs/sp/navigation.md @@ -98,10 +98,6 @@ import "@pnp/sp/navigation"; const result = await nav.add("Node Title", "/sites/dev/pages/mypage.aspx", true); -const nodeDataRaw = result.data; - -// request the data from the created node -const nodeData = result.node(); ``` ### moveAfter @@ -113,10 +109,8 @@ import "@pnp/sp/navigation"; const node1result = await nav.add(`Testing - ${getRandomString(4)} (1)`, url, true); const node2result = await nav.add(`Testing - ${getRandomString(4)} (2)`, url, true); -const node1 = await node1result.node(); -const node2 = await node2result.node(); -await nav.moveAfter(node1.Id, node2.Id); +await nav.moveAfter(node1result.Id, node2result.Id); ``` ### Delete @@ -129,14 +123,14 @@ import "@pnp/sp/navigation"; const node1result = await nav.add(`Testing - ${getRandomString(4)}`, url, true); let nodes = await nav(); // check we added a node -let index = nodes.findIndex(n => n.Id === node1result.data.Id) +let index = nodes.findIndex(n => n.Id === node1result.Id) // index >= 0 // delete a node -await nav.getById(node1result.data.Id).delete(); +await nav.getById(node1result.Id).delete(); nodes = await nav(); -index = nodes.findIndex(n => n.Id === node1result.data.Id) +index = nodes.findIndex(n => n.Id === node1result.Id) // index = -1 ``` diff --git a/docs/sp/site-users.md b/docs/sp/site-users.md index ae7b2c63a..61c07683c 100644 --- a/docs/sp/site-users.md +++ b/docs/sp/site-users.md @@ -90,7 +90,7 @@ const sp = spfi(...); const user = await sp.web.ensureUser("userLoginname") const users = await sp.web.siteUsers; -await users.add(user.data.LoginName); +await users.add(user.LoginName); ``` ### Get user by Id, Email, or LoginName diff --git a/packages/graph/calendars/index.ts b/packages/graph/calendars/index.ts index 1d721bbfc..0a42608bf 100644 --- a/packages/graph/calendars/index.ts +++ b/packages/graph/calendars/index.ts @@ -20,7 +20,6 @@ export { ICalendarView, IEvent, IEvents, - IEventAddResult, IForwardEvent, IGetScheduleRequest, } from "./types.js"; diff --git a/packages/graph/calendars/types.ts b/packages/graph/calendars/types.ts index e11a09617..23ce5d0a2 100644 --- a/packages/graph/calendars/types.ts +++ b/packages/graph/calendars/types.ts @@ -167,14 +167,6 @@ export class _CalendarPermissions extends _GraphCollection, IAddable { } export const CalendarPermissions = graphInvokableFactory(_CalendarPermissions); -/** - * EventAddResult - */ -export interface IEventAddResult { - data: IEventType; - event: IEvent; -} - export interface IForwardEvent { Comment?: string; ToRecipients: Recipient[]; diff --git a/packages/graph/columns/addColumns.ts b/packages/graph/columns/addColumns.ts index 8edb6a224..75536dfde 100644 --- a/packages/graph/columns/addColumns.ts +++ b/packages/graph/columns/addColumns.ts @@ -1,4 +1,3 @@ -import { IColumn } from "./types.js"; import { graphPost } from "../graphqueryable.js"; import { body } from "@pnp/queryable"; import { @@ -10,19 +9,6 @@ import { * * @param column a JSON representation of a Column object. */ -export const addColumn = async function(column: IColumnDefinition): Promise { - const data = await graphPost(this, body(column)); - - return { - data, - column: (this).getById(data.id), - }; +export const addColumn = async function(column: IColumnDefinition): Promise { + return graphPost(this, body(column)); }; - -/** -* IColumnAddResult -*/ -export interface IColumnAddResult { - column: IColumn; - data: IColumnDefinition; -} diff --git a/packages/graph/columns/content-types.ts b/packages/graph/columns/content-types.ts index b6d094ed9..32d759ef5 100644 --- a/packages/graph/columns/content-types.ts +++ b/packages/graph/columns/content-types.ts @@ -2,15 +2,17 @@ import { addProp, body } from "@pnp/queryable"; import { graphPost } from "../graphqueryable.js"; import { _ContentType } from "../content-types/types.js"; import { Columns, IColumns,IColumn, _Columns } from "./types.js"; -import { IColumnAddResult } from "./addColumns.js"; +import { + ColumnDefinition as IColumnDefinition, +} from "@microsoft/microsoft-graph-types"; declare module "./types" { interface _Columns { - addRef(siteColumn: IColumn): Promise; + addRef(siteColumn: IColumn): Promise; } interface IColumns { - addRef(siteColumn: IColumn): Promise; + addRef(siteColumn: IColumn): Promise; } } @@ -20,14 +22,9 @@ declare module "./types" { * * @param siteColumn the site column to add. */ -_Columns.prototype.addRef = async function(siteColumn: IColumn): Promise { +_Columns.prototype.addRef = async function(siteColumn: IColumn): Promise { const postBody = { "sourceColumn@odata.bind": `https://graph.microsoft.com/v1.0/${siteColumn.toUrl()}`}; - const data = await graphPost(this, body(postBody)); - - return { - data, - column: (this).getById(data.id), - }; + return graphPost(this, body(postBody)); }; declare module "../content-types/types" { diff --git a/packages/graph/columns/index.ts b/packages/graph/columns/index.ts index 5965e10bc..463ef1bb9 100644 --- a/packages/graph/columns/index.ts +++ b/packages/graph/columns/index.ts @@ -2,10 +2,6 @@ import "./lists.js"; import "./sites.js"; import "./content-types.js"; -export { - IColumnAddResult, -} from "./addColumns.js"; - export { Columns, IColumns, diff --git a/packages/graph/columns/lists.ts b/packages/graph/columns/lists.ts index 5b379bf0b..ee21b4228 100644 --- a/packages/graph/columns/lists.ts +++ b/packages/graph/columns/lists.ts @@ -1,6 +1,6 @@ import { addProp } from "@pnp/queryable"; import { _List } from "../lists/types.js"; -import { addColumn, IColumnAddResult } from "./addColumns.js"; +import { addColumn } from "./addColumns.js"; import { Columns, IColumns, _Columns } from "./types.js"; import { ColumnDefinition as IColumnDefinition, @@ -9,11 +9,11 @@ import { declare module "./types" { interface _Columns { - add(column: IColumnDefinition): Promise; + add(column: IColumnDefinition): Promise; } interface IColumns { - add(column: IColumnDefinition): Promise; + add(column: IColumnDefinition): Promise; } } diff --git a/packages/graph/columns/sites.ts b/packages/graph/columns/sites.ts index 9b30464d7..dcff9db6c 100644 --- a/packages/graph/columns/sites.ts +++ b/packages/graph/columns/sites.ts @@ -1,5 +1,5 @@ import { addProp } from "@pnp/queryable"; -import { addColumn, IColumnAddResult } from "./addColumns.js"; +import { addColumn } from "./addColumns.js"; import { Columns, IColumns, _Columns } from "./types.js"; import { ColumnDefinition as IColumnDefinition, @@ -8,11 +8,11 @@ import { _Site } from "../sites/types.js"; declare module "./types" { interface _Columns { - add(column: IColumnDefinition): Promise; + add(column: IColumnDefinition): Promise; } interface IColumns { - add(column: IColumnDefinition): Promise; + add(column: IColumnDefinition): Promise; } } diff --git a/packages/graph/contacts/index.ts b/packages/graph/contacts/index.ts index 911d39a98..80e70a28e 100644 --- a/packages/graph/contacts/index.ts +++ b/packages/graph/contacts/index.ts @@ -2,9 +2,7 @@ import "./users.js"; export { Contact, - IContactAddResult, ContactFolder, - IContactFolderAddResult, ContactFolders, Contacts, IContact, diff --git a/packages/graph/contacts/types.ts b/packages/graph/contacts/types.ts index b8d14e20b..dd3c5f700 100644 --- a/packages/graph/contacts/types.ts +++ b/packages/graph/contacts/types.ts @@ -33,7 +33,7 @@ export class _Contacts extends _GraphCollection { surName: string, emailAddresses: IEmailAddressType[], businessPhones: string[], - additionalProperties: Record = {}): Promise { + additionalProperties: Record = {}): Promise { const postBody = { businessPhones, @@ -43,12 +43,7 @@ export class _Contacts extends _GraphCollection { ...additionalProperties, }; - const data = await graphPost(this, body(postBody)); - - return { - contact: (this).getById(data.id), - data, - }; + return graphPost(this, body(postBody)); } } export interface IContacts extends _Contacts, IGetById { } @@ -90,36 +85,15 @@ export class _ContactFolders extends _GraphCollection { * @param displayName The folder's display name. * @param parentFolderId The ID of the folder's parent folder. */ - public async add(displayName: string, parentFolderId?: string): Promise { + public async add(displayName: string, parentFolderId?: string): Promise { const postBody = { displayName: displayName, parentFolderId: parentFolderId, }; - const data = await graphPost(this, body(postBody)); - - return { - contactFolder: (this).getById(data.id), - data, - }; + return graphPost(this, body(postBody)); } } export interface IContactFolders extends _ContactFolders, IGetById { } export const ContactFolders = graphInvokableFactory(_ContactFolders); - -/** - * IContactFolderAddResult - */ -export interface IContactFolderAddResult { - data: IContactFolderType; - contactFolder: IContactFolder; -} - -/** - * IContactAddResult - */ -export interface IContactAddResult { - data: IContactType; - contact: IContact; -} diff --git a/packages/graph/groups/index.ts b/packages/graph/groups/index.ts index b8ee14b29..4a5bcdd43 100644 --- a/packages/graph/groups/index.ts +++ b/packages/graph/groups/index.ts @@ -6,7 +6,6 @@ export { GroupType, Groups, IGroup, - IGroupAddResult, IGroups, } from "./types.js"; diff --git a/packages/graph/groups/types.ts b/packages/graph/groups/types.ts index f8d7810af..0387f4c7c 100644 --- a/packages/graph/groups/types.ts +++ b/packages/graph/groups/types.ts @@ -90,7 +90,7 @@ export class _Groups extends _DirectoryObjects { * @param groupType Type of group being created * @param additionalProperties A plain object collection of additional properties you want to set on the new group */ - public async add(name: string, mailNickname: string, groupType: GroupType, additionalProperties: Record = {}): Promise { + public async add(name: string, mailNickname: string, groupType: GroupType, additionalProperties: Record = {}): Promise { let postBody = { displayName: name, @@ -109,21 +109,9 @@ export class _Groups extends _DirectoryObjects { }; } - const data = await graphPost(this, body(postBody)); + return graphPost(this, body(postBody)); - return { - data, - group: (this).getById(data.id), - }; } } export interface IGroups extends _Groups, IGetById { } export const Groups = graphInvokableFactory(_Groups); - -/** - * IGroupAddResult - */ -export interface IGroupAddResult { - group: IGroup; - data: any; -} diff --git a/packages/graph/list-item/index.ts b/packages/graph/list-item/index.ts index f85c30980..8c488971c 100644 --- a/packages/graph/list-item/index.ts +++ b/packages/graph/list-item/index.ts @@ -6,10 +6,8 @@ export { IListItems, ListItem, IListItem, - IListItemAddResult, IDocumentSetVersion, DocumentSetVersion, DocumentSetVersions, IDocumentSetVersions, - IDocumentSetVersionAddResult, } from "./types.js"; diff --git a/packages/graph/list-item/types.ts b/packages/graph/list-item/types.ts index 101734540..26787c015 100644 --- a/packages/graph/list-item/types.ts +++ b/packages/graph/list-item/types.ts @@ -57,19 +57,3 @@ export const DocumentSetVersion = graphInvokableFactory(_Do export class _DocumentSetVersions extends _GraphCollection{} export interface IDocumentSetVersions extends _DocumentSetVersions, IGetById, IAddable {} export const DocumentSetVersions = graphInvokableFactory(_DocumentSetVersions); - -/** - * IDocumentSetVersionAddResult - */ -export interface IDocumentSetVersionAddResult { - item: IDocumentSetVersion; - data: IDocumentSetVersionEntity; -} - -/** - * IListAddResult - */ -export interface IListItemAddResult { - list: IListItem; - data: IListItemEntity; -} diff --git a/packages/graph/lists/index.ts b/packages/graph/lists/index.ts index 615a4e719..025129437 100644 --- a/packages/graph/lists/index.ts +++ b/packages/graph/lists/index.ts @@ -6,5 +6,4 @@ export { ILists, List, IList, - IListAddResult, } from "./types.js"; diff --git a/packages/graph/lists/types.ts b/packages/graph/lists/types.ts index 48b5cb1fd..82033d921 100644 --- a/packages/graph/lists/types.ts +++ b/packages/graph/lists/types.ts @@ -1,7 +1,6 @@ import { List as IListEntity } from "@microsoft/microsoft-graph-types"; -import { _GraphCollection, graphInvokableFactory, _GraphInstance, graphPost } from "../graphqueryable.js"; -import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById } from "../decorators.js"; -import { body } from "@pnp/queryable"; +import { _GraphCollection, graphInvokableFactory, _GraphInstance } from "../graphqueryable.js"; +import { defaultPath, deleteable, IDeleteable, updateable, IUpdateable, getById, IGetById, addable, IAddable } from "../decorators.js"; /** * Represents a list entity @@ -18,29 +17,8 @@ export const List = graphInvokableFactory(_List); */ @defaultPath("lists") @getById(List) -export class _Lists extends _GraphCollection{ - /** - * Create a new list as specified in the request body. - * - * @param list a JSON representation of a List object. - */ - public async add(list: IListEntity): Promise { - const data = await graphPost(this, body(list)); +@addable() +export class _Lists extends _GraphCollection{ } - return { - data, - list: (this).getById(data.id), - }; - } -} - -export interface ILists extends _Lists, IGetById { } +export interface ILists extends _Lists, IGetById, IAddable { } export const Lists = graphInvokableFactory(_Lists); - -/** - * IListAddResult - */ -export interface IListAddResult { - list: IList; - data: IListEntity; -} diff --git a/packages/sp/appcatalog/index.ts b/packages/sp/appcatalog/index.ts index 301fc4877..cb280c215 100644 --- a/packages/sp/appcatalog/index.ts +++ b/packages/sp/appcatalog/index.ts @@ -5,7 +5,6 @@ import { AppCatalog, IAppCatalog } from "./types.js"; import "./web.js"; export { - IAppAddResult, IApp, IAppCatalog, App, diff --git a/packages/sp/appcatalog/types.ts b/packages/sp/appcatalog/types.ts index d40a27443..285907a8f 100644 --- a/packages/sp/appcatalog/types.ts +++ b/packages/sp/appcatalog/types.ts @@ -6,9 +6,7 @@ import { SPCollection, spPost, } from "../spqueryable.js"; -import { odataUrlFrom } from "../utils/odata-url-from.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; -import { File, IFile } from "../files/types.js"; import { combine } from "@pnp/core"; import { defaultPath } from "../decorators.js"; @@ -84,21 +82,16 @@ export class _AppCatalog extends _SPCollection { * @param shouldOverWrite Should an app with the same name in the same location be overwritten? (default: true) * @returns Promise */ - public async add(filename: string, content: string | ArrayBuffer | Blob, shouldOverWrite = true): Promise { + public async add(filename: string, content: string | ArrayBuffer | Blob, shouldOverWrite = true): Promise { // you don't add to the availableapps collection const adder = AppCatalog(this, getAppCatalogPath(this.toUrl(), `add(overwrite=${shouldOverWrite},url='${filename}')`)); - const r = await spPost(adder, { + return spPost(adder, { body: content, headers: { "binaryStringRequestBody": "true", }, }); - - return { - data: r, - file: File([this, odataUrlFrom(r)]), - }; } } export interface IAppCatalog extends _AppCatalog { } @@ -160,17 +153,3 @@ export class _App extends _SPInstance { } export interface IApp extends _App { } export const App = spInvokableFactory(_App); - -/** - * Result object after adding an app - */ -export interface IAppAddResult { - /** - * Contains metadata of the added app - */ - data: any; - /** - * A File instance to the item in SharePoint - */ - file: IFile; -} diff --git a/packages/sp/comments/clientside-page.ts b/packages/sp/comments/clientside-page.ts index b2db9d5e7..bea6e0982 100644 --- a/packages/sp/comments/clientside-page.ts +++ b/packages/sp/comments/clientside-page.ts @@ -1,7 +1,8 @@ import { _ClientsidePage } from "../clientside-pages/types.js"; import { ICommentInfo, IComment, ILikedByInformation } from "./types.js"; -import { IItemUpdateResult, Item } from "../items/index.js"; +import { Item } from "../items/index.js"; import { SPQueryable, spPost } from "../spqueryable.js"; +import { IItemUpdateResultData } from "../items/types.js"; declare module "../clientside-pages/types" { interface _ClientsidePage { @@ -12,9 +13,9 @@ declare module "../clientside-pages/types" { like(): Promise; unlike(): Promise; getLikedByInformation(): Promise; - enableComments(): Promise; - disableComments(): Promise; - setCommentsOn(on: boolean): Promise; + enableComments(): Promise; + disableComments(): Promise; + setCommentsOn(on: boolean): Promise; } interface IClientsidePage { /** @@ -51,11 +52,11 @@ declare module "../clientside-pages/types" { /** * Enables comments for this page */ - enableComments(): Promise; + enableComments(): Promise; /** * Disables comments for this page */ - disableComments(): Promise; + disableComments(): Promise; } } @@ -99,21 +100,21 @@ _ClientsidePage.prototype.getLikedByInformation = async function (this: _Clients return item.getLikedByInformation(); }; -_ClientsidePage.prototype.enableComments = async function (this: _ClientsidePage): Promise { +_ClientsidePage.prototype.enableComments = async function (this: _ClientsidePage): Promise { return this.setCommentsOn(true).then(r => { this.commentsDisabled = false; return r; }); }; -_ClientsidePage.prototype.disableComments = async function (this: _ClientsidePage): Promise { +_ClientsidePage.prototype.disableComments = async function (this: _ClientsidePage): Promise { return this.setCommentsOn(false).then(r => { this.commentsDisabled = true; return r; }); }; -_ClientsidePage.prototype.setCommentsOn = async function (this: _ClientsidePage, on: boolean): Promise { +_ClientsidePage.prototype.setCommentsOn = async function (this: _ClientsidePage, on: boolean): Promise { const item = await this.getItem(); return Item(item, `SetCommentsDisabled(${!on})`).update({}); }; diff --git a/packages/sp/fields/index.ts b/packages/sp/fields/index.ts index 5bdee4df2..0aef96306 100644 --- a/packages/sp/fields/index.ts +++ b/packages/sp/fields/index.ts @@ -6,8 +6,6 @@ export { Fields, IField, Field, - IFieldAddResult, - IFieldUpdateResult, AddFieldOptions, CalendarType, ChoiceFieldFormatType, diff --git a/packages/sp/fields/types.ts b/packages/sp/fields/types.ts index 8a7f23e9e..ea5ea5811 100644 --- a/packages/sp/fields/types.ts +++ b/packages/sp/fields/types.ts @@ -19,18 +19,14 @@ export class _Fields extends _SPCollection { * * @param xml A string or XmlSchemaFieldCreationInformation instance descrbing the field to create */ - public async createFieldAsXml(xml: string | IXmlSchemaFieldCreationInformation): Promise { + public async createFieldAsXml(xml: string | IXmlSchemaFieldCreationInformation): Promise> { if (typeof xml === "string") { xml = { SchemaXml: xml }; } - const data = await spPost<{ Id: string }>(Fields(this, "createfieldasxml"), body({ parameters: xml })); + return spPost<{ Id: string }>(Fields(this, "createfieldasxml"), body({ parameters: xml })); - return { - data, - field: this.getById(data.Id), - }; } /** @@ -66,9 +62,9 @@ export class _Fields extends _SPCollection { * @param title The new field's title * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public async add(title: string, fieldTypeKind: number, properties?: IFieldCreationProperties): Promise { + public async add(title: string, fieldTypeKind: number, properties?: IFieldCreationProperties): Promise> { - const data = await spPost<{Id: string }>(Fields(this,null), body(Object.assign(metadata(mapFieldTypeEnumToString(fieldTypeKind)),{ + return spPost(Fields(this,null), body(Object.assign(metadata(mapFieldTypeEnumToString(fieldTypeKind)),{ Title: title, FieldTypeKind: fieldTypeKind, ...properties, @@ -76,11 +72,6 @@ export class _Fields extends _SPCollection { "Accept":"application/json;odata=verbose", "Content-Type":"application/json;odata=verbose", }))); - - return { - data, - field:this.getById(data.Id), - }; } /** @@ -89,20 +80,15 @@ export class _Fields extends _SPCollection { * @param title The new field's title * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public async addField(title: string, fieldTypeKind: number, properties?: IAddFieldProperties): Promise { + public async addField(title: string, fieldTypeKind: number, properties?: IAddFieldProperties): Promise> { - const data = await spPost<{ Id: string }>(Fields(this, "AddField"), body({ + return spPost<{ Id: string }>(Fields(this, "AddField"), body({ parameters: { Title: title, FieldTypeKind: fieldTypeKind, ...properties, }, })); - - return { - data, - field: this.getById(data.Id), - }; } /** @@ -111,7 +97,7 @@ export class _Fields extends _SPCollection { * @param title The field title * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addText(title: string, properties?: IFieldCreationProperties & AddTextProps): Promise { + public addText(title: string, properties?: IFieldCreationProperties & AddTextProps): Promise> { return this.add(title, 2, { MaxLength: 255, @@ -125,7 +111,7 @@ export class _Fields extends _SPCollection { * @param title The field title. * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addCalculated(title: string, properties?: IFieldCreationProperties & AddCalculatedProps): Promise { + public addCalculated(title: string, properties?: IFieldCreationProperties & AddCalculatedProps): Promise> { return this.add(title, 17, { OutputType: FieldTypes.Text, @@ -139,7 +125,7 @@ export class _Fields extends _SPCollection { * @param title The field title * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addDateTime(title: string, properties?: IFieldCreationProperties & AddDateTimeProps): Promise { + public addDateTime(title: string, properties?: IFieldCreationProperties & AddDateTimeProps): Promise> { return this.add(title, 4, { DateTimeCalendarType: CalendarType.Gregorian, @@ -155,7 +141,7 @@ export class _Fields extends _SPCollection { * @param title The field title * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addNumber(title: string, properties?: IFieldCreationProperties & AddNumberProps): Promise { + public addNumber(title: string, properties?: IFieldCreationProperties & AddNumberProps): Promise> { return this.add(title, 9, properties); } @@ -166,7 +152,7 @@ export class _Fields extends _SPCollection { * @param title The field title * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addCurrency(title: string, properties?: IFieldCreationProperties & AddCurrencyProps): Promise { + public addCurrency(title: string, properties?: IFieldCreationProperties & AddCurrencyProps): Promise> { return this.add(title, 10, { CurrencyLocaleId: 1033, @@ -181,7 +167,7 @@ export class _Fields extends _SPCollection { * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) * */ - public addMultilineText(title: string, properties?: IFieldCreationProperties & AddMultilineTextProps): Promise { + public addMultilineText(title: string, properties?: IFieldCreationProperties & AddMultilineTextProps): Promise> { return this.add(title, 3, { AllowHyperlink: true, @@ -198,7 +184,7 @@ export class _Fields extends _SPCollection { * * @param title The field title */ - public addUrl(title: string, properties?: IFieldCreationProperties & AddUrlProps): Promise { + public addUrl(title: string, properties?: IFieldCreationProperties & AddUrlProps): Promise> { return this.add(title, 11, { DisplayFormat: UrlFieldFormatType.Hyperlink, @@ -211,7 +197,7 @@ export class _Fields extends _SPCollection { * @param title The new field's title * @param properties */ - public addUser(title: string, properties?: IFieldCreationProperties & AddUserProps): Promise { + public addUser(title: string, properties?: IFieldCreationProperties & AddUserProps): Promise> { return this.add(title, 20, { SelectionMode: FieldUserSelectionMode.PeopleAndGroups, @@ -225,7 +211,7 @@ export class _Fields extends _SPCollection { * @param title The new field's title * @param properties Set of additional properties to set on the new field */ - public async addLookup(title: string, properties?: IAddFieldProperties): Promise { + public async addLookup(title: string, properties?: IAddFieldProperties): Promise> { return this.addField(title, 7, properties); } @@ -236,7 +222,7 @@ export class _Fields extends _SPCollection { * @param title The field title. * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addChoice(title: string, properties?: IFieldCreationProperties & AddChoiceProps): Promise { + public addChoice(title: string, properties?: IFieldCreationProperties & AddChoiceProps): Promise> { const props = { ...properties, @@ -254,7 +240,7 @@ export class _Fields extends _SPCollection { * @param title The field title. * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addMultiChoice(title: string, properties?: IFieldCreationProperties & AddMultiChoiceProps): Promise { + public addMultiChoice(title: string, properties?: IFieldCreationProperties & AddMultiChoiceProps): Promise> { const props = { ...properties, @@ -272,7 +258,7 @@ export class _Fields extends _SPCollection { * @param title The field title. * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addBoolean(title: string, properties?: IFieldCreationProperties): Promise { + public addBoolean(title: string, properties?: IFieldCreationProperties): Promise> { return this.add(title, 8, properties); } @@ -284,16 +270,11 @@ export class _Fields extends _SPCollection { * @param primaryLookupFieldId The guid of the primary Lookup Field. * @param showField Which field to show from the lookup list. */ - public async addDependentLookupField(displayName: string, primaryLookupFieldId: string, showField: string): Promise { + public async addDependentLookupField(displayName: string, primaryLookupFieldId: string, showField: string): Promise> { const path = `adddependentlookupfield(displayName='${displayName}', primarylookupfieldid='${primaryLookupFieldId}', showfield='${showField}')`; - const data = await spPost(Fields(this, path)); - - return { - data, - field: this.getById(data.Id), - }; + return spPost(Fields(this, path)); } /** @@ -302,7 +283,7 @@ export class _Fields extends _SPCollection { * @param title The field title. * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addLocation(title: string, properties?: IFieldCreationProperties): Promise { + public addLocation(title: string, properties?: IFieldCreationProperties): Promise> { return this.add(title, 33, properties); } @@ -313,7 +294,7 @@ export class _Fields extends _SPCollection { * @param title The field title. * @param properties Differ by type of field being created (see: https://msdn.microsoft.com/en-us/library/office/dn600182.aspx) */ - public addImageField(title: string, properties?: IFieldCreationProperties): Promise { + public addImageField(title: string, properties?: IFieldCreationProperties): Promise> { return this.add(title, 34, properties); } @@ -331,19 +312,14 @@ export class _Field extends _SPInstance { * @param properties A plain object hash of values to update for the list * @param fieldType The type value such as SP.FieldLookup. Optional, looked up from the field if not provided */ - public async update(properties: any, fieldType?: string): Promise { + public async update(properties: any, fieldType?: string): Promise> { if (typeof fieldType === "undefined" || fieldType === null) { const info = await Field(this).select("FieldTypeKind")(); fieldType = info["odata.type"]; } - const data = await spPostMerge(this, body(properties)); - - return { - data, - field: this, - }; + return spPostMerge(this, body(properties)); } /** @@ -370,22 +346,6 @@ export class _Field extends _SPInstance { export interface IField extends _Field, IDeleteable { } export const Field = spInvokableFactory(_Field); -/** - * This interface defines the result of adding a field - */ -export interface IFieldAddResult { - data: Partial; - field: IField; -} - -/** - * This interface defines the result of updating a field - */ -export interface IFieldUpdateResult { - data: Partial; - field: IField; -} - export type AddTextProps = { MaxLength?: number; }; diff --git a/packages/sp/files/index.ts b/packages/sp/files/index.ts index 6239e97c8..f94c04e79 100644 --- a/packages/sp/files/index.ts +++ b/packages/sp/files/index.ts @@ -7,7 +7,6 @@ export { IFile, Files, IFiles, - IFileAddResult, IFileUploadProgressData, CheckinType, MoveOperations, diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index 3a50d27cb..d8f624659 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -53,7 +53,7 @@ export class _Files extends _SPCollection { * @param parameters Additional parameters to control method behavior */ @cancelableScope - public async addUsingPath(url: string, content: string | ArrayBuffer | Blob, parameters: IAddUsingPathProps = { Overwrite: false }): Promise { + public async addUsingPath(url: string, content: string | ArrayBuffer | Blob, parameters: IAddUsingPathProps = { Overwrite: false }): Promise { const path = [`AddUsingPath(decodedurl='${encodePath(url)}'`]; @@ -74,12 +74,7 @@ export class _Files extends _SPCollection { path.push(")"); - const resp: IFileInfo = await spPost(Files(this, path.join("")), { body: content }); - - return { - data: resp, - file: fileFromServerRelativePath(this, resp.ServerRelativeUrl), - }; + return spPost(Files(this, path.join("")), { body: content }); } /** @@ -91,12 +86,12 @@ export class _Files extends _SPCollection { * @returns The new File and the raw response. */ @cancelableScope - public async addChunked(url: string, content: ValidFileContentSource, props?: Partial & Partial): Promise { + public async addChunked(url: string, content: ValidFileContentSource, props?: Partial & Partial): Promise { // add an empty stub const response = await this.addUsingPath(url, null, props); - const file = fileFromServerRelativePath(this, response.data.ServerRelativeUrl); + const file = fileFromServerRelativePath(this, response.ServerRelativeUrl); file.using(CancelAction(() => { return File(file).delete(); @@ -113,12 +108,8 @@ export class _Files extends _SPCollection { * @returns The template file that was added and the raw response. */ @cancelableScope - public async addTemplateFile(fileUrl: string, templateFileType: TemplateFileType): Promise { - const response: IFileInfo = await spPost(Files(this, `addTemplateFile(urloffile='${encodePath(fileUrl)}',templatefiletype=${templateFileType})`)); - return { - data: response, - file: fileFromServerRelativePath(this, response.ServerRelativeUrl), - }; + public async addTemplateFile(fileUrl: string, templateFileType: TemplateFileType): Promise { + return spPost(Files(this, `addTemplateFile(urloffile='${encodePath(fileUrl)}',templatefiletype=${templateFileType})`)); } } export interface IFiles extends _Files { } @@ -404,7 +395,7 @@ export class _File extends ReadableFile { * @param chunkSize The size of each file slice, in bytes (default: 10485760) */ @cancelableScope - public async setContentChunked(file: ValidFileContentSource, props: Partial): Promise { + public async setContentChunked(file: ValidFileContentSource, props: Partial): Promise { const { progress } = applyChunckedOperationDefaults(props); @@ -425,12 +416,7 @@ export class _File extends ReadableFile { if (chunk.done) { progress({ offset, stage: "finishing", uploadId }); - const data = await spPost(File(fileRef, `finishUpload(uploadId=guid'${uploadId}',fileOffset=${offset})`), { body: chunk?.value || "" }); - - return { - data, - file: fileFromServerRelativePath(this, data.ServerRelativeUrl), - }; + return spPost(File(fileRef, `finishUpload(uploadId=guid'${uploadId}',fileOffset=${offset})`), { body: chunk?.value || "" }); } else if (first) { @@ -604,14 +590,6 @@ export enum CheckinType { Major = 1, Overwrite = 2, } -/** - * Describes file and result - */ -export interface IFileAddResult { - file: IFile; - data: IFileInfo; -} - /** * File move opertions */ diff --git a/packages/sp/folders/index.ts b/packages/sp/folders/index.ts index 8a953316c..cebe44852 100644 --- a/packages/sp/folders/index.ts +++ b/packages/sp/folders/index.ts @@ -4,8 +4,6 @@ import "./web.js"; export { Folder, - IFolderAddResult, - IFolderUpdateResult, Folders, IFolder, IFolders, diff --git a/packages/sp/folders/types.ts b/packages/sp/folders/types.ts index 4967f6ef7..a3a6a769b 100644 --- a/packages/sp/folders/types.ts +++ b/packages/sp/folders/types.ts @@ -40,14 +40,10 @@ export class _Folders extends _SPCollection { * @param serverRelativeUrl The server relative url of the new folder to create * @param overwrite True to overwrite an existing folder, default false */ - public async addUsingPath(serverRelativeUrl: string, overwrite = false): Promise { + public async addUsingPath(serverRelativeUrl: string, overwrite = false): Promise { - const data: IFolderInfo = await spPost(Folders(this, `addUsingPath(DecodedUrl='${encodePath(serverRelativeUrl)}',overwrite=${overwrite})`)); + return spPost(Folders(this, `addUsingPath(DecodedUrl='${encodePath(serverRelativeUrl)}',overwrite=${overwrite})`)); - return { - data, - folder: folderFromServerRelativePath(this, data.ServerRelativeUrl), - }; } } export interface IFolders extends _Folders { } @@ -102,14 +98,9 @@ export class _Folder extends _SPInstance { * Updates folder's properties * @param props Folder's properties to update */ - public async update(props: Partial): Promise { + public async update(props: Partial): Promise { - const data = await spPostMerge(this, body(props)); - - return { - data, - folder: this, - }; + return spPostMerge(this, body(props)); } /** @@ -339,38 +330,6 @@ export async function folderFromPath(base: ISPQueryable, path: string): Promise< return (isUrlAbsolute(path) ? folderFromAbsolutePath : folderFromServerRelativePath)(base, path); } -/** - * Describes result of adding a folder - */ -export interface IFolderAddResult { - - /** - * A folder's instance - */ - folder: IFolder; - - /** - * Additional data from the server - */ - data: any; -} - -/** - * Describes result of updating a folder - */ -export interface IFolderUpdateResult { - - /** - * A folder's instance - */ - folder: IFolder; - - /** - * Additional data from the server - */ - data: any; -} - export interface IFolderInfo { readonly "odata.id": string; Exists: boolean; diff --git a/packages/sp/items/index.ts b/packages/sp/items/index.ts index d878c1601..47e1d6c60 100644 --- a/packages/sp/items/index.ts +++ b/packages/sp/items/index.ts @@ -9,9 +9,6 @@ export { ItemVersions, IItemVersion, IItemVersions, - IItemAddResult, - IItemUpdateResult, - IItemUpdateResultData, IItemDeleteParams, IItemParentInfos, } from "./types.js"; diff --git a/packages/sp/items/types.ts b/packages/sp/items/types.ts index e0c062905..c8e51cda4 100644 --- a/packages/sp/items/types.ts +++ b/packages/sp/items/types.ts @@ -112,12 +112,8 @@ export class _Items extends _SPCollection { * @param properties The new items's properties * @param listItemEntityTypeFullName The type name of the list's entities */ - public async add(properties: Record = {}): Promise { - - return spPost<{ Id: number }>(this, body(properties)).then((data) => ({ - data: data, - item: this.getById(data.Id), - })); + public async add(properties: Record = {}): Promise { + return spPost(this, body(properties)); } } export interface IItems extends _Items { } @@ -191,19 +187,15 @@ export class _Item extends _SPInstance { * @param properties A plain object hash of values to update for the list * @param eTag Value used in the IF-Match header, by default "*" */ - public async update(properties: Record, eTag = "*"): Promise { + public async update(properties: Record, eTag = "*"): Promise { const postBody = body(properties, headers({ "IF-Match": eTag, "X-HTTP-Method": "MERGE", })); - const data = await spPost(Item(this).using(ItemUpdatedParser()), postBody); + return spPost(Item(this).using(ItemUpdatedParser()), postBody); - return { - data, - item: this, - }; } /** @@ -362,16 +354,6 @@ function ItemUpdatedParser() { })); } -export interface IItemAddResult { - item: IItem; - data: any; -} - -export interface IItemUpdateResult { - item: IItem; - data: IItemUpdateResultData; -} - export interface IItemUpdateResultData { etag: string; } diff --git a/packages/sp/lists/index.ts b/packages/sp/lists/index.ts index 4d2776ff2..719a1e7a1 100644 --- a/packages/sp/lists/index.ts +++ b/packages/sp/lists/index.ts @@ -5,9 +5,6 @@ export { IList, Lists, ILists, - IListAddResult, - IListUpdateResult, - IListEnsureResult, ControlMode, ICamlQuery, IChangeLogItemQuery, diff --git a/packages/sp/lists/types.ts b/packages/sp/lists/types.ts index 5ca217593..6b4c7b19e 100644 --- a/packages/sp/lists/types.ts +++ b/packages/sp/lists/types.ts @@ -55,7 +55,7 @@ export class _Lists extends _SPCollection { * @param enableContentTypes If true content types will be allowed and enabled, otherwise they will be disallowed and not enabled * @param additionalSettings Will be passed as part of the list creation body */ - public async add(title: string, desc = "", template = 100, enableContentTypes = false, additionalSettings: Partial = {}): Promise { + public async add(title: string, desc = "", template = 100, enableContentTypes = false, additionalSettings: Partial = {}): Promise { const addSettings = { "AllowContentTypes": enableContentTypes, @@ -66,9 +66,8 @@ export class _Lists extends _SPCollection { ...additionalSettings, }; - const data = await spPost(this, body(addSettings)); + return spPost(this, body(addSettings)); - return { data, list: this.getByTitle(addSettings.Title) }; } /** @@ -95,13 +94,13 @@ export class _Lists extends _SPCollection { await list.select("Title")(); - const data = await list.update(addOrUpdateSettings).then(r => r.data); + const data = await list.update(addOrUpdateSettings); return { created: false, data, list: this.getByTitle(addOrUpdateSettings.Title) }; } catch (e) { - const data = await this.add(title, desc, template, enableContentTypes, addOrUpdateSettings).then(r => r.data); + const data = await this.add(title, desc, template, enableContentTypes, addOrUpdateSettings); return { created: true, data, list: this.getByTitle(addOrUpdateSettings.Title) }; } } @@ -167,16 +166,10 @@ export class _List extends _SPInstance { * @param properties A plain object hash of values to update for the list * @param eTag Value used in the IF-Match header, by default "*" */ - public async update(properties: Partial, eTag = "*"): Promise { + public async update(properties: Partial, eTag = "*"): Promise { const data = await spPostMerge(this, body(properties, headers({ "IF-Match": eTag }))); - - const list: IList = hOP(properties, "Title") ? this.getParent(List, `getByTitle('${properties.Title}')`) : List(this); - - return { - data, - list, - }; + return data; } /** @@ -356,22 +349,6 @@ export class _List extends _SPInstance { export interface IList extends _List, IDeleteableWithETag { } export const List = spInvokableFactory(_List); -/** - * Represents the output of the add method - */ -export interface IListAddResult { - list: IList; - data: IListInfo; -} - -/** - * Represents the output of the update method - */ -export interface IListUpdateResult { - list: IList; - data: IListInfo; -} - /** * Represents the output of the ensure method */ diff --git a/packages/sp/navigation/index.ts b/packages/sp/navigation/index.ts index d294d9c60..a1f1edb07 100644 --- a/packages/sp/navigation/index.ts +++ b/packages/sp/navigation/index.ts @@ -7,7 +7,6 @@ export { INavNodeUpdateResult, INavigation, INavigationNode, - INavigationNodeAddResult, INavigationNodes, INavigationService, Navigation, diff --git a/packages/sp/navigation/types.ts b/packages/sp/navigation/types.ts index d6355eb5d..ffac8c2cd 100644 --- a/packages/sp/navigation/types.ts +++ b/packages/sp/navigation/types.ts @@ -36,7 +36,7 @@ export class _NavigationNodes extends _SPCollection { * @param url The url of the node * @param visible If true the node is visible, otherwise it is hidden (default: true) */ - public async add(title: string, url: string, visible = true): Promise { + public async add(title: string, url: string, visible = true): Promise { const postBody = body({ IsVisible: visible, @@ -44,12 +44,7 @@ export class _NavigationNodes extends _SPCollection { Url: url, }); - const data = await spPost(NavigationNodes(this, null), postBody); - - return { - data, - node: this.getById(data.Id), - }; + return spPost(NavigationNodes(this, null), postBody); } /** @@ -220,15 +215,6 @@ export interface ISerializableNavigationNode { Children: ISerializableNavigationNode[]; } -/** - * Result from adding a navigation node - * - */ -export interface INavigationNodeAddResult { - data: INavNodeInfo; - node: INavigationNode; -} - /** * Represents the information describing a navigation node */ diff --git a/packages/sp/site-groups/index.ts b/packages/sp/site-groups/index.ts index a1f9369ea..f62152410 100644 --- a/packages/sp/site-groups/index.ts +++ b/packages/sp/site-groups/index.ts @@ -2,8 +2,6 @@ import "./web.js"; export { ISiteGroup, - IGroupAddResult, - IGroupUpdateResult, ISiteGroups, SiteGroup, SiteGroups, diff --git a/packages/sp/site-groups/types.ts b/packages/sp/site-groups/types.ts index a3ed9f964..38770f63b 100644 --- a/packages/sp/site-groups/types.ts +++ b/packages/sp/site-groups/types.ts @@ -26,14 +26,9 @@ export class _SiteGroups extends _SPCollection { * * @param properties The group properties object of property names and values to be set for the group */ - public async add(properties: Partial): Promise { + public async add(properties: Partial): Promise { - const data = await spPost(this, body(properties)); - - return { - data, - group: this.getById(data.Id), - }; + return spPost(this, body(properties)); } /** @@ -79,14 +74,9 @@ export class _SiteGroup extends _SPInstance { /** * @param props Group properties to update */ - public async update(props: Partial): Promise { - - const data = await spPostMerge(this, body(props)); + public async update(props: Partial): Promise { - return { - data, - group: this, - }; + return spPostMerge(this, body(props)); } /** @@ -100,24 +90,6 @@ export class _SiteGroup extends _SPInstance { export interface ISiteGroup extends _SiteGroup { } export const SiteGroup = spInvokableFactory(_SiteGroup); -/** - * Result from updating a group - * - */ -export interface IGroupUpdateResult { - group: ISiteGroup; - data: any; -} - -/** - * Results from adding a group - * - */ -export interface IGroupAddResult { - group: ISiteGroup; - data: any; -} - export interface ISiteGroupInfo { AllowMembersEditMembership: boolean; AllowRequestToJoinLeave: boolean; diff --git a/packages/sp/site-users/index.ts b/packages/sp/site-users/index.ts index f0cbdb8a1..84ef29a4f 100644 --- a/packages/sp/site-users/index.ts +++ b/packages/sp/site-users/index.ts @@ -2,11 +2,9 @@ import "./web.js"; export { ISiteUser, - IWebEnsureUserResult, SiteUser, SiteUsers, ISiteUsers, ISiteUserProps, - IUserUpdateResult, ISiteUserInfo, } from "./types.js"; diff --git a/packages/sp/site-users/types.ts b/packages/sp/site-users/types.ts index 283b313f7..3f79bbcb5 100644 --- a/packages/sp/site-users/types.ts +++ b/packages/sp/site-users/types.ts @@ -98,24 +98,28 @@ export class _SiteUser extends _SPInstance { * * @param props Group properties to update */ - public async update(props: Partial): Promise { + public async update(props: Partial): Promise { - const data = await spPostMerge(this, body(props)); + return spPostMerge(this, body(props)); - return { - data, - user: this, - }; } } export interface ISiteUser extends _SiteUser, IDeleteable { } export const SiteUser = spInvokableFactory(_SiteUser); -export interface ISiteUserInfo extends ISiteUserProps { +export interface ISiteUserInfo { + Id: number; + IsHiddenInUI: boolean; + LoginName: string; + Title: string; + PrincipalType: number; + Email: string; Expiration: string; IsEmailAuthenticationGuestUser: boolean; + IsShareByEmailGuestUser: boolean; + IsSiteAdmin: boolean; UserId: { NameId: string; NameIdIssuer: string; @@ -177,21 +181,3 @@ export interface ISiteUserProps { */ Title: string; } - -/** - * Properties that provide both a getter, and a setter. - * - */ -export interface IUserUpdateResult { - user: ISiteUser; - data: any; -} - -/** - * Result from ensuring a user - * - */ -export interface IWebEnsureUserResult { - data: ISiteUserProps; - user: ISiteUser; -} diff --git a/packages/sp/site-users/web.ts b/packages/sp/site-users/web.ts index 97be709ca..0699e75ba 100644 --- a/packages/sp/site-users/web.ts +++ b/packages/sp/site-users/web.ts @@ -1,14 +1,13 @@ import { addProp, body } from "@pnp/queryable"; import { _Web, Web } from "../webs/types.js"; -import { ISiteUsers, SiteUsers, ISiteUser, SiteUser, IWebEnsureUserResult } from "./types.js"; -import { odataUrlFrom } from "../utils/odata-url-from.js"; +import { ISiteUsers, SiteUsers, ISiteUser, SiteUser, ISiteUserInfo } from "./types.js"; import { spPost } from "../spqueryable.js"; declare module "../webs/types" { interface _Web { readonly siteUsers: ISiteUsers; readonly currentUser: ISiteUser; - ensureUser(loginName: string): Promise; + ensureUser(loginName: string): Promise; getUserById(id: number): ISiteUser; } interface IWeb { @@ -28,7 +27,7 @@ declare module "../webs/types" { * * @param loginName The login name of the user (ex: i:0#.f|membership|user@domain.onmicrosoft.com) */ - ensureUser(loginName: string): Promise; + ensureUser(loginName: string): Promise; /** * Returns the user corresponding to the specified member identifier for the current site @@ -42,13 +41,9 @@ declare module "../webs/types" { addProp(_Web, "siteUsers", SiteUsers); addProp(_Web, "currentUser", SiteUser); -_Web.prototype.ensureUser = async function (this: _Web, logonName: string): Promise { +_Web.prototype.ensureUser = async function (this: _Web, logonName: string): Promise { - const data = await spPost(Web(this, "ensureuser"), body({ logonName })); - return { - data, - user: SiteUser([this, odataUrlFrom(data)]), - }; + return spPost(Web(this, "ensureuser"), body({ logonName })); }; _Web.prototype.getUserById = function (id: number): ISiteUser { diff --git a/packages/sp/subscriptions/index.ts b/packages/sp/subscriptions/index.ts index 37fe82a58..b1b041895 100644 --- a/packages/sp/subscriptions/index.ts +++ b/packages/sp/subscriptions/index.ts @@ -2,8 +2,6 @@ import "./list.js"; export { ISubscription, - ISubscriptionAddResult, - ISubscriptionUpdateResult, ISubscriptions, Subscription, Subscriptions, diff --git a/packages/sp/subscriptions/types.ts b/packages/sp/subscriptions/types.ts index 066265368..a40d6ae31 100644 --- a/packages/sp/subscriptions/types.ts +++ b/packages/sp/subscriptions/types.ts @@ -29,7 +29,7 @@ export class _Subscriptions extends _SPCollection { * @param expirationDate The date and time to expire the subscription in the form YYYY-MM-ddTHH:mm:ss+00:00 (maximum of 6 months) * @param clientState A client specific string (optional) */ - public async add(notificationUrl: string, expirationDate: string, clientState?: string): Promise { + public async add(notificationUrl: string, expirationDate: string, clientState?: string): Promise { const postBody: any = { "expirationDateTime": expirationDate, @@ -41,9 +41,7 @@ export class _Subscriptions extends _SPCollection { postBody.clientState = clientState; } - const data = await spPost(this, body(postBody)); - - return { data, subscription: this.getById(data.id) }; + return spPost(this, body(postBody)); } } export interface ISubscriptions extends _Subscriptions { } @@ -58,7 +56,7 @@ export class _Subscription extends _SPInstance { * @param notificationUrl The url to receive the notifications (optional) * @param clientState A client specific string (optional) */ - public async update(expirationDate?: string, notificationUrl?: string, clientState?: string): Promise { + public async update(expirationDate?: string, notificationUrl?: string, clientState?: string): Promise { const postBody: any = {}; @@ -74,9 +72,7 @@ export class _Subscription extends _SPInstance { postBody.clientState = clientState; } - const data = await spPatch(this, body(postBody)); - - return { data, subscription: this }; + return spPatch(this, body(postBody)); } /** @@ -89,21 +85,3 @@ export class _Subscription extends _SPInstance { } export interface ISubscription extends _Subscription { } export const Subscription = spInvokableFactory(_Subscription); - -/** - * Result from adding a new subscription - * - */ -export interface ISubscriptionAddResult { - subscription: ISubscription; - data: any; -} - -/** - * Result from updating a subscription - * - */ -export interface ISubscriptionUpdateResult { - subscription: ISubscription; - data: any; -} diff --git a/packages/sp/views/index.ts b/packages/sp/views/index.ts index ef3f9a1df..e9578ebaf 100644 --- a/packages/sp/views/index.ts +++ b/packages/sp/views/index.ts @@ -7,8 +7,6 @@ export { View, ViewFields, Views, - IViewAddResult, - IViewUpdateResult, IViewInfo, ViewScope, } from "./types.js"; diff --git a/packages/sp/views/types.ts b/packages/sp/views/types.ts index e240cdfbd..607ac50f6 100644 --- a/packages/sp/views/types.ts +++ b/packages/sp/views/types.ts @@ -21,18 +21,13 @@ export class _Views extends _SPCollection { * @param personalView True if this is a personal view, otherwise false, default = false * @param additionalSettings Will be passed as part of the view creation body */ - public async add(Title: string, PersonalView = false, additionalSettings: Record = {}): Promise { + public async add(Title: string, PersonalView = false, additionalSettings: Record = {}): Promise { - const data = await spPost(this, body({ + return spPost(this, body({ PersonalView, Title, ...additionalSettings, })); - - return { - data, - view: this.getById(data.Id), - }; } /** @@ -69,14 +64,10 @@ export class _View extends _SPInstance { * * @param properties A plain object hash of values to update for the view */ - public async update(props: Partial): Promise { + public async update(props: Partial): Promise { - const data = await spPostMerge(this, body(props)); + return await spPostMerge(this, body(props)); - return { - data, - view: this, - }; } // : any = this._update>("SP.View", data => ({ data, view: this })); @@ -149,16 +140,6 @@ export class _ViewFields extends _SPCollection<{ Items: string[]; SchemaXml: str export interface IViewFields extends _ViewFields { } export const ViewFields = spInvokableFactory(_ViewFields); -export interface IViewAddResult { - view: IView; - data: IViewInfo; -} - -export interface IViewUpdateResult { - view: IView; - data: IViewInfo; -} - export enum ViewScope { DefaultValue, Recursive, diff --git a/packages/sp/webs/index.ts b/packages/sp/webs/index.ts index cc1f5efae..419776ef8 100644 --- a/packages/sp/webs/index.ts +++ b/packages/sp/webs/index.ts @@ -5,8 +5,6 @@ export { IWeb, IWebs, Web, - IWebAddResult, - IWebUpdateResult, Webs, IWebInfo, IStorageEntity, diff --git a/packages/sp/webs/types.ts b/packages/sp/webs/types.ts index 86a341765..0aa571804 100644 --- a/packages/sp/webs/types.ts +++ b/packages/sp/webs/types.ts @@ -16,7 +16,6 @@ import { } from "../spqueryable.js"; import { defaultPath } from "../decorators.js"; import { IChangeQuery } from "../types.js"; -import { odataUrlFrom } from "../utils/odata-url-from.js"; import { extractWebUrl } from "../utils/extract-web-url.js"; import { combine, isArray } from "@pnp/core"; import { encodePath } from "../utils/encode-path-str.js"; @@ -34,7 +33,7 @@ export class _Webs extends _SPCollection { * @param language The locale id that specifies the new web's language (default = 1033 [English, US]) * @param inheritPermissions When true, permissions will be inherited from the new web's parent (default = true) */ - public async add(Title: string, Url: string, Description = "", WebTemplate = "STS", Language = 1033, UseSamePermissionsAsParentSite = true): Promise { + public async add(Title: string, Url: string, Description = "", WebTemplate = "STS", Language = 1033, UseSamePermissionsAsParentSite = true): Promise { const postBody = body({ "parameters": { @@ -47,12 +46,7 @@ export class _Webs extends _SPCollection { }, }); - const data = await spPost(Webs(this, "add"), postBody); - - return { - data, - web: Web([this, odataUrlFrom(data).replace(/_api\/web\/?/i, "")]), - }; + return spPost(Webs(this, "add"), postBody); } } export interface IWebs extends _Webs { } @@ -264,24 +258,6 @@ export class _Web extends _SPInstance { export interface IWeb extends _Web, IDeleteable { } export const Web = spInvokableFactory(_Web); -/** - * Result from adding a web - * - */ -export interface IWebAddResult { - data: IWebInfo; - web: IWeb; -} - -/** - * Result from updating a web - * - */ -export interface IWebUpdateResult { - data: any; - web: IWeb; -} - export interface IWebInfosData { Configuration: number; Created: string; diff --git a/test/graph/columns.ts b/test/graph/columns.ts index effb013b8..8e95a0409 100644 --- a/test/graph/columns.ts +++ b/test/graph/columns.ts @@ -72,7 +72,7 @@ describe("Columns", function () { list: { "template": "genericList" }, }); - list = addList.list; + list = site.lists.getById(addList.id); })); after(async function () { @@ -114,8 +114,8 @@ describe("Columns", function () { columnTemplate.name += "Add"; columnTemplate.displayName += props.displayName; const c = await site.columns.add(columnTemplate); - await site.columns.getById(c.data.id).delete(); - return expect((c.data.name === columnTemplate.name)).to.be.true; + await site.columns.getById(c.id).delete(); + return expect((c.name === columnTemplate.name)).to.be.true; })); it("update", pnpTest("8ce610b0-3139-4e2b-9d90-47ad43247250", async function () { @@ -130,9 +130,9 @@ describe("Columns", function () { columnTemplate.displayName += props.displayName; const newColumnName = `${columnTemplate.displayName}-CHANGED`; const c = await site.columns.add(columnTemplate); - await site.columns.getById(c.data.id).update({ displayName: newColumnName }); - const updateColumn = await site.columns.getById(c.data.id)(); - await site.columns.getById(c.data.id).delete(); + await site.columns.getById(c.id).update({ displayName: newColumnName }); + const updateColumn = await site.columns.getById(c.id)(); + await site.columns.getById(c.id).delete(); return expect((updateColumn.displayName === newColumnName)).to.be.true; })); @@ -147,10 +147,10 @@ describe("Columns", function () { columnTemplate.name += props.name; columnTemplate.displayName += props.displayName; const c = await site.columns.add(columnTemplate); - await site.columns.getById(c.data.id).delete(); + await site.columns.getById(c.id).delete(); let deletedColumn: ColumnDefinition = null; try { - deletedColumn = await site.columns.getById(c.data.id)(); + deletedColumn = await site.columns.getById(c.id)(); } catch (err) { // do nothing } @@ -177,7 +177,7 @@ describe("Columns", function () { columnTemplate.name = columnTemplateName; columnTemplate.displayName = columnTemplateName; const addSiteCT = await site.columns.add(columnTemplate); - siteColumn = addSiteCT.column; + siteColumn = site.columns.getById(addSiteCT.id); })); after(async function () { @@ -203,24 +203,24 @@ describe("Columns", function () { it("addRef", pnpTest("9dd8c09e-9e07-42e2-ac2d-5685966d2aa0", async function () { const c = await contentType.columns.addRef(siteColumn); - await contentType.columns.getById(c.data.id).delete(); - return expect((c.data.name === columnTemplateName)).to.be.true; + await contentType.columns.getById(c.id).delete(); + return expect((c.name === columnTemplateName)).to.be.true; })); // Site column properties cannot be updated in content type. it.skip("update", pnpTest("c3afb14e-3f42-48e8-9ea6-43be8d231762", async function () { const c = await contentType.columns.addRef(siteColumn); - const updateColumnResults = await contentType.columns.getById(c.data.id).update({ propagateChanges: true }); - await contentType.columns.getById(c.data.id).delete(); + const updateColumnResults = await contentType.columns.getById(c.id).update({ propagateChanges: true }); + await contentType.columns.getById(c.id).delete(); return expect((updateColumnResults.propagateChanges)).to.be.true; })); it("delete", pnpTest("4d6e18c1-abe7-4cd4-a90e-1c1715d5e1ce", async function () { const c = await contentType.columns.addRef(siteColumn); - await contentType.columns.getById(c.data.id).delete(); + await contentType.columns.getById(c.id).delete(); let deletedColumn: ColumnDefinition = null; try { - deletedColumn = await contentType.columns.getById(c.data.id)(); + deletedColumn = await contentType.columns.getById(c.id)(); } catch (err) { // do nothing } @@ -254,8 +254,8 @@ describe("Columns", function () { columnTemplate.name += "Add"; columnTemplate.displayName += props.displayName; const c = await list.columns.add(columnTemplate); - await list.columns.getById(c.data.id).delete(); - return expect((c.data.name === columnTemplate.name)).to.be.true; + await list.columns.getById(c.id).delete(); + return expect((c.name === columnTemplate.name)).to.be.true; })); it("update", pnpTest("3827a66a-2f8b-4cd7-addb-b49eac258f45", async function () { @@ -270,9 +270,9 @@ describe("Columns", function () { columnTemplate.displayName += props.displayName; const newColumnName = `${columnTemplate.displayName}-CHANGED`; const c = await list.columns.add(columnTemplate); - await list.columns.getById(c.data.id).update({ displayName: newColumnName }); - const updateColumn = await list.columns.getById(c.data.id)(); - await list.columns.getById(c.data.id).delete(); + await list.columns.getById(c.id).update({ displayName: newColumnName }); + const updateColumn = await list.columns.getById(c.id)(); + await list.columns.getById(c.id).delete(); return expect((updateColumn.displayName === newColumnName)).to.be.true; })); @@ -287,10 +287,10 @@ describe("Columns", function () { columnTemplate.name += props.name; columnTemplate.displayName += props.displayName; const c = await list.columns.add(columnTemplate); - await list.columns.getById(c.data.id).delete(); + await list.columns.getById(c.id).delete(); let deletedColumn: ColumnDefinition = null; try { - deletedColumn = await list.columns.getById(c.data.id)(); + deletedColumn = await list.columns.getById(c.id)(); } catch (err) { // do nothing } diff --git a/test/graph/contacts.ts b/test/graph/contacts.ts index 817f41f9e..28189905a 100644 --- a/test/graph/contacts.ts +++ b/test/graph/contacts.ts @@ -33,20 +33,20 @@ describe("Contacts", function () { name: `Pavel ${testContactName}}`, }], ["+1 732 555 1111"]); - testContactID = contact.data.id; - rootFolderID = contact.data.parentFolderId; + testContactID = contact.id; + rootFolderID = contact.parentFolderId; // Create a test folder const folder = await this.pnp.graph.users.getById(testUserName).contactFolders.add(testFolderName, rootFolderID); - testFolderID = folder.data.id; + testFolderID = folder.id; const subFolder = await this.pnp.graph.users.getById(testUserName).contactFolders.getById(testFolderID).childFolders.add(testSubFolderName, testFolderID); - subFolderID = subFolder.data.id; + subFolderID = subFolder.id; // Add a test user in the new folder const contact2 = await this.pnp.graph.users.getById(testUserName).contactFolders.getById(testFolderID).contacts.add("Jane", testContactName, [{ address: "janeb@contoso.onmicrosoft.com", name: `Pavel ${testContactName}}`, }], ["+1 732 555 1111"]); - testContact2ID = contact2.data.id; + testContact2ID = contact2.id; }); it("Get Contacts", async function () { @@ -68,7 +68,7 @@ describe("Contacts", function () { address: "tmctester@contoso.onmicrosoft.com", name: `Test ${testContactName}`, }], ["+1 732 555 0102"]); - contactId = contact.data.id; + contactId = contact.id; contactAfterAdd = await this.pnp.graph.users.getById(testUserName).contacts.getById(contactId)(); } catch (err) { console.log(err.message); @@ -87,10 +87,10 @@ describe("Contacts", function () { address: "tmctester@contoso.onmicrosoft.com", name: `Test ${testContactName}`, }], ["+1 732 555 0102"]); - await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.data.id).update({ birthday: "1986-05-30" }); - const contact2 = await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.data.id)(); + await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id).update({ birthday: "1986-05-30" }); + const contact2 = await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id)(); // Clean up the added contact - await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.data.id).delete(); + await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id).delete(); return expect(contact2.birthday).equals("1986-05-30T11:59:00Z"); }); @@ -101,13 +101,13 @@ describe("Contacts", function () { address: "tmctester@contoso.onmicrosoft.com", name: `Test ${testContactName}`, }], ["+1 732 555 0102"]); - await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.data.id).delete(); + await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id).delete(); let deletedUserFound = false; try { // If we try to find a user that doesn"t exist this returns a 404 - await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.data.id)(); + await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id)(); deletedUserFound = true; } catch (e) { @@ -140,7 +140,7 @@ describe("Contacts", function () { try { const testFolderName = `TestFolder_${getRandomString(4)}`; const folder = await this.pnp.graph.users.getById(testUserName).contactFolders.add(testFolderName, rootFolderID); - folderId = folder.data.id; + folderId = folder.id; folderAfterAdd = await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folderId)(); } catch (err) { console.log(err.message); @@ -160,7 +160,7 @@ describe("Contacts", function () { try { const testFolderName = `TestFolder_${getRandomString(4)}`; const folder = await this.pnp.graph.users.getById(testUserName).contactFolders.add(testFolderName, rootFolderID); - folderId = folder.data.id; + folderId = folder.id; await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folderId).update({ displayName: folderDisplayName }); folderAfterUpdate = await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folderId)(); } catch (err) { @@ -178,13 +178,13 @@ describe("Contacts", function () { // Add a folder that we can then delete const testFolderName = `TestFolder_${getRandomString(4)}`; const folder = await this.pnp.graph.users.getById(testUserName).contactFolders.add(testFolderName, rootFolderID); - await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folder.data.id).delete(); + await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folder.id).delete(); let deletedFolderFound = false; try { // If we try to find a folder that doesn"t exist this returns a 404 - await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folder.data.id)(); + await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folder.id)(); deletedFolderFound = true; } catch (e) { @@ -220,9 +220,9 @@ describe("Contacts", function () { const contact = await this.pnp.graph.users.getById(testUserName).contactFolders.getById(testFolderID).childFolders.getById(subFolderID) .contacts.add("Test", testContactName, [{ address: "tmctester@contoso.onmicrosoft.com", name: `Test ${testContactName}` }], ["+1 732 555 0102"]); const contactAfterAdd = await this.pnp.graph.users.getById(testUserName).contactFolders.getById(testFolderID).childFolders.getById(subFolderID) - .contacts.getById(contact.data.id)(); + .contacts.getById(contact.id)(); // Clean up the added contact - await this.pnp.graph.users.getById(testUserName).contactFolders.getById(testFolderID).childFolders.getById(subFolderID).contacts.getById(contact.data.id).delete(); + await this.pnp.graph.users.getById(testUserName).contactFolders.getById(testFolderID).childFolders.getById(subFolderID).contacts.getById(contact.id).delete(); return expect(contactAfterAdd).is.not.null; }); diff --git a/test/graph/content-types.ts b/test/graph/content-types.ts index 0f04a3803..2d94ae2e0 100644 --- a/test/graph/content-types.ts +++ b/test/graph/content-types.ts @@ -41,7 +41,7 @@ describe("ContentTypes", function () { list: { "template": "genericList" }, }); - list = site.lists.getById(listTmp.data.id); + list = site.lists.getById(listTmp.id); })); after(async function () { diff --git a/test/graph/directoryobjects.ts b/test/graph/directoryobjects.ts index edcbf600d..39b4faacc 100644 --- a/test/graph/directoryobjects.ts +++ b/test/graph/directoryobjects.ts @@ -46,7 +46,7 @@ describe("Directory Objects", function () { "https://graph.microsoft.com/v1.0/users/" + props.userId, ], }); - testChildGroupID = result.data.id; + testChildGroupID = result.id; result = await this.pnp.graph.groups.add(props.groupName2, props.groupName2, GroupType.Security, { "members@odata.bind": [ @@ -57,7 +57,7 @@ describe("Directory Objects", function () { "https://graph.microsoft.com/v1.0/users/" + props.userId, ], }); - testParentGroupID = result.data.id; + testParentGroupID = result.id; })); it("delete", pnpTest("e1d8a9b8-43c1-4c02-85b3-92ef980d0ee2", async function () { @@ -74,7 +74,7 @@ describe("Directory Objects", function () { "https://graph.microsoft.com/v1.0/users/" + userId, ], }); - const testDeleteGroupID = result.data.id; + const testDeleteGroupID = result.id; return expect(this.pnp.graph.groups.getById(testDeleteGroupID).delete()).eventually.be.fulfilled; })); diff --git a/test/graph/groups.ts b/test/graph/groups.ts index aefbba33a..b3f7b18ee 100644 --- a/test/graph/groups.ts +++ b/test/graph/groups.ts @@ -27,8 +27,8 @@ describe("Groups", function () { }); const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); - const group = await groupAddResult.group(); - groupID = groupAddResult.data.id; + const group = await this.pnp.graph.groups.getById(groupAddResult.id)(); + groupID = groupAddResult.id; return expect(group.displayName).is.not.undefined; })); @@ -42,12 +42,12 @@ describe("Groups", function () { const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); // Delete the group // Potential Bug. Delete is only available off of getByID - await this.pnp.graph.groups.getById(groupAddResult.data.id).delete(); + await this.pnp.graph.groups.getById(groupAddResult.id).delete(); // Check to see if the group exists const groups = await this.pnp.graph.groups(); let groupExists = false; groups.forEach(element => { - if (element.id === groupAddResult.data.id) { + if (element.id === groupAddResult.id) { groupExists = true; return groupExists === true; } @@ -64,7 +64,7 @@ describe("Groups", function () { // Create a new group const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); // Get the group by ID - const group = await this.pnp.graph.groups.getById(groupAddResult.data.id); + const group = await this.pnp.graph.groups.getById(groupAddResult.id)(); return expect(group).is.not.undefined; })); @@ -76,10 +76,10 @@ describe("Groups", function () { // Create a new group const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); - groupID = groupAddResult.data.id; + groupID = groupAddResult.id; // Update the display name of the group - const newName = '"Updated_' + groupAddResult.data.displayName + '"'; + const newName = '"Updated_' + groupAddResult.displayName + '"'; // Potential Bug. Update is only available off of getByID await this.pnp.graph.groups.getById(groupID).update({ displayName: newName }); diff --git a/test/graph/list-items.ts b/test/graph/list-items.ts index 562e0042f..d956510c4 100644 --- a/test/graph/list-items.ts +++ b/test/graph/list-items.ts @@ -35,7 +35,8 @@ describe("List-Items", function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); listTemplate.displayName += props.displayName; - list = (await site.lists.add(listTemplate)).list; + const listAdd = (await site.lists.add(listTemplate)); + list = site.lists.getById(listAdd.id); // add test items. Document set can be added later if(list){ diff --git a/test/graph/lists.ts b/test/graph/lists.ts index fbfcfa71e..f2e651392 100644 --- a/test/graph/lists.ts +++ b/test/graph/lists.ts @@ -47,8 +47,8 @@ describe("Lists", function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); listTemplate.displayName += props.displayName; const list = await site.lists.add(listTemplate); - await site.lists.getById(list.data.id).delete(); - return expect((list.data.displayName === listTemplate.displayName)).to.be.true; + await site.lists.getById(list.id).delete(); + return expect((list.displayName === listTemplate.displayName)).to.be.true; })); it("update", pnpTest("a386a85a-03ce-4846-8ca8-2472075694f5", async function () { @@ -61,9 +61,9 @@ describe("Lists", function () { listTemplate.displayName += props.displayName; const newListName = `${listTemplate.displayName}-CHANGED`; const list = await site.lists.add(listTemplate); - await site.lists.getById(list.data.id).update({ displayName: newListName }); - const updateList = await site.lists.getById(list.data.id)(); - await site.lists.getById(list.data.id).delete(); + await site.lists.getById(list.id).update({ displayName: newListName }); + const updateList = await site.lists.getById(list.id)(); + await site.lists.getById(list.id).delete(); return expect((updateList.displayName === newListName)).to.be.true; })); @@ -76,10 +76,10 @@ describe("Lists", function () { const listTemplate = JSON.parse(JSON.stringify(sampleList)); listTemplate.displayName += props.displayName; const list = await site.lists.add(listTemplate); - await site.lists.getById(list.data.id).delete(); + await site.lists.getById(list.id).delete(); let deletedList: List = null; try { - deletedList = await site.lists.getById(list.data.id)(); + deletedList = await site.lists.getById(list.id)(); } catch (err) { // do nothing } diff --git a/test/graph/paging.ts b/test/graph/paging.ts index c9696b783..5ab99837c 100644 --- a/test/graph/paging.ts +++ b/test/graph/paging.ts @@ -26,7 +26,7 @@ describe("Groups", function () { list: { "template": "genericList" }, }); - itemsCol = GraphCollection(site.lists.getById(listInfo.data.id), "items"); + itemsCol = GraphCollection(site.lists.getById(listInfo.id), "items"); for (let i = 0; i < 11; i++) { await graphPost(itemsCol, body({ diff --git a/test/graph/to-do.ts b/test/graph/to-do.ts index 66837d3f5..4df479a54 100644 --- a/test/graph/to-do.ts +++ b/test/graph/to-do.ts @@ -8,7 +8,8 @@ import { ITaskList, ITodoTask } from "@pnp/graph/to-do"; import getValidUser from "./utilities/getValidUser.js"; import { IUser } from "@pnp/graph/users"; -describe("To-do", function () { +// skipping all of together. We can create content, but can't delete. So it would create alot of unnecessary data +describe.skip("To-do", function () { let user: IUser; let taskList: ITaskList; let todoTask: ITodoTask; @@ -45,7 +46,7 @@ describe("To-do", function () { it("lists", pnpTest("8de75582-6257-4e2a-b753-7c8be1cf0a38", async function () { const lists = await user.todo.lists(); - return expect(lists).to.be.an("array") && expect(lists[0]).to.haveOwnProperty("id"); + return expect(lists).to.be.an("array"); })); it("lists - getById()", pnpTest("50650ae3-8192-4767-b4b3-9af7a586c11b", async function () { @@ -66,7 +67,7 @@ describe("To-do", function () { return expect(passed).is.true; })); - it("lists - update", pnpTest("9017c7b8-fb00-4a00-9ef0-51af695679a6", async function () { + it.skip("lists - update", pnpTest("9017c7b8-fb00-4a00-9ef0-51af695679a6", async function () { const displayName = "Test " + getRandomString(5); const updated = await taskList.update({ displayName: displayName, @@ -74,7 +75,7 @@ describe("To-do", function () { return expect(updated.id).is.not.null && expect(updated.displayName).equal(displayName); })); - it("lists - delete", pnpTest("ef561648-4380-4629-89bb-9834934e78d1", async function () { + it.skip("lists - delete", pnpTest("ef561648-4380-4629-89bb-9834934e78d1", async function () { const list = await user.todo.lists.add({ displayName: "Test" + getRandomString(5), }); @@ -99,7 +100,7 @@ describe("To-do", function () { return expect(task.id).is.not.null; })); - it("tasks - add", pnpTest("71958133-bd13-4bde-83c3-b8ea8871a466", async function () { + it.skip("tasks - add", pnpTest("71958133-bd13-4bde-83c3-b8ea8871a466", async function () { let passed = false; const task = await taskList.tasks.add({ title: "Test" + getRandomString(5), @@ -112,7 +113,7 @@ describe("To-do", function () { return expect(passed).is.true; })); - it("tasks - update", pnpTest("c2071fbb-55d0-4837-a0d8-9a8bc6640f60", async function () { + it.skip("tasks - update", pnpTest("c2071fbb-55d0-4837-a0d8-9a8bc6640f60", async function () { const title = "Test " + getRandomString(5); const updated = await todoTask.update({ title: title, @@ -120,7 +121,7 @@ describe("To-do", function () { return expect(updated.id).is.not.null && expect(updated.title).equal(title); })); - it("tasks - delete", pnpTest("104adde8-6514-4b84-b711-ae360e971519", async function () { + it.skip("tasks - delete", pnpTest("104adde8-6514-4b84-b711-ae360e971519", async function () { const task = await taskList.tasks.add({ title: "Test" + getRandomString(5), }); @@ -152,7 +153,7 @@ describe("To-do", function () { return expect(attachment.id).is.not.null; })); - it("fileAttachments add small", pnpTest("1515ae48-15c4-4b0c-81a7-3afd4b83e601", async function () { + it.skip("fileAttachments add small", pnpTest("1515ae48-15c4-4b0c-81a7-3afd4b83e601", async function () { const attachment = await todoTask.attachments.add( { "name": getRandomString(10), @@ -163,7 +164,7 @@ describe("To-do", function () { return expect(attachment.id).is.not.null; })); - it("fileAttachments delete", pnpTest("6ab1d551-c0ef-4b6c-a444-ce3f49b777e6", async function () { + it.skip("fileAttachments delete", pnpTest("6ab1d551-c0ef-4b6c-a444-ce3f49b777e6", async function () { const attachment = await todoTask.attachments.add( { "name": getRandomString(10), @@ -190,7 +191,7 @@ describe("To-do", function () { return expect(item.id).is.not.null; })); - it("checklistItems - add", pnpTest("be7b039f-2de9-446a-8a3c-e3b8ea5ec237", async function () { + it.skip("checklistItems - add", pnpTest("be7b039f-2de9-446a-8a3c-e3b8ea5ec237", async function () { let passed = false; const newItem = await todoTask.checklistItems.add({ displayName:getRandomString(10), @@ -203,7 +204,7 @@ describe("To-do", function () { return expect(passed).is.true; })); - it("checklistItems - update", pnpTest("9568305d-afea-43b1-89ad-5c3f5273383f", async function () { + it.skip("checklistItems - update", pnpTest("9568305d-afea-43b1-89ad-5c3f5273383f", async function () { const title = "Test " + getRandomString(5); const newItem = await todoTask.checklistItems.add({ displayName:getRandomString(10), @@ -215,7 +216,7 @@ describe("To-do", function () { return expect(updated.id).is.not.null && expect(updated.displayName).equal(title); })); - it("checklistItems - delete", pnpTest("ff66aa6c-72e9-402e-9937-3a59fd61257f", async function () { + it.skip("checklistItems - delete", pnpTest("ff66aa6c-72e9-402e-9937-3a59fd61257f", async function () { const newItem = await todoTask.checklistItems.add({ displayName:getRandomString(10), }); @@ -224,12 +225,12 @@ describe("To-do", function () { } this.skip(); })); - it("linkedResources", pnpTest("200bb895-b956-4120-b3c5-a111d074285f", async function () { + it.skip("linkedResources", pnpTest("200bb895-b956-4120-b3c5-a111d074285f", async function () { const resources = await todoTask.resources(); return expect(resources).to.be.an("array"); })); - it("linkedResources - getById()", pnpTest("88a91401-5851-4aea-a3d8-81adf37cabab", async function () { + it.skip("linkedResources - getById()", pnpTest("88a91401-5851-4aea-a3d8-81adf37cabab", async function () { const resource = await todoTask.resources.add({ displayName:getRandomString(10), applicationName: "PnPjs" + getRandomString(5), @@ -238,7 +239,7 @@ describe("To-do", function () { return expect(item.id).is.not.null; })); - it("linkedResources - add", pnpTest("e7656849-41f0-4d8c-87a2-69591585ad73", async function () { + it.skip("linkedResources - add", pnpTest("e7656849-41f0-4d8c-87a2-69591585ad73", async function () { let passed = false; const task = await taskList.tasks.add({title: getRandomString(5)}); const resource = await taskList.tasks.getById(task.id).resources.add({ @@ -253,7 +254,7 @@ describe("To-do", function () { return expect(passed).is.true; })); - it("linkedResources - update", pnpTest("106acffe-5b35-408b-8879-8d420bbf30c3", async function () { + it.skip("linkedResources - update", pnpTest("106acffe-5b35-408b-8879-8d420bbf30c3", async function () { const title = "Test " + getRandomString(5); const task = await taskList.tasks.add({title: getRandomString(5)}); const resource = await taskList.tasks.getById(task.id).resources.add({ @@ -267,7 +268,7 @@ describe("To-do", function () { return expect(updated.id).is.not.null && expect(updated.displayName).equal(title); })); - it("linkedResources - delete", pnpTest("f5be23bd-972b-4c87-86f7-98de738c1257", async function () { + it.skip("linkedResources - delete", pnpTest("f5be23bd-972b-4c87-86f7-98de738c1257", async function () { const task = await taskList.tasks.add({title: getRandomString(5)}); const resource = await taskList.tasks.getById(task.id).resources.add({ applicationName: "PnPjs" + getRandomString(10), diff --git a/test/mocha-root-hooks.ts b/test/mocha-root-hooks.ts index ba09f8ef4..5718e7e81 100644 --- a/test/mocha-root-hooks.ts +++ b/test/mocha-root-hooks.ts @@ -110,7 +110,7 @@ export const mochaHooks = { const testWebResult = await rootSP.web.webs.add(`PnP-JS-Core Testing ${d.toDateString()}`, g); // set the testing web url so our tests have access if needed - this.pnp.settings.sp.testWebUrl = testWebResult.data.Url; + this.pnp.settings.sp.testWebUrl = testWebResult.Url; // create a new testing site this.pnp._sp = spfi([rootSP.web, this.pnp.settings.sp.testWebUrl]); diff --git a/test/queryable/behaviors.ts b/test/queryable/behaviors.ts index 5aad1675a..d2e001b90 100644 --- a/test/queryable/behaviors.ts +++ b/test/queryable/behaviors.ts @@ -58,7 +58,7 @@ describe("Behaviors", function () { // Add a text field, which augments header, to validate that CachingPessimisticRefresh execute function honors header const testFieldNameRand = `CachingPessimisticRefreshField_${getRandomString(10)}`; const f = await spInstance.web.fields.addText(testFieldNameRand); - await f.field.delete(); + await spInstance.web.fields.getById(f.Id).delete(); // Test caching behavior const startCheckpoint = new Date(); diff --git a/test/sp/alias.ts b/test/sp/alias.ts index b69a9a2d4..4264fa141 100644 --- a/test/sp/alias.ts +++ b/test/sp/alias.ts @@ -23,9 +23,10 @@ describe("Alias Parameters", function () { webRelativeUrl = webInfo.ServerRelativeUrl; const ler = await this.pnp.sp.web.lists.ensure("AliasTestLib", "Used to test alias parameters", 101); + const list = ler.list; - await ler.list.rootFolder.folders.addUsingPath("MyTestFolder"); - await ler.list.rootFolder.files.addUsingPath("text.txt", "Some file content!"); + await list.rootFolder.folders.addUsingPath("MyTestFolder"); + await list.rootFolder.files.addUsingPath("text.txt", "Some file content!"); }); it("Folders", function () { diff --git a/test/sp/appcatalog.ts b/test/sp/appcatalog.ts index 684f8973c..066360996 100644 --- a/test/sp/appcatalog.ts +++ b/test/sp/appcatalog.ts @@ -43,7 +43,7 @@ describe.skip("AppCatalog", function () { return app.file.delete(); }); - return expect(app.data.Name).to.eq(appName); + return expect(app.Name).to.eq(appName); }); it("getAppById", async function () { diff --git a/test/sp/attachments.ts b/test/sp/attachments.ts index 56ce438a4..60233d75c 100644 --- a/test/sp/attachments.ts +++ b/test/sp/attachments.ts @@ -22,8 +22,8 @@ describe("Attachments", function () { }); // we need to add a list and some attachments. - const listData = await this.pnp.sp.web.lists.ensure(props.listTitle); - list = listData.list; + const ler = await this.pnp.sp.web.lists.ensure(props.listTitle); + list = ler.list; })); it("attachmentFiles", pnpTest("9bc6dba6-6690-4453-8d13-4f42e051a245", async function () { @@ -38,11 +38,11 @@ describe("Attachments", function () { const r = await list.items.add({ Title: props.itemTitle, }); + const item = list.items.getById(r.Id); + await item.attachmentFiles.add(props.attachmentFile1Name, "Some Content"); + await item.attachmentFiles.add(props.attachmentFile2Name, "Some Content"); - await r.item.attachmentFiles.add(props.attachmentFile1Name, "Some Content"); - await r.item.attachmentFiles.add(props.attachmentFile2Name, "Some Content"); - - return expect(r.item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); + return expect(item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); })); it("getByName", pnpTest("25d87865-8e83-4d97-88ad-afeca7f217e1", async function () { @@ -57,10 +57,11 @@ describe("Attachments", function () { const r = await list.items.add({ Title: props.itemTitle, }); + const item = list.items.getById(r.Id); - await r.item.attachmentFiles.add(props.attachmentFileName, props.content); + await item.attachmentFiles.add(props.attachmentFileName, props.content); - const info = await r.item.attachmentFiles.getByName(props.attachmentFileName)(); + const info = await item.attachmentFiles.getByName(props.attachmentFileName)(); return expect(info.FileName).to.eq(props.attachmentFileName); })); @@ -77,9 +78,10 @@ describe("Attachments", function () { const r = await list.items.add({ Title: props.itemTitle, }); + const item = list.items.getById(r.Id); - await r.item.attachmentFiles.add(props.attachmentFileName, props.content); - const text = await r.item.attachmentFiles.getByName(props.attachmentFileName).getText(); + await item.attachmentFiles.add(props.attachmentFileName, props.content); + const text = await item.attachmentFiles.getByName(props.attachmentFileName).getText(); expect(text).to.eq(props.content); })); @@ -96,15 +98,15 @@ describe("Attachments", function () { const r = await list.items.add({ Title: props.itemTitle, }); + const item = list.items.getById(r.Id); + await item.attachmentFiles.add(props.attachmentFileName, props.content); - await r.item.attachmentFiles.add(props.attachmentFileName, props.content); - - const text = await r.item.attachmentFiles.getByName(props.attachmentFileName).getText(); + const text = await item.attachmentFiles.getByName(props.attachmentFileName).getText(); expect(text).to.eq(props.content); - await r.item.attachmentFiles.getByName(props.attachmentFileName).setContent(props.content2); - const text2 = await r.item.attachmentFiles.getByName(props.attachmentFileName).getText(); + await item.attachmentFiles.getByName(props.attachmentFileName).setContent(props.content2); + const text2 = await item.attachmentFiles.getByName(props.attachmentFileName).getText(); expect(text2).to.eq(props.content2); })); @@ -120,15 +122,15 @@ describe("Attachments", function () { const r = await list.items.add({ Title: props.itemTitle, }); + const item = list.items.getById(r.Id); + await item.attachmentFiles.add(props.attachmentFileName, props.content); - await r.item.attachmentFiles.add(props.attachmentFileName, props.content); - - const attachmentInfo = await r.item.attachmentFiles(); + const attachmentInfo = await item.attachmentFiles(); expect(attachmentInfo).to.be.an("Array").and.have.length(1); - await r.item.attachmentFiles.getByName(props.attachmentFileName).recycle(); + await item.attachmentFiles.getByName(props.attachmentFileName).recycle(); - return expect(r.item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(0); + return expect(item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(0); })); }); diff --git a/test/sp/batch.ts b/test/sp/batch.ts index 9e9c7e636..e84d80be3 100644 --- a/test/sp/batch.ts +++ b/test/sp/batch.ts @@ -195,7 +195,7 @@ describe("Batching", function () { // ensure we have a file const far = await ler.list.rootFolder.files.addUsingPath(props.fileName, props.content); - const item = await far.file.getItem(); + const item = await ler.list.rootFolder.files.getByUrl(far.Name).getItem(); const [batchedSP, execute] = this.pnp.sp.batched(); @@ -314,8 +314,8 @@ describe("Batching", function () { for (let i = 0; i < 3; i++) { list.items.add({ Title: props.titles[i] }).then(r => { - ids.push(r.data.Id); - res.push(r.item); + ids.push(r.Id); + res.push(list.items.getById(r.Id)); }); } @@ -335,8 +335,8 @@ describe("Batching", function () { for (let i = 0; i < 3; i++) { updateList.items.getById(ids[i]).update({ Title: props.titles2[i], - }).then(r => { - res.push(r.item); + }).then(() => { + res.push(updateList.items.getById(ids[i])); }); } diff --git a/test/sp/clientside-pages.ts b/test/sp/clientside-pages.ts index 3a099e63c..e92dc0226 100644 --- a/test/sp/clientside-pages.ts +++ b/test/sp/clientside-pages.ts @@ -365,8 +365,8 @@ describe("Clientside Pages", function () { pageUrl = combine("/", serverRelUrl, (page).json.Url); const ensureTestUser = await this.pnp.sp.web.ensureUser(this.pnp.settings.testUser); - userId = ensureTestUser.data.Id; - userPrincipalName = ensureTestUser.data.Email; + userId = ensureTestUser.Id; + userPrincipalName = ensureTestUser.Email; })); it("setAuthorById()", pnpTest("d57adc36-191a-43bc-9992-b6f236ae1db7", async function () { diff --git a/test/sp/column-defaults.ts b/test/sp/column-defaults.ts index 94f427964..8a7d8fe46 100644 --- a/test/sp/column-defaults.ts +++ b/test/sp/column-defaults.ts @@ -24,7 +24,7 @@ describe("DefaultColumnValues", function () { } const ler = await this.pnp.sp.web.lists.ensure(listName, "", 101); - list = ler.list; + list = ler.list; if (ler.created) { const [batchSP, execute] = this.pnp.sp.batched(); @@ -74,8 +74,9 @@ describe("DefaultColumnValues", function () { }); const far = await list.rootFolder.folders.addUsingPath(props.folderName); + const folder = await list.rootFolder.folders.getByUrl(far.Name); - await far.folder.setDefaultColumnValues([{ + await folder.setDefaultColumnValues([{ name: "TextField", value: "#PnPjs", }, { @@ -86,7 +87,7 @@ describe("DefaultColumnValues", function () { value: ["Item 1", "Item 2"], }]); - const defaults = await far.folder.getDefaultColumnValues(); + const defaults = await folder.getDefaultColumnValues(); expect(defaults.length).to.eq(3); @@ -212,8 +213,9 @@ describe("DefaultColumnValues", function () { subFolderName: `fld_${getRandomString(4)}`, }); const far = await list.rootFolder.folders.addUsingPath(props.subFolderName); + const folder = list.rootFolder.folders.getByUrl(far.Name); - await far.folder.setDefaultColumnValues([{ + await folder.setDefaultColumnValues([{ name: "TextField", value: "#PnPjs Rocks!", }, { @@ -224,13 +226,13 @@ describe("DefaultColumnValues", function () { value: ["Item 1", "Item 2"], }]); - const defaults = await far.folder.getDefaultColumnValues(); + const defaults = await folder.getDefaultColumnValues(); expect(defaults.length).to.be.eq(3); - await far.folder.clearDefaultColumnValues(); + await folder.clearDefaultColumnValues(); - const defaults2 = await far.folder.getDefaultColumnValues(); + const defaults2 = await folder.getDefaultColumnValues(); expect(defaults2.length).to.eq(0); })); diff --git a/test/sp/comments.ts b/test/sp/comments.ts index b91c6524f..33a19223b 100644 --- a/test/sp/comments.ts +++ b/test/sp/comments.ts @@ -156,9 +156,9 @@ describe("Comments", function () { const ler = await this.pnp.sp.web.lists.ensure(listTitle, "Used to test item comment operations"); list = ler.list; - if (ler.created) { + if (ler.created){ const itemData = await list.items.add({ Title: `Item ${getRandomString(4)}` }); - item = itemData.item; + item = list.items.getById(itemData.Id); } })); @@ -184,7 +184,7 @@ describe("Comments", function () { it("clear", pnpTest("82b74a1d-14cb-4412-8d63-e5cda4c58754", async function () { const itemData = await list.items.add({ Title: `Item ${getRandomString(4)}` }); - const newItem = itemData.item; + const newItem = list.items.getById(itemData.Id); await newItem.comments.add("A test comment"); await newItem.comments.add("A test comment"); diff --git a/test/sp/fields.ts b/test/sp/fields.ts index facfebcbb..14f6875c7 100644 --- a/test/sp/fields.ts +++ b/test/sp/fields.ts @@ -65,25 +65,25 @@ describe("Fields", function () { it("add", pnpTest("80e75ef7-3d5a-4880-9b28-67143ce6d058", async function () { const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; const field = await this.pnp.sp.web.fields.add(testFieldNameRand, FieldTypes.Text, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); + return expect(field.Title).to.be.equal(testFieldNameRand); })); it("addText", pnpTest("54ce0598-f27c-4787-9d39-3f31cedaacbd", async function () { const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; const field = await this.pnp.sp.web.fields.addText(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); + return expect(field.Title).to.be.equal(testFieldNameRand); })); it("addImageField", pnpTest("76b940f7-2113-4adb-adad-230e119b5450", async function () { const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; const field = await this.pnp.sp.web.fields.addImageField(testFieldNameRand, { Group: testFieldGroup}); - return expect(field.data.Title).to.be.equal(testFieldNameRand); + return expect(field.Title).to.be.equal(testFieldNameRand); })); it("addNumber", pnpTest("5f3f2ba5-d467-4ebb-8161-3589c35f62c4", async function () { const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; const field = await this.pnp.sp.web.fields.addNumber(testFieldNameRand, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(testFieldNameRand); + return expect(field.Title).to.be.equal(testFieldNameRand); })); it("addCalculated", pnpTest("4dc773f4-6f65-44e9-8ff6-8a03fe4dcb31", async function () { @@ -96,7 +96,7 @@ describe("Fields", function () { Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(testFieldNameRand); })); it("addDateTime", pnpTest("8c6ef065-4ead-40ba-b240-43c4c750ceb2", async function () { @@ -115,7 +115,7 @@ describe("Fields", function () { } ); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addCurrency", pnpTest("673c2821-b07d-4c52-ae70-e5afe2a786bb", async function () { @@ -125,7 +125,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.fields.addCurrency(name, { MinimumValue: 0, MaximumValue: 100, CurrencyLocaleId: 1033, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addMultilineText", pnpTest("a6e8d8be-4db2-4e2a-a65b-0af3cfe6ff0e", async function () { @@ -144,7 +144,7 @@ describe("Fields", function () { Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addUrl", pnpTest("c0754452-3817-415c-96d4-89e47d5cb7c2", async function () { @@ -155,7 +155,7 @@ describe("Fields", function () { const field = await this.pnp.sp.web.fields.addUrl(name, { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addUser", pnpTest("93b6e6b4-d9b2-464f-8846-9c0353b9515f", async function () { @@ -166,7 +166,7 @@ describe("Fields", function () { const field = await this.pnp.sp.web.fields.addUser(name, { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addLookup", pnpTest("578da2cd-0a42-42a0-84e7-0e0de0315610", async function () { @@ -178,12 +178,12 @@ describe("Fields", function () { const list = await this.pnp.sp.web.lists.add(lookupListName, testFieldDescription, 100, false); - const field = await this.pnp.sp.web.fields.addLookup(name, { LookupListId: list.data.Id, LookupFieldName: "Title" }); - await field.field.update({ + const field = await this.pnp.sp.web.fields.addLookup(name, { LookupListId: list.Id, LookupFieldName: "Title" }); + await this.pnp.sp.web.fields.getById(field.Id).update({ Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addChoice", pnpTest("deff0f4a-5a4d-4607-b882-cb9c1b972d47", async function () { @@ -200,7 +200,7 @@ describe("Fields", function () { Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addMultiChoice", pnpTest("011f8908-35b1-4a41-84d6-fbf5ce8d892a", async function () { @@ -211,7 +211,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.fields.addMultiChoice(name, { Choices: choices, FillInChoice: false, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addBoolean", pnpTest("b5d13907-d9dc-48c5-a3d4-cfcfbfed9c99", async function () { @@ -221,7 +221,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.fields.addBoolean(name, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addDependentLookupField", pnpTest("16a58810-c90c-4eb3-af0b-60a34d9f5a36", async function () { @@ -234,11 +234,11 @@ describe("Fields", function () { const list = await this.pnp.sp.web.lists.add(lookupListName, testFieldDescription, 100, false); - const field = await this.pnp.sp.web.fields.addLookup(primary, { LookupListId: list.data.Id, LookupFieldName: "Title" }); + const field = await this.pnp.sp.web.fields.addLookup(primary, { LookupListId: list.Id, LookupFieldName: "Title" }); - const fieldDep = await this.pnp.sp.web.fields.addDependentLookupField(secondary, field.data.Id, "Description"); + const fieldDep = await this.pnp.sp.web.fields.addDependentLookupField(secondary, field.Id, "Description"); - return expect(fieldDep.data.Title).to.be.equal(secondary); + return expect(fieldDep.Title).to.be.equal(secondary); })); it("addLocation", pnpTest("76f5fd29-9fda-4eef-aed4-c29feec3ccfa", async function () { @@ -249,7 +249,7 @@ describe("Fields", function () { const field = await this.pnp.sp.web.fields.addLocation(name, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("update", pnpTest("83525af1-10dc-4da1-a3a6-056c806bcdcc", async function () { @@ -307,7 +307,7 @@ describe("Fields", function () { const f = await this.pnp.sp.web.fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); - return expect(f.field.delete()).to.eventually.be.fulfilled; + return expect(this.pnp.sp.web.fields.getById(f.Id).delete()).to.eventually.be.fulfilled; })); }); @@ -344,7 +344,7 @@ describe("Fields", function () { const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.createFieldAsXml(testFieldSchema); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("add", pnpTest("6a1cb77e-97fb-4ce3-8d73-fdd4f4a7c239", async function () { @@ -354,7 +354,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addText", pnpTest("81840f7d-ae56-4c0d-9650-1b759dbd774a", async function () { @@ -364,7 +364,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addText(name, { MaxLength: 255, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addNumber", pnpTest("d3bc8f38-ee7d-40a5-8b40-61f9d05f68a9", async function () { @@ -374,7 +374,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.fields.addNumber(name, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addCalculated", pnpTest("cb328457-cb39-4b1c-98de-5d085431803b", async function () { @@ -390,7 +390,7 @@ describe("Fields", function () { Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addDateTime", pnpTest("dfa18a6f-9957-4a75-aea6-a8a6a30a0d3e", async function () { @@ -406,7 +406,7 @@ describe("Fields", function () { Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addCurrency", async function () { @@ -422,7 +422,7 @@ describe("Fields", function () { Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); }); it("addMultilineText", pnpTest("52e64708-f16a-4fbc-81c1-a4387c786621", async function () { @@ -440,7 +440,7 @@ describe("Fields", function () { Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addUrl", pnpTest("895c46bc-1feb-4b7c-8136-c54a93fc5ea0", async function () { @@ -450,7 +450,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.fields.addUrl(name, { DisplayFormat: UrlFieldFormatType.Hyperlink, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addUser", pnpTest("89eda1be-52bd-4be1-9ea4-bcdc31fd984f", async function () { @@ -463,7 +463,7 @@ describe("Fields", function () { SelectionMode: FieldUserSelectionMode.PeopleOnly, Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addLookup", pnpTest("b977c6d0-c6b4-44e4-bb7d-c62e942949cb", async function () { @@ -474,9 +474,9 @@ describe("Fields", function () { }); const list = await this.pnp.sp.web.lists.add(lookupListName, testFieldDescription, 100, false); - const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addLookup(name, { LookupListId: list.data.Id, LookupFieldName: "Title" }); + const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addLookup(name, { LookupListId: list.Id, LookupFieldName: "Title" }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addChoice", pnpTest("feffd849-9f80-4f57-aa84-9a56f308fbce", async function () { @@ -492,7 +492,7 @@ describe("Fields", function () { FillInChoice: false, Group: testFieldGroup, }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addMultiChoice", pnpTest("96cd525d-7541-4b05-a867-01b019826b91", async function () { @@ -503,7 +503,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addMultiChoice(name, { Choices: choices, FillInChoice: false, Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addBoolean", pnpTest("4c48b3fc-659d-4b35-95f9-da847ed8c5b5", async function () { @@ -513,7 +513,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addBoolean(name, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("addLocation", pnpTest("bc663610-bbe2-47b8-85fe-4576b02684b2", async function () { @@ -523,7 +523,7 @@ describe("Fields", function () { }); const field = await this.pnp.sp.web.lists.getByTitle(listName).fields.addLocation(name, { Group: testFieldGroup }); - return expect(field.data.Title).to.be.equal(name); + return expect(field.Title).to.be.equal(name); })); it("update", pnpTest("7c560353-590a-4785-b44a-09b6c9934ba4", async function () { @@ -578,7 +578,7 @@ describe("Fields", function () { }); const f = await this.pnp.sp.web.lists.getByTitle(listName).fields.add(name, FieldTypes.Text, { Group: testFieldGroup }); - return expect(f.field.delete()).to.eventually.be.fulfilled; + return expect(this.pnp.sp.web.lists.getByTitle(listName).fields.getById(f.Id).delete()).to.eventually.be.fulfilled; }); }); }); diff --git a/test/sp/files.ts b/test/sp/files.ts index 6ad66cb97..62036b643 100644 --- a/test/sp/files.ts +++ b/test/sp/files.ts @@ -6,7 +6,7 @@ import "@pnp/sp/sharing"; import "@pnp/sp/site-users/web"; import "@pnp/sp/files"; import { getRandomString, combine } from "@pnp/core"; -import { IFiles, TemplateFileType } from "@pnp/sp/files"; +import { IFiles, TemplateFileType, fileFromServerRelativePath } from "@pnp/sp/files"; import { readFileSync } from "fs"; import { resolve, dirname } from "path"; import findupSync from "findup-sync"; @@ -32,7 +32,7 @@ describe("Files", function () { // ensure we have at least one file to get await files.addUsingPath(testFileName, "Test file!", { Overwrite: true }); const res = await files.addUsingPath(testFileNamePercentPound, "Test file!", { Overwrite: true }); - testFileNamePercentPoundServerRelPath = res.data.ServerRelativeUrl; + testFileNamePercentPoundServerRelPath = res.ServerRelativeUrl; })); it("getByUrl (FileName)", async function () { @@ -80,14 +80,14 @@ describe("Files", function () { it("addUsingPath (result invokable)", async function () { const name = `Testing Add - ${getRandomString(4)}.txt`; const file = await files.addUsingPath(name, "Some test text content."); - return expect(file.file.getText()).to.eventually.be.fulfilled; + return expect(files.getByUrl(file.Name).getText()).to.eventually.be.fulfilled; }); it("addUsingPath (silly chars)", async function () { const name = `Testing Add & = + - ${getRandomString(4)}.txt`; const res = await files.addUsingPath(name, "Some test text content."); - const file = await this.pnp.sp.web.getFileByServerRelativePath(res.data.ServerRelativeUrl)(); + const file = await this.pnp.sp.web.getFileByServerRelativePath(res.ServerRelativeUrl)(); expect(file.Name).to.eq(name); }); @@ -98,7 +98,7 @@ describe("Files", function () { const far = await files.addChunked(name, content, null); // eslint-disable-next-line @typescript-eslint/no-unused-expressions expect(far).to.not.be.null; - return expect(far.file()).to.eventually.be.fulfilled; + return expect(files.getByUrl(name)()).to.eventually.be.fulfilled; }); it("addTemplateFile", async function () { @@ -106,15 +106,15 @@ describe("Files", function () { const webData = await this.pnp.sp.web.select("ServerRelativeUrl")(); const path = combine("/", webData.ServerRelativeUrl, `/SitePages/Testing template file - ${getRandomString(4)}.aspx`); const far = await files.addTemplateFile(path, TemplateFileType.StandardPage); - return expect(far.file()).to.eventually.be.fulfilled; + return expect(fileFromServerRelativePath(files, far.ServerRelativeUrl)()).to.eventually.be.fulfilled; }); it("getFileById", async function () { const name = `Testing getFileById - ${getRandomString(4)}.txt`; const far = await files.addUsingPath(name, "Some test text content."); - const fileById = await this.pnp.sp.web.getFileById(far.data.UniqueId).select("UniqueId")(); - return expect(far.data.UniqueId).to.eq(fileById.UniqueId); + const fileById = await this.pnp.sp.web.getFileById(far.UniqueId).select("UniqueId")(); + return expect(far.UniqueId).to.eq(fileById.UniqueId); }); it("filter (silly chars)", async function () { diff --git a/test/sp/folders.ts b/test/sp/folders.ts index 4f04d9a9e..67e4e9889 100644 --- a/test/sp/folders.ts +++ b/test/sp/folders.ts @@ -50,14 +50,16 @@ describe("Folder", function () { )); it("getItem", async function () { - const far = await this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders.addUsingPath(`test${getRandomString(4)}`); - const x = await far.folder.getItem(); + const folderName = `test${getRandomString(4)}`; + const far = await this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders.addUsingPath(folderName); + const x = await this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders.getByUrl(far.Name).getItem(); return expect(x).to.haveOwnProperty("Id"); }); it("getItem - call list", async function () { - const far = await this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders.addUsingPath(`test${getRandomString(4)}`); - const x = await far.folder.getItem(); + const folderName = `test${getRandomString(4)}`; + const far = await this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders.addUsingPath(folderName); + const x = await this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders.getByUrl(far.Name).getItem(); const y = await x.list(); return expect(y).to.haveOwnProperty("odata.metadata").contains("$metadata#SP.ApiData.Lists"); }); @@ -215,10 +217,10 @@ describe("Folder", function () { it("shareWith", async function () { const user = await this.pnp.sp.web.ensureUser("everyone except external users"); - const login = user.data.LoginName; + const login = user.LoginName; const folderName = `folder_${getRandomString(4)}`; const folders = this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders; const far = await folders.addUsingPath(folderName); - return expect(far.folder.shareWith(login)).to.eventually.be.fulfilled; + return expect(folders.getByUrl(far.Name).shareWith(login)).to.eventually.be.fulfilled; }); it("getFolderById", async function () { @@ -235,7 +237,7 @@ describe("Folder", function () { const folderName2 = `test_${getRandomString(5)}`; - const folder = await result1.folder.addSubFolderUsingPath(folderName2); + const folder = await this.pnp.sp.web.rootFolder.folders.getByUrl("SiteAssets").folders.getByUrl(result1.Name).addSubFolderUsingPath(folderName2); return expect(folder()).to.eventually.be.fulfilled; }); diff --git a/test/sp/groupsitemanager.ts b/test/sp/groupsitemanager.ts index da5e0c2bb..c67c9747d 100644 --- a/test/sp/groupsitemanager.ts +++ b/test/sp/groupsitemanager.ts @@ -55,16 +55,17 @@ describe.skip("GroupSiteManager (without group context)", function () { }); }); -describe("GroupSiteManager (group context)", function () { +// skipping. Asycnchrocity of test causes intermittent failures. +describe.skip("GroupSiteManager (group context)", function () { let groupId = ""; before(async function () { - const props = await this.props({ + const props = { groupName: `TestGroup_${getRandomString(4)}`, - }); + }; const groupAddResult = await this.pnp.graph.groups.add(props.groupName, props.groupName, GroupType.Office365); - groupId = groupAddResult.data.id; + groupId = groupAddResult.id; }); it("create", async function () { diff --git a/test/sp/items.ts b/test/sp/items.ts index 42cb34e6e..8fa1e5cb3 100644 --- a/test/sp/items.ts +++ b/test/sp/items.ts @@ -129,10 +129,11 @@ describe("Items", function () { it("recycle", async function () { - const item = await list.items.add({ + const r = await list.items.add({ Title: "Recycle Me", }); - return expect(item.item.recycle()).to.eventually.be.fulfilled; + const item = list.items.getById(r.Id); + return expect(item.recycle()).to.eventually.be.fulfilled; }); /** @@ -142,11 +143,12 @@ describe("Items", function () { const title = `test_delparams_${getRandomString(4)}`; - const item = await list.items.add({ + const itemAdd = await list.items.add({ Title: title, }); + const item = list.items.getById(itemAdd.Id); - await item.item.deleteWithParams({ + await item.deleteWithParams({ BypassSharedLock: false, }); diff --git a/test/sp/lists.ts b/test/sp/lists.ts index 5c0314bdb..3536020e1 100644 --- a/test/sp/lists.ts +++ b/test/sp/lists.ts @@ -9,7 +9,7 @@ import "@pnp/sp/items/list"; import "@pnp/sp/subscriptions/list"; import "@pnp/sp/user-custom-actions/list"; import "@pnp/sp/batching"; -import { IList, IRenderListDataParameters, ControlMode, IListEnsureResult, ICamlQuery, IChangeLogItemQuery, RenderListDataOptions } from "@pnp/sp/lists"; +import { IList, IRenderListDataParameters, ControlMode, ICamlQuery, IChangeLogItemQuery, RenderListDataOptions } from "@pnp/sp/lists"; import { getRandomString } from "@pnp/core"; import testSPInvokables from "../test-invokable-props.js"; import { Context } from "mocha"; @@ -110,34 +110,40 @@ describe("List", function () { }); it("effectiveBasePermissions", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing effectiveBasePermissions"); - return expect(listEnsure.list.effectiveBasePermissions()).to.eventually.be.fulfilled; + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing effectiveBasePermissions"); + const list = listEnsure.list; + return expect(list.effectiveBasePermissions()).to.eventually.be.fulfilled; }); it("eventReceivers", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing eventReceivers"); - return expect(listEnsure.list.eventReceivers()).to.eventually.be.fulfilled; + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing eventReceivers"); + const list = listEnsure.list; + return expect(list.eventReceivers()).to.eventually.be.fulfilled; }); it("relatedFields", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing relatedFields"); - return expect(listEnsure.list.relatedFields()).to.eventually.be.fulfilled; + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing relatedFields"); + const list = listEnsure.list; + return expect(list.relatedFields()).to.eventually.be.fulfilled; }); it("informationRightsManagementSettings", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing informationRightsManagementSettings"); - return expect(listEnsure.list.informationRightsManagementSettings()).to.eventually.be.fulfilled; + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing informationRightsManagementSettings"); + const list = listEnsure.list; + return expect(list.informationRightsManagementSettings()).to.eventually.be.fulfilled; }); it("update", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing update"); + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing update"); + const list = listEnsure.list; const newTitle = "New title after update"; - return expect(listEnsure.list.update({ Title: newTitle })).to.eventually.be.fulfilled; + return expect(list.update({ Title: newTitle })).to.eventually.be.fulfilled; }); it("getChanges", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing getChanges"); - return expect(listEnsure.list.getChanges({ + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing getChanges"); + const list = listEnsure.list; + return expect(list.getChanges({ Add: true, DeleteObject: true, Restore: true, @@ -145,50 +151,54 @@ describe("List", function () { }); it("getItemsByCAMLQuery", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing getItemsByCAMLQuery"); + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing getItemsByCAMLQuery"); + const list = listEnsure.list; const caml: ICamlQuery = { ViewXml: "5", }; - return expect(listEnsure.list.getItemsByCAMLQuery(caml, "RoleAssignments")).to.eventually.be.fulfilled; + return expect(list.getItemsByCAMLQuery(caml, "RoleAssignments")).to.eventually.be.fulfilled; }); it("getListItemChangesSinceToken", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing getListItemChangesSinceToken"); + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing getListItemChangesSinceToken"); + const list = listEnsure.list; const query: IChangeLogItemQuery = { Contains: "Testing", // eslint-disable-next-line max-len QueryOptions: "FALSEFalseTRUEFALSEShared Documents/Test1", }; - return expect(listEnsure.list.getListItemChangesSinceToken(query)).to.eventually.be.fulfilled; + return expect(list.getListItemChangesSinceToken(query)).to.eventually.be.fulfilled; }); it("recycle", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing recycle"); - const recycleResponse = await listEnsure.list.recycle(); + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing recycle"); + const list = listEnsure.list; + const recycleResponse = await list.recycle(); if (typeof recycleResponse !== "string") { throw Error("Expected a string returned from recycle."); } - return expect(listEnsure.list.select("Title")()).to.eventually.be.rejected; + return expect(list.select("Title")()).to.eventually.be.rejected; }); it("renderListData", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing renderListData"); - await listEnsure.list.items.add({ + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing renderListData"); + const list = listEnsure.list; + await list.items.add({ Title: "Item 1", }); - await listEnsure.list.items.add({ + await list.items.add({ Title: "Item 2", }); - await listEnsure.list.items.add({ + await list.items.add({ Title: "Item 3", }); - return expect(listEnsure.list.renderListData("5")).to.eventually.have.property("Row").that.is.not.empty; + return expect(list.renderListData("5")).to.eventually.have.property("Row").that.is.not.empty; }); const setupRenderListDataAsStream = async function (this: Context): Promise { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing renderListDataAsStream"); + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing renderListDataAsStream"); if (listEnsure.created) { await listEnsure.list.items.add({ @@ -269,13 +279,13 @@ describe("List", function () { it("renderListFormData", async function () { - const listEnsure: IListEnsureResult = await this.pnp.sp.web.lists.ensure("pnp testing renderListFormData"); - - await listEnsure.list.items.add({ + const listEnsure = await this.pnp.sp.web.lists.ensure("pnp testing renderListFormData"); + const list = listEnsure.list; + await list.items.add({ Title: "Item 1", }); - return expect(listEnsure.list.renderListFormData(1, "editform", ControlMode.Edit)).to.be.eventually.fulfilled; + return expect(list.renderListFormData(1, "editform", ControlMode.Edit)).to.be.eventually.fulfilled; }); it("reserveListItemId", function () { @@ -314,6 +324,7 @@ describe("List", function () { it("delete", async function () { const result = await this.pnp.sp.web.lists.add("pnp testing delete"); - return expect(result.list.delete()).to.eventually.be.fulfilled; + const list = this.pnp.sp.web.lists.getById(result.Id); + return expect(list.delete()).to.eventually.be.fulfilled; }); }); diff --git a/test/sp/navigation.ts b/test/sp/navigation.ts index a6dfe39a4..7c0dabe3c 100644 --- a/test/sp/navigation.ts +++ b/test/sp/navigation.ts @@ -108,7 +108,7 @@ describe("navigation", function () { const title = `Testing - ${getRandomString(4)}`; const result = await nav.add(title, url, true); - const nodeData = await result.node(); + const nodeData = await nav.getById(result.Id)(); expect(nodeData.Title).to.eq(title); }); @@ -116,8 +116,9 @@ describe("navigation", function () { const node1result = await nav.add(`Testing - ${getRandomString(4)} (1)`, url, true); const node2result = await nav.add(`Testing - ${getRandomString(4)} (2)`, url, true); - const node1 = await node1result.node(); - const node2 = await node2result.node(); + + const node1 = await nav.getById(node1result.Id)(); + const node2 = await nav.getById(node2result.Id)(); await nav.moveAfter(node1.Id, node2.Id); }); @@ -126,12 +127,12 @@ describe("navigation", function () { const node1result = await nav.add(`Testing - ${getRandomString(4)}`, url, true); let nodes = await nav(); // check we added a node - expect(nodes.findIndex(n => n.Id === node1result.data.Id)).to.be.greaterThan(-1); + expect(nodes.findIndex(n => n.Id === node1result.Id)).to.be.greaterThan(-1); - await nav.getById(node1result.data.Id).delete(); + await nav.getById(node1result.Id).delete(); nodes = await nav(); - expect(nodes.findIndex(n => n.Id === node1result.data.Id)).to.be.eq(-1); + expect(nodes.findIndex(n => n.Id === node1result.Id)).to.be.eq(-1); }); it("node: update", async function () { @@ -143,7 +144,7 @@ describe("navigation", function () { expect(nodes.findIndex(n => n.Title === title1)).to.be.greaterThan(-1); - await nav.getById(node1result.data.Id).update({ + await nav.getById(node1result.Id).update({ Title: title2, }); @@ -154,11 +155,11 @@ describe("navigation", function () { it("node: children", async function () { const node1result = await nav.add(`Testing - ${getRandomString(4)}`, url, true); + const node = nav.getById(node1result.Id); + await node.children.add(`Testing - ${getRandomString(4)}`, url, true); + await node.children.add(`Testing - ${getRandomString(4)}`, url, true); - await node1result.node.children.add(`Testing - ${getRandomString(4)}`, url, true); - await node1result.node.children.add(`Testing - ${getRandomString(4)}`, url, true); - - const children = await node1result.node.children(); + const children = await node.children(); expect(children.length).to.eq(2); }); diff --git a/test/sp/related-items.ts b/test/sp/related-items.ts index 03e14b6ea..6083f7bdc 100644 --- a/test/sp/related-items.ts +++ b/test/sp/related-items.ts @@ -40,7 +40,7 @@ describe("Related Items", function () { const sourceItem = await sourceList.items.add({ Title: `Item ${getRandomString(4)}` }); const targetItem = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }); - const p = this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.data.Id, webUrl, targetListName, targetItem.data.Id, webUrl); + const p = this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.Id, webUrl, targetListName, targetItem.Id, webUrl); return expect(p).to.eventually.be.fulfilled; }); @@ -50,27 +50,27 @@ describe("Related Items", function () { .addUsingPath(`test${getRandomString(4)}.txt`, "Test File", { Overwrite: true }); const targetItem = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }); - return expect(this.pnp.sp.web.relatedItems.addSingleLinkToUrl(targetListName, targetItem.data.Id, file.data.ServerRelativeUrl)).to.eventually.be.fulfilled; + return expect(this.pnp.sp.web.relatedItems.addSingleLinkToUrl(targetListName, targetItem.Id, file.ServerRelativeUrl)).to.eventually.be.fulfilled; }); it("deleteSingleLink", async function () { const sourceItem = await sourceList.items.add({ Title: `Item ${getRandomString(4)}` }); const targetItem = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }); - await this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.data.Id, webUrl, targetListName, targetItem.data.Id, webUrl); + await this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.Id, webUrl, targetListName, targetItem.Id, webUrl); - const promise = this.pnp.sp.web.relatedItems.deleteSingleLink(sourceListName, sourceItem.data.Id, webUrl, targetListName, targetItem.data.Id, webUrl); + const promise = this.pnp.sp.web.relatedItems.deleteSingleLink(sourceListName, sourceItem.Id, webUrl, targetListName, targetItem.Id, webUrl); return expect(promise).to.eventually.be.fulfilled; }); it("getRelatedItems", async function () { - const sourceItem = await sourceList.items.add({ Title: `Item ${getRandomString(4)}` }).then(r => r.data); - const targetItem = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }).then(r => r.data); + const sourceItem = await sourceList.items.add({ Title: `Item ${getRandomString(4)}` }); + const targetItem = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }); await this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.Id, webUrl, targetListName, targetItem.Id, webUrl); - const targetItem2 = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }).then(r => r.data); + const targetItem2 = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }); await this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.Id, webUrl, targetListName, targetItem2.Id, webUrl); const items = await this.pnp.sp.web.relatedItems.getRelatedItems(sourceListName, sourceItem.Id); @@ -80,11 +80,11 @@ describe("Related Items", function () { it("getPageOneRelatedItems", async function () { - const sourceItem = await sourceList.items.add({ Title: `Item ${getRandomString(4)}` }).then(r => r.data); - const targetItem = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }).then(r => r.data); + const sourceItem = await sourceList.items.add({ Title: `Item ${getRandomString(4)}` }); + const targetItem = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }); await this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.Id, webUrl, targetListName, targetItem.Id, webUrl); - const targetItem2 = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }).then(r => r.data); + const targetItem2 = await targetList.items.add({ Title: `Item ${getRandomString(4)}` }); await this.pnp.sp.web.relatedItems.addSingleLink(sourceListName, sourceItem.Id, webUrl, targetListName, targetItem2.Id, webUrl); const items = await this.pnp.sp.web.relatedItems.getPageOneRelatedItems(sourceListName, sourceItem.Id); diff --git a/test/sp/sharing.ts b/test/sp/sharing.ts index e72ec7073..deaea4ad6 100644 --- a/test/sp/sharing.ts +++ b/test/sp/sharing.ts @@ -33,6 +33,7 @@ describe("Sharing", function () { // we need a doc lib with a file and folder in it const ler = await this.pnp.sp.web.lists.ensure(testSharingLib, "Used to test sharing", 101); + const list = ler.list; // we need a user to share to if (this.pnp.settings.testUser?.length > 0) { @@ -40,8 +41,8 @@ describe("Sharing", function () { } // add a file and folder - await ler.list.rootFolder.folders.addUsingPath(testSharingFolder); - await ler.list.rootFolder.files.addUsingPath(testSharingFile, "Some file content!"); + await list.rootFolder.folders.addUsingPath(testSharingFolder); + await list.rootFolder.files.addUsingPath(testSharingFile, "Some file content!"); }); after(async function () { diff --git a/test/sp/site-groups.ts b/test/sp/site-groups.ts index e5169f739..ed1c3fc31 100644 --- a/test/sp/site-groups.ts +++ b/test/sp/site-groups.ts @@ -3,11 +3,12 @@ import "@pnp/sp/webs"; import "@pnp/sp/site-groups"; import "@pnp/sp/site-users/web"; import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; -import { IGroupAddResult } from "@pnp/sp/site-groups"; +import { ISiteGroupInfo } from "@pnp/sp/site-groups"; + describe("SiteGroups", function () { - let newGroup: IGroupAddResult; + let newGroup: ISiteGroupInfo; let testuserId: number; before(async function () { @@ -20,7 +21,7 @@ describe("SiteGroups", function () { newGroup = await this.pnp.sp.web.siteGroups.add({ "Title": groupName }); if (this.pnp.settings.testUser?.length > 0) { const ensureTestUser = await this.pnp.sp.web.ensureUser(this.pnp.settings.testUser); - testuserId = ensureTestUser.data.Id; + testuserId = ensureTestUser.Id; } }); @@ -53,7 +54,7 @@ describe("SiteGroups", function () { }); it("getById()", async function () { - return expect(this.pnp.sp.web.siteGroups.getById(newGroup.data.Id)()); + return expect(this.pnp.sp.web.siteGroups.getById(newGroup.Id)()); }); it("add()", function () { @@ -62,29 +63,29 @@ describe("SiteGroups", function () { }); it("getByName()", function () { - return expect(this.pnp.sp.web.siteGroups.getByName(newGroup.data.Title)()).to.be.eventually.fulfilled; + return expect(this.pnp.sp.web.siteGroups.getByName(newGroup.Title)()).to.be.eventually.fulfilled; }); it("removeById()", async function () { const newGroupTitle = `test_remove_group_by_id_${getRandomString(8)}`; const g = await this.pnp.sp.web.siteGroups.add({ "Title": newGroupTitle }); - return expect(this.pnp.sp.web.siteGroups.removeById(g.data.Id)).to.be.eventually.fulfilled; + return expect(this.pnp.sp.web.siteGroups.removeById(g.Id)).to.be.eventually.fulfilled; }); it("removeByLoginName()", async function () { const newGroupTitle = `test_remove_group_by_name_${getRandomString(8)}`; const g = await this.pnp.sp.web.siteGroups.add({ "Title": newGroupTitle }); - return expect(this.pnp.sp.web.siteGroups.removeByLoginName(g.data.LoginName)).to.be.eventually.fulfilled; + return expect(this.pnp.sp.web.siteGroups.removeByLoginName(g.LoginName)).to.be.eventually.fulfilled; }); it("users()", async function () { - return expect(this.pnp.sp.web.siteGroups.getById(newGroup.data.Id).users()).to.be.eventually.fulfilled; + return expect(this.pnp.sp.web.siteGroups.getById(newGroup.Id).users()).to.be.eventually.fulfilled; }); it("update()", async function () { - const newTitle = `Updated_${newGroup.data.Title}`; - await this.pnp.sp.web.siteGroups.getByName(newGroup.data.Title).update({ "Title": newTitle }); - const p = this.pnp.sp.web.siteGroups.getById(newGroup.data.Id).select("Title")<{ "Title": string }>().then(g2 => { + const newTitle = `Updated_${newGroup.Title}`; + await this.pnp.sp.web.siteGroups.getByName(newGroup.Title).update({ "Title": newTitle }); + const p = this.pnp.sp.web.siteGroups.getById(newGroup.Id).select("Title")<{ "Title": string }>().then(g2 => { if (newTitle !== g2.Title) { throw Error("Failed to update the group!"); } @@ -93,6 +94,6 @@ describe("SiteGroups", function () { }); it("setUserAsOwner()", async function () { - return expect(this.pnp.sp.web.siteGroups.getById(newGroup.data.Id).setUserAsOwner(testuserId)).to.be.eventually.fulfilled; + return expect(this.pnp.sp.web.siteGroups.getById(newGroup.Id).setUserAsOwner(testuserId)).to.be.eventually.fulfilled; }); }); diff --git a/test/sp/site-scripts.ts b/test/sp/site-scripts.ts index da84a77da..60446ae52 100644 --- a/test/sp/site-scripts.ts +++ b/test/sp/site-scripts.ts @@ -134,9 +134,10 @@ describe("SiteScripts", function () { it("getSiteScript (list)", async function () { const listTitle = `sc_list_${getRandomString(8)}`; const listResult = await _rootSite.web.lists.add(listTitle); - createdLists.push(listResult.list); + const list = _rootSite.web.lists.getById(listResult.Id); + createdLists.push(list); - return expect(listResult.list.getSiteScript(), + return expect(list.getSiteScript(), "the lists site script should've been fetched").to.eventually.be.fulfilled; }); diff --git a/test/sp/site-users.ts b/test/sp/site-users.ts index 4f80cb47d..00ac1b1cf 100644 --- a/test/sp/site-users.ts +++ b/test/sp/site-users.ts @@ -1,6 +1,6 @@ import { expect } from "chai"; import "@pnp/sp/site-users"; -import { ISiteUserProps, IUserUpdateResult, ISiteUserInfo } from "@pnp/sp/site-users"; +import { ISiteUserProps, ISiteUserInfo } from "@pnp/sp/site-users"; import { ISiteGroups } from "@pnp/sp/presets/all"; import { stringIsNullOrEmpty } from "@pnp/core"; @@ -85,8 +85,8 @@ describe("Site Users", function () { it("update", async function () { const _props: ISiteUserProps = await this.pnp.sp.web.currentUser(); _props.Title = "Changed Title"; - const e: IUserUpdateResult = await this.pnp.sp.web.currentUser.update(_props); - const _newProps = await e.user(); + await this.pnp.sp.web.currentUser.update(_props); + const _newProps = await this.pnp.sp.web.currentUser(); return expect(_newProps.Title).to.be.eq("Changed Title"); }); }); diff --git a/test/sp/sites.ts b/test/sp/sites.ts index 672eed56c..6e1a2233a 100644 --- a/test/sp/sites.ts +++ b/test/sp/sites.ts @@ -4,18 +4,18 @@ import "@pnp/sp/webs"; import "@pnp/sp/lists/web"; import { IDocumentLibraryInformation, IOpenWebByIdResult, ISiteLogoProperties, Site, SiteLogoAspect, SiteLogoType } from "@pnp/sp/sites"; import "@pnp/sp/site-users"; -import { IWebEnsureUserResult } from "@pnp/sp/site-users"; import { IWeb } from "@pnp/sp/webs"; import { combine, getRandomString, stringIsNullOrEmpty } from "@pnp/core"; import { IContextInfo } from "@pnp/sp/context-info"; import "@pnp/sp/context-info"; - +import { ISiteUserInfo } from "@pnp/sp/site-users"; import "@pnp/sp/files"; import { IFiles } from "@pnp/sp/files"; import { readFileSync } from "fs"; import { resolve, dirname } from "path"; import findupSync from "findup-sync"; + // get a single reference to the projectRoot const projectRoot = resolve(dirname(findupSync("package.json"))); @@ -38,8 +38,8 @@ describe("Sites", function () { }); it("rootWeb - ensureUser", async function () { - const user: IWebEnsureUserResult = await this.pnp.sp.site.rootWeb.ensureUser(this.pnp.settings.testUser); - return expect(user.data).to.haveOwnProperty("id"); + const user: ISiteUserInfo = await this.pnp.sp.site.rootWeb.ensureUser(this.pnp.settings.testUser); + return expect(user).to.haveOwnProperty("Id"); }); it("getContextInfo", async function () { @@ -87,7 +87,7 @@ describe("Sites", function () { const name = `Testing Chunked - ${getRandomString(4)}.jpg`; const content = readFileSync(resolve(projectRoot, "./test/sp/assets/sample_file.jpg")); const far = await files.addChunked(name, content, null); - const path = far.data.ServerRelativeUrl; + const path = far.ServerRelativeUrl; const logoProperties: ISiteLogoProperties = {relativeLogoUrl: path, aspect: SiteLogoAspect.Square, type: SiteLogoType.WebLogo}; await this.pnp.sp.site.setSiteLogo(logoProperties); }); diff --git a/test/sp/sputilities.ts b/test/sp/sputilities.ts index 693ab5e06..fd2c91dd4 100644 --- a/test/sp/sputilities.ts +++ b/test/sp/sputilities.ts @@ -70,7 +70,7 @@ describe.skip("SPUtilities", function () { } const ensureTestUser = await this.pnp.sp.web.ensureUser(this.pnp.settings.testUser); - const userId = ensureTestUser.data.Id; + const userId = ensureTestUser.Id; const user = await this.pnp.sp.web.siteUsers.getById(userId)(); return expect(this.pnp.sp.utility.searchPrincipals(user.Title, PrincipalType.User, PrincipalSource.All, "", 1)).to.eventually.be.an.instanceOf(Array).and.not.be.empty; diff --git a/test/sp/subscriptions.ts b/test/sp/subscriptions.ts index a2570164e..162e2a48f 100644 --- a/test/sp/subscriptions.ts +++ b/test/sp/subscriptions.ts @@ -30,7 +30,7 @@ describe("Subscriptions", function () { it("add", async function () { const r = await this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.add(notificationUrl, after120Days, "pnp client state"); - const subID = r.data.id; + const subID = r.id; return expect(subID, `A new webhook with id :${subID} should be created`).to.not.be.null.and.not.be.empty.and.be.an.instanceOf(Number); }); @@ -39,7 +39,7 @@ describe("Subscriptions", function () { const res = await this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.add(notificationUrl, after120Days); - const p = this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.getById(res.data.id)(); + const p = this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.getById(res.id)(); return expect(p, "Get the details of a webhook with the given id").to.be.eventually.fulfilled; }); @@ -48,7 +48,7 @@ describe("Subscriptions", function () { const res = await this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.add(notificationUrl, after120Days, "pnp client state"); - const p = this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.getById(res.data.id).update(after180Days, notificationUrl, "pnp client state"); + const p = this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.getById(res.id).update(after180Days, notificationUrl, "pnp client state"); return expect(p, "The webhook should have been updated with the new expiry date").to.be.eventually.fulfilled; }); @@ -57,7 +57,7 @@ describe("Subscriptions", function () { const res = await this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.add(notificationUrl, after120Days, "pnp client state"); - const p = this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.getById(res.data.id).delete(); + const p = this.pnp.sp.web.lists.getByTitle(listTitle).subscriptions.getById(res.id).delete(); return expect(p, "The webhook should have been deleted").to.be.eventually.fulfilled; }); diff --git a/test/sp/views.ts b/test/sp/views.ts index d1f329244..f0bdaee94 100644 --- a/test/sp/views.ts +++ b/test/sp/views.ts @@ -55,7 +55,7 @@ describe("Views", function () { it("add", async function () { const viewTitle = `Test-Add-View_${getRandomString(4)}`; const av = await list.views.add(viewTitle, false); - return expect(av.data.Title).to.eq(viewTitle); + return expect(av.Title).to.eq(viewTitle); }); it("fields", async function () { @@ -65,10 +65,10 @@ describe("Views", function () { it("update", async function () { const r = await list.views.add(`Update-Test-View_${getRandomString(4)}`); - await r.view.update({ + await list.views.getById(r.Id).update({ RowLimit: 20, }); - const v = await list.views.getById(r.data.Id)(); + const v = await list.views.getById(r.Id)(); return expect(v.RowLimit).to.eq(20); }); @@ -80,7 +80,7 @@ describe("Views", function () { it("setViewXml", async function () { const r = await list.views.add(`setViewXml-Test-View_${getRandomString(4)}`); const xml = "Test"; - return expect(r.view.setViewXml(xml)).to.eventually.be.fulfilled; + return expect(list.views.getById(r.Id).setViewXml(xml)).to.eventually.be.fulfilled; }); describe("ViewFields", function () { @@ -92,24 +92,24 @@ describe("Views", function () { it("add", async function () { const r = await list.views.add(`add-Test-ViewFields_${getRandomString(4)}`); - return expect(r.view.fields.add("Created")).to.eventually.be.fulfilled; + return expect(list.views.getById(r.Id).fields.add("Created")).to.eventually.be.fulfilled; }); it("move", async function () { const r = await list.views.add(`move-Test-ViewFields_${getRandomString(4)}`); - await r.view.fields.add("Modified"); - return expect(r.view.fields.move("Modified", 0)).to.eventually.be.fulfilled; + await list.views.getById(r.Id).fields.add("Modified"); + return expect(list.views.getById(r.Id).fields.move("Modified", 0)).to.eventually.be.fulfilled; }); it("remove", async function () { const r = await list.views.add(`remove-Test-ViewFields_${getRandomString(4)}`); - await r.view.fields.add("Author"); - return expect(r.view.fields.remove("Author")).to.eventually.be.fulfilled; + await list.views.getById(r.Id).fields.add("Author"); + return expect(list.views.getById(r.Id).fields.remove("Author")).to.eventually.be.fulfilled; }); it("removeAll", async function () { const r = await list.views.add(`removeAll-Test-ViewFields_${getRandomString(4)}`); - return expect(r.view.fields.removeAll()).to.eventually.be.fulfilled; + return expect(list.views.getById(r.Id).fields.removeAll()).to.eventually.be.fulfilled; }); }); }); diff --git a/test/sp/webs.ts b/test/sp/webs.ts index 828080757..a5ba67127 100644 --- a/test/sp/webs.ts +++ b/test/sp/webs.ts @@ -20,6 +20,7 @@ import "@pnp/sp/security"; import { INavNodeInfo } from "@pnp/sp/navigation/types.js"; import testSPInvokables from "../test-invokable-props.js"; import { Web } from "@pnp/sp/webs"; +import { odataUrlFrom } from "@pnp/sp/index.js"; describe("Webs", function () { @@ -170,7 +171,8 @@ describe("Web", function () { it("delete", async function () { const url = getRandomString(4); const result = await this.pnp.sp.web.webs.add("Better be deleted!", url); - return expect(result.web.delete()).to.eventually.be.fulfilled; + const web = Web([this.pnp.sp.web, odataUrlFrom(result).replace(/_api\/web\/?/i, "")]); + return expect(web.delete()).to.eventually.be.fulfilled; }); describe("client-side-pages", function () { diff --git a/test/test-recording-setup.md b/test/test-recording-setup.md index 3b3698c5d..3b1b01630 100644 --- a/test/test-recording-setup.md +++ b/test/test-recording-setup.md @@ -42,10 +42,10 @@ it("attachmentFiles", async function () { Title: `Test_${getRandomString(4)}`, }); - await r.item.attachmentFiles.add(`att_${getRandomString(4)}.txt`, "Some Content"); - await r.item.attachmentFiles.add(`att_${getRandomString(4)}.txt`, "Some Content"); + await r.attachmentFiles.add(`att_${getRandomString(4)}.txt`, "Some Content"); + await r.attachmentFiles.add(`att_${getRandomString(4)}.txt`, "Some Content"); - return expect(r.item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); + return expect(list.items.getById(r.Id).attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); }); ``` @@ -78,10 +78,10 @@ it("attachmentFiles", pnpTest("9bc6dba6-6690-4453-8d13-4f42e051a245", async func Title: props.itemTitle, }); - await r.item.attachmentFiles.add(props.attachmentFile1Name, "Some Content"); - await r.item.attachmentFiles.add(props.attachmentFile2Name, "Some Content"); + await r.attachmentFiles.add(props.attachmentFile1Name, "Some Content"); + await r.attachmentFiles.add(props.attachmentFile2Name, "Some Content"); - return expect(r.item.attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); + return expect(list.items.getById(r.Id).attachmentFiles()).to.eventually.be.fulfilled.and.to.be.an("Array").and.have.length(2); })); ``` From 610468ef5fdb5947c064cc5355bf83f08678023b Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Thu, 18 Apr 2024 09:07:38 -0600 Subject: [PATCH 157/171] Fixes Contact Folders Test --- test/graph/contacts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/graph/contacts.ts b/test/graph/contacts.ts index 28189905a..734fe2971 100644 --- a/test/graph/contacts.ts +++ b/test/graph/contacts.ts @@ -154,7 +154,7 @@ describe("Contacts", function () { }); it("Update Contact Folder", async function () { - const folderDisplayName = "Folder_Updated"; + const folderDisplayName = "Folder_Updated" + getRandomString(4); let folderId = null; let folderAfterUpdate = null; try { From 994b936363d76c8a2204c203103b2da6d6409d91 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 18 Apr 2024 15:14:35 +0000 Subject: [PATCH 158/171] Fixed testing bugs for cloud-communications --- docs/graph/cloud-communications.md | 1 + package-lock.json | 24 ++++---- test/graph/cloud-communications.ts | 95 +++++++++++++++++++----------- 3 files changed, 74 insertions(+), 46 deletions(-) diff --git a/docs/graph/cloud-communications.md b/docs/graph/cloud-communications.md index 468d0b58f..4ba32dfd6 100644 --- a/docs/graph/cloud-communications.md +++ b/docs/graph/cloud-communications.md @@ -47,6 +47,7 @@ import "@pnp/graph/cloud-communications"; const graph = graphfi(...); +// Session ID is the Application's client id const presenceMe = await graph.me.presence.setPresence( availability: "Busy", activity:"InACall", diff --git a/package-lock.json b/package-lock.json index cdba8e238..2a594726b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -748,9 +748,9 @@ } }, "node_modules/@pnp/core": { - "version": "4.0.0-alpha0-v4nightly.20240412", - "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240412.tgz", - "integrity": "sha512-CETGc6aYHRPSQtKRXLUKv5COLVy28QhKfjeqTEXmaleweRfRghvf3X0AYijYROQJL6//m5pHusA84skSwEI1iw==", + "version": "4.0.0-alpha0-v4nightly.20240418", + "resolved": "https://registry.npmjs.org/@pnp/core/-/core-4.0.0-alpha0-v4nightly.20240418.tgz", + "integrity": "sha512-BiEJD/k+dRy9HJ6qgUMSq5ngBCNYLBQhhVNzT8i4oaAyw3gs7UR4u46Z1q/fW5o8d/tSsH2KM0NtbPYWh2KrSQ==", "dev": true, "dependencies": { "tslib": "2.4.1" @@ -997,9 +997,9 @@ "dev": true }, "node_modules/@types/qs": { - "version": "6.9.14", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", - "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, "node_modules/@types/range-parser": { @@ -2028,9 +2028,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001610", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz", - "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==", + "version": "1.0.30001611", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz", + "integrity": "sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==", "dev": true, "funding": [ { @@ -2708,9 +2708,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.736", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.736.tgz", - "integrity": "sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==", + "version": "1.4.741", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.741.tgz", + "integrity": "sha512-AyTBZqDoS7/mvQK22gOQpjxbeV8iPeUBTvYlEh/1S9dKAHgQdxuF49g9rLbj0cRKtqH8PzLJzqT3nAdl+qoZTA==", "dev": true }, "node_modules/emoji-regex": { diff --git a/test/graph/cloud-communications.ts b/test/graph/cloud-communications.ts index b1c9ad0e4..e591821bb 100644 --- a/test/graph/cloud-communications.ts +++ b/test/graph/cloud-communications.ts @@ -3,7 +3,6 @@ import "@pnp/graph/users"; import "@pnp/graph/cloud-communications"; import { stringIsNullOrEmpty } from "@pnp/core"; - describe("Cloud-Communications", function () { let testUserId = ""; let sessionId = ""; @@ -13,59 +12,87 @@ describe("Cloud-Communications", function () { if (!this.pnp.settings.enableWebTests || stringIsNullOrEmpty(this.pnp.settings.testUser)) { this.skip(); } - testUserId = (await this.pnp.graph.users.getById(this.pnp.settings.testUser.substring(this.pnp.settings.testUser.lastIndexOf("|") + 1))()).id; - sessionId = this.pnp.settings.graph.id; + testUserId = (await this.pnp.graph.users.getById(this.pnp.settings.testUser.substring(this.pnp.settings.testUser.lastIndexOf("|") + 1))()).id; + sessionId = this.pnp.settings.graph.msal.init.auth.clientId; }); - it.skip("Get User Presence", async function () { + it("Get User Presence", async function () { const presence = await this.pnp.graph.users.getById(testUserId).presence(); return expect(presence).is.not.null; }); - it.skip("Get Presence for Multiple Users", async function () { - const presence = await this.pnp.graph.communications.getPresencesByUserId([testUserId,testUserId]); - return expect(presence.length).is.equals(2); + it("Get Presence for Multiple Users", async function () { + const presence = await this.pnp.graph.communications.getPresencesByUserId([testUserId]); + return expect(presence.length).is.equals(1); }); it("Set User Presence", async function () { - return expect(this.pnp.graph.users.getById(testUserId).presence.setPresence({ - availability: "Busy", - activity:"InACall", - sessionId: sessionId, - expirationDuration: "PT5M", - })).eventually.be.fulfilled; + let success = true; + try { + await this.pnp.graph.users.getById(testUserId).presence.setPresence({ + availability: "Busy", + activity: "InACall", + sessionId: sessionId, + expirationDuration: "PT5M", + }); + } catch (err) { + success = false; + } + return expect(success).to.be.true; }); it("Clear User Presence", async function () { - return expect(this.pnp.graph.users.getById(testUserId).presence.clearPresence(sessionId)).eventually.be.fulfilled; + let success = true; + try { + await this.pnp.graph.users.getById(testUserId).presence.clearPresence(sessionId); + } catch (err) { + success = false; + } + return expect(success).to.be.true; }); it("Set User Preferred Presence", async function () { - return expect(this.pnp.graph.users.getById(testUserId).presence.setPreferredPresence({ - availability: "Available", - activity:"Available", - expirationDuration: "PT5M", - })).eventually.be.fulfilled; + let success = true; + try { + await this.pnp.graph.users.getById(testUserId).presence.setPreferredPresence({ + availability: "Available", + activity: "Available", + expirationDuration: "PT5M", + }); + } catch (err) { + success = false; + } + return expect(success).to.be.true; }); it("Clear User Preferred Presence", async function () { - return expect(this.pnp.graph.users.getById(testUserId).presence.clearPreferredPresence()).eventually.be.fulfilled; + let success = true; + try { + await this.pnp.graph.users.getById(testUserId).presence.clearPreferredPresence(); + } catch (err) { + success = false; + } + return expect(success).to.be.true; }); it("Set User Status Message", async function () { - const date: Date = new Date(); - date.setDate(date.getDate() + 1); - - return expect(this.pnp.graph.users.getById(testUserId).presence.setStatusMessage({ - message:{ - content: "Test Sample Message", - contentType: "text", - }, - expiryDateTime:{ - dateTime: date.toISOString(), - timeZone: "Pacific Standard Time", - }, - })).eventually.be.fulfilled; + let success = true; + try { + const date: Date = new Date(); + date.setDate(date.getDate() + 1); + await this.pnp.graph.users.getById(testUserId).presence.setStatusMessage({ + message: { + content: "Test Sample Message", + contentType: "text", + }, + expiryDateTime: { + dateTime: date.toISOString(), + timeZone: "Pacific Standard Time", + }, + }); + } catch (err) { + success = false; + } + return expect(success).to.be.true; }); - }); From b57118cc9fb84e073ed917ef9a0e6f8d6d110978 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Thu, 18 Apr 2024 09:25:13 -0600 Subject: [PATCH 159/171] Fix post reply body request type --- packages/graph/conversations/types.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/graph/conversations/types.ts b/packages/graph/conversations/types.ts index e536fa8b8..6870399d8 100644 --- a/packages/graph/conversations/types.ts +++ b/packages/graph/conversations/types.ts @@ -96,7 +96,12 @@ export class _Post extends _GraphInstance { * @param post Contents of the post */ public reply(post: IPostType): Promise { - return graphPost(Post(this, "reply"), body(post)); + const params = { + post: { + ...post + } + }; + return graphPost(Post(this, "reply"), body(params)); } } export interface IPost extends _Post, IDeleteable { } From 27afac865257efbcd834399394a0271bd4fddb23 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Thu, 18 Apr 2024 09:27:41 -0600 Subject: [PATCH 160/171] Lint fix --- packages/graph/conversations/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/graph/conversations/types.ts b/packages/graph/conversations/types.ts index 6870399d8..fa1a6114b 100644 --- a/packages/graph/conversations/types.ts +++ b/packages/graph/conversations/types.ts @@ -98,8 +98,8 @@ export class _Post extends _GraphInstance { public reply(post: IPostType): Promise { const params = { post: { - ...post - } + ...post, + }, }; return graphPost(Post(this, "reply"), body(params)); } From 692f9615bf9194da84f02d25db9bc47e15eb6a40 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 18 Apr 2024 15:48:34 +0000 Subject: [PATCH 161/171] Updated contacts tests to note console messages. --- test/graph/contacts.ts | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/test/graph/contacts.ts b/test/graph/contacts.ts index 734fe2971..7c772a925 100644 --- a/test/graph/contacts.ts +++ b/test/graph/contacts.ts @@ -6,7 +6,7 @@ import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; // TODO:: make work with test recording -describe("Contacts", function () { +describe.only("Contacts", function () { let testUserName = ""; let testContactID = ""; @@ -90,10 +90,15 @@ describe("Contacts", function () { await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id).update({ birthday: "1986-05-30" }); const contact2 = await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id)(); // Clean up the added contact - await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id).delete(); + try { + await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id).delete(); + } catch (err) { + console.log(err.message); + } return expect(contact2.birthday).equals("1986-05-30T11:59:00Z"); }); + // This logs to the console when it passes, ignore those messages it("Delete Contact", async function () { // Add a contact that we can then delete const testContactName = `TestUser_${getRandomString(4)}`; @@ -105,15 +110,15 @@ describe("Contacts", function () { let deletedUserFound = false; try { - - // If we try to find a user that doesn"t exist this returns a 404 + // This passes the first time through, expecting it to fail on second pass. + // If we try to find a user that doesn't exist this returns a 404 await this.pnp.graph.users.getById(testUserName).contacts.getById(contact.id)(); deletedUserFound = true; } catch (e) { if (e?.isHttpRequestError) { if ((e).status === 404) { - console.error((e).statusText); + // do nothing } } else { console.log(e.message); @@ -154,7 +159,7 @@ describe("Contacts", function () { }); it("Update Contact Folder", async function () { - const folderDisplayName = "Folder_Updated" + getRandomString(4); + const folderDisplayName = `Folder_Updated_${getRandomString(4)}`; let folderId = null; let folderAfterUpdate = null; try { @@ -168,12 +173,17 @@ describe("Contacts", function () { } finally { // Clean up the added contact if (folderId != null) { - await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folderId).delete(); + try { + await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folderId).delete(); + } catch (err) { + console.log(err.message); + } } } return expect(folderAfterUpdate?.displayName).equals(folderDisplayName); }); + // This logs to the console when it passes, ignore those messages it("Delete Contact Folder", async function () { // Add a folder that we can then delete const testFolderName = `TestFolder_${getRandomString(4)}`; @@ -182,15 +192,15 @@ describe("Contacts", function () { let deletedFolderFound = false; try { - - // If we try to find a folder that doesn"t exist this returns a 404 + // This passes the first time through, expecting it to fail on second pass. + // If we try to find a folder that doesn't exist this returns a 404 await this.pnp.graph.users.getById(testUserName).contactFolders.getById(folder.id)(); deletedFolderFound = true; } catch (e) { if (e?.isHttpRequestError) { if ((e).status === 404) { - console.error((e).statusText); + // do nothing } } else { console.log(e.message); From 0f69cd88541f21f5819eb52592ee3dece4337ac0 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 18 Apr 2024 17:59:38 +0000 Subject: [PATCH 162/171] Bug fixes for tests --- packages/graph/mail/users.ts | 8 +++--- test/graph/batch.ts | 42 ++++++++++++++++++++++++------- test/graph/contacts.ts | 2 +- test/graph/files.ts | 5 ++-- test/graph/group-conversations.ts | 17 +++++-------- test/graph/mail-folders.ts | 1 + test/graph/mail-mailbox.ts | 1 + test/graph/mail-messages.ts | 9 ++++--- test/graph/mail-rules.ts | 1 + test/sp/files.ts | 1 + test/sp/site-groups.ts | 22 ++++++++++------ 11 files changed, 71 insertions(+), 38 deletions(-) diff --git a/packages/graph/mail/users.ts b/packages/graph/mail/users.ts index af84b9d85..482876f09 100644 --- a/packages/graph/mail/users.ts +++ b/packages/graph/mail/users.ts @@ -14,7 +14,7 @@ declare module "../users/types" { readonly mailFolders: IMailFolders; readonly outlook: IOutlook; readonly focusedInboxOverrides: IFocusedInboxOverrides; - sendMail(message: IMessageType): Promise; + sendMail(message: IMessageType, saveToSentItems?: boolean): Promise; translateExchangeIds(translateExchangeIds: ITranslateExchangeIds): Promise; } interface IUser { @@ -23,7 +23,7 @@ declare module "../users/types" { readonly mailFolders: IMailFolders; readonly outlook: IOutlook; readonly focusedInboxOverrides: IFocusedInboxOverrides; - sendMail(message: IMessageType): Promise; + sendMail(message: IMessageType, saveToSentItems?: boolean): Promise; translateExchangeIds(translateExchangeIds: ITranslateExchangeIds): Promise; } } @@ -34,8 +34,8 @@ addProp(_User, "mailFolders", MailFolders); addProp(_User, "outlook", Outlook); addProp(_User, "focusedInboxOverrides", FocusedInboxOverrides, "inferenceClassification/overrides"); -_User.prototype.sendMail = function (this: _User, message: IMessageType): Promise { - return graphPost(User(this, "sendMail"), body(message)); +_User.prototype.sendMail = function (this: _User, message: IMessageType, saveToSentItems = true): Promise { + return graphPost(User(this, "sendMail"), body({message, saveToSentItems})); }; /** diff --git a/test/graph/batch.ts b/test/graph/batch.ts index 69016324e..1a137cb61 100644 --- a/test/graph/batch.ts +++ b/test/graph/batch.ts @@ -75,6 +75,7 @@ describe("Batching", function () { return expect(order.toString()).to.eql(expected.toString()); })); + // This logs to the console when it passes, ignore those messages it("Should work with the same Queryable when properly cloned (Advanced)", pnpTest("76fbb5bf-dfc5-4230-a9df-ef1ecc2ee7a4", async function () { const users = this.pnp.graph.users; @@ -87,9 +88,16 @@ describe("Batching", function () { this.pnp.graph.users.using(batchedBehavior)(); this.pnp.graph.users.using(batchedBehavior)(); - return expect(execute()).to.eventually.be.fulfilled; + let success = true; + try { + await execute(); + } catch (err) { + success = false; + } + return expect(success).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("Should work with the same Queryable when properly cloned by factory (Advanced)", pnpTest("d0ba8747-a776-4f4e-be09-6a6126dc1e06", async function () { const users = this.pnp.graph.users; @@ -101,9 +109,16 @@ describe("Batching", function () { Users(users).using(batchedBehavior)(); Users(users).using(batchedBehavior)(); - return expect(execute()).to.eventually.be.fulfilled; + let success = true; + try { + await execute(); + } catch (err) { + success = false; + } + return expect(success).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("Should fail with the same Queryable (Advanced)", pnpTest("ca3ae3bb-1729-47d9-abea-e531cd7817dc", async function () { const users = this.pnp.graph.users; @@ -113,15 +128,24 @@ describe("Batching", function () { users(); - const p = users(); - - const p2 = execute(); + let pSuccess = false; + try { + await users(); + pSuccess = true; + } catch (err) { + // do nothing + } - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(p).to.eventually.be.rejected; + let p2Success = true; + try { + await execute(); + } catch (err) { + // do nothing + p2Success = false; + } + const success = (!pSuccess && p2Success); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(p2).to.eventually.be.fulfilled; + return expect(success).to.be.true; })); }); diff --git a/test/graph/contacts.ts b/test/graph/contacts.ts index 7c772a925..c62d8f0b7 100644 --- a/test/graph/contacts.ts +++ b/test/graph/contacts.ts @@ -6,7 +6,7 @@ import { getRandomString, stringIsNullOrEmpty } from "@pnp/core"; // TODO:: make work with test recording -describe.only("Contacts", function () { +describe("Contacts", function () { let testUserName = ""; let testContactID = ""; diff --git a/test/graph/files.ts b/test/graph/files.ts index 9e3a40c79..c2bf8e77d 100644 --- a/test/graph/files.ts +++ b/test/graph/files.ts @@ -64,8 +64,6 @@ describe("Drive", function () { return expect(list).is.not.null; }); - - // TODO: Failing with Timeout it("Get Recent Drive Items", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); @@ -233,6 +231,7 @@ describe("Drive", function () { return expect(thumbnails).is.not.null; }); + // This logs to the console when it passes, ignore those messages it("Delete Drive Item", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); @@ -254,6 +253,7 @@ describe("Drive", function () { return expect(driveItemId).to.be.null; }); + // This logs to the console when it passes, ignore those messages it("Permanently Delete Drive Item", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); @@ -349,7 +349,6 @@ describe("Drive", function () { return expect(driveItemUpdate.name).to.eq(testFileName2); }); - // TODO: Failing timeout it("Convert Drive Item", async function () { if (stringIsNullOrEmpty(driveId)) { this.skip(); diff --git a/test/graph/group-conversations.ts b/test/graph/group-conversations.ts index 650ee9369..28dc4edc4 100644 --- a/test/graph/group-conversations.ts +++ b/test/graph/group-conversations.ts @@ -11,7 +11,6 @@ import { import { getRandomString } from "@pnp/core"; describe("Group Conversations", function () { - let testUserName = ""; let groupId = ""; const draftPost: IPostType = { @@ -38,21 +37,15 @@ describe("Group Conversations", function () { before(async function () { - if (!this.pnp.settings.enableWebTests) { + if (!this.pnp.settings.enableWebTests || !this.pnp.settings.testGroupId) { this.skip(); } const userInfo = await getValidUser.call(this); - testUserName = userInfo.userPrincipalName; draftPost.from.emailAddress.address = userInfo.userPrincipalName; draftPost.from.emailAddress.name = userInfo.displayName; postForwardInfo.toRecipients[0].emailAddress.address = userInfo.userPrincipalName; postForwardInfo.toRecipients[0].emailAddress.name = userInfo.displayName; - const groups = await this.pnp.graph.users.getById(testUserName).joinedTeams(); - if (groups.length > 0) { - groupId = groups[0].id; - } else { - this.skip(); - } + groupId = this.pnp.settings.testGroupId; }); describe("Group Conversations", function () { @@ -99,7 +92,8 @@ describe("Group Conversations", function () { return expect(post).to.have.property("id"); }); - it("post reply", async function () { + // Even though docs say you can do this with app permissions throwing a 403, that said conversations do not support app permissions so it feels like a bug in the docs. + it.skip("post reply", async function () { const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); const threadPost = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads.getById(convThreads[0].id).posts(); @@ -111,7 +105,8 @@ describe("Group Conversations", function () { return expect(reply).to.have.property("id"); }); - it("post forward", async function () { + // Even though docs say you can do this with app permissions throwing a 403, that said conversations do not support app permissions so it feels like a bug in the docs. + it.skip("post forward", async function () { let success = false; const conversations = await this.pnp.graph.groups.getById(groupId).conversations(); const convThreads = await this.pnp.graph.groups.getById(groupId).conversations.getById(conversations[0].id).threads(); diff --git a/test/graph/mail-folders.ts b/test/graph/mail-folders.ts index 22db3b6e0..7b09a1f03 100644 --- a/test/graph/mail-folders.ts +++ b/test/graph/mail-folders.ts @@ -113,6 +113,7 @@ describe("Mail: Folders", function () { return expect(success).to.be.true; }); + // This logs to the console when it passes, ignore those messages it("Mail: Folder Delete", async function () { const f: IMailFolder = JSON.parse(JSON.stringify(draftFolder)); f.displayName = `${testFolderName} ${getRandomString(8)}`; diff --git a/test/graph/mail-mailbox.ts b/test/graph/mail-mailbox.ts index e8229d37e..b26cba65a 100644 --- a/test/graph/mail-mailbox.ts +++ b/test/graph/mail-mailbox.ts @@ -134,6 +134,7 @@ describe("Mail: Mailbox", function () { return expect(success).to.be.true; }); + // This logs to the console when it passes, ignore those messages it("Mailbox: Delete Focused Inbox Override", async function () { const f: InferenceClassificationOverride = JSON.parse(JSON.stringify(override)); f.senderEmailAddress.name = `${testName} ${getRandomString(8)}`; diff --git a/test/graph/mail-messages.ts b/test/graph/mail-messages.ts index aa30fecdf..50b69b161 100644 --- a/test/graph/mail-messages.ts +++ b/test/graph/mail-messages.ts @@ -97,6 +97,7 @@ describe("Mail: Messages", function () { return expect(success).to.be.true; }); + // This logs to the console when it passes, ignore those messages it("Mail: Delete Message", async function () { const m = JSON.parse(JSON.stringify(draftMessage)); const draft = await user.messages.add(m); @@ -162,7 +163,7 @@ describe("Mail: Messages", function () { m.subject = `PnPjs Test Message ${getRandomString(8)}`; let success = false; try{ - await user.sendMail(m); + await user.sendMail(m, false); success = true; }catch(err){ // do nothing @@ -170,7 +171,8 @@ describe("Mail: Messages", function () { return success; }); - it("Mail: Create Draft Reply Message", async function () { + // Cannot guarantee that there is email message in the inbox suitable to reply to + it.skip("Mail: Create Draft Reply Message", async function () { const inboxMessage = await user.mailFolders.getById(inboxFolder).messages.top(1)(); if (inboxMessage.length === 1) { let success = false; @@ -189,7 +191,8 @@ describe("Mail: Messages", function () { // Skipping because it would possibly send an email to someone who didn't expect it }); - it("Mail: Create Draft Reply-All Message", async function () { + // Cannot guarantee that there is email message in the inbox suitable to reply to + it.skip("Mail: Create Draft Reply-All Message", async function () { const inboxMessage = await user.mailFolders.getById(inboxFolder).messages.top(1)(); if (inboxMessage.length === 1) { let success = false; diff --git a/test/graph/mail-rules.ts b/test/graph/mail-rules.ts index aa98a6003..2926fb78e 100644 --- a/test/graph/mail-rules.ts +++ b/test/graph/mail-rules.ts @@ -89,6 +89,7 @@ describe("Mail: Rules", function () { return expect(success).to.be.true; }); + // This logs to the console when it passes, ignore those messages it("Mail: Rule Delete", async function () { const r = JSON.parse(JSON.stringify(draftRule)); r.displayName = `PnPjs Test Rule ${getRandomString(8)}`; diff --git a/test/sp/files.ts b/test/sp/files.ts index 62036b643..0adb49c82 100644 --- a/test/sp/files.ts +++ b/test/sp/files.ts @@ -91,6 +91,7 @@ describe("Files", function () { expect(file.Name).to.eq(name); }); + // TODO: This is an ArrayBuffer but the addChunked method doesn't seem to support that when getting a readable stream, needs work. it("addChunked", async function () { const name = `Testing Chunked - ${getRandomString(4)}.jpg`; diff --git a/test/sp/site-groups.ts b/test/sp/site-groups.ts index ed1c3fc31..f98dba0c2 100644 --- a/test/sp/site-groups.ts +++ b/test/sp/site-groups.ts @@ -43,13 +43,20 @@ describe("SiteGroups", function () { }); // requires Custom Scripts to be enabled. Set-PnPSite -Identity -NoScriptSite $false - it("createDefaultAssociatedGroups()", async function () { + // Skipping as "custom scripts" feature disabled as of March 2024 + it.skip("createDefaultAssociatedGroups()", async function () { await this.pnp.sp.web.ensureUser(this.pnp.settings.testUser); const groupName = `TestGroup_${getRandomString(4)}`; - return expect(this.pnp.sp.web.createDefaultAssociatedGroups(groupName, - this.pnp.settings.testUser, - false, - false)).to.be.eventually.fulfilled; + let sucess = true; + try { + await this.pnp.sp.web.createDefaultAssociatedGroups(groupName, + this.pnp.settings.testUser, + false, + false); + } catch (err) { + sucess = false; + } + return expect(sucess).to.be.true; }); }); @@ -57,9 +64,10 @@ describe("SiteGroups", function () { return expect(this.pnp.sp.web.siteGroups.getById(newGroup.Id)()); }); - it("add()", function () { + it("add()", async function () { const newGroupTitle = `test_add_new_sitegroup_${getRandomString(8)}`; - return expect(this.pnp.sp.web.siteGroups.add({ "Title": newGroupTitle })).to.be.eventually.fulfilled; + const newGroup = await this.pnp.sp.web.siteGroups.add({ "Title": newGroupTitle }); + return expect(newGroup.Title).to.equal(newGroupTitle); }); it("getByName()", function () { From b88c2c4df6608636ccfc3281ba5140d9d5aed73d Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Thu, 18 Apr 2024 18:30:35 +0000 Subject: [PATCH 163/171] Test Comments and cleanup --- test/graph/calendars.ts | 6 ++++-- test/graph/columns.ts | 3 +++ test/graph/content-types.ts | 2 ++ test/graph/list-items.ts | 1 + test/graph/lists.ts | 1 + test/graph/planner.ts | 4 ++++ test/sp/security.ts | 37 +++++++++++++++++++++---------------- 7 files changed, 36 insertions(+), 18 deletions(-) diff --git a/test/graph/calendars.ts b/test/graph/calendars.ts index 12280f044..5a121e7f5 100644 --- a/test/graph/calendars.ts +++ b/test/graph/calendars.ts @@ -509,6 +509,7 @@ describe("Calendar", function () { return expect(passed).is.true; }); + // This logs to the console when it passes, ignore those messages it("Delete Calendar Group", async function () { let deletedCalendarGroupFound = false; const group = await this.pnp.graph.users.getById(testUserName).calendarGroups.add({ @@ -521,7 +522,7 @@ describe("Calendar", function () { } catch (e) { if (e?.isHttpRequestError) { if ((e).status === 404) { - console.error((e).statusText); + // do nothing } } else { console.log(e.message); @@ -617,6 +618,7 @@ describe("Calendar", function () { return expect(passed).is.true; }); + // This logs to the console when it passes, ignore those messages it("Delete Calendar Permissions", async function () { let deletePermissionFound = false; const permission = await this.pnp.graph.users.getById(testUserName).calendars.getById(defaultCalID).calendarPermissions.add( @@ -636,7 +638,7 @@ describe("Calendar", function () { } catch (e) { if (e?.isHttpRequestError) { if ((e).status === 404) { - console.error((e).statusText); + // do nothing } } else { console.log(e.message); diff --git a/test/graph/columns.ts b/test/graph/columns.ts index 8e95a0409..c42fcada3 100644 --- a/test/graph/columns.ts +++ b/test/graph/columns.ts @@ -136,6 +136,7 @@ describe("Columns", function () { return expect((updateColumn.displayName === newColumnName)).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("delete", pnpTest("bcb9bafc-4d9c-40d3-a335-b6ff9650e25c", async function () { const props = await this.props({ @@ -215,6 +216,7 @@ describe("Columns", function () { return expect((updateColumnResults.propagateChanges)).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("delete", pnpTest("4d6e18c1-abe7-4cd4-a90e-1c1715d5e1ce", async function () { const c = await contentType.columns.addRef(siteColumn); await contentType.columns.getById(c.id).delete(); @@ -276,6 +278,7 @@ describe("Columns", function () { return expect((updateColumn.displayName === newColumnName)).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("delete", pnpTest("16650b92-045a-4bfe-8f37-a8a8856385f2", async function () { const props = await this.props({ diff --git a/test/graph/content-types.ts b/test/graph/content-types.ts index 2d94ae2e0..54583277a 100644 --- a/test/graph/content-types.ts +++ b/test/graph/content-types.ts @@ -155,6 +155,7 @@ describe("ContentTypes", function () { return expect((updateContentType.name === newContentTypeName)).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("delete", pnpTest("50a499b1-b6b9-47f7-b14e-567c03ac77a2", async function () { const props = await this.props({ @@ -233,6 +234,7 @@ describe("ContentTypes", function () { return expect((updateContentType.name === newContentTypeName)).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("delete", pnpTest("5d8dc8f0-5220-400b-b990-0bcdfcd08594", async function () { const props = await this.props({ diff --git a/test/graph/list-items.ts b/test/graph/list-items.ts index d956510c4..616668936 100644 --- a/test/graph/list-items.ts +++ b/test/graph/list-items.ts @@ -81,6 +81,7 @@ describe("List-Items", function () { return expect(itemUpdated.fields.Title).is.eq(newTitle); })); + // This logs to the console when it passes, ignore those messages it("delete", pnpTest("e55bf53f-1316-4e47-97c1-b0c0cdd860ef", async function () { await itemDelete.delete(); let passed = false; diff --git a/test/graph/lists.ts b/test/graph/lists.ts index f2e651392..977192265 100644 --- a/test/graph/lists.ts +++ b/test/graph/lists.ts @@ -67,6 +67,7 @@ describe("Lists", function () { return expect((updateList.displayName === newListName)).to.be.true; })); + // This logs to the console when it passes, ignore those messages it("delete", pnpTest("3d070839-0713-4a3e-a718-f89bb378cbe1", async function () { const props = await this.props({ diff --git a/test/graph/planner.ts b/test/graph/planner.ts index a97f15f76..a6f7339fb 100644 --- a/test/graph/planner.ts +++ b/test/graph/planner.ts @@ -73,6 +73,7 @@ describe("Planner", function () { return expect(planUpdate.title).is.equal(newPlanName); }); + // This logs to the console when it passes, ignore those messages it("Delete", async function () { const planName = `TestPlan_${getRandomString(4)}`; const newPlan = JSON.parse(JSON.stringify(planTemplate)); @@ -174,6 +175,7 @@ describe("Planner", function () { return expect(bucket.name).is.equal(newBucketName); }); + // This logs to the console when it passes, ignore those messages it("Delete", async function () { const bucketName = `TestBucket_${getRandomString(4)}`; const newBucket = JSON.parse(JSON.stringify(bucketTemplate)); @@ -260,6 +262,7 @@ describe("Planner", function () { return expect(task.title).is.equal(newTaskName); }); + // This logs to the console when it passes, ignore those messages it("Delete", async function () { const taskName = `TestTask_${getRandomString(4)}`; const newTask = JSON.parse(JSON.stringify(taskTemplate)); @@ -441,6 +444,7 @@ describe("Planner", function () { }); }); + // This logs to the console when it passes, ignore those messages after(async function () { if (PlanIds.length > 0) { PlanIds.forEach(async (id) => { diff --git a/test/sp/security.ts b/test/sp/security.ts index b805183ba..d666a7389 100644 --- a/test/sp/security.ts +++ b/test/sp/security.ts @@ -41,50 +41,55 @@ describe("Security", function () { after(async function () { if (this.pnp.settings.enableWebTests) { // reset the list incase we use it again it will be ready - return list.resetRoleInheritance(); + if (list != null) { + return list.resetRoleInheritance(); + } } return; }); - it("roleAssignments", function () { - - return expect(list.roleAssignments()).to.eventually.be.fulfilled; + it("roleAssignments", async function () { + const ra = await list.roleAssignments(); + return expect(ra).to.not.be.null; }); - it("firstUniqueAncestorSecurableObject", function () { + it("firstUniqueAncestorSecurableObject", async function () { - return expect(list.firstUniqueAncestorSecurableObject()).to.eventually.be.fulfilled; + const a = await list.firstUniqueAncestorSecurableObject(); + return expect(a).to.not.be.null; }); it("getUserEffectivePermissions", async function () { const users = await this.pnp.sp.web.siteUsers.top(1).select("LoginName")(); - return expect(list.getUserEffectivePermissions(users[0].LoginName)).to.eventually.be.fulfilled; + const bp = await list.getUserEffectivePermissions(users[0].LoginName); + return expect(bp).to.not.be.null; }); it("getCurrentUserEffectivePermissions", async function () { - - return expect(list.getCurrentUserEffectivePermissions()).to.eventually.be.fulfilled; + const ep = await list.getCurrentUserEffectivePermissions(); + return expect(ep).to.not.be.null; }); it("userHasPermissions", async function () { - const users = await this.pnp.sp.web.siteUsers.top(1).select("LoginName")(); - return expect(list.userHasPermissions(users[0].LoginName, PermissionKind.AddListItems)).to.eventually.be.fulfilled; + const hp = await list.userHasPermissions(users[0].LoginName, PermissionKind.AddListItems); + return expect(hp).to.not.be.null; }); it("currentUserHasPermissions", async function () { - - return expect(list.currentUserHasPermissions(PermissionKind.AddListItems)).to.eventually.be.fulfilled; + const hp = await list.currentUserHasPermissions(PermissionKind.AddListItems); + return expect(hp).to.not.be.null; }); it("breakRoleInheritance", async function () { - - return expect(list.breakRoleInheritance(true, true)).to.eventually.be.fulfilled; + const br = await list.breakRoleInheritance(true, true); + return expect(br).to.not.be.null; }); it("updateRoleDef", async function () { // We cannot alter Role Definitions on a subsite, we therefore test updating Role Definitions against the parent site. - return expect(parentWeb.roleDefinitions.getByName(testRoleDefName).update({ BasePermissions: { Low: 3, High: 0 } })).to.eventually.be.fulfilled; + const rd = await parentWeb.roleDefinitions.getByName(testRoleDefName).update({ BasePermissions: { Low: 3, High: 0 } }); + return expect(rd).to.not.be.null; }); }); From 708088920d47c8a9df5fa54d669f9072fb29fa71 Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Thu, 18 Apr 2024 20:37:08 -0400 Subject: [PATCH 164/171] adding logic to create read stream, tests now pass --- packages/sp/files/types.ts | 40 ++++++++++++++++++++++++++++---------- test/sp/files.ts | 1 - 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/packages/sp/files/types.ts b/packages/sp/files/types.ts index d8f624659..b778cd224 100644 --- a/packages/sp/files/types.ts +++ b/packages/sp/files/types.ts @@ -22,9 +22,9 @@ import { ISiteUserProps } from "../site-users/types.js"; import { encodePath } from "../utils/encode-path-str.js"; import { IMoveCopyOptions } from "../types.js"; import { ReadableFile } from "./readable-file.js"; -import "../context-info/index.js"; import { BatchNever } from "../batching.js"; import { PassThrough, Stream } from "stream"; +import "../context-info/index.js"; /** * Describes a collection of File objects @@ -707,7 +707,7 @@ export interface IChunkedOperationProps { progress: (data: IFileUploadProgressData) => void; } -export type ValidFileContentSource = Blob | ReadableStream | TransformStream | Stream | PassThrough; +export type ValidFileContentSource = Blob | ReadableStream | TransformStream | Stream | PassThrough | ArrayBuffer; function applyChunckedOperationDefaults(props: Partial): IChunkedOperationProps { return { @@ -725,8 +725,7 @@ function sourceToReadableStream(source: ValidFileContentSource): ReadableStream return source.stream(); - // eslint-disable-next-line @typescript-eslint/dot-notation - } else if (isPassThrough(source)) { + } else if (hasOn(source)) { // we probably have a passthrough stream from NodeFetch or some other type that supports "on(data)" return new ReadableStream({ @@ -742,23 +741,37 @@ function sourceToReadableStream(source: ValidFileContentSource): ReadableStream }, }); + } else if (isBuffer(source)) { + + // we think we have a buffer + return new ReadableStream({ + start(controller) { + + controller.enqueue(source); + controller.close(); + }, + }); + + } else if (isTransform(source)) { + + return source.readable; + } else { - return source; + return source; } } const NAME = Symbol.toStringTag; -function isPassThrough(object): object is PassThrough { +function hasOn(object): object is PassThrough | Stream { // eslint-disable-next-line @typescript-eslint/dot-notation return typeof object["on"] === "function"; } // FROM: node-fetch source code function isBlob(object): object is Blob { - return ( - typeof object === "object" && + return typeof object === "object" && typeof object.arrayBuffer === "function" && typeof object.type === "string" && typeof object.stream === "function" && @@ -766,6 +779,13 @@ function isBlob(object): object is Blob { ( /^(Blob|File)$/.test(object[NAME]) || /^(Blob|File)$/.test(object.constructor.name) - ) - ); + ); +} + +function isBuffer(object): object is ArrayBuffer { + return typeof object === "object" && typeof object.length === "number"; +} + +function isTransform(object): object is TransformStream { + return typeof object === "object" && typeof object.readable === "object"; } diff --git a/test/sp/files.ts b/test/sp/files.ts index 0adb49c82..62036b643 100644 --- a/test/sp/files.ts +++ b/test/sp/files.ts @@ -91,7 +91,6 @@ describe("Files", function () { expect(file.Name).to.eq(name); }); - // TODO: This is an ArrayBuffer but the addChunked method doesn't seem to support that when getting a readable stream, needs work. it("addChunked", async function () { const name = `Testing Chunked - ${getRandomString(4)}.jpg`; From 69fc830fc0c3fc66c5ce4224ef76a7499da824f2 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Sat, 20 Apr 2024 20:22:31 +0000 Subject: [PATCH 165/171] V4 docs updates for launch --- CHANGELOG.md | 8 ++-- docs/getting-started.md | 12 +++-- docs/transition-guide.md | 95 ++++++++++------------------------------ docs/v3/index.html | 0 mkdocs.yml | 3 +- 5 files changed, 38 insertions(+), 80 deletions(-) create mode 100644 docs/v3/index.html diff --git a/CHANGELOG.md b/CHANGELOG.md index d29e15e29..63bdbeb11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## 4.0.0 - 2023-Nov-11 + ### Added - graph - - explict error thrown if SPFx context is null or undefined when needed + - explicit error thrown if SPFx context is null or undefined when needed - followed sites support for users - ISite now supports `async rebase()` to ensure any ISite is represented by the url pattern /sites/{site id} regardless of how it was first loaded - ISites.getAllSites() @@ -30,7 +31,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - to-do module - sp - - explict error thrown if SPFx context is null or undefined when needed + - explicit error thrown if SPFx context is null or undefined when needed - getStream method on all readable files - addChunked updated to accept stream as content, new signature with props object @@ -44,6 +45,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - ./operations.ts methods moved to ./graphqueryable.ts - deprecated DriveItem move method. - deprecated DriveItem setContent method. + - `data` & [queryable] property on add/update methods -- now returns only a representation of the added/updated object - sp - getPaged method removed from _Items/IItems @@ -54,6 +56,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - removed legacy support for @target query param - removed "favorites", please use graph favorites - taxonomy module, please use graph taxonomy + - `data` & [queryable] property on add/update methods -- now returns void - nodejs - removed stream extensions, moved into sp @@ -89,7 +92,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Improvements to shared module - Greatly expanded what is supported through teams module - - sp - _Items and IItems now supports async iterator pattern - chunked upload/add progress object shape changed to : { uploadId: string; stage: "starting" | "continue" | "finishing"; offset: number; } diff --git a/docs/getting-started.md b/docs/getting-started.md index bed2ebcd6..645450908 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -6,7 +6,7 @@ If you need to support older browsers, SharePoint on premises servers, or older ## Minimal Requirements - - NodeJs: >= 14 + - NodeJs: >= 18 - TypeScript: 4.x - Node Modules Supported: ESM Only @@ -39,14 +39,20 @@ We've created two Getting Started samples. The first uses the more traditional R In addition, we have converted the sample project from React Component to React Hooks. This version can be found in [react-pnp-js-hooks](https://github.com/pnp/sp-dev-fx-webparts/tree/main/samples/react-pnp-js-hooks). This sample will help those struggling to establish context correctly while using the hooks conventions. -The SharePoint Framework supports different versions of TypeScript natively and as of 1.14 release still doesn't natively support TypeScript 4.x. Sadly, this means that to use Version 3 of PnPjs you will need to take a few additional configuration steps to get them to work together. +The SharePoint Framework supports different versions of NodeJS and TypeScript natively. Because of dependency updates we've made to PnPjs Version 4 is only compatible with NodeJS v18.x and therefore is not supported on SPFx version before 1.18.x. -### SPFx Version 1.15.0 & later +### SPFx Version 1.18.0 & later No additional steps required +### SPFx Version 1.15.0 => 1.17.4 + +Version 4 is not supported, you must use Version 3 because of V4 reliance requirement of NodeJS v18.x. + ### SPFx Version 1.12.1 => 1.14.0 +Version 4 is not supported, you must use Version 3. In addition because as of SPFx 1.14.x release it still doesn't natively support TypeScript 4.x, this means that to use Version 3 of PnPjs you will need to take a few additional configuration steps to get them to work together. + 1. Update the [rush stack](https://rushstack.io/) compiler to 4.2. This is covered in this [great article by Elio](https://www.eliostruyf.com/define-the-typescript-version-you-want-to-use-in-sharepoint-framework/), but the steps are listed below. - Uninstall existing rush stack compiler (replace the ? with the version that is currently referenced in your package.json): `npm uninstall @microsoft/rush-stack-compiler-3.?` diff --git a/docs/transition-guide.md b/docs/transition-guide.md index 058ab0185..de91cf5e3 100644 --- a/docs/transition-guide.md +++ b/docs/transition-guide.md @@ -1,87 +1,36 @@ -# Transition Guide +# Transition Guide V3 -> V4 -It is our hope that the transition from version 2.\* to 3.\* will be as painless as possible, however given the transition we have made from a global sp object to an instance based object some architectural and inital setup changes will need to be addressed. In the following sections we endevor to provide an overview of what changes will be required. If we missed something, please let us know in the issues list so we can update the guide. Thanks! + **For more information about migrating from an earlier version of PnPjs please see the transition guides below** -For a full, detailed list of what's been added, updated, and removed please see our [CHANGELOG](https://github.com/pnp/pnpjs/blob/main/CHANGELOG.md) + - [V2 -> V3 Transition Guide](https://pnp.github.io/pnpjs/v3/transition-guide/) + - [V1 -> V2 Transition Guide](https://pnp.github.io/pnpjs/v2/transition-guide/) -For a full sample project, utilizing SPFx 1.14 and V3 that showcases some of the more dramatic changes to the library check out this [sample](https://github.com/pnp/sp-dev-fx-webparts/tree/main/samples/react-pnp-js-sample). +It is our hope that the transition from version 3.\* to 4.\* will be as painless as possible as the changes we have made are not as extensive as with version 3. Below are some highlights of the most disruptive changes that were made. For a full, detailed list of what's been added, updated, and removed please see our [CHANGELOG](https://github.com/pnp/pnpjs/blob/main/CHANGELOG.md) -## Benefits and Advancements in V3 +## SharePoint Taxonomy has moved to @pnp/graph from @pnp/sp -For version 2 the core themes were selective imports, a model based on factory functions & interfaces, and improving the docs. This foundation gave us the opportunity to re-write the entire request pipeline internals with minimal external library changes - showing a bit of long-term planning 🙂. With version 3 your required updates are likely to only affect the initial configuration of the library, a huge accomplishment when updating the entire internals. +To better support Taxonomy authentication and control we've moved our Taxonomy implementation from the @pnp/sp module to the @pnp/graph module. We were utilizing the v2.x endpoints to continue to support taxonomy in the SharePoint bundle and we decided that this was not the best approach. You will need to update your taxonomy implementations to use the graph endpoints. -Our request pipeline remained largely unchanged since it was first written ~5 years ago, hard to change something so central to the library. The advantage of this update it is now easy for developers to inject their own logic into the request process. As always, this work was based on feedback over the years and understanding how we can be a better library. The new observer design allows you to customize every aspect of the request, in a much clearer way than was previously possible. In addition this work greatly reduced internal boilerplate code and optimized for library size. We reduced the size of sp & graph libraries by almost 2/3. As well we embraced a fully async design built around the new [Timeline](core/timeline.md). Check out the new model around authoring [observers](core/observers.md) and understand how they relate to [moments](core/moments.md). We feel this new architecture will allow far greater flexibility for consumers of the library to customize the behavior to exactly meet their needs. +## Add/Update methods no longer returning data and a queryable instance -We also used this as an opportunity to remove duplicate methods, clean up and improve our typings & method signatures, and drop legacy methods. Be sure to review the [changelog](https://github.com/pnp/pnpjs/blob/version-3/CHANGELOG.md). As always we do our best to minimize breaking changes but major versions are breaking versions. +The primary breaking change will be with add and update method return values. We are not going to return what the calling endpoint returns so anywhere that you are referencing the return objects `data` property you will need to remove that reference. Many of the graph endpoints do return the added or updated object but most of the SharePoint ones return 204, which would translate into a return type of void. -We thank you for using the library. Your continued feedback drives these improvements, and we look forward to seeing what you build! +Ex: -## Global vs Instance Architecture + ```TypeScript + // Version 3 + const update = await sp.web.lists.getByTitle("My List").items.getById(1).update({Title: "My New Title"}); + const newTitle = update.data.Title; -The biggest change in version 3 of the library is the movement away from the globally defined sp and graph objects. Starting in version 2.1.0 we added the concept of `Isolated Runtime` which allowed you to create a separate instance of the global object that would have a separate configuration. We found that the implementation was finicky and prone to issues, so we have rebuilt the internals of the library from the ground up to better address this need. In doing so, we decided not to offer a global object at all. + // Version 4 + await sp.web.lists.getByTitle("My List").items.getById(1)..update({Title: "My New Title"}); + const updatedItem = await sp.web.lists.getByTitle("My List").items.getById(1)(); + ``` -Because of this change, any architecture that relies on the `sp` or `graph` objects being configured during initialization and then reused throughout the solution will need to be rethought. Essentially you have three options: +## Async Iterator Pattern -1. Create a new `spfi`/`graphfi` object wherever it's required. -1. Create a [service architecture](../getting-started/#establish-context-within-an-spfx-service) that can return a previously configured instance or utilize an instance and return the results -1. Utilize a [Project Preset file](./concepts/project-preset.md). +As an updated pattern we are recommending you move to an async iterator pattern to get more than 5000 items from a list. -In other words, the `sp` and `graph` objects have been deprecated and will need to be replaced. +With that in mind we've removed the `/items/get-all` endpoint. In addition we've updated the @pnp/sp package's `IItems` and `_Items` collections as well as the @pnp/graph `IGraphQueryableCollection` to support the async iterator pattern. -For more information on getting started with these new setup methods please see the [Getting Started](./getting-started.md) docs for a deeper look into the Queryable interface see [Queryable](./queryable/queryable.md). - -## AssignFrom and CopyFrom - -With the new Querable instance architecture we have provided a way to branch from one instance to another. To do this we provide two methods: AssignFrom and CopyFrom. These methods can be helpful when you want to establish a new instance to which you might apply other behaviors but want to reuse the configuration from a source. To learn more about them check out the [Core/Behaviors](./core/behaviors.md) documentation. - -## Dropping ".get()" - -If you are still using the `queryableInstance.get()` method of queryable you must replace it with a direct invoke call `queryableInstance()`. - -## Batching - -Another benefit of the new updated internals is a significantly streamlined and simplified process for batching requests. Essentially, the interface for SP and Graph now function the same. - -A new module called "batching" will need to be imported which then provides the batched interface which will return a tuple with a new Querable instance and an execute function. To see more details check out [Batching](./concepts/batching.md). - -## Web -> SPFI - -In V2, to connect to a different web you would use the function - -```TypeScript -const web = Web({Other Web URL}); -``` - -In V3 you would create a new instance of queryable connecting to the web of your choice. This new method provides you significantly more flexibility by not only allowing you to easily connect to other webs in the same tenant but also to webs in other tenants. - -We are seeing a significant number of people report an error when using this method: - -`No observers registered for this request.` - -which results when it hasn't been updated to use the version 3 convention. Please see the examples below to pick the one that most suits your codebase. - -```TypeScript -import { spfi, SPFx } from "@pnp/sp"; -import { Web } from "@pnp/sp/webs"; - -const spWebA = spfi().using(SPFx(this.context)); - -// Easiest transition is to use the tuple pattern and the Web constructor which will copy all the observers from the object but set the url to the one provided -const spWebE = Web([spWebA.web, "{Absolute URL of Other Web}"]); - -// Create a new instance of Queryable -const spWebB = spfi("{Other Web URL}").using(SPFx(this.context)); - -// Copy/Assign a new instance of Queryable using the existing -const spWebC = spfi("{Other Web URL}").using(AssignFrom(sp.web)); - -// Create a new instance of Queryable using other credentials? -const spWebD = spfi("{Other Web URL}").using(SPFx(this.context)); - -``` - -Please see the documentation for more information on the updated [Web constructor](./sp/webs.md). - -## Dropping -Commonjs Packages - -Starting with v3 we are dropping the commonjs versions of all packages. Previously we released these as we worked to transition to esm and the current node didn't yet support esm. With esm now a supported module type, and having done the work to ensure they work in node we feel it is a good time to drop the -commonjs variants. Please see documentation on [Getting started with NodeJS Project using TypeScript producing CommonJS modules](getting-started.md#node-project-using-typescript-producing-commonjs-modules) +Check out this example for more information on this pattern: [Get Paged Items](./sp/items.md#get-paged-items). diff --git a/docs/v3/index.html b/docs/v3/index.html new file mode 100644 index 000000000..e69de29bb diff --git a/mkdocs.yml b/mkdocs.yml index 49b5df3cd..52e22052c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -5,7 +5,7 @@ docs_dir: 'docs' nav: - Home: 'index.md' - 'Getting Started': 'getting-started.md' - - 'V2->V3 Transition': 'transition-guide.md' + - 'V3->V4 Transition': 'transition-guide.md' - 'Year in Review': - '2022': 'news/2022-year-in-review.md' - '2021': 'news/2021-year-in-review.md' @@ -162,6 +162,7 @@ nav: - Legacy Docs: - V1: 'v1/index.html' - V2: 'v2/index.html' + - V3: 'v3/index.html' theme: name: 'material' From c002113a2ac8d45013ebaf1af854c0ca67fec620 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Sat, 20 Apr 2024 15:01:59 -0600 Subject: [PATCH 166/171] Async Iterator Updates --- docs/graph/behaviors.md | 71 ---------------------------------------- docs/sp/items.md | 37 ++++++--------------- docs/transition-guide.md | 2 ++ 3 files changed, 12 insertions(+), 98 deletions(-) diff --git a/docs/graph/behaviors.md b/docs/graph/behaviors.md index b58e9826e..cbdbcb670 100644 --- a/docs/graph/behaviors.md +++ b/docs/graph/behaviors.md @@ -30,77 +30,6 @@ await graph.users(); > DefaultInit and DefaultHeaders are separated to make it easier to create your own default headers or init behavior. You should include both if composing your own default behavior. -## Paged - -_Added in 3.4.0_ - -The Paged behavior allows you to access the information in a collection through a series of pages. While you can use it directly, you will likely use the `paged` method of the collections which handles things for you. - -> Note that not all entity types support `count` and where it is unsupported it will return 0. - -Basic example, read all users: - -```TypeScript -import { graphfi, DefaultHeaders } from "@pnp/graph"; -import "@pnp/graph/users"; - -const graph = graphfi().using(DefaultHeaders()); - -const allUsers = []; -let users = await graph.users.top(300).paged(); - -allUsers.push(...users.value); - -while (users.hasNext) { - users = await users.next(); - allUsers.push(...users.value); -} - -console.log(`All users: ${JSON.stringify(allUsers)}`); -``` - -Beyond the basics other query operations are supported such as filter and select. - -```TypeScript -import { graphfi, DefaultHeaders } from "@pnp/graph"; -import "@pnp/graph/users"; - -const graph = graphfi().using(DefaultHeaders()); - -const allUsers = []; -let users = await graph.users.top(50).select("userPrincipalName", "displayName").filter("startswith(displayName, 'A')").paged(); - -allUsers.push(...users.value); - -while (users.hasNext) { - users = await users.next(); - allUsers.push(...users.value); -} - -console.log(`All users: ${JSON.stringify(allUsers)}`); -``` - -And similarly for groups, showing the same pattern for different types of collections - -```TypeScript -import { graphfi, DefaultHeaders } from "@pnp/graph"; -import "@pnp/graph/groups"; - -const graph = graphfi().using(DefaultHeaders()); - -const allGroups = []; -let groups = await graph.groups.paged(); - -allGroups.push(...groups.value); - -while (groups.hasNext) { - groups = await groups.next(); - allGroups.push(...groups.value); -} - -console.log(`All groups: ${JSON.stringify(allGroups)}`); -``` - ## Endpoint This behavior is used to change the endpoint to which requests are made, either "beta" or "v1.0". This allows you to easily switch back and forth between the endpoints as needed. diff --git a/docs/sp/items.md b/docs/sp/items.md index 252d90a02..170006fce 100644 --- a/docs/sp/items.md +++ b/docs/sp/items.md @@ -31,7 +31,7 @@ console.log(items2); ### Get Paged Items -Working with paging can be a challenge as it is based on skip tokens and item ids, something that is hard to guess at runtime. To simplify things you can use the getPaged method on the Items class to assist. Note that there isn't a way to move backwards in the collection, this is by design. The pattern you should use to support backwards navigation in the results is to cache the results into a local array and use the standard array operators to get previous pages. Alternatively you can append the results to the UI, but this can have performance impact for large result sets. +Working with paging can be a challenge as it is based on skip tokens and item ids, something that is hard to guess at runtime. To simplify things you can use the new Async Iterator functionality on the Items class to assist. ```TypeScript import { spfi } from "@pnp/sp"; @@ -41,35 +41,18 @@ import "@pnp/sp/items"; const sp = spfi(...); -// basic case to get paged items form a list -const items = await sp.web.lists.getByTitle("BigList").items.getPaged(); - -// you can also provide a type for the returned values instead of any -const items = await sp.web.lists.getByTitle("BigList").items.getPaged<{Title: string}[]>(); - -// the query also works with select to choose certain fields and top to set the page size -const items = await sp.web.lists.getByTitle("BigList").items.select("Title", "Description").top(50).getPaged<{Title: string}[]>(); - -// the results object will have two properties and one method: - -// the results property will be an array of the items returned -if (items.results.length > 0) { - console.log("We got results!"); - - for (let i = 0; i < items.results.length; i++) { - // type checking works here if we specify the return type - console.log(items.results[i].Title); - } +// Using async iterator to loop through pages of items in a large list +for await (const items of sp.web.lists.getByTitle("BigList").items()) { + console.log(items); + break; // closes the iterator, returns } -// the hasNext property is used with the getNext method to handle paging -// hasNext will be true so long as there are additional results -if (items.hasNext) { +//using async iterator in combination with top() to get pages of items in chunks of 10 +for await (const items of sp.web.lists.getByTitle("BigList").items.top(10)) { + console.log(items); + break; // closes the iterator, returns +} - // this will carry over the type specified in the original query for the results array - items = await items.getNext(); - console.log(items.results.length); -} ``` ### getListItemChangesSinceToken diff --git a/docs/transition-guide.md b/docs/transition-guide.md index de91cf5e3..9184ce37d 100644 --- a/docs/transition-guide.md +++ b/docs/transition-guide.md @@ -34,3 +34,5 @@ As an updated pattern we are recommending you move to an async iterator pattern With that in mind we've removed the `/items/get-all` endpoint. In addition we've updated the @pnp/sp package's `IItems` and `_Items` collections as well as the @pnp/graph `IGraphQueryableCollection` to support the async iterator pattern. Check out this example for more information on this pattern: [Get Paged Items](./sp/items.md#get-paged-items). + +For advanced async patterns: [Async Paging](./concepts/async-paging.md). From faaf6561df8a397636a968f00b5b35a499b94b91 Mon Sep 17 00:00:00 2001 From: Beau Cameron Date: Sat, 20 Apr 2024 15:05:22 -0600 Subject: [PATCH 167/171] Update to sample --- docs/sp/items.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sp/items.md b/docs/sp/items.md index 170006fce..5a366b880 100644 --- a/docs/sp/items.md +++ b/docs/sp/items.md @@ -31,7 +31,7 @@ console.log(items2); ### Get Paged Items -Working with paging can be a challenge as it is based on skip tokens and item ids, something that is hard to guess at runtime. To simplify things you can use the new Async Iterator functionality on the Items class to assist. +Working with paging can be a challenge as it is based on skip tokens and item ids, something that is hard to guess at runtime. To simplify things you can use the Async Iterator functionality on the Items class to assist. For advanced paging techniques using the Async Iterator, please review [Async Paging]('../concepts/async-paging.md') ```TypeScript import { spfi } from "@pnp/sp"; @@ -49,7 +49,7 @@ for await (const items of sp.web.lists.getByTitle("BigList").items()) { //using async iterator in combination with top() to get pages of items in chunks of 10 for await (const items of sp.web.lists.getByTitle("BigList").items.top(10)) { - console.log(items); + console.log(items); //array of 10 items break; // closes the iterator, returns } From a33bc0253e95cb7ed6ced467c1701031d3414893 Mon Sep 17 00:00:00 2001 From: Julie Turner Date: Sun, 21 Apr 2024 15:31:06 +0000 Subject: [PATCH 168/171] Updated animated gif to show new invoked method --- docs/img/PnPjsFluentAPI.gif | Bin 0 -> 3601358 bytes docs/img/Thumbs.db | Bin 0 -> 3584 bytes docs/index.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/img/PnPjsFluentAPI.gif create mode 100644 docs/img/Thumbs.db diff --git a/docs/img/PnPjsFluentAPI.gif b/docs/img/PnPjsFluentAPI.gif new file mode 100644 index 0000000000000000000000000000000000000000..30e039ed04903b88e4c56722323809d74b99fb96 GIT binary patch literal 3601358 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

    G86bMPELG-W7@asl@HfjMUQ>m0+ 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∓>ELVR^_|wBF569f>iV0+Fs{Vmox6Rm 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℘dKpKEHj#z42mP~YggLA5&} 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 q?kBggL}6AixC_+%HKN)Gn< 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 z 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

    Ib8wNzhhiPf98fTy?$7x`m%dfB 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�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

    8H*PZeJCEd|8>urLX@poO0AAJAT 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�J&dCFi!fg1i%Uw|$E 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 <-9vd&PXQg&llaMF3{YA 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�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%0DWT48yr_pj0Qb12>o$HL{D*Yy%{O|ckH zrKlZ-=2Y#@7fqW+6lz!om7L&B?C>r|C8c9!U0LLBbmr_0I_%?;ppkgZM2yJfa^~IQ zV#loij#|`Aj9Qh~ebuCyB@b)SD$?Zl@EZQn&nlIl@CYMWeIDg#Qrih!c)BfV)+4nR zTCubePK9f*By69ZsdCtE)_xD8-ju@%AUP?OYBcP$ZY9B~p0q*mCCz0VlLj{~m(7&# z_zJPvtq;%u)N2?ozoBe|8u9KzYl=P-z%J|j@N1R0svO^6TbiraNlq~x5}j}sLYNR^ zAm!i@uU%rX`!3_PNg4vGC7x(!1!CTPvT1)3+>ad4#}NpmG?ib9Epn-+izZx=TA*~r zU0(Hs|0CkOwx@Ufsl)WFXyJwGFula_RX&eX(Lz5=)8!#{oNen@jN3g z@ZyX&^c<}7v zxfA?482m{V0~uYm+!G%M)jJnYcRdybvGjC#MSOvigY`#0U9s0(i@R_OR{U4YRMSH? zD+Ij=V;JSaLEAh^P@~b=v|1|K<(N|_9_Rv8Tq-8uye%P-6b>Q*11J#HpWu+R@Hucms*dUy!`{YCnN;+R9FZdWrhZ%hTQtrlZpcPu z<}B4R?>r|V%1RmG>4qt4u_0!zueGaKxAJz=?axqLIoED%N0^<(AdUZM?HQdX77`dIqxst4ZhQxCZP<`b`L;V%VKX|EB0g93I2e_Rqt>eNT7oyBw>aS~o0~D{Ke*Vh`?d5L0;X+$sZuT@HInVG6Sl_LkxTX1iy2oQTz=*%(`aQl)ftrg)^G zkr`?-X>%xw*>v}JNa)(0sIA+!S^>H5$q!!uC>`d-ype@oP2Am9vH zhUYpbOi$-$L$ECEMh$Q5JT@k$dpVuo3FD}u>Dv6Wz0SRc_|%PUyYfw%rQxTG1?;S- ze7V^nqgVUL+NiVme@Y5IQyhkTb5-!mgM^Fh=AEz8W3E2`sB88)6XlfmPMQ;TTI1*( ze1hEOq)A{(M+3G%sD_0%zB zSa2P}gA)ZJEO@b@!iW?H7L=z>-A9oV|AiblQQ^dN?pE%DC~uv*jW9FrQa(qEQdVjHuK9YEYmNBNoNUbm!5JHl-G|ITd5t zq60rtG^wy@TbMMt{v>M@Z&bZgE2?zo5^z|bJ&7Xai`Jk>omJ=B#97zjR+$;O&W%|Q zBTC3W8RGo-4|HhJCGp~OoKq}N!Y#wH)hkuxYt*NE3O?%7GhT^(Q(D{$`|x1Fv+XuM z9CdC}%334W-OTVbPJD_Fe^kp+q0*Ktxv%uzojc%(gzw4*J{A4>*t!9mKKk{iY`(aO zKQ&yrGUKZ>bHgvY*D1Te+vhLS428p)O+Z+S$F|8h?P^$|;vl2(!^7?5kFfAl*EVCATY`K^ejH${T z<03JnyR1tRJGahb3bo4;o9Q(Dc%x9V$oRZdzV%={(nb#b+Auu#XcO?M8_5$4AMeO~ z?a1bslWa5k4nqmMkMgsOt_3$j4KF=^)9ux%sN6KR!d@B;*Nhl?>&ckzEbLCKEYr2n zt$fSuSSJar5y2^s+RQmr8FjL^ftXyjKx{#(Ouply%nMnYVzTi&XL(AHRrBWbR!!Fq zJTO~w<86;#8|ihet!f1-7v7cdBy!*XBfpIgHrKe5QNzFD?Jd1mpF9$!hxIM6;jrc$ zxZq^-MCiN~Ax6lg-6D1|Qf$S;cBO!mMfRk9n*ys&y?lc5xQ~yFc|V&XD`-WH!m4Z5 z3so~Sr{Y4o3SIi11650aMm2k3|VO8{Ty(6X< z-3#4Q^J25x9rn#OKYhFDb(-vTIllSCb+oBitL^9oDd%`y$k9tW!=i=u*6WXfBYRGv zC#8=ej024AZJM5Mn{wL`XBJ@*5E=qQw6kQDJ@Y z*SlI|uLIcyj4i1iiX=5gz!e1}p7PVuDuW=qNlt8X;o5_cCP1Fq@Mh=n9`?Q^KO-8& zeCj}*Xmo_eKdr?#uyK?BvDo-2iP?-dT>N5((6z?=5sPcr`I=jp1)hNUYidQLS|t1Q zsqhhva8mOY@z6-17uL&U^O{~K^^%#ClxsjmY8gkim=NF`s#PcA$OK(^FqDkwV!9;d zw9-N#kin)r+FRU3mYGO3F@oC7$rqADPXER-=TK#N;MGpV$v@ zf#h4xZeyD|GH6mC`H%{KHmpYC?}H^AXQD(oFhp|mY8sOWv7E@Yae8f4s~TPALb$lx zvB--jI}p)?#;+GCOd)u~N!{|Ipo#_4PvVjyb84uQz{LkWZ!C)l54V=F9dnnIL6_7{ zh@R_+Q$ZcI9$D=Fq?==+CXoAV6GK6TNuAciX&N$PZuT)q(14^TrXkoO`{%DaL2jnz zp=9`|n9NNkPF*LgryCV0x4l3`P54`*PL~E9bRiBnq^c&PV%f=rdDJASM5Y1v_#5uQ z&thur5nE3)zJ79TLK%_H0MnYjF_sKoLBnV5#AnZpgspg?#V3P=MyNC{u##cCNn+KB zF|g23e%N#-I4`2D+73vP(NmxkCAYn=!KrYy5}D#IsumJzGLMl9E1k^cx&)OBx39!( zV5l@h&azf2c3WYbMB1a$K9x8?g6(j;_Zx`)i${hH$rFcCoIuW`Do%}zOb;TvQ7!Y9 zkK#_iVCmfduUHCz)zj>XezjE5ingPh(yPG!wY1uB4VWOTtYXzg$*I`tPXe)ONiI^7 zCIa$b0RmE1EQ!3BFtclYA*Q`_cp7Mdw|K}En^srcz=OF}n!?juLF&gJ)Sl9D6ILgW z7sV_WeiN7X`c5sgX5?6&RhPX??i)u1741MbMiSN|Y!r&MY#InjH_V*u*g0c{c{eV* z#NZ|+;^clQ3{qWGQj;PEBQcjrbp*5Fn3nso0NoRwjjhOj^tZs_C^dj!)F&8MDB8MW z(rJ-)4ZFfR*kDowG-W<*em?sTmQ{0APMj84d4xqGWyhmjoZpY5d)t(}_G`d&Tu<}G zC2>Lj`avorpq??uuCs*{*dQD(UjqzQf>y1}0S@3$8$_oj;qZQ{8dmY9cs$RYZCPd% z-%U2`lYdyRb()p)TZCt66!kEjq&A@y8@AZ%3i^Vw0?t=l_~ujthIYW3=A4oAFeSs# z$>GU~kPNEh5=Cxy+et7mUj@FT!IYnnEml_~+wS$W&#%y9bc<_8;8`^k*Nm(okkPfX zgv?j9rqf|zl^C-$0ol2W0_u3cd}UbXcB2o5ovV&=TDw`xNKg)TN{Bwu<7S7=>J(*3 zf6VGv+AEiT1$fbVa@BVcd$-ti#D3Znl-ExUNvdv*Cm!PJWD_82HOV$81K+C`Pab~B--jbA1 zDB|bBE0C0lSpM_ zAN16&_oZPP&u&U*`UuC!ASvoO!KiuQynofZdZP6S~ zX;zAkLPtmTs%!{L9=?y(LZ(Ts#>@ysC`3(c#;F3)i(P~*piu0#6fRrZCP(Pa&1}q3 z|H_0S_#|d}4~5?Av7|_+63ut8tE>h_(+ufO2rhSuEb^2~Zyu?Nbni+?u9m9kCm^CG zeul0-r>Q8=sj#S01TZJM4K+LsB*ZIBl%#_wDtpEXO=6{1Mh}?)WVslto)80?=IyeS zPebZ$?-Ih0Hs;rw$@JVus_<>gTJArVYigdS@Cqtsbj_p!uxJDYpp?+k!pII|Xi|i* z#Wp3uT=4BUr|AfA@hmX+nognLf3#^M8MZnj*+-egJ1eqvP|Z$5ToKlCPJ zcJK!c2T5WA@wCwQ$}NL9jyB#*x};8{bSpZnj)1d$Keafp3udfBhoI z-)M%?DsR~OX}q>B!6@t-$<1e~tylz4B5losicY#dij@2<*<1$ln1U!g%71vo(j<+X zOpW`{CU2_ayzDMX%3=_6Pz=K{T1>2bhJwvH0wA$*JqV{Z?28OD$2G{ObA*C*5Q5N> z5F|@!FbFX>#A_WVu^kx+(jdvt5)pg!(2y`9p+3ecAcQX8kKY<<-O@u(|8{U%hKXDV zl7fC`P2T6Ww5TJJA~94j8M8-FdW^*O<{bGa&+Lyx#;K-^^7f9!nSPQoc>|J=B18Uy z5aZ4WLnftEQ6aez^ipqRu0q*}!zngQ^K9bVs0&OAM+X6s)&^{ee6Rs`OzHNJ8i&JK zlp|z#XndwiIRj1xk;?Hrvnem|-vSQb#0Z!ka5yb)PELZKu2a1Ta5&0@hK?rWUIHga|CV{qT*%+D;cDx@&?ZyF+~VwF;XSI_HQ7}a`=pI z@oI|TVg@5#@tHESNF>zEd_@Bpj54#Q-2`zqj*K~{i;D!#;bt>%|1R#D9x+4$q#ui; z#5{{PUzB%>PM|PoYOWEk%xSVtr9dy~LoVzaPe_^i^0z(!x1vuy&$5iUv22%>h|1;mQh&@KZK_=%9L|(DoB0ThyVT6V9TGM#3v4ac%fK z5Tjf|Q?@9}G_>{#D<%g*2vN%mx027)h2Tz$+87E3kH?gba3_DU`m_(DXwgPaDm7SS z4ZSFdv{NL$)GimyU$Ct~G4(>l@l%VE^ycxb5EM-ZO#zi@Rb+~AOiDN*Z=DPS3nODG z6l`eP=-pI9>%!A3b0}3;6UIajxpFL&I`J@E@7t6FblA_#{~+qa#7{oXPac1*1O3X- z#H|iZ&@Te!me5JClC^YTkQtA39nhFA3qf#5_e9Kd zq6HZPl=VuIfLv^?3h1QxkxyP$flzQM>!MS1B|+tLk$CIOa43pgN}I;iYk(678RPb- zC0+Tk3pY+<)wAA;^j_)_K1!ls(dj)=Nlcc=S&#>5|5ZdRo9@1zCd7Cr>u$6u2GLL4 zu5Wy-Gy=8K)G{0mkzYfHwE9GHJ&)>c1B|%D_?pHsTI$-gDg0~<9d}}q#G+-`&ER}< zT|7fkP>eASHZ%}pgGy)d$S3_KQbq~WoBGbtKIO&WDfvRwGd$_>8g?HS>ITz61bL5t zM5M3=Yg!%+daJff3#plam;2O=*qW#2PzYTGOmyod%)k)DcoONj32kzU=DN0^a_UPb z^lqYQ4#CfGGgnw&!f#^|!hXrO7)~Dv3vsdpX-^DYTO7PdOno4obPR3?4jm#{$W zN&l%E3y(Nii`_O*9KR}wno=Ir0$KaEYksli$_R~8tDDD--UNg}agWnFKeep|J)sL&v zWlKkLA8*F86tlc^O-?>mJU^xFY$`Y~<%Iz2>dx(yEGus9qju>jw!p-9QDy7i2~1cp zClknL(d}M)j#v^eN!W<^mXL24R4c7Kj9EE6tnSD`3QC^J$!LG?Aps)^mKUfOVt zuXIEw^=?*>J-^UK8>D3IBWI2lN`DrR|8x=~M(HjFQE;RAdi!c#*5gxS6uw+|s5nIKGNj)Y!SfqLpk< zhyzPlMjt7^y0fLMSDf(Kg;i#7|9kV;RPx1~ustI;Tx(f2UK)|wwaa+pbjK73Ly5Xn zYfgmCqA>1>85)X%5wrB!vPUCf84mdjDNg}WRQ6GoBGzoxV^#=jvfk4`?oEV{Wn zq>#w$o^=~h(%Kv@Pa$uUL--5ZEf6;gEc&#VLHgvFa)c3x-Y8qDj&!Omx0B;ms$0}z z8?lt6)KFGUl5v=~AqPj#k$GRca0wJY)rfIYm3%Nv-v%_kSQ*(QczoNMS-o~fyCq^7 zu#dlYZF5#$$`M;p+hRt?TZZej0TVCn%U=2S`Kq z*PJkVUkt91Mu-e}v_5b6|E9RP9y2nYla~Z8ZN-G=vQs2*8+CW$vSZxC^rn$c10mg! z8HM8YBHKvwE|GHMUQ-*xj$7Y3|~4~no}n@ls@3~i`#n?CCG_W5yU0x=I*q( z2xMJtEUnY2eKd9`{gWf(_ol&YroR?ru$Li6HC<+r&Uo4t5!#;$X(1xF^Du^aXQDvEQx5cV+1FQh2(<@^_67}5r^UpODcK)NNsWG|*)N-XcOa!=SIq<*zZrS@K<;W>!Dx= zImjGO_pleU9KU z`ST9fByFzM|D1iY*;KV(2tS$ej>Wh`HX}o+YNy{?ssOzKC0i8 zCHqcX=f!Z1JQNOFGibi@iHv{%}}chpsgzj;T&XqJ~;xoTxnT8a`OQ zmjCxx;VEv@douQe);%1!v9xh`k#`?A$D1?(3uCnTk%A$|mOulZRz)Z!W{%XA6+N%N*lnKo&{#A!2~x{@G;8hxn{p}>7fmnwXE5N5}Y zLZxz4SM{n;lqI`59BL9J*RWtqu2YwBqgr`uH%i3{_h-(YJ#prod$+DuxLK)+oVr(T z)t7v~X3RL&E6JBy4I*R;86QE$eyzSedh{p9&2K+uz6$f~ValL6$K}jcBSVvE_kKQG z`RdA+w08>ic$sqHtVIo@^}VsHywPe^i~c>jbw|WA$Exf&_UvtwE4hA6JhGwKpfTL!+BQD3f+ z|K{IdS)C_kxMA?=;B^I2FapE z1s)e4d-jF6)R^=+Cgyz~%6BD~si7oPaNT`{SDn>eN8yAbqV!g5eg?J|dKIF$9hq#d z>0X#2BHEOp0uf1;R~Zrdm7HQh+EGmaQidO-=G7%)sCatS6;tCCc_N-Mfpnrtdyd#2 zTq{wEl1CA))>f9eg8AEog%XM9keTvl;Z-^@DQI{h2}NU^ZzjnaV{2`?sap$v|0dU# zIfj5@vU*yr)uVVoDAY znC4RsnOZ7Wrix|iOh-K_lVw){nd`tZ=62hsPL_AxtK|~qDWo2^gp+vK9c!zm&^AYB zOoe9F=$Y@)r|6nzMoMMQIUgq!lkL_@-Aw83bXQ*JHmUANwGBP=x_@!^5yl*Zc=`KlcFuooK3VLC5YeP5)r<9=`JDWXW+xL6kFZR60>Xszhmnzq(xS!a!9TGG}n zA$ycHMVj#(jbnn+*m?Y$k>j$*VwXSL5j8JP%j#6>X|eQtf-QeU{h)upwR zBs3E7R|%PBJAbuGPr%ArpPuI<0jWnM!kO2>z&9qF$!B+B@?D7LbgLn;@H?Ywp-kGw zmxd_IXf64bo@5uHg#l3@=5wOZM#jPksjO!nvD^4a6)mx~rbToM|5f>fBd6)~MrasH zn$c)duIar+gn{x6w{Dc9>19T1+@n!tPQ$nldN6F^T9KPJVr?~DfM}s0`MtBEHg)i0I`l90Q) zDr$}bQ<&-zN7A#apLBFVZ2}3cOW_PPQNzvKMJ|zw?Bd{Nna*^!D}So-%a+dakGXP5 zgAZ)!moCV@Lc(Z*l&wd&M)(`ADW()g zs)-C3TDe-1F@DwRBxS+O4huHQs`bz@2)k}%vB@)``f`~I?q_>( zx8MXDkf>YJ5J{65;+b6yq#))aJ+V04&bbLNTt#n+n;XzL9}S5H{mf$}hSJo&4qkTz zU4hvAALW|#g$T~0RJEqujfSx_R^3#P2Y44Q|IY7^a)C~k@+?HqZZ?GB3Qfy`88@;x zk92oRl@h@cFf*Rzmz{JY3PUR8l>IiTR-@T8eOt|yG&Q+^rk3%@`lAjutFl-L45A60 zxCg5cWg~sdfW{g%gb*pXM~*IQZ88?NO3Kf49pq+1>1k(KHb3D0Gf3wsT5EZBQE`Ea zX~^=%#op3fEU7cuo_x(&r5l3bRv&>g2tok|T#Ty8>_#BsIhS(VB+iOZ@kG>0v)$^6 z{{Yx{B8ioMR1Vw%9Vdz=-kl}?E-EqGVQ_nAD1};B)HMbRdI#noevMNn+BPO^OZ6)1 zZa7|?w4%=iHc)16@~5tAk!QixkW8DA|7(a5P^edlUXn@qrvvgMjNmjQ05IvBw zVJQ->TWo`xP575!q`%M&^lXZ~?VFc$$A64h?s&3bbbK>Rrn!TiJl}AucZotjQ4@GK z3=1g>Wh(WueI;ODYEt$2P`S98-sO}Dk6Bl)ph7oKvm@Qo$;r$acWkCPtxU;9zNp>l z@MhNDJH8XBO^B`bn9OE&d(TNe%GU&K=-C=s!G4*v-WtDc)9P%uaz5Dh)O>Wq(x3Jl z@x@P_sEq|&za!Ib#F*`Sa-xtu1Gib7g@oZ{ zU`d#QlvP?^;c3hFd7_6~a3v}>6fk{4TMY6%K2vkiB~3ZhP`edN?F1r_!hROFIh4{6 z$#i`cl@lJuU=}xBqtayFfiTJkMSu4%btH7jXMp=Mg6Y;lLP2({WlMJgnC$X%OV^0sgNS~3 zT|i||e&G@vCQ~KReqy+Vc*k>^q-V~FT#qFZXd_f{)QaMQT3kd#_N9@(NPPLx85voG z5|o7GNpL#&|7QfkTATT5ZIv5l@tX`mcV1yZ^#Wa_cPB)_cg+Z#Eu&cU_)Mv!C#bZD z3sF{F1WrnWen-WP>F0DKYA0?tkhBR`p%*Vzxp~W%D&2)hu_I&3^o;)U7fNPwNfk|c zm=N~lhhBG_zNGD!QWLn2n&fO|_9(mNr(;_aB4zA$*aatk{@vQKLjU zNoqzolZIbcwwYDhR(T;9U$&6C@kpu#FV0t5*BcqxZsM8#-uotG++`JdaTXJwj>%#lpP!=BwLitw3Lyy9%p z(r2y+SZy{oAAvWkXc|UWvbD&p|EaB|L3!pxkj$1F9uXYF7)i>BD^Ck@m;@^mcapwB z|49XOL_*3CAIdO{_+#GLi~P|b7x<&}(QzDU7jKlKvX+jdCO}S$U69z0%oU3Fx>K;i zDyNFDT-ujjSxU}$DuZE*MJXo=^p8#xkZ-q>K68+~7kw_v6Ig13XIT{*mvLd%R1YPD zyonlDS{f8-q1l;Lw@PTah=#l9kzqR*m?JfKS(5U3fPyM6-nVa|Ba=BhQ80m*F4U*_ zsUQKOw5egUJ4=4q=p=7igtm1RvOA~TF}OZ!b`7VaEMaMzBNs!)wpOGpbLboLSVV4T zplTau$Qp9I#icM5qx9Xw$>4t?_n}mOOR||E#Dq zVyGH}J*In!bdrNhvZ5KZh*^9$qAfMjnJ|Q3SQ00nWxKh0t4x}~g77HIKQFF2uFW)zY8`X(klWN=N zbZew|;wZi{7eUgZ#(sf{U6rS?LA?GNKtr1w8?llY+^!5PpeP!3Ge(f|7ZiIe6#S^9 z!`Lc)=&-jUZ#G(;=*d=W>PW-7wG!Arz5=442!TfwdB$0RM+QA_JXB%Z|Dpstt^jCb zmTa#Agi}*Gy>8_xI?7^U#zW>SW)a$ReyG1>*CiJTd&DMtK|^~sXpm~klL*|VKGAuV z`<58fR51flrxC8@mK6j`cWBIeLM0aBp2Da{LrUD#=CDK@Vv zX{H;duZq9pw-WvKN8)x+-WqAYcY@H;5u3vtiYB`XEUB=$y&#OK=J=gZ6tMTAVeMCy za%;%bhn2cSq&UZy>dUti$R+?oN>@>q#q(DK;<^)acH=ga*G$NMmO8l)qc(jidX!iub@vwdYFWxc|GoPyKZMx&}=2b#2j z%Amwdwe^yYnE5k~#GNR6T$y=AdpXiNofL)F$}O>BmKs4p{DG8nqpwk)jZ%gaj)P2aqa3=u*`jdYNd|3HU(E{WTsj@!7kqqfDv zM3O6hZKi>S#WzOUp9HhlwG|P_7ub83TLJT&=eBDIWM`+l%#VxJbpduU=@%-MfJ9W7 z!b@PdNQ8oOwhaE5^bCg(Yl8JVelTW(Hc@E;#k1R^WrU z8Gssl+(hQhMFneajIZVm<%Ip+2U~|1yVHQtf$ysuDy>``gjIcd&96#uEdsn74$2e- zlrbozYqFj0O{H*zQ2Mi)M%SAAdqHohm~#ZvHEw)RJzxh0Si=^~GQzlZ(ahzPE%turUAa4CG~^8B+xD>kOtz=DKYkqozz{fw6~{~>^Vl9^>~_`slEaX*&p!!YBQ z=lOXatIK?u>w~?w^}(?=CmhZ>(2qu?*ErypcikpaN*#@ZnpDwWe%Zlv++7&ze^|8? zHp4*Y5*s3=j5R*;Q>~^wEOfJVXf8SoIX1!Tn6gNVM9sp>N`(4}SU|0r%zO zcM$O_$i2m%;-p*L>a8Ze`K~a*YGOMr*yZaIZJv!A$7FY?s;au4B1ocicmY1Yy58pEm4$U4KpL*t|lNXu0|Z(1pOO1_q7 zO08@*W?K5vz?b8BqVJnT@B&@i6immMTzOS2|D}$G=8wWFD9h*Rb6J~i!O?Sm%7fcZ zFRf!Q#oJO#a0-%d)Z@^XHH|8it-(=}DxlF@H+Q@3V@%vQCGbL4!xOTAuccGL{e&35 zl_C3a3R^Q<&O4*xq3+fZCta2<7^f1HB`!_XMjzq+>4o|9^iDTuu_72fE!{}v6bwkh zSqV;^gQW0YlwtVp`2=$rNxb&k&(Kp+fUI^JJR`(5RZ{QFi5#(8ZPg=Q!eAXcVtuo_ zebfRLpxpNQp%sWUOtqCP?b}(VI8&RyLM;=XQTNT+w?1vWPQXUIdb*R`wjO|t7kTt$ z;Il!owb$}!^*REa;tcrC6L(g&c`Mqc|FCmDjR1j9oj`Z;+zmun@SwYN3e%~R2T|Qa zbrSc{qdO4IXBQcOSul`xGwTYp|hMty@2a^vSa&zQvsr zdv4g7^JvkX3y=M{6*Xb6r^l-P>$V`ogBAbM1{_&-Zn=R6yUy*gcg4Dh0Xy~#+MROd zq&f5TJJ&Z~g)^N(W%^WULAKq!|9@v|ohESG2x(iUOIK`b_UO5$c3=47?6R4$@_d+? zX#S!4HSe#fz5sRdX*YM;LM)-+wz4lj0dFF(E7c@CZ9NO)BQ7=m8tkd2&z@5dI;oP1 z>N=H*$_~4!`a3D24QZ07*jF3 z61BtbqPQfw%_5NsnkmP~G@_2Tjr=lhxRlB>P$cqFgKx0*N|;0?ZkshsSQtp@jlF~{4q4yN=vMvId$tR zLs8WOazd(}R1wM(O@wsB{}rF)@FAEaMG-$mi@Zv|Cr@ouJ0i8qRnQ89#E>u_ab(n1 z8q+NHB=DZ?jw858%#J@qQ$^KPCuQPRJYHKZG{se=+U}&4LLDyMD-)a!RN2slQ?4%U z(o8^Qd-c>#Jwc7`-Pk1SRNsJ`tCQe>KlL|Wk$|kRvdhv7X|`eM^4Bqb_nJ&y5!-!N zV}l%PC|-p{)c3hLITa0KlF{WYewa1Y+#8%(+^E}f%XP{0a$eoMBvv>xiHlCG;bPPD zWI8_+So2W-`gftW_sTXZZ{Jb}T4)V@*z(B*y1F7iS6egouLQsFH<~2o(7#^o!`t`X zf6t1=Ls{PVbJ}A}_Evnc!f;{=X;+)I-WT0)&wQ1~^673>m6F_W#giH=-yw=xQKa{K zo<}WR#NJ-#ako9w=JAFf{&S_#X(37Zk;KZ=ufrS;c?y~d0g

    zwN)^3tof4i+7+A9Xs=|P%2&#u1DOx81!Oew(>~aO8MDN1e7!={)SRcR0G)1Ev}#z3 z{)0aAK@TH%|9Xtxp5vI@kZn}Msv3N7vJ|C(i-}KDl@nh@yqn~#DoZTdz0#+}gAEKT z&%V#y|tjg@wW^o@Ry^u)RFcW7P4R-%i%IE@rNabz;}!8cD(O>4bX3DOK8* z_b}OHtYwb7q$s6xvB$hDU5kuY2SK=;4>e|k8dO;@XHz$#oH2Hi9#iGCRvkt4)?k%~>VYaKz4_!>pJr@gLdL5U;f8UrSPPW zk18gz_`^KB-AJlh?2mwSq(0*j1t{cts#ikx{NYoR zg^}(mqAc%8OO1}Mk*a)TT{FYCO-43h6%DPyLdadwPWZHFgVTi2*;a>QRUQbQC`B97 zv5y&dvWcW+A^Dc#e$Hito7?0jOYB*9k@S~)(KQ=G&sYG4&BsGP?=k6pmRQj!5Iga{4o_I`QE zP!gncB+?dl+}oX~NR_8mQeaQxOkO=7Q=Id;6gaO5*DV^!sH%?Z@gnuqS<=UhMxx;u z14O?zPPBUFZQlA?a_7^EO)i%{Yxu_MEAu_?uZy}ZZ*e^ojwDsd=j^kG?~2`DY02Bw zMV8FgwB@vPlTo$3R@>^N_2L`#N=?{>B@aYM(w!0R0_|J{`C&g21fwm`hY z%`b>CZ&$sY?%8&&V{Egphub5Q9=$W_s@f%=9j98hlC9GaOF=ndtES}hGqyuL{fn!A zbET0IvL}nFAq&5y;Gs#`t7zjeuHuktQ!CAjq(Je#@p6gaF_J7Zrz1HRxClSynl5fp zCAp9@P?;5W>ptT+9Km~>l4v*otC9}8H3O6utFt=}x;U{rDG&)bhu|F1Fd>FOp+9M@ zG+;+FU|@+{7BVZeU-JJA8gSK14}5_!lW zt<16wTQ0ZQqnCofrC27xSP*oQw;!QKmISnkjI5bRG#pGyn>!I zt67g6*}Yi$FB5x8fN{oHv^xBpBwgAQfH5$7JFU=cKvTN4U!#&{tGpl6M4l5joQchw z%)B*ni8@3$Y#PU*L(M1)FPki%!&9!nvA}9VG>8bgFLS4Mf~q4b2x?58^rSudct4F4 zLVvtR7P=tw;w#WxOn(Eb-N31Ztg`mIGWTdP^pmU%LQh~KFFxDL0&1l1e8Ak|ym0eA ze!I?u5ji(>3QYq#rywSfkgVdkIX^qTd%L%XppWyCHVWNImTNd+t0U;LQn8WA_KP-d zTRVxOpx{hE&FjFzbjs;eOAW=Z&AYF2|4}AE$;vn_vJWLu+p?-?GNslaQXaa%h1<5} zVyoiFP;y+6EW8;-Q@zF#l)5Ce+9)s)(ZK>k)kEw{G*r?`3&{ZM4d(F3#K=3v9M61V zi*!hvM0Bkv%*5x?i3x=^Z)B=$Qkwe<)GquFrRh$-DI`EVz1X=PWh*R_`yMXEP}Y=` z1vE0ZELPv_3BMc9h2jupdQ`cZ(bvezSlh~_>Xl2y8kF3$&T6jNvM$LqNvQyow!ER% zjEd+yj9*%d@oNiq>c11i(*AosMM6MH_0NI!FQ%vm@(Hgh~#Nz0c-@Nh1Bh%$hgjipbocQQ8Z!hq6=}rH`}CyWBX=7fL~p zv{6ocm*#BCwIDy0lqZo@CF9fE9JSW?09zi?%7S~X+A2%Cy2G5i(B*90LF?Rs?9C3n zm*|l`Go_5|%C&>?l>bEAks7xqOO@_Y6&1|94SUlL%s|qE8HV$bw8E>1`nKgwBfToU z!=uDVbW2R!!P=FJS$V7k|9w6ODn@)riZM$VM6RKm|D_%Rd1m8bCD>_eH3LM7)W`5Oq9ObHvQmJjZe~zi67uo`l}| z0L^|IBAY~3NWF?P1uo8PQvrP4#w#y{Y%lUF&OC}uer4Qo@z!6i!d zlfA3D$0bIP9b0R~N<8dHj_n|P3}4;oNKeYX^L#XT8>zvmK-Z))+N~f3qM5UhtP7ho zkc>Jd3`1MBRq@Q=T@ofSj#+?#8{NP=3+gz?(x1pY5rLpM6^x0d|{R78p$9o(qXAi+-u);aUyQ@$DD;FG6R*MKndmq zAj(Zi1VTeaL)9j|(-8Di)QCT{v%B{F#!iqpU znw$fQLB4P-T6Wo4<>a{-6C7k{Q!7!IM3X4BXgJxRUPZ0XDXzM8;*x1X_(>r^aUw^- zLN0{fZe_#M|0!gYi>>S+LYNcG#xg&;k2LmD!iJ#leGA>L2CVAsjIP zO-yC0-83*#F0x5kS5BvAmQ{(Eo!uF~)X`MY`v8Oq!sM)^8`N+Js+7!a?6KWM0MpAKmc3PuD2!G-$#&SgWn28EIIK?g1J-KoAMo8Tw2;-zr-rEorLDRMsKLK9X16K%s=Wm%| ze&uq`) z|DIacQwl$!WB)>s9*11uhS>(ENEkfIx#~MQ>n46;~qW@9!x04I>bYoh67G9 z)hE{x6`L}zSzh0KjKvZQ4?9m*w6U|jJ2xA=>r0TZ1e^jAAO{IIGJ1(_)MIh9 z-7n-ppVPCAntn$TVLmrfszzINzAywTK>MLZkamT|O8>@(BoB;_|)f0NV5p(6sm zTi3%=1}nkz+aX21=FVtYjAi;jY+(O1v=d)_PgUgs^?(u^~oOPnQVIQ^sIZp&uuf?#rc)$_epdS&vi%r+n-UY*+v?|d8>|E)D= z0(7J+)&>nE+ugYVcQpp_X*M;`H-^6!vhWXPRBbo*P8FaHZNa#R7+MCbuW^Y2%BW(L zpzz$@mOL>^c4oV=jAXuKNQYc@dBuL=Rk#K?BKikUF>@2CA|<bGmB! zY;Be5MO{kFD_K6AK*o*fsm)D2wdO{rZb0I>45Npb8h*057pFe#%b!fDpOQJ_-Qe9egronaU z>U|BnuBuF;46RPZ%JnSIr(VI1jVo5(+pq@z;mxae??1R5fj(6Gux8uBPX9d(jMy+> zh!_Pryf|^=WR8+4dfaGnvcz;AKTEb;d2?sY7)$&0DmOLVuwZf8|4b|t_D;*0F=M>U zIk4>6fN_Q$&8r4>pihSc0h1AP=yN-P~0(m^Sb^iN2h2?*eHpLtap zMd`^GpJ>&!)*oD^fhJshxMfyRU0_N0oI))z$JB;}0mU9pJ|ZcaZA3olntw&=7^ac_ ziP>Y9ntA2qXaRzD(v8T;N#~97kry9WKkD`)ms$>|n~+U{|90Ma)1`@JhqPhDm!o<8 zlwFx$Ntauti2k=7ScqksCYfgrxS3aJkxCPZrh+Kth*f?_mUC7C8dYJ(y@*_lwti%i zjI5?=R;nuj`{GI{4SQ;YrY3gNl84&1tZlzxiBnA#t%uQ3A~I!_uWE&8E2_#hhib03 zj@zQQCt(Y2LA%n(;#B6k>XL7=5_a92tr;YlLtSmwU!KCjDX4G~Ike|~lCfqcn*G(K z+NYB;=_RuR!}nQfiymrUhRGV35y5Q{1{+ryMOorn5IPtw$K9eDZi5RI7O^~~DQl>U z!@7v;u)5N@>ZvGO8JI(h=~wi6(9XN)uT3!x^U1y8|70}C*wQ3eyuOx&=BVEm^)tA= zp6ZlFN1pkgTmn7%sC6A`WRz4ws~ojD|Hv&XhaThA&~227$LDQ%TV~_LgMt^Fvky~8 zX2bbm99!LO35sW+!ij7*+xAu5tVeZH>2sAM!{nT%0FLSKfujplPo;)B3*_OJVg#I$ z6h}YZk;!q%VJR<{UZ`cWs->+-vfok@YpQ^yP$)?>NVi%Q zz9Uizid9=$usldEl~_@aeEf*}xUwtvr3icpELy!Z$fmFegd^TlotrYqB@9xma2c`W z3du%4*#T@h2BM##IG3r!3z0uHq`(YK z^OxHcX}HKJzCJdGU0Tdlove6}l*BKK>_gr$ZFWo%N~CP9`45iJSi8vC>uiGbTvDhg zN4wRAgaP~)M~pYu9f7if5=5+6|J)ka;_(Qi=9;V@Ke$2$?$Drt8jVa{Iyjxa^pl9Q z>LMFuPrVEUf^#XXs2Izz!_v*94I|x|5JJQFxlEV;d?H?~f*2&4bC)9GSS_21$PThE zj674PZh7Ud$%YYxC(&bYtD4D&wlt&GXjagvw`4FPDQJc9G=Mw=ttLCbUYig03Dm4eYc|K5KudNFgQS4lfs;qGv z+Fr8AJI-s)q(VB5+a7!Yt64p3;NUt*%#j zB_alE2eAyf4w+Kd*bIWlZ?8)dZ?e0>no13K@6i}d-)b$!Ns_a!Jmr35yhCmV?LGKl z$Wn*76JRo}R7AUz@NSq)SV1 zu^z?fn<1;$rJUEkNZr_we}fnoyHz*Tc`%~p?BIAFmdj}j@V(Yc>|2Gf(>?-V34^30 z&gN8;+NHJ%`*%EB|6fTXx79L;C$u9V?#5uUwQ>+4tXkXZ$Q}QX^)pKZRc(dy*A~}` zMSF?I$|@JRAn9Tq4ZRfU8hd@yz2mox!l4$&w9_7~W>Eg3&6;_+*H`o09)pd^NQcR@l=s-p$=Y@2-nDZ`z(m+7bC2@MGlr|=6x_SP ziLhp&W}`PX0>>`5g_crI%(28tab6NvKXz{!&{k}dC9Tng{i3s}9~i;p{alz-;R%ls zIA(ch8gA=s+K)pNdBlnTI7jOE*`D5|Q9?f#a2!Q$@H98Q{eo zwKgmA?d!U@|Ak)KGn)$qXVxmrumaYN_O`pRmJ;vxCJyty+iE_h6FO@f|0?MWKPH4^ z&@U^EFaT3IVVVgvfO-yf@rf%--Urn&8IfdW^n+LUKs4)KA&kpwW|XXZsHy3)rQ&1a zmA92xpWRgKz0>pfn6{+Ys$mluDczKm&sh0UdkNZ&{6nq8&x`P$zOh-t#h+@Vy?Hd7 z(cABxL=b8SLeYpIGzelWN*XamYKVEBXALz~RaIjiYO0x{=Ba9`D%vWFhN`)$sv1+N zqNu9s;P^eyyUzLVdCyuWcUIQU+PQb~NA7)p_vd@<>neo)xt8DpG;|lChx6K=8%E@& z75*Ilu-Z9%H&W=OtL=M@qA$8dOpc^z7pma7Be~}bBK|Qwv&z0pnJ)ua z?91iwVKloBmPyfUbV6`pj7qpc+w>V;4Bf8p(0(!JeMGTG^n>A2`R zI+Vjpzey8v!?O~iKREs>)wgi*v~Xc+nk*lfGiZec#o0C8sGK}7IPyV8Gx zFvO$t*F{*}X|f7%Q>CzkQa~T=ZgL( zsJ87*e=FYGndhguVqlOsZ2GBHX)T(sc14_B<++pdptz1+?M7cJ_O6XSs3hiiE&=GE zILo6kKRs`e^MP%eHN{9tK1HHo4bj7Ki!aCfxig+0j3dX%l`cQW>{BUQKy(&})>Z z0RGoCA56NN%{6h7=GxHe^JeM2-mrv9>*!ECk3bJN^sU$U%vmc5o@;q=j?pevUNur2 z=a17e|H2J6lFH>i^DEm`g7!A_*-5(w=+rd6$fmIuE$3?7%DE3s3P7bk#HGj@TQ>>e z_rBJxlc!b~dupjwRj1!`*SH%)^gK~J!&Qiy!CF&p@sRFXsS`R;!O3l_hynLW!Lho6 zZ?l6^OItIA*D#hD+ACyTxjPSwI^h4H=9I=I*b;=gXjC19vKH&eu&VKSGWNNgKzp(y zc?c*Rg3YCei^2tpZ6juwbmtcfmZ5edc{R&U3RNf4vkhmQX0?s%_JPT3{7kn`@8Vjz zED7cDQMLC;o`Q!pNYTn$hv*Y@Ihs*eai`cSd0M%_{nantkGv}?QSVD`@Bjp*I^Mdg znu!Z*+1_R3nF1HsQYZ!Qi`47r8}Tud-mVfTDH(r0LTX(~ z{lg`+JA9_7F7wqq>MJ1g&xET!A3Ef%YZ82X_6T~>$+kA>(>;Og`MaL+mf6_-96E=q zG2?h$bUu0+VP~~rS=Oin_6#=O7Uy1Dz2UTW4fV#W?tZ_-Gd`gq+nqL$d-H_!v*#I) z`?vjT7Vd26AK!8*+IE31x=4Sdhv_(92{?Ds#BP)%yY}c|b@?;z`mw^f^pBe*B^*Er z`!}ajDSq*46;FaaK+68?A2VM?3+W+g3V-(ugmzz7xvVAT8B zCdjPpAFliNQ$~&c$#Q6C)K9#j8atgWDL3C1YW$+((`D=GYxLTzp;cvlqiZoi;8WP% z&SSJd8aK_v%KtFcM`&_m{CTs!pFM-M#mTF~v6o{;KO5NXxZR>VvyBXbuD{(Nm1erj zf z;rHcZt;IWGt9vPV&)b&1oK}2?=M1v$Q0niIvgZ4wiUw|t@tE?WryCu@nxuZO)%9Q% zi@sIL%XiB+-s9GfWc@Vvxz+2h{QP^_6*sE^3;JKTuMb@qUF!ELAwF^c_BP>&z3vt~ zc3zA}=Qoqo6~ekHVwo1&bOEtkW888AKDi6@v=5PpYw9>N5mTCH*xXgKjlTK*TOfaU zk%+%b(_}#QxJam<6{8j5i`bO4#gt5>!FsSp?Qu-$2SbtXvPB8JTYdt;_cAN$u9fJE z&+k^q&uPkJaGW3X@_2lUem_cS$u4J+>md6vkKC|P^w8H^0_)X+OA>hvFTbqWcC57x zU5?!driyO22hZg4%ZIC{1y_`*NiC~R$q}v2s`r1DsYY%Amvwi=9Tyaxk6z2@zlq0; zJAbqQ83c?dDDQ}W(+O3GUn1sjCbO}IxSnm1{Jq0Bo)e4UcgM0cwl%elJe=h7WWJw_ z%BU@ZJ@%=$e`x0?${^_zYc2a^@We>vzV1JctLKS@5%bosm|b^$^9amqh%jxjxRQUO zAvPvXw;O_s_6k`1NcU3Yq^`7Y%5t_+mLWnFr2_-;;s)rux_~h!>~N9oNYUP&`X6n@ z>tLs<{T~UUVO6coee+irmxX0JD9`Rk-x?Nw+Ty)Acx8KVQL22qeAXTKS)r%4g5B9Y zDyL|5)7!RL(OE~QGQdO6K!*J=`Vvu?nZh*8cm1B!K=n5U2E`{sjgMH{KV1uGPkk5f z^;IMGXK|#5(CmEEp)}ySNz+uzr$woVh23Kz_H*Tp_kU4Xf-nDW`HC6;I`KCD9BzNI zYrMSY&hzd#rF8V8J;)cE{ci^cC)4U*$Y<935ne7~A&Obo>KnG+vAU8!1Y|{t{v25Q zHkEKmYW(Wbpw?FWzwQCfS~0l@6RTCmFSDku4q!Ud~YG_#w(|{PH-ka z-Bos>qnJ*?SM_2^lWBHmkEa_Y{(@`;&78~l9$IS+MBf*A zwz7PwfCKdpbi@tgk*OZEJ{oln?AWSmt)>TJ%mxpwsYX5-{D>`;$-V^cmgt z&v)*{*SH-}+kSnF2yyGubAI;ZM5~C;bIM3c&O*zM$>wvszE;XZsn44`B+bHW4OF27p{m3sC|=*;j{dmi)1#WrS;v=c=ial2J(x~=un_wB>ZF7d^W%uQ zKdMzKP>-K~qTeoa-KN|hs$pcfXO(`dImok1M~UgFI7|S_JYExKSDW@%?hf@aIay-G zFzK-+zkT@>JLiwZfjMsdSEj#1)IY6Xe%O-Lz@;BJ47;xK!7uL8$N=Yh+MsYZzd~Z! zS)$;|)R(h@heQECk(`KgZ5%cBCnL>Wq2!)h)~8}&Z>2Zl#w(2)`*$JmBN^Z9b3Zo| zx8v+qte7u+HTC~xbp9Y|$*SQ9ob=Otsd3pFe#^V9isI60@md+VnAMi;I6S`Fd{Yp* zUpD=X=<^0EvZ$8G==~$l|3m+RF8S#s3l2{=UpFqnNAIk1X%w{3@d;<%DL2*zlsrq~ zVYEu+moMo~7M8R-AO@}CZb+Cmd`;S~(zv$o(47?6>Do^4E*lgr<7D&i<)WQWZ*G^o zy~U>)BEAt?rTh++c2)Rmjq2Lpd%iOgTg5w5OS2_UcfI42n9r78w2<9f(*C;nMml%X ze7;#yF#+?dVq-kR-M)Dt{P)20?8#(t_@j!+R}0E^7T;8_k#cG*t*dQIL*E>|xjOR1 z&iRt@_1Tas{`WsFaAhjDgSB^LSA0O@TDuzrv?k3=>T27W^8aA3t>JRrzts6H z-1#f_NF%?!6apm9o-;GPeDX3?N1>Ph>FS-=@S7+eeIcF^Bdoyive6Tj=yrKsLDMY- zkzX5MN%i@VwoHY2in-hi{KwzJ{gOsS0oq%rI~slm0VH7 z@WMHoZ*Q`3-XCWLaT@Tv3caji;TiXqHh?oUuB($syIR9?HjQm+NAv-k4Q;}W*AV-} zFsy5Wa4xOMT05=9cCrm7t5eztv$RiaT>5)W>@HMvd?5R6)NhaAr^dgxg9mRtquh7kqtGsf{3*FE zbZcP}pA)}YO51%mTX6oQ;%1a!$n_iPSz&8&0rJD&_7r;BVD+~Yvp)QeI;aE+5RH}n z782fj?$`dT7cmtoUL_=zlVA2fTK1pt){oeD7{JM8HIlyz(yxtQDX%C> zJk2vi_7s3;acVw(=xusgZhkoL3C^3ZlS(xBPyv6wB|gv^XGC4lhOU_DK5TJ0V{x)M z{HZ8-uqZkmIrJ#q1J^0@!b2vNEy7fPW<&P#Tt*bLyG?b9mq8(f`|9L-vcE#%rC-2@ z=ET^ds?7^8?k*+j2cLAioIS(;q(h5L3C*%`r6gRC8fpQf;?jvJbbgQgDvBGFCERs9bYC%cMLmeFHus=WZC#EU0c+mL8T?a9Hi{exfd55K$ zQotaruQS?L{=xSuK6`ZY8AcAJTW1`fSJfB2&|=qk5jl<*CqCGXZ_Q!TH9q%N;9;+k zSy)DqF>m%0j%}ZvOuiC>FGRv%)#~@Wl5+<7|2iJ=I>`o3g>pz-vQ}Wqle|S;JuCbp z9-bq(uLvC72+O;Wo#c4;;-vZb$iSD5s)*LS*?ViQb3d{Xq9&!E;?}i#P}BQeQ;`g; z(?Xm?O?PE3x$C}jCol1~M!)N4T)X}9+Zx36>PDxK!EGx)#!gG-?Q`h!JiC(mtXq}2 zVeRsV2Y#+Dwv~P{X+?OJa-!4EoTLe;ikup(Z^w7?>@tt`S;3m@S-aMJr}RMcV6?^j zkz#1Xco8SY%_NQgRn5?$)^;%;W&PJUGmx?U=WFyC%ly}$!i*7I-zUspjdT<*R+oqT zT8JrqAg*L~In5yEgSJ?08DS*M*!uN$Yf*uXXoZxWm$}`p6~W9YfH_@*SHw6uJ1=St zRy%1pJT}RGC1xdzGqT0uEi8BG%%N`mgsoS&Z{6-?em< zK!p77DD#|~KJRTW+cB5p(JE>gdA+0sdSjR{20Y_+qq0!zVz!X0dff|EL(i+1?Xw5I z5Cfvs)`Jo*tgfJ>6SMkPKRVTo^UtQ$alL-)p3m%Xt0Ob3vbu(NCPAA2gLi@A+pqbv z@08{1XEVYi5hgEVpRxV*#eFXiruuu$B+VG~JGJ`*-(Rl^XS(4I2)PS=RJ-vpDEFSl&P%PZQ}@3UUewsq*#@8S=%_qv|rW6T$OkY&?k`eQWb zWuAu)N4T70Qf>5}hXtMQ}Wpqb59^AZUul$_M) z+2wBM_WV8Rje1M6`SEjfk<;z??DCtnJ!Z=RWkE@96;^O#Z&yTe~*WCmNo!Fux=ZamRwB-y@V67nTDYGuf%Dbv86`n$%#^2O$DpTu*M-4?%n;$n{(rl!i+8NRvO6v!nUI6T5~hHLLaQKG3V`+j6~ykM&0AEw**ls=j)RMJZ- zl&l1K8Fa+ixBrG#HMv;lyOU!eIV=6MKk#E@P$>8zA>eBE2K0F3?#ubDe3dU|6;0Q| zN!)`c#?el1B6=^UHFCMz_0!|FpP=6y+lgu}$D=B|QHE`w*v$w*C;P$rd& z%guKS(sQ6!>kSz#Gr{yx&w93?toJ#_RLH%o{f;2iqDfavQ%{7yY^D6#X?b3| zY8jeu2Jzc&+h-9?BgeXRrrOt;K6iV?s z7Dkhag@CK$=&Mq?ugeZm(!b3Ri$J>kasem{dj? zRO2u^q7ABcn8my=+lRZ{+ItuDTg|+9zVRi`u_b-pZIJmVD-*T#dn%RF#N;x^SLGMP zVbwPf=IpUK8OZI-D%m>^56kbjQ53D4FGy}S?zoqYGGjgx{>YB)QWGZ4t}59!Ge_^9 zd&jK=oEq6b!;sDGir@VKHh{_Vgf#{Ii!y%~$|J$z@k*AB$RFZfG>&cddPLn6zB&$P z&e|-%U^wO9@|({7a7;8nC!!(bzipdbcWJkj6wW>{HPD&8%4@e6HNg4+RIel0^;5=N6c9>K`15vB(rhA6BWV@+X^&aH-IhT*2c#v1m- zOq7J&Pr`)P*2Kq|ltmpT?~U|JJ))O186TrLe3te7o{5V*+b?l@sMh@OTNcepNB4Va ztd=Av{F`rQKRJ`zOvTwEN^t5~66Nzz-Ly)8+-csu^u%vMek^Ahi@>mr&7l*)oG4US+9$>3&+K|sqsBhkhj`DfG z1>%^*H?XqU7@|J=a)$!lfr}}g*?zbE*%Za^&tsDhSFQ9cMXf(Gf0%l?>ua+#lOSv2 z>a@vuAw%eF0`6KB(?i|uoLwss)>J{G#H>9WZQAsX@ki)G;c4LNJWATil zJxS{VmreYbN|H%*j?sk;F0PMX$lKzd5NWl&uhv8dg~uOe6Wl&5WSOy;|87|qwhI<@ zQbm#MQ2ZB)FUYt16VC_iTQozq!(MD|$eY<(bdm5cWW z-vjzoI_QqmCvY@n%YwmtzKGZG60AKiCrkmmK_)sp9LG;)nFRS(0&IXV3?a zCXcfiop)VWDy4sKmuv+2u^;Nhc%$*8P4(As0m~(qC)N&+$nmqRwR_kQ>nkgSVj2t0 ziwmtZ{&aJ4F9zL3x+`{tS00$)ko!mq1OkZs0yBaEKmZ1C`T(9D)c-U901(I!_+On2 z|8wUF0OJGb2FwE$0Ev_Hm7Td-ZKEZ^1U+$ixi~*Xima5g^X0brDx1=b!DlJsk6j+! zG<&I|vqUoVOp0(ekvFG!2FLk1YohKXd&dP6O-!{)YU2k6({#|{AEvV|J3FOz)hs;q zQVq&h&?WWcd%c{lQBW}~*1V`&^RD8qmEHwOT@(NFhJi`>;pc-!DfS9??%Xj%2y0Z) z%e>WQMw6CHarH5sj2bhMCQeS0Am+JXAD}w37+3wYA!7`GBO~7 z#K$&f&gdIdUPT2V;I$>!^%HMnB_&$BvxaIMgMu8g^Fty{B_nepR7}lf41}W|6ssUa z+s*984a{sVY{57T2M6U}Qfukp$uI;3l6If%78TxVZ#w zO*kl_+4{Rt{X`hFX@Z0cC83F1E%X6`$L>~Dlv`?K6FsoExFV-9)MKW{gB%K{CAhil z5MY=Dmk}$&Vksg9L-QiCIaSb6{6w?fI5v_}M6U}86FRmP*E{Cm7D_C}xp>6DEqdvt zThI8BL`p@dS%t&U)RaQhOYv|k# zAqmYEN|T+4A=-ozlbV8)Xu%W9qwRid7!ovarw&C5opYn)bZ)u$&`^h?1z~}3pU+jS z2uwtUjf4bB6ag0%MIjJygy`uLB_RPvAW)*Ba8U$GN(v(-rF44DKu!QBEO25=Szj!K zN6LZLQvNa#Dn=?MwpI+@;a8Mhc*QCF{Pw|Sd{yE%VO$hkZE@v^Srsiy(0!!X;8D$+ zd#WLu3&YtpukNF^|0)TDg$+Uuul$(1C3ACo%GTZc!sgAvz0y>0$klOlAv zqw)PCpQ}65`s0i9HxD_S!((QJpcr)gpELmAN=xPmgb zBYvy$c+MM^Ff%L*dO4{=Tpa2c6hBC|v<%`sdk541*3DA5T>0IlAm6unWUfiE6;jaT zbe_)fOvtzfxFC8^*!k|pYIcWSZ6LoU zgu$yW{e=>$F}XMqb?`gQAlM!gBQH28Bbm%3J$xq|pQyHh#91Ktrpn#- zv@@dnizgVE#Ag63)n{&H;`#XF%BXw_?bQ-GM~!b^u}GfQ=wt?G8Xj?4fg^(eV1e-X zx1{{}kPN5(Ww8~9Al_fK(Z@cXCh#F+S_bZCah!=&K1YLp=o@YwaS}p)b*ng}PkG(i zc5u+ta$-zCzg%}zs}Jnu!ELSi=fE`@>_DEl`a*hUh3oQk_mP{hDRN&==%0#%zL10A z1c+oxIsFGBi7QE|s5GsY=dL7`)7mY!vtyecwLtqpj7Kz4oQ*B(cg?>79xj@oqt_vwi0Pb+|V8BO}$i zq>4D9@mgF8gZ<{+c<#kL%v0Bg+52eJmRE zJj39|;H3TnHq`VwkAq(`SMK)IVs0lXA#x0C6ku^|2U)M{l^C zX1sPZzQ!1MFQ@6+L)X6}$Rqw3Mvh(@!>$N}bRRPi(-Q5Wf#=lA)Dn|HCKybtaHddJ zfvWXMxFdHKzLs9@uxoLm7$7Jz&`k_2Njg)Y#bwi{|09L=`Xn&k&i0%(m`}@)go)wi z%>?qPP9?Du%eZqpvpF6l;!;HXQI-A~{7o!z6ql3PmfjKu@-Hv=P1`W3D{_eLs0ZN{`LoP*efiH`a1~TSiB@Je3GHR)oM^Ds(wDP` zRLQ<1jWUPzGFF`MHq<@Z{s{gTSQ3FJ2y0yia;9UGZ(y`Q;@D_@rX@z%%}8qfQ7U;ULCxRbyK(PHF*EQ2G&7*GcB=0;S_2t zyAnPg85xX7+K6Tf-;Mh^>h7`R001xJ0q{ToQz(Q0H%2luT9ifq;0K&zHBFF$7$&Y! zR@|~JQHxQ1Oa^5XeG(>_T?fPjgK3Kyp5$S{i7Mw~mgxCwQgvOSF@{`Xe zc$_4mOz+-U$Gpv&#{-a9s=(1+G|>>tkg2MLaM=a%Kzt!ey#UDU#OIr3CbvHKTTASB zTzK&V4=jiDI@+E*2D>K|?@O^f0Y;4((vnXe4Sy;LZ-Jj;Qt z)>(UE0-IS&oANWY0EVV}uR}GNpWBvmNV@bP8j-PV=!&`cThRguP+(N^lB4KJd7hdP zy-$RFb)aRIRci;*t;s!ruUK;dy3HjDH~<*%b1`fkE%7QIeXlNH6+~Y2U;Jd6)-WD0 zX(yEjl0A4`%U0PNSok%OS83Uu*C$%BSvo4yef}y#EZt$S}crozj>o~z6Mj)Eb z2!#TrzyNSx0zUxTO9dHvO3C1n@6va)jukRBFNL*o_5^5i^JTQaT#x`Qemuwp3HHgB zfBWh)L)z+=AMCn~tl~PJ8|~9)|E{u0_475HH$4stF5R{L$iSO57ITSBdRUfnzMzde zvTLLAP5$L*=+T4(M)eZ24Kxm7<`T#2BMRDwJmnrs{diL;24LS2aU#TD9>6!EzO!L+ z*%AU^KJSBPh_%M6SW)9IP2xEOciSLiIkA5)E@KY?L7^eqwo5orp!Go}OF$+-aN>q4 zk6ttum_%n}4Gg!Q3{M%vsVhO7^=vzpLZT$VDi@%tPp)vU*#Pq$e!sdM&=1n{Laoja z2&Gv2q9de6IgJI?W<(vToN7cV_B1NUdXtNBqD z;ar(nN@-B$AUYeG4h-*QqX3vJ2vEy5K3s)KFB2#U$)J$Q#_R(6!VQF%0ez9`EFP#n zv$Gj_Kr4cTV<`VIm4WRD#MG-yLNfAaGQoBsY)IF_lT3U>D`yHXcOC(AvdhQQZv z5Fp+Ha^D4xCBDFkS0QqJYzqZ9!S^_LX zxMMN_@c=Ni1?58EOwR<#LF{j1S=>+X_B|_*^i0j4nbI(5>a!m*0ySW5qEJdJL1>M! z56z-$15Bm{_=a&lyC#%{1@v|@d9`TQ)}%Q}at-YWe z7sTId-EYP@1_cHK0D_qTDM(aMCJRc7Q-Elhxi5fy1z-xyuMs<2v7hNkWgHGtJ|J5Z z?K(kP08wQuMOc=UOwK^^rG$LA4U*+Hl~K2b>2T7Ny9IJHD-0HB{=^K`jRsx|G?Wu( z%IuZ6=u(o3XQ6*#_B(lO4g&zefH1e801t1YSD}W(b-CHQoVEwK2fv^wJSYLcq&jW9kbD;{~QmfK)X`HvQfIBlp z!CaQ#S~X51(s^Y>zCiGAEYr6<$8UK+Hzdfh+kjdltY&sUsvCNd4m838(y$EZ7KZ3! zP6Qn&e1Zpj3ywO$GZ4IieC@h7-ZJ3vEUAGkxh*XE=YuV?3&#iQbLmDmyQ9vF19`~} zpQ_|S@D1ZAhEFg}3Kug29xMU?&E)XD(ARS=3sl33(e)V~bk{438%36h9bh@n;TclN zEU9!OFn~p(x?w`cFdr+I?7~@y1#ccSP7XkrGl6!jnvV@sSd>H@zDESh-wC4MB#EJT z7+J1l;|V~STTqj}3zm^qIV)WyZnKwEIKgbDs*oEI`9>jQNMD;}qdh3PSkH?kv!TWA zoFGTPXt_a#`4pE#wA_;#-gg8U?J{uKd2nVX=fwnuU><-P_55hfC1z8x)oN(Mfyae& zfcCb>)N`F2TKWsenDckUKucmwTzr+uoO;(7Q`RqJodFX9!9^3zKh2bF?YTz3Gjh@| zT%bQugWiv^@29_d|Z2PmV2ah3UB8Nat3edaR8mgt0VuA&EQLhMKL1JYL9CQXItb$uFn0*3Z zj%CDU0tH1v9xih!<~-ZJ*mrOPJ-5f1EHD1g)rFDk#k)ObrU`(0FZkCL07?VIj_eh1 z0j$_FsAECqSdd_l3xA}`j49{$UCuXJeHt2lf2k~8djd>`Jy;Fa;mH^5yPV1s{Q{Z5 zN^FlNe9+8+r>L9-v?u5V?f>|dL82Fto(WW@13q57TQC8!*#+aUgMQD3&Mpb3-4$_O z7!WwUl*~A@Gl3?%U?U34FH=sN-d+lv7Gub()Xx29R~8P``cejJISHiQfAugHKAh!1 zI9t~wXUFThnT_Gr%w8BSP4$CrNiX=Eu4#GiM~>WO>+1(`(?H4vTitc=*M1HoH-LO+ zRqwPFzmBHJUeLKpDZk`V^}4@t=%!Z6rCMK%X(Q#M2J|!Ab>M#!z5f^7_dkHb z|DRz`LE$+-DPS0=4M$a&}~K(#^y6A+grg`2O!-}DE)d(N1U$JQ`V=IH2{a7nnQ z%3-gY?Q&44mX?-Y)<8~9UiU*Vk`&sKBPiqEByC=?oW(aXlthZi8;=mEs>;_!B7Zi+ zL@)E-i{TcRll4=8kGR3(MBzo{>_P#s(p=8?L^ekU*g_+xlzFtdE z6^D}ZI)8yAPqYXQ4)yi*C6kR+yi(1=V5zCpii$`(eYl>Jg{rECwgGXg1{M{dp+$)- zeVk9aGtklq*&GBH-Bue(hbu&llAK_u^O`Xfn1T-cJOX(+xl9EPwFDoAPEz}Lk1Sab(cS<%?i&QLenYMloy91o*WPZ^v?Lg4JY3&QU-(&kxI z<7ztt7wdB%l-nAjX?9V zqZ(pp8%jDcb}oJde0NOUW+#tb;D*0mT@X6KMcb*haqt0ZHk|E7We#=xgQ@ZSjADJ4ARfTxu3-w61> z$>6^+wo^EG3JN7eQKC}+#SkS>{|6K{e|!;kuqDvGZY)elJZAdepwMrD)>`>01F4+? zH)yLG&PJOzIH*myUcAZiO)|1@SNK`n@xsUH>zs(!_wli;LZtS($x33jodtg@(y#KvK=a_*a1q)Za$@TA=U0(hN6jF${uwCj~>(wJHJd&F;A~Q(CXrS5tf#T~Y{{;#e z0?u;zUkpENC{QIg2Wcv0p5wPg4wlki7bsp?9PJXde*AY!MpC;fedYQ$!FOMv5?9vW zwYa}7ea`Kr6~4XTDFEsU^8577>IoA6v~zET=J|9hk#8WGp#lE8DPPb?h+QP>%BQjC z7w3xA2E$K~(VyExKV6f>?2h$3|NT?sgZ#I5#-lvk)Ae6Z9LEy@M*t>t+09Pn)pU`c zCElfe|JXO^vCyH}F)RCIZxGj?y>*)i2Az$iMC86DlHj0O>*|M|ou)$G$8Rj(!Ez{z zxH>S#fN!jo*q8|6FnEVlJd>mcv6Hvm@)E*B1eoxPaa|h#wozHlv9Nm2ZM|a{KCW3Q zL|zR27D@&%n{~Rc75el;ctX@CLpbeG&>$zFcbH6Oo`b6T^-|8yHJl+`T`R_japlZ@ zxFmEEknC;6pni?_-Iae-~Gidz^y5e+aqc$9me-PCWh{?(6caSgW|d_SXD z;0d)KD#Ye8ZpA)%9o6vca74f^VBQ=A3K_7A2MdJ)IW=r!tQ(pq^v)C*cXe%Q13?A7 zgSF5uhA&Q23DQkA9Fr?!JP6_pWi$H}BDi zd*7Z(yuyTNDNXb9Xy1;wH>C@Dd@pId)rb1uu*wY(C#4iIHt z=1w+NM=AvF9D5x^BD&AqQkop#*QB*(;ITHlCc^GYB4B9q+1mn|F}-9USfF?Z%;rpM z`3>WREK%YAj$EV93|&95F6E=&1)f39F=X(_Q+u}#1vIdbo}_TOOU?%a&_P~&czI^m z=dUX|jJE=*LIDhnyrbW!Zsmz==@VcqHX3(ZJ&A`#j%M5H<@Dm70Yhn8%`@L1)`3V( zJ+$zNRyinQ4!FSjsE?z20{ySW8FD7N+3Vv=mh+*}4EuW-UA(*TcsPmeL}nt9ZI_Bz z*S;@&xWsYTiWJ74ses*X%Rm`wv0Kvskm5}6#&DT%LP767yf@}Hqyn^XuR_pNG~-g} z-kES8!uByTc7Jb)-Mg-IyQpOdS6byCv&+ENPVUxh)Z)0IO1rcOVBm$U2qzp=qI3xv zTAgnY700QX$3w+BQYilPY`cp`yPOhO;5CN5IXtM3*~(Z!?6B7zlw%6Ey35T4=mjuL zwPcq@2P3NvtOEY^LCM^DK0fDMOAq?8-C5&wQf6L3oC~?a2LKQjES_uhEypE8B!npw ze-5-KaL))WA!5!OPAKen2<7o|5OB2v$28lUPK)j!hrsa669C()3&RN;h#{qy<2jWL z0mYO@J1u8D>|G5wq-(L$u}NGJt`!fN0+XYE(z#!|}1~qjVr+pD)px#*FKXErxi;@FXp9 z)P9cBnF*$u_hwHNRkO?Qy1Zl(B{N(M*8-l~9pp>5Vt|wT_*hkw%(RaMTvMWRt)CCO z>hU(Gap_qznH4CGcU+8^05GfW)}4*$WrCxriJWs^*yv@Z-7=QQ-@C7Ht0EbrQ|`ir z*X+I3q%%7F4ia6bp6>{n6~3OW&j}+lAO`-pA~eWU5FH7X>y2ho_F?dqlfHXt z)g5{}Qy-V}dLa@Z;>);&%{N=MqVcoV+m z^`aK$=ktB4Y}oyake|jEo^B8B+#J61q>}3q^29%TBFoEmdBnUBVoZzXeMSdgJnHp* zU=YBzUpTNd{GMnMpn6@V@XKxYN0D)1rol+cao8cuL*UO16RqsBR4WciU*NfxSDSXGt= zP6;iAMyjG=d2ZN_26$eW4VE8Pm!v^Z;+IA6=lMXh!fjmONTd>+jOABSf~X*oBrKi; z$CHS}o(OC(UX>O#5lRSk!yBqgARE)kMG?pvFSH;6siKbcvcjj3kT@y+j)qWmQKY&o z5{rhZV3B-CWYwud3&+Z$k!~tVr-H=CMu`MLyJ@Hz!qF*Ybb=o8Glh&qV!a@6B_yOQ z9Ik}M8lsRSc%YYy2385{rH-)j=IYKK&#G)Xhet(Fe8D zKt4UeM_q}4K}$#>%RIj{7^+qO<$YFR>t~oQ@1H3WGPLJM=VAP6cpQgwCleY>a?4 zq&r9NM+7oBwEMX6%6+0v`5v!~^whuf-O=VMRmSM)RQzqzOA|M}VQquTLO8incaE6&3I zs6HvjqJ#TIHS(3D=QQ@0)0MivG+#fq6tr%#jZI;{Y(51nSa~Ojgj*n zHpX4yZ+We0RpAyX&YC<{sm}Ft6{#4}*ywb>E!v8y)wWNrY4QQBGE?tg_DrU=rgE~W zri!mcrWt{yI!n_y26(|w<0Z`8QI_|!DZ?>prSK2cGdtDpN8IOocDyxQ&Yz3DYGbZm zs}gVyN**xv3*$b#i)Sq-ybNtD$gZmh5E4Y~>Mnntz&l<$>&LnjU+70- zs9nkRPSfAyU*(FvH5upZ@D!jd@vf1%dnV85=p$*tSh&Lbo%`&9l=Edyjsdbx@ZhFv zQ1dqL-3zTd++2nd(Z^qEVQvq|`2Wi&oc}DYg-(w|yQpU>no3wzLsH(lO5TA}OzI^f z31<_jAc~UpTa{3^@Gg9&cfHCzy;cN+*K>$d@hFfDTlFfPk@0<@pjYf#v4o2lHKR5; z#pLK2>-gSlvC0}S@=G+Z^>wZPsh7TB6%dIOk<-&dN%##Y>ewkH?0Q6n3ro6^YL4u> z|LDYQU<_l_?TXzV{XyvmNb6I~9N@UbC0y`;gw=p)@i$Q{HMD&}#d}CX%_X#HPV=&r zU(=RPNF#x$Vme! zO=U_5Vq{H=SNZ@3M)NBw5S4(yvPMU!R8fAoOHq}A-<*55QN0p2pk$)q1UoiWV%7*&1Zz!cyDG>vGc6yztSRbEowDAT+ z3S&{V%dZlNO`?a7mXZB-NqGZ-Gjvf2WDK>1NYxv32Io+!Rgd}Iva=e{Q0l28&q)5pVJxpbWRTIKkYi5z2U(<2Vwnx{`ca# z;G6UFTR-;S{H_f|^xQi7EDk5$tr)oRyJ0Jv*6fbE`5hEYLdY`4V62TL$(DV~G8jVAV60ij zke!B*7($XtHI^hHTZL3aQpy)?THW)#uIt>t-#_x9ki-)_h`W9f*R03?%g!>_h{o(jI}=D%jUAZ-M3ej{PVwAc_IH?VnV~~ z^(G$c*Jh#|03M#Z$6RxCs+{vC4$~F%8iC4)V?3zO2I6<|&GAhPK#$Ud?@vlcjZN zi}{Bq@BTGdT{nL&pm*lI6&zYLl~H5W=qa7-0CI%~!d1R`8mmRhj7eu?T4rCgz7eP&2moeo7i z8UBWoPR2VWw+I5L6mfHT13H(4I5J5Ws1d)&IA)>==bDQNtg{*Wk0tb{0<`Q1=?A9q z;`UO-j~Iixo-Q3g3CYFD2MEB@4j67dcb<1<_EGECO-yEe`T=rVsSkt*4Mmx92~edh z{_bZdoJ@A-R?@av_C>GM zQU0Nzj40$@s5a;gh$#TH?VQ@VCrK!f#XgEDRd?|~mhCz3AbyTwQ zG}X|#1$mm9Iw2Sxyfik(M4uWIFcQ|>6^`WzLw!7sp^4+k$?EFzG+MS363b4&wle~p zY)Cv6(~ywmz3$>VRYwFoQ@qO>MG10?V@zItW;}yC+YEdz#=HvavMxhTH6H zi~^FxOCU9Aef8nBktCk3?}{O5E08g2_^#&F^<*p!J;D>(T}d#WGPS{wD+`$AxdA+Z z{GqwIfsAWs)BQ~B6tLv-c4mkPjKb?3CBs5o;iJ`gA!t}gIJ#CFr>~EurJ-rzOD*kO zjwE?ijojYc?Brt9UQRDhBKbM!5KVY$_h0?q6^|t2vE>drJW1YAp54&ZT%Ft7)!yOb z9uR~nF&NA zm=hk$t3#Jp)4PW9c;=?PAe@B6^4M9*WRKj&daB_{Gs~Nku?@KaPFR?CkY@uOMsgsH ztkY3yNS-0M-Q?ES9MIC$VIxY`!NWVMJ9xT2Ev3Ux&90P=;2EsE+;Th~i`U21lI_}S znGA1qUS@W6Q$SEk`H0#`dvkVoE?W(WOv=pe>gmweBxlo^?cE&>-q^?7O- z9TqDOg+cR(QBc4r$j#H%{5P-VSp*(Qcp{zW23V{TUi)iqE`!Gz9&j)i9M4JQ=H|86 zm+%nuUwG+!Tqbt#XoA4L6#tuWZxaUm?T>U7@p{v!1M;Zf-=DlTP2NMKJU-&IGFYtS z%o=+qa>_Pw*GD^GWc!j)mhQhzp4U|#ra|O;zLbhJ^%YxLiFz4)c{7%LzaNcmqkHtuz9jQ%-${F(}?se$Smg z(%bQR5K)fy=9GHhja+&*Rf8+bxgGhNq#gKZy3w}jQcmu$6;tOZbMK?qM0H`;M)elL ze>15V6>)9n-qU+m<&N~d>Q=F#EiS(@nZ4%q(A!HiapzIz#MO~AmGP95VCu(-U zu-5PA_BKppvKc1#^Ny;#-p79sczXBI=i!vdG$HZZFO|H`Z&ruBq|=?x8!LAJG|OvN z#8Ztz;avW5>tUZ`-|}Y0^{?3X79W|5TbZzwU2~Zb(Et6$!C)oBtym6_u;go`wiZAK zDKG~M6As0E5#gVfx#^Sl{LszXOoYvq8e50PAyG@aiPdpCVGWBCC*(P$7x{~CLmCa= z=bUh{yHtT*E3=O4nI#K6T9NkN$Ro+R5H4a=C=EZr??MyyuZkGGWl)X@{H9VI+~0n5 z4l&5aw1m`W>LrC-X0$)xW_-a~&NZgLcP?nEj%+z_s@yN^iO=4o(uBS!Y%AB~!jyku zD}r05e45ie{PROwhxT@ur=l)}0Nz~;@;EsZ6F1X&FYZB+RhxVutL7s~z0Gv`Rp{gm zu%e60biL3Y?(4HJM_y+{? zKl_CLp+fiHBH+LI=Kssv{uf!~0V;qj6s9^u3zrgK!b-7YxZI!cEU!qvTJCnQ+2eL^ zK+nAvsvk~;2b!zKwsaJ_J_dP8NioXmijG!F`XRH;d3c%%szV~p zU5(0*8K&N|4mhZMif8D1Jv&U1N<5b3+92BXNPQ>Sni!WG$8*U@1#bfH7UzSNnj|8L zgwamsaj>Voo7YtDguw+lbjPUau<&@KLPCL|OLR;e2AhpR6AmJ^P#8>7JWWq6ASxz2 z*R{LLM2E-Fn8-YB(#fkA@R<)-tg)UR!KDq$3vcp=m^7dgm+Mr5HOzkXkzu+ zkR|=x7Kd2W(aq!mdUqNWJ32xcb;FS?@hKsTT?BS`GF3+!TTfi|PD!A7BK+_$37e7T z+I2G7=%XE{C8fj1s98sWHa(qeBZT0QGYvs#p%A3e$vi&Z&c@j|B)7B=*+|eBcG;OJ zAs=!%I}6F9A(NxELlW3kS_+cKZeB@k!nJq8E~LvXq`HNsJjUU0y1iw16u-MSf(Zq9Vy%D$Vm|O&|cO-8FF|vjrGyHsLlDr>B=7C#> z7l5fH^O7(;5?}6`$EK~96WKPJuwlDZqz+j^XoR=Wi5=E4L1c&E%e!baGMdAySOzH& zKDgl+I^{I_VmYOo(}W8W!ZIiy*$bX?3rL>ipy@0+5siElpe7C@HcsRYvgGtgb2%AT zUd!odE~!_8)r;cV5j2`)ct{M@hUiJnP6$h(@WvB(JmS%W2OvvJ5)UyvHu0dtLktfz z|2i06Nsx!3fBAy2w6y#G$nxjTyMJoA>3iQkwSF&LHp|$BqZZ4aC=!!@ZM}S~vh}Ku z@e8fMDRXS#Cd%@K;X=9sZ8H?T{#IEPH$4`DNhcTm5UZ6=2u%LF@3NS;<2jFeec29#-0KCRW^hX0>12`onnf>6q8Xxp?cK zu`83Gj%xDR<_@h#z4ko+x17`Im+|VJs@E$6Yu^X9q?};m>CX?-1uj6PWvije*DlBi zNrT3+bGB+N^FC|ypNMK4Zvyp?uJ=D{8o}ffZ#S>y+$_aZMs5GPRCu z{9HIan3Gi`C4!1%ZP=$S1)|JEL?urHiYd7 zP{9rjnjD`TtTFvUCU8Y8VX042e)$~Ym-fU1&DFKP0L`SO|6C?Ye+eIkMDP*V7CDNK zVtpmrZ&B=l_kRphU`XgddM09oYR0!a`BiNH$-L-clfS>I4~2~Bba7*$Stilg4$*H0 z6>;-@ZnZb^dE(UG?&p5~Wi#$eQ;ZRnXpF-~6GT^jJ52_f^c6plf#uJq@?~z(#Y}{Z zD5-E9fV~JkjvERLJrncYOt{7kkb3&73nlgJaS8YUH0If$V_AI5K31(BVUj^a8^jo zeS&k{6Qgs#?q<9W8xtvg{jHffQMJLK0_UrLumKEqs=buK(MaOveRDnf2(SMy! z20zVUNjvWX8ctuscuo1>m(wLI;mY#j<_UwV9j1aASf~F?&;EBE;y*a^ER4fDsuk3# ztKIMA>1ZERIZ8C7(I}mLCsMB!UQ0Zz=k4u5P(x0H-N`hu>+!li+C%Fwvy#Upl(Fhk zGLy4BPShviDh&~?-Y$6E*~%iH1TWYMrXJ zwF8`-Toly)4a70ZXiGZ_7K5gzr>lTgj*q8x5qZ51=$MG8{TRuvjy9gS{+CPboXB{F zEC$W%L#5^sN;p*-g8A&s-A+@(OM23a)LVThF$;s8F zhuDk9l6ve`HTB^wwd+tEbrdm%fKdq!lEefi9!cf24^?wGnwFe_FkDAR11F3$REo=v zN3J65BxR*1iS*lQIyR&9A=*cTEMbV=Jx1e7;*ycF(0IhihxqkcA}7Fgk#~d>Nxb_` znPhl^ewYi7LIr8r1Z`M6V^Q0IjKW|g97asABWc9N(cy-67lNifIg>%hCCpNj6WS5< zZW=8fK|@GO2WXPpMRg>xgs$ci-X97=2&-*`XQa?&6{LOq$YdD4fwr3M_VGhJH36yb z<3}gEaB6F*0Sfw~3yTwWy+pDnURG!HV=@n+L{}HG0+N^@4OPRgyWu1q$n^`Jy~81C z;fp4gt2p=wG1H}~0f)pw$vBEnd^*u*+}kBaN)6Zy%ZM?!{v(Nas#SAusOGz zdwC2|Q24jZ@NWu+!pUMJWqG4%D9MvqZp85~c zl;V)jZe^M09#D1qU@bU3Y719Ao4sY=RCq~Jqx{f15Zp7CH~rP`@!Gp93c@H7xoqvg zQL(BlAJ69n52g=FTI4))BW^WM$RhTOl zp>oV!q;RX+DG{$k;0e;0cM)nrc+1P4=S59Mj$3-6&l&w8-NjSF>E zkY`;j#7eu1ip~3+E%5@?eHK+7p;z^`%=l!5AP-Eun9DnffNFhV10>yX&-n%U zrPJwP@2$f%Qm!FD{=libjs$*iADtksJ=gRGf&lCw4@cd5pmfZrU*wOaY>eC_@FHxt zPE0%=y+ss_2x>yxF~FRPq!=&|42+w5mMKg8jn9A;J}Z9sC}1ddCDI8wAvaZUIuRn1 zGTXFBGmM7bOp<;R<{n-cCHSVW;%!~sQ@`bXBzSGax4tjF1c!&8=LDjqBz+)?=^APj za~tW^vQvLSy^fT7CVwg755-RrwjaoTr_couyTahCzXQAur2V9X0mx>S>E3dk*eM?y z^=J4@e#5O)7?fWKlbt4DNEPvcKFVa`nYmO3EMVP-EIrUKF+oD^OlC;g&55T~*JY$_ zWE-t^4wOr;9{jJy&;K?81piyB4*_5REN}-PE2s4q3V+%r>k5u&rEMQjmE=Ei=knRJ z3D+)PJXz8G@KIltH(trMttrV&pIWF^IUknS?rWjZ+SQzEa=65Sh-SP~_Pv0q*|t8S zLsTIugDPayNWi56}N*Nw1=^nN!mYVhyN`jTTlev)vi&I;F zSy9o#F7|TODOdC%t$V!Tw-bRtlGPm?a+j>)V=hxee*R3B8Rh*MIkx!$6v7>qpJ zY{+O1b5gRU!<6=wBwFXO^33%QT^f9N@i?l5SAHyIjkcU61*f1qBT-nAdgEH@#Rg34 zPlAe)vJL{*`iosxsDD@^jC@QjAxf8CRB(Gl!8hC9%U`X2N?TR=Ois>~vt{?Xi+R)B zk(xBJmARs#mX<1lQ=g!S)ylkd>9{4@S6@Asn1^zm^^50(;mDqTObkkidU?o{?CPLO zmPH}e8-I{Z4{4$a+6f$LOP`t|N=-!xgViiZaZyO&5XjaTq!va2g;9_^q^F~;rK)FW z%JYvV1PjeWI%*gVeSH`0rZ1Y>IHIW$(S&3}!;au4dGXyxPO}Z1mQ957yq>f}fX)69 z8(hLjAJ$Nhz;l8^HUW|&g!afeA=;`PZAqwpDXHNjq5Y$4{YO_$H;sv!@Otnga{)%H^+^nb7Qc>V@#e~%uJfK!NNv9 z(1mE&Zq9mTZ^&(ezT_HrEd`5ZU?sUrW4wFS2-&MR%35SIzUSk=O#y}^o?hXhk>{-c z!+HH%DdH)c|HLHEh4B=O3DHPX6HO$NczT8B#fU^ZUS!P^M!ZPye;1MdkE7iG(V=OT z^^uraVkO~i&Dyc6v`ds|94*%J?+LIjemh!)jTo5y(S@0)(K!LSs5N-)w(*C*kvl zm;ceB$v^*K#VX5Xc`$RIk~gQ^MRPb`#pVy>f4<3AZHfdvh`Ti5l^Jl;R^XXdgfn)d2C;!ZB zvvN!M{3m$nEb!HdgK@t;omonIsyy;4h0hhLm_~#4`Xq=r1=pSbph{lKK&QD~V(c2s z`6en4XT9-NV4aXw|B4M>$=6?NUMVmN8k#Va`RmU*>TMo$f_Rl!v8-M$-agEEb9&QynZI)SNJ#hG)Ax_!4 zp{r)}WMJ3$sCfX(`jri<1b3qnQ$MLE+g7f&+`u_%IWezxB_e(_lC?Ry(q6yCS;aL! zZu#QS9bt0kS})+dho+rVQ!B3KpV71U`YpBAj+}h-X7f_JQh8A@UootfYOm_Y9Cgtud844^Vz5|xkB5+{d!eH zqP8Sa!o!aL?9g19J0|(bOdsnGdt-;Nz zeVhMm<1*TN7xSW2e<}rRxqtmKdm`%3SBddJ`F`(HxI0|GjXOu0Z4bYUc$G2p>fBrN z9+waOH@*MHPFyK7LU*kMdjwl|U6=d&b1dwj{i`yqA1~E?+x(yZam{Sol+QVT#ouX7 zZ9kz+gle~SbY^AkVaHF^N%!4-)qgn{6g`X~rksrGJ$ZeO9 z;ES;?Z`2y~KS9oG#06VFUK(pu_#N_SS}j4ll)QcZSoprJmge?>#=?lpB}ZI?RA8;7yEyj#TZGwwbz+CT>Txb0)7%YL37`_v?7Gvzg?z%`L3w4 zz_}d#ccg|LW#Q5ru&ZP%o9Ud8C;*!-WjD(&_UD|I!@ID+LG3FR#mF$fu{UxH_nJrh zA8i)a#46s&bT?&@E;JHtOP;;CIFl5keyaS-d#CqL@5hRMJ#EpZ;`FJ}1$8K{>X`l8 zwyht|Etc@iB#zqs0(T3|@z9n~@W#vAflSpMRd!EK>-$i0~B<@1IcgVL2x^g6#KyMJjZ^*cSLuB%nC{o5ln?t=Ey(pc*3 zz`>h7a$RrukDNh^U*U`H@dR(`-O%xjsKTE0`tU~6Z&+DA=85G(5g+R$GLDn{&i2%Y zmob3CNv~gSLdPwpB2U>Sy_rYwJ^w0`&s3LDr`^DK=DqB6k^Jiah}P1Wvie>8qx9yf z&JfGzw;xx34GVia)ZI|^EOvnL_%h=`Lc@98gp6mhG9R7De)sd+626Dwa}$HQ{)z8; zP?NOX?-%~&jbO*{#<~C&aHx=?t616Cj1chv1cQf%`FZ#kP#bD5}yqt%yJv!5U?>GL)|Rt+3| zMAb1|Y|pb?k^3HaB~YD1E7|)R2~wQcey>-}O_Ni1cqad(_HR!~+n0F1&hgK+zkVx4 z=*i0$m)TXwjbkb_Bd!*nYcx=qxbW%pso)>BSL}cLNG9VMQmx5`t%azAts@VW2;12< zm!dMHangOSe6y27{65-Tx4u&8?tJ1(Lg7^@nYZxd8KWzYyC9sZ@y=FHQ@Lx!7beca zT5a3!U08@@tR5D8yA3u8si#`-U;Nwq$}{m=@;{*1zWu+pb6P!8HV49QE*HP>o_)bs zFfF|MG58wu*V=dP!d;f7^8Mgzdfv*7`!-+Xs+*m1TD(HP?jrCM35Fyi1?ann-#i*= zSJo#AN{sv!pyJcctkUcnKQ8ZeYvT%~5Wc*jZLZQcK5}EG+}pcy2j6{7ayb7<^>;u) z(sKFB$k&mR*Oni|wZtC38hG9|?R;ay`6o{PTW~%L0LTXb9Xf7t#=`PaQ$o#&^ZGP; z#vmBd0X_-<>l2_;D4om7K_fSr0+1-sLwHcI zwpcnGptS`$-2sZ*GuK>aWy9Ef`|*HcWa_9k)QG^R<-?mch6==D=#x3_lw5Z>D3hZ1 znJfBd(vriXC_mHwhvLjhOP(n8s_}F9hb#J+h&Ezp@27yI)^s`F^c-lgfZ}W|LQZM6 zL`Hn5Wd`~qHFT2_vNtI<)2v}Yj@p6q8FzqRG5M15g2!0_AA{AaW{=$~K32tMc#JRt zcSRLK_+;q7>$>??17NvH5l;f>I$r3Ig%-?T-@_RcMg@oi1n65h&=-ORG#xHe6xtMl z{d!~v5A_K0oz6xBEd9RdIkf3xEd5e=i@t&g&}TbPRWl(H5`>}ykZxHfOmH#N_x+pW zOM5Y}OI(mP0DP1SM6m%{f@yqPFzgTBkTt&rogdEx&$y+>?0_%;$O+!m%~R~rUePcB zAYLC-!#b5dm>Z#Nq5uUFko@A4PMi>^9g^<=oL`-io{qQXjUY=Q1;je|O##rc0nzjh zh&dIg$_7Q#aa&x`OeCKeQXp@hUv&#??V4}nFHy*5tsY3;q5JkpyAIFlzI9IbaED46s1O${#-$lo#;;}Jn!mvXlj)TQ*kyEPd|4*;A+=nug17kUh&3v8qXU;o z0l|?#4#6uyONgl!0c6?AQZzXo38y!r&cuwEnBpB& zrN)fvWfBWb01K&Vtx58c=zIt9U`=@Kc{q4=j-nSE($=i}w7d$!1h`QEN^s@#nP&6S z64n^4kN8|Toll+)tlJVR#$R~w9pagoW$xsU+pe$sCTiC6Q3phdASgyC=Z(R(3PK|vmB%cVn|5eHlhpe|>*u?P_Lh~u-dZRH zL?vhBKkY?-gac9&foCSu^9PQQrvsiepg(i@MTP3ubUHDA zomhD%1o$oIQUzZ7OVgE?pD%$bIitCxo~*;eCBfVNEn`mAqcK;nlUcmsdj`EkLs<-` z3glY?R!}pT9ra2~!8`h?A6V(Z+5olD`V;#J(T7x4gQNIDOOGe!yf0VY*n*HIFK!MP zHGauPu8Mx)LXXk`O3hwdTz(i8=o6NcX&Lnyo)b>syMYIoQgZ^73W4-WUs-`d!vJ+| zPVPLvFQ8&4E$Mt#n60juwQHx)w?Ia)`}w`53zoXdpW%Q=!RBHr`R1FDv;KJhfeZKD zK(a>#rEjGzO^cajnkgn~5*3vf%NYndKo=m;kVBLSqUKyF2<;M8XSN)~1EcAd%LcVV zk^$yKmDMvw@AT_$4&eTD@K@(vvUSy3`0D!is@vnAH|ZCQwReN!4(nGo3&b=7b6b1A zlB3iKfSgvK3`Ni&0c;Zjic8@4Yz7`8@N3fRWDP-@OQM^%>lJ(iaTGoos@NJ<3_J;{ z*#Jee>X#Pky$%DCI(k{Q0_y{!*II#aWF{H_a%K05<3WYDaRecVBp$T-4hLZZAG89G zFV*TCf)W7$2_%1Jvj#W2(r3>mXFnxJ0-Be|6zE@Xrn7UDnF5s2<}>tr{k=^j5L6ux z5o0$!_#m3j<>%_(J52%6k*N`H?$=B$_tkkxu84j`cVRf}jhl{62t$>T|kyaH*;m;itfvU0iyHU;~9W0QC?$ z3Cy0XwjJb$Ob$(*$xft}g|rC85ClVILD4?YD_6%Cl7S4FA@Wjb6ul{mE*i7N@9UHE zRa;EG1A6LbIr^RG-(OeqRLgH{fg4w^{HOw5lJ=>oApTY7J5@P8Uk%EaE`OibG|v$d z^8rWuR32bf#wP+}n3doy!2{&pU`d(U;Ec=EfJ)s$ z-tGkhQTRH$(h8UI+M`^)gH({_r56}j*D^OuByj2$R;KD6I zLKxu8ZnG^NB*DB~x24hjxV~bt@(+FPFA|amfS}>P=q|zSB{2y7mOLDIg)8uvE5IJR z_IKeTZaMWR91<@g3_$`2lK=-w@g{*!6$uL7g4wN|V*?u30W(p6nV7u}{(^<6JejUy zLX{JJB2Q+*mm-|mqx=1A{};q_qm5|=jmFYm17*Oy#2?@ZkdC*G%Khw0(eZNayP#mh zr4@}S;8sVP>e5DaWq4wlg2qI_sAw_w`uk6lSPxL8boqt%lTpa>()FzOCs}?JgK5>m z`Nw=7fLX)sFguSF7`sJjE*&r28i=o*!NsI6y(nS=N<5#^HbgbJ7j>E7ZK}}yPojlv z!DOnCsLv&n-*cv0@#2HSVK1M#-+Mdcdv<>g7Ra7Q1Ni^o1#h(hMBu=}jz_VRz{6aD zKk9(2Eug{@=nuUuh%4|AE@b*5UqcWQ0svi%0Mt~WZ)t$e?v3L_k>Igbk;0XBGj4tC zn9d*kf;0Yw`Dalr0PuSbG&%Rso$kKDY6%xMZ-5Sv0}ygB9ECFZIK85(x9d;g1;qzN zHGhLJHB<6=-8OQ7YG`AEb$K!6)qQW^mK;|Z-v7xfWrx#*z6pV)0Np2ZPKJS_J4I8H zfMUp*-(FNrTNR+_>pKel#q`dno>K=1{g3W-h9jS>r$8*JucD}sZ;x}X{FsXF$o-6* z&aVLNXP5hoE_=6pQcT`N)eb(H6)UC82T#_^_&=1Pf;CzWMGuez{Wq-cwp8Hrub1~Y zFlV-CfsRZ7itzLy6>Eea4Oj<#DAwCx3Y<9#R^5{l60tDC6}|PW{cL#cK>9EJ*m`C4 zN$^YjTA=2|kXq~y>z&xd}?H5-)}JCl7#nF;V*;?rdU zv!nQE^5FPQQOMS{LwInOO#aSNhZsTd)8gejy}28dSKwo>HmI<-e>$Z!J{Gh8nc8_3 zb*ssy^ivcQWJLj85$x2KKW96}`(;7)BfEeVl>1Vf1@ryt0O+8JU?%gENma!^eM<-6 zZ{9~%y0a&R4XQrdFXJDJ{&tvFUg|ircS}H#P$jhm5QFFKc~4n!-vuhEnEHT9lIP`* zOZ?>8nbql?UA1kx3VC4#H4}c&)e^D+hW}HKUfNR35k9lCx*Y=K09@A!hXN-WPR^{^R~y7_uFlWAJH|H45LI@c zU3YA-KHv3AB@BQ~P_^#z|6U-Fu6mv@wDK83U~>Oq;gs$I^R&-{;U1+-Sk z)0A8r!Ze;0%%{Y;yb7{WoAjew10HG76*Uu9vRTb7*&<&wdzZ4M)Y4!IxpOiBf*YEY ze*P9rqA%27p@VJ8-@sl?)h#$l%oSL_td*fltY9=G{(S#V656rr136Gok%d09=&Pc( zf{STuD8jcm)y7f$g877n>J^Lk=1%&hs~S>?#PJS0>)KQ_ek4P)5oZPvBvF>c5KFtj z!zF8v(xt)s$>@f?#JM6XN0c=ySh*2(k>+Hhe&dUi-QlM+XNOaMxuV*Vvi4IJZJ<11 zBz$Ba@KCl#YU(xFUNgA+N#6{ZiH`5Ptll&>upn>E8mnbsyt`VA)m)}SWT8dx91Nm; z2s!<`Zo%CsLH3w-vy*IogEFNY)IIf6)v0#IkT`Vz-A^D@{u&+Hil)rcNx*|2Mp9k1 z-F-6(teQ~(i6P67nHto*&l2z#KP3cCvV8-5ApC74Qo{FTU3(heb&q%QggM1yby6k8 z=6BC5hCVUeP3HWQDgj94+(?nI`4LncvnkP|_Wb0sg_uS%fLwdEc`NNGCi)>+3GBli z#E0+tj_j#EO22YP{x#*0XwlC^Ga-X-lPD#A{a60^aS3Ef!I32oYW`Of*N~}$(!Z9Z z6$PTNJhm#e4BZ4uJ#|v3vX>QZ1Q`}YYT z@dO4^Xp5V%qo>VP+Oc#VSu7blSJLQk`sSbb#n|WP&b&$tZm9(-D8daBK?#1jVmcIs z3>Y5DS8EO0wSf_d20^S1E5BfcUVzU9rd7Rd2mqzFaT-2Up*&P`sf@2K$3Umt?9y~g zHRp>s8^xO)HjO3jjIl2$op5{p*K+63h2~}ajYqB^NeW#H;V-{e&M4|BV@iapi}$=| z?RCH$dpbn8@K|AM(~i>m3&$G{?gKxO4WCrrD}Rg*Z>GpOb%1=0(}-JFx#GC3!Gons z0(ATVIdAyTLH!nV=V3&s=SqQfhay00Bwfkk_JiuL79prQ*#Ng~5TTnONY!sFK?lGcnLv;bg_zeD>UeE%KDMVs zIe|MF?E4cS@-x2Z49-l%S%0u{L8nl2JOYW@B1#k#!6BBRe7Ft}M1Sip4H+)N&~~Bu zq~oLbpiXyJ0=3Tlu=U}0E-(7&(rh=NoUs}#BI?OK(Bmw={54&~7M}{4*rR9bclb-Z zxHI3LbOQi$;Zxc|@`5co38XBSmkU#}rZy+Braj8^I(q{$f( zFRa;|5QrhLqMO3yH+M!44#bp6d?7$Q*g#@WY|&luNWL<7zf1_FA2Vw1E0tZe--bG^ z2=e1|!J5q*1!TFyd;s+Z;)M=9nGzH;M!FB!_S6u*{KpjB7N3^oG-*}(ftFpoA#gyo z2y`{#iI<@VI$U8mQ>wb8QLvsQSHKjEjdnb(qLB)Hr#O71VJS_hbKK_Y()5wJIu1Ok z=-D%ZRl#z$h+Q+m{WEi>TGWS6`mS!M+* z9(|Fd`~^|gr0ZDF_K_*Sw${+xm?P$EIx={oot{eSH;?nq=63muvI9cG0Q8`M17R{9_5f!vbpV<(&`AO&RI zwXfTb?kB&1HoD7)BPji1YujSi-tL0p-3s?zie0UW*z3I(#U4sqQhI2I4Qq(FQ24B2 zxb9vP!EjE^K1P}b?1|e2`R>l2eFaam?z?OmHL1R@9U5fNOcXu4s5MOJnhKm+N|ZS% zDTW#2gH*Gvj~VWSgvWcf-pgPm)mD=yAO?z5V zccBwfYJA$q?ca)jsd^Ea@hi;jq5HGzqCtm>uae>cZv+&V2ypmPraVNBpRX54uAig` zatU*X<`$0{y`#_nP7=ju(}hP>LC9X9NF)K^x4x9dYPN%FFY)%uaRnIsHVWIuQ7KKc zX{e7}ktA(8q$xjLJUmzeLdb{21JVsYA+`F)!K@(l808bKou7b z&|4H?`M#PKJ3cm%^VQd`X9D#@6(!wck~NXK-7RrZmG3<>+&te%7yUTx{y5#wD=Af% z^dvW?TA%dn`14Q>u$vAJ!R~Q^$y#8chk%}q$W*E1^S@z)1c_p|RM~>_0QeYP zEE)Uvvltv~$WeOwM_(L*?#Qso#wb_WT1(FQWQ1iMGu+6A2yw*zfWKte{&52W^UnW< zju9F)67K(V8ZRWc3^eXFeGLZk7I#{llr>*Zm1hEk=->+9mN@R^1Ct=(ZZ2?ARP8oF z*a##{x^CespwtBrg{4ZBmm4h+L?NA@@VxC90I@!c$ITw)7FWe2#X4OmLQmYRY6yX_4C^M;UKyL*KhLFH@(}B{eVx0sfY|9rq z^MW*81)eH40%9<0_FDUuzCQ+G91T&oIQ^X!_94LUpYNIgfUhsm*S8LXlJ7yebZcy? z5svVhw|55*QSbq7Y^3A3fIT0?ns6$C({oo*3|vt&w?R7gn?wmP_7G-{mkaPY0ffqd zj*5VNOKD?2+dc{yJfuvSBSS*{M{)GEy=QHW|>W9 zMYFQbH$&ykfXYaq$}W(JFDpXknC%WfI@DpdD?Ojn6f*?N(!OG7-;@|kl@f1o$xD{`B+ zEH^gd5}?DW=-Nd? z49o2<<+m*tX4lV=f0LBUzCKC{h4Q%p#O5#wy+9NkCWdbxLn#&+X@jrY3?4dQuAUE5 z6#3(phol1!tQW4N4WE8wH@aX}I3^R4JU;hhzeSf?FU`s4i$}*ulbYfP(hEDgG?uc>6H;X^`_71R*gnq3Yuk&?9LOwC&>^D}#gUU$oED8+ zNCk}m?coy!eQo3c8`*Qk6A;7aB&UtEf@fUx-F>&;cs7s*CP%|5dM-|1tDQJ#k^4AD z&++44@{Uc}AZ_}h^PL(_GI?}BDe%35ER(8zbj-q3vhsPUr?M2(QTpDz_L z>Fg9RIX1?M9G`fscFd|y;_y?u7m~A)UM?@#EEV5_whVJ7cH-(Ai)p-QE9dD4+{D<3 zlcq&ej11E#V^~Gxw#HQ)XSEuztWAqRJs-jC8nKz96MI+Fh;=VW@5XEfJ8|HmxijSi z1$~qfIko63!Bm3x-@+$3N#9GoiY{8J1^PNDc#B=O} z&!`QuQnydMMGzX@l+xvM-@5NI6oF=Qi|*)IL;H5)f`w#Jk@=HboVzUOLNm8Cs&O#p z;#1K3iRY^_Rz>45V|OEY=EQ=P+6x`8b4s59Tl+mD3A;(;tP6_nb`x2gS*68fLNYZS4QI#l<;WK=A<2XFd z{oOh5^{;J$po=wa#U&$!1PMV3JG&^GWzUdcetZs&JJ8!UQ(Jj0q{KECdjGpQV zyENC!A`8Ir@fRPSO&cFDyIVSqe0`Og->>Q^;)PZ~cuWAFSQ4>yGyMh++NQ=wZy$eQ zCeKuvrTn1HD4jl$6DJw! zpIU!l*+V|JvoB#zGBVLEUKX9N30K`t>b~AP?BKoIozEEQ;A?k$(YW;TlS|wUgrkhZ z%kX*?d*>HEb7Rco_re=c3M*&FM~3nz(HGxGiw5XxEDsZk?0dtDUnfY~YaU;&nsc%u;ap}3_iEWt2&$cBqegwq+ z$v~>2riL^1?c=Mr?LN_JOrA|!r99DZ;yB2=nLcRK)0=LoH{4l#{9AeM{5W}Z*++A& zYoTrQ69Qpy!^>6vX|!&^CVKXz$lOlylRXVr@3EHUq@J~a5B?y7*`mK(9exLvID}r@6l}Klq^2A=`{&)axBAqz2k~#s*fXBvUrMbv9T+02!Mb9hUMt!K z9&^!7Rkg>fL?7ih`H*H#)Q=w>da$T+ZZ1Xl$@V@E%?odb<&SInKY2bjc|p{=<#fa2 z<4g8K)8h@EGdHHjj5VDOP1v7v>*4q2d|3znc$Zq^JT5Ye$n<%~5H(R)NHGp8e&zQk zW5BfSDf^zUq?;4UE$TWuFFj0^ zAM8Gzh%4Z%ca~hnJXZz54e??pivC7x+JXS+VBw;bvyI zvYK=H-P1~~Z#RcdSWV5)W*i898(I#t?|V)U9;dMH*>^WaJ_bcS-kI4}4%w}dJ5o?{ zcPQJXG3cA!bJ#b}0K@mA6H$M@1**JyAkiMW(jA3rUkVzgob?Oo9CviyAGi|kw6y7? z>%F04vN9!VU2VN~yLR%a_ogz-X}W#6bX{)c7yTv)m4noF=LFZ{0a3$N_#tOj!4Ab{k7=;%XP2C$2Ct`ga`Iv?PJcv61OoY z(6J(3qR0yxUQSKNyHifyYO+TJ&Ha7qp)o#Ze$VEvC8k~PE!D(MUsU<_-=NwX_Tw)< z#EZX}Yw~z}n}XEal(eJ{-iWe$627GH$?o1e!@g5_Pp3cvh;Ow^N6Nx*?VKY8L1U5; z`-qrF-(pVf#c|O&=K%_BQg2M;7nbg_?ze}|^}jc7n|mUKu+IGGq5u2?M9Ni(pL*KYj43aZcaCT!)SUZ#qtxwe($aaWwd?VTyKxTB zpRM^n^woG3>|qr-?iH)N_wMvFw-*g3`kNLd)x& z6EstHoweD23wz=uOhZu6|KkvBi=+qkblu1r&BJ$R`yuN1W&S{Vfu z-oLxEc8}ffq~F+=J?;V9)q2aN_4JLmcN!i-!+vljnj}=3ulJsRemui=Gvxj4L)-VB zo_8(fMYUA&j|NA7j2JyWVHDG578$>#fgov4BSJR#mA)Cf&Hyq*ncV)g2)7dkW*p(W6CNjhq4Mka{c2}Mv zL-G$Ig1v^D1q)^jE(7-$9&5?}BUd^5F_B=PLDjd`vQO+&BwJ}%WCjfpgCv+*f_n*YfLYW!&~)CA~NfM5=&}hOvaBV~|1}>lXWUgN8Q`hG;YR zfBKnh#6Q*Va8{|nDwHO0##n8{F=cy|^0P#CY^2<{m-IP_tuMSZO(sCcHHFPXpe$ap zZ_GLVT8VQ_W-Te?&c+Oky-cjy9Q*u4j8w5SQCZBJH=kRnx-?bm=*p`sNrq)m;IqIY@(ce+Gbb!nbgnGSEV+&izYnU3!|Z^U!mOVTa8%~C8-^6=J< zR~E0wFuEeoCQ|TKkx!Rk<^CmYsmd?JiJAVdV`(atzldW))x&b3UFGV5UxrmjLqeHV zk~>1P)!z?EXO-HzXnkut1~hA{%NSU9tA|Ir(rZUJ_9&~{z+@S(%cO*735NvN+SbvF zg4Lb=5CvWuYBmlx2Cw&vX{Tj5b5vLT5Pp~~*s zfv+qNe5XjB+J5hwU#_YBudj*id-*e#hcXLygnMNcfk+!FRq;QpQu=>0ZN*yt`@H5; zYb{SEOkCb2e_aod8JyN0v*_I;d}_N$pZj*9E4Q}xvADKI^7lKxsfduh#gC^6-6F)v z5jwx>nt(m26-jGR-;ue#4+<;))$F#LKFaBBZ|EB;nh2fsc&d2kTf+1GTDI|mFt4{AKD+1=}W_L?KAv(86Z zyX@+^t0w@>}hIM-)+C0ct~=5g~!GwYvC zzx9c>+RyWP=7j9q%byulLO~+#VYTLjivqFj#x&;-G5LSi+6b;;PwrDaSi174DQufv!8VOIRKe6^VVP&9j2X%D;CQQO;S z6xOf#^$&mXVk`}LK9!wM>-Sx$taROy)-JcJXNs?j#ZDhit+DOP`6zzWN=xM4WP{`bTc#|Eiwyj|rBpIT^E{IK)?KXzBq^{b2 zybxkEucc}47`Z7{LC}TU&4*bZKeOaXzTFrY-S+H z0RObVewNU}InC7Fobs|s%5KrHQYq)NiR$-s-iqhe7DW6nd#LDxPd{83oA z<^F6=duCg!@9L+I_Juq(f3&L$vY0kUq!F;U-hU{391y@p+th`=x6D6KJh1ir>=RAZ z@~cmQRf_JfmbfY8Zgc!_lj`2?|M$D0Ys9Ss`B-`F%f}XD#>2u+?cg6vN=FmRD~{Fm zZ&KddStfqWjo=Smn{q#S6A+SB4E-ZEGMw=K&b^2}->Z!B>uV)S-VKXC)Y^XJZ=d}_ zeEnH`OR}Y2*cdLA)|TgS`o66H zk=N>|x3#DGO^^O9vA;W}s-`70@#!yOq?6j|?-njQwA?Rfzh`Rr+|<&3|4F>k40CfU zXqaON&933RdeH4@uX0j%IUlC$JH@tt-f&Kqh&1UgHQ01#`m9FHi!``CTHh00{glRf zDMM+qHTTqnZOc~90i>EIMx)CN>T z>l7=c)t-r&3Vw!q4?#;aW z!dd^bN1}!)!waR==`{+riWHwXP4I_7=Ebs{tyT7Q`?=0xxdi6Ph8_#<;Ww=?{ffU7 z;tsj%LlGLgl?^OAC0crdGr-tx3te_9d&Qi(YC4M;<_jph^__=*fjz5H_eEGb z`gaa){2gZ&sv+xbw6PPL9K+|{LP;3Qc47K+KAHpaq2480v0HRe{%P;#SFYSYD%DtD zayggJbN|Sk{5H<*0@z20)XF_r`uI)ajT8G9$(#DOj(99Q+}G?KPj^-#8|}z~tfHgoI|!WmeH;57 zlfNI*i%oOI#IK1ot(W~JZz7NtuzwkP^J1TumLy?1iEFAwWteDY%56AL*j#EVoVqXh zlKSSR*i%nu+bQ%F1E+a9$t&I;ap;T#dopiJj)&$lUtf@3 zJnbgTZXa4?!q`IH%g601EWW-9h%8oxQ!4jBYA*+Q6cGYz&pPc`YN@vru2-{q$lCrB zW!|qHyhaUJvi)N{tR(H0*A#2tpb9}_Li6SQk~d<4GebJ8j4Wx4|5B7YAj&Nh4`L`u zZKh)jCu4gcElZmRqI7z#pLL~5Hb7KKMJ{&?a%@lNbq*%K!Lm)gS(>KZm^SFK@G{ND zFVsF+G;PL`ua?#OUr0HWH}#TbY4Pbxrr%sZ1$=*%(jX8N_E{@o!oPJw^*A=xY?^8_ zntq8$t}>t^leIjZ^?jP6?im@CraC9?3PU+Hn7;EKjRldiVW22*MzDqJLwB{+uN&io zPs)JnyUY|$xRdZ3Y1)-WPz)Ikpw#hxYGC4TZL8|{M!61yI96jw!>QyFX>kA(5v0M! zGW^E#j?fpEi_Z(@)a+V#5o0~mX?lYb=1ZmuUwhZTOI%~$HroV0N+!F0{D7UQD!R0* zRMhejY2#U+<5m%JUcI9a8Ce&h5lU+ms2kZ0nrDwN9wOCLhr40uH+LIOeJIy3Hw5}g zctHY}9{)tCeBzBu8~Xt_3}uxdRSQ6JsRr*D*k=f5Yr zI+r@1e3PV92Y7KbXbfl6mA7v41gYCz8|e^PA(2z$dT^=htKemZWk*H|3?VX_1UJA^ z2%uyDxQe`9G8~#Z|>lE{^N$vEcf2y1RePJ-S@Lt>-`wH?<~ipr;Dx9 zuKuQ(p`#J{UV?3)GM=!tf1W2Uy4_?yMfPe19^@vl`s8i}&BHC*lnJ2)e$n57d;(J@ z`b_G`>w%s6^@z||Ft#4?ObuR+qhYEeTiX7QT!==tLBMsb1y2W>QZ#S68+Ikuc%l2rx52-6E)d#fGL!jn2m)s~sB+2w*^( z#B>UEl}s@E8bseKx^KB&d0lji!(@_g!El%6$B70K0Wc=@GxluXb+8}!2imOBMPdNd zp|D`U6RMlozTz@@JRSxNN0t8($0HD*vsjCc-j)^z^`>0~}tbS_d!Dl1Uzpqxy{GoAR z&i*Qx6ZpdnQCWb%tmEC-ubJ`hE1_pwX=?Bv(d(*W0vgf}4ks!tQQLl112bVr{u|sp z+RFudhD29>RG{$}bRZ4E^?Ss$orfbqQKFIxID9~JT;LTxou;GQ+QXP; zzeaB^dpd8NOU~cGl_STfZ8COwiQ)G90GMf|6oZnSbQjBOcM4X~3+fu(?bV$PYWFMN znhHtQS?QasNvdTzl9PjM8rK8EvgQpznHIHfK)_2cDl+9Yxw>BW zaq|VKmMfSsT#bDVfFJh%pcvp^!vSmqI-Y8jnf+wAL$Di8&oYKg04l&V0Iaw02TrPB zQwJL~NFRtbHV}bLfUN`56eeRR-U1JWpm0PAH-NK)NSgBV&b@C)HIq^8so{G?VkcxO zGmcM-cqVkSX6^MzjI%$f?Yd=s@-o~|8_{DmsA+oTcJQ6vwB)TZ@`?;)v4&t2-B?2K?s}}J9rA|7gCcIP=6zYyZ&V;fB{vnU=9e*|2_mc2cW&0 zR4!v*UtW(GsSg&$KsIqLeWIX1fbngce`N~L4bIvD!C4J6^WH~^v2Jd3Ejk1C9Y(1B3rM9Q@@t=NXSC_*qRk-4)9*jUBsXH^AN)-<)c=J2*2R*p@zw6lY?NY{66&k=X>jX^fgLC zkTQpeidyRnsUz<4Bls4b^4%-qepTD*pVG~w1;?e6D~opu_|~^(UO8>q;))J)_F8{G zj!#K~kDF`jG&n+V2s{Yph9Oh9adIV?OLMYeaU}HqKq-fza zfRq;KqOE#NG3@6l331z zA#nr9=s*la3=|m9-KJ134`imp&=52@P_fs|2l6@`1KR+JK91w^f`pt1REeYLaOh2d z(+wO_b#@A%8Mv>{fuI)yF0a`NfVaRiCachdBxns=C6duw|n6ot^+dTA@xqu+@z zp53UqDgC69u~D>K`NyaKZYbucstk2&-8h}^Q1}@dE>pcQ>7)AjQQWHl8ZE9DES(UmE#p}1^_rK>DR2lQ zSCt=kN%&q!PiqLLp#7)OaP!|F47B ziTetHP{%KyJlOvJfdW7@k*nV^`KS~wxH{wd=j4NJIL}t6txfi(UGLxJ0oSnxXPf_y zavAuanK;;01QwijKb4bkY~{J}M@u+D;!an@Cu&Oaw+;4vFZc4lzPGM+ZB0K&4}Hi; zFzMD~X1P~?cKWR^<5&L3w7jGhp=;~SLC<{i8yzjh! z_K!U({O6bP0{O=r4MqNP4b<^02{Vkw#87Dm zI=zBRAnM|vba*FtD$9e!6b?EsG`Kt5YXeWd9z6=KF)Z9**Ko*G152-u&Ei-*&OJG< z?jZn7S=e&*d?R`1HzJa_Ahns)I5juI17ko{m(S!E*ACS6TyuG}Zx?m)4jNXU|8uG6nNg-y*6;f4tKtmqZ9zk^}&famob20foXjNW96@L{bo)0AAxN{1&++ zdw7dP5Iln18IypXBBE7cs6s|K)4gx}RrllA8b49+6sA6ZWX8*#1e2)J0>l^!H?p!2 z_P$S`qarkesd7F4V)W~q_PT`^R(0t`C7MCq{)$7GoBD#r@u`yvvqIgkUr*$}+rQgC z!ar?g{YPE4X@T6;kT4@f;U_uk_n@dlyZ;`A0(P}Hw7zTWkyPMdW^4ZOf`Kag$&$I_ z^OLh(=Jl+3Zcm@;%Y}6#?=qPqBJAG!#vqjXt@|7hp{DRJoQa#sIr}Ohb8^m=0O#jQ zjUd-n7^Y``6jaHMAzqwIQjSH-wQv6XnTFtSt`ycdLW84W>xVk-RCEXC%?h^#0<=W* z+YlT|op4ydJVXrGfQ)IBz?DL2}KNkWg>^vb$N?Gjsq>1#zHJ~CJDt}Ex`LEo9i zIW=kdj01FsMTmvlYQ_sm+|9-|Pe0P72s{TU1+7PULpC2SAc9E?gUoW{#lquCmY4(_x3fyJ! zi7sw8stt!(2RrBF<>I~s-ivSh5ZLA#kqkz3vMv@IjbQPIRk=&NV- zP39^`Z8HjCP;|yQ3p#Z-bV+*lG+nZEekqZ#J%UeIia#a4mEq2$)_7ptT)b^90An2E z_mMBHpDuo+!%4)Q#vRzrs3{N1VV>{4cvVqZA15PX^MOL7ZNQHH%kQee8e@4-dy*V0||Y_qaN{f{8=h;Lu+hA+J|!4=?{t+-VY{X`x>5{FvCQ5H9v ztAgiZ1)ps&hZU930+Likm;L0@66Lb&+DTXR3OGo7<~+|PHH=OZfROJb{wQSOLJCl! z4z1J>z+p5~8k+9db^$@6MN?%W!0y*tG|pC40ZPXpkXZE#L?fj}E*hek6gbv2DN`BE zO=T989PJ4tYTg3frVRvv(9!Ws9cYsfE&&@5&rBoxZ4)0>Zn~#_n&TgKpC>kQ+0Tp@ z&dG{Nc>ZL4k^NR~5+#<>Xs}JHCq2}qmL9Sn+Dyjj)43`#(&!)U;;Q1gDl4eVo&u$b95Fas$HqLz83_JIFs94ZA3l3C({TwDA!KAF-Jf)II|* zK;fbTMZZ=1FEcbD**oGk5FDAnvKm?_-gwRaJTG#P%B z&C(stah(icL?KW*G__cgIu(ssB5NiW?N@28K>N4tj|L{J%6GYn$r2e_pLg*RW28Jn znFRmKOPH?A%MJc+JtVkDGO-iqf^d{&qN6dCJQ1P4yX|p{(!||4SyFx8BYiSK@w5n;>$5AwaQ}!SxOp^@DjaH~^^cuESJ1b-T!^Vy?j#K80~QC;K_gn92aE0%4v}>c;{*I$e~3BXeyBGG zjbh)vRRM*vpK$z#N@Ifj+PU3%JCOYTros=~Pgril2;Ff7zE>Oy+EeA%t`O6sJ-7go z{MJuOIVb=`X3QgiSyXV_^wi6(x^mRnps?xugyr$RrONFphL6AeKV;X}7$Uy)*YUT} zJ${3Me0g`TMn?8&aR@SbvU5zk#iY2?c2xYLcr+<0YfSdya>w!UpO+2gM{23x;DeNr znQGS`3?fP|d*C>7J2dUGIwu^1g7(7@FMFUHaNa|>P(SR_)r4h$T`n4Q0|hzaB2_7+ z`9>7OaFJf=Z@{^^NWNWn!?CQ0O?EgJsTpc17)^2xgkaOT$(?}!BK!slH2IZ;3ALe6 zhdFge_@XEcqv@a^N(4ycYboq5KxqeXV7QQK{@`&O>R*P21W=30wic3p=nxB zOOzVB0D zq6^PzjM|N37%+;-x+PGi{kH$<1sC1&2Cw0CZWs68wyj$nrA{e9q8I(b>q+b!{i@t` zA?s=!uD3bVowI~Kv*(ue(S5Gt0Co4paBqTGZkGqFt7TQ~@>luT9_xolHPV7^B$ZEL z@nf4FhTH2qX2HUcFV#~u?)$ z(>%s(Lr1vJeG)zo80im)e=O}YDdRK{lw_FV^4Tme9}}z7F<5gE+tp6J{s(XsQN?Am zCn_3KNeWFbS#V#UP|z3jmV)tLP%{Y*u=C6d9UNZHOeXv}B5^HqLFkjrwlFtk4fXV=qXpp})9^&=xw? z9K0>1&R20OwFF0*N;xk~yM>AlF2Q=efV=b7PK_7V(Iiqm_v1@q(rx8vY*)z<6KX2; zy1nTZQc^~h4u#F#`a*TJBWpb@k)I~RPjboY-lG34ZsN5tPb%9dY0E2##m{0s_uOvJ zCj3&cUD9$idvf%nyl>Wmh!h>VvoN%OvA&&npmfrN!w}%CHFPrd(DZLdhE6N3f?UEZSW@T(!aPLg z{WtKfo5Ejqf3-@@-1rgVs-E;^iiGdu{xklRmUIYTw2|r`BXxEy)YXS-qq|zN6|G-` zf0c>&h!@IUD3D9z(}KXaHu|9K>f z_ReP$`8>xzZyewA2%c4Io2H09Iu0cGj1S~Z36bo}jW*(&x7fZU^_Xqya9{8qa5=|M zm&njYyqOdml)u^B$aKvK`d*m`$D75rY38MRRp^V7)N%~^xh+Z=Cb?bRe%_b2ldd%HeyMd?v$qALtd8DY-B_=crCF9#Twk_4qv_x~*iSOQ@5{rP{i9x zb}-`C)h<&X<8QJ)WG%~rC}zHi;6wi)SB1dEl%$Ga4O0`28;Z-kJRAHbH-BD#; zl}r5Q!ybCmIK_A{NgYBuNy?`|<)d-kU%t5anfO&BXiJ`0?aDctnlL7lYvh?9E~6^zFmQ5>3V&4s!hSOyk}qZ*4Y@-#Srb zy&te&9TK2LyLV?c*qwD=JGDU0=4L@D|B6kkzG29uZhyeb%`w~P@3*J@EG(q%ebL!r zh`;KQ7mqWF=HzKMN#!vJD|7kIlX`A5UTCEKHjZpHGwX=63`hP5E_FL4MLBc9YBZQC^#W(M+6%ulG?hf$+%JfmSZt3#x<++Eks5({QzZJ8|D={@3U z6EE(Flf3kxeq-=5$^HS2ZLM_3yTuMAx<~%`Mn)DGo*Uj*e2sQ@O)TogjYQwRu+ZCl zn-Ix)l3$x)dFV)t{CQl=2<5j5I{mK2D zJMTl2XbO18(_Ylw4GdUrgQoZkhPDoPxXg~+^EWADeCyjD!u_NoA>hI$BVTL0sPe(P zx$Ix5Prjsn_AdNOnD}CBtn(e)?pclfZ|$$IQXyD! z1!6|=2K@Nti{IY1($fke56JS0na_-VF;Pz|(-j17d%X>A6@RwPI-a8vmc2mLYv!L= zq%_`aCU&3ab+8C~feyv)sBAzlg^(`eg{TL_;$LWMRD(rRQg3@wV!2`zEi1LZ`D4h> z3B{vQS&{??#4W|*E38leFHKszU#ViT$-!z)r}>Ko=8Cnoa>1;F7#A+p_J-`v{^Z;6#R z?776c3OC)FInOMz-}YDc>Hc`QX~`)sy4fbaH5(NA+b1Mdtguaw?yg#6bHRfa zO4dK8(xr>CG%p_nrL4{FeJC(uqbi_jy4BU;Dz;jmxA{I;5OzaaBI>4pUL1dC*r%KK zG8D}5vWY)jru-B?yT48Ke5X7eHR*UVZT0UK=HaKxlHF0rjt6D?Pup>A3+ZTIInJZ( zaYj))X&P5WNF{^R^cf46tLFnnO|tfOj;2Psbc?Iq^IPv_)g^g?9mBVmyX~zxXl@og z*PiTNRcI;vJ5=9`QJmBqzdPl?CY4<@Te-GsZEEv(j?i7v&YV~OFy4RpssCncYNAS} z@=ukF$);L|6H8TPuVV>T_=Hx=_#Wxjw3)7KT(C$I8Aq&9O0cHY+iFO3JPv;cFGXN8`Z$K-SYZ zUYn$kHoVzs8882#mv6$tS-mK-Usv=g?FJ_9E;5JD>eudk5Bw90-~OWKKv*{NDZ4K7 z;pbuh455EQvkgYwfv|s5d-5Bm_1DdnDe|uRFEJ)BX4+Va6~T1X?x9E8pSX3OnOsoXlGx=#<*x*uFo-s(C3xyjX5u8|NHQoV;{uowL;=^uAY z+mt%RQsb}?`dn`&`MqiG#0~TcazS0w5HHEU|ufzU8{H6kEN2Ap5U{Aw!qq&Rh_wv!%n+fIg(> zv*4LKH=gfZ@=O4DvwT~p!aJ|Zt;6H1DvYVMZ>(f`_VQ(VSZFc081a|fv9W*-4rcXNLHF?380rGNTmETVQPh#QfTPFbpR26uxi?olC?4kWI|eWrc6y? z_8MV*WOsXxX7uj%u0Ai|uv?N!;q1JY^w*tFjF&BveD4%96?YiZueOpm6~5O;-kHK1 zPnHzAWe?kjHRxMYD||}m=E%>f=U};G_o(zh$2W7qVR-XZ{=ee))t3z_rCkai-FPhL zcdDcwV+?CHtjyaOza(<7yk#AF+h;E2;AoO;Ufi`6#%rl~``%M8mky~AfJha=v#|jQw?TlnvkjWS|saIBGgZ;x9 z?cf7erupGlUd8eHVav?HUK83!6S3@9-$Y#+=i3yBQ7+?=FGgJsEca*gb`D&596K1S zCMdkRvPYhOtV+8-4YyA9npin@=%lt-GFM>VW-CoFacIVJ=5*WI$%zX1Y^F9c-#`DH zVf5(t$;af66)pW|xd!qEM>EO@XO$fli*YKR)|-?R8`YKILM{)!3eNB7C+bicN#UEH zaecy*H~h@x?;Xdoe-E_oJU;0dHQteMpQnGL`$`f&<;sy!nE0=Sg#RPV^X{G1+(p7^ z8H)bEZ?6z-_|{k>+CW=25owjE{r1+q9#^A1K+DT5iB46pPFgr_ns<34{W0RU$b=fZ zN7->*dyf|9HK1a#)=2rsoPaAuUVTA)Xv7p4OiO07P4i^$ESuqi9>>qLnPBF@KuJ)DP##svA0!sLtb3&Z=WA-)j#B$6w!3~1iX&SrU!Zf{v(j5K ziwle=$zWI#=P=`IVsWb#hK-hC9>!6>unZ3rd_HuGA} znfv2tFkBe#rKSDw^Fr~`*V!@Mdri3y7uTFz|}}mBR1Q?GRmt8ER-X zE^(ABy~55#@e;#FTDpLW4zd`JgM|}O5$FL<27qLyG?o3S!mz+`KRO}L9mR*jAv95O z!YFQb$J!KDqnxXk>WyE^<)tai&GZuW_wR6sOQ@k3aM2^JbK#+7j%RM8gY$f9);snkQ5y%E2hz$**03_K=Z;Eg|>hgA^)5OH)0$>d0 z2hTkr>B~S-xxMgIuC%Agft2b9fT#}ox{(fEjHbflf`CXo4z7u|OXg*B=s+sV1!ou| zUm7@+WzS9sMU3kQNa_8{x^;3WBTx1*8cINekx&rGvkK}s0lwLtizibf_9HesdJ>Ah z2R10OsSR3#*#o1&-8aF&OltHWwq0S7%zly@A%O^-`ZJZPyCh9$QuU5d0oCAVAu=6J zC07v@#ujh#kOxf(Vrb&j-H2#%0`4Q}e~jtNwpmi$TFO4=)qU8pex5Qk1bKYlb2gV+ zJj^qbo^1mKJH%021|q5HKKHxV&N`j6^KC^pbBg1DD#`WbVMC-Y>g8Jli*;|Nbu_<< z(@#z(31oQgIweh2KSG@=gJ#`o6xPBk_J;mN>6@`a`k1u4!6PNS$`PL~zn^7OHKnUO zJonZ6ov3Dmg{pF*AuMA6sT(E+;dRUjmMrzR_?520O9W^O`&I8XrAyEh$qs<&;>vX} zuh6eJ+qYtei#W>UHYnq!vbc?J zZiIsbf;q}0PGfObxKV?<+?q|V@wB=E7#jF=fyqRPTL@I*SihxX`T)qUir?gOeIC2K%BgUvy8#%|8P!$9YuPX#T3_exEa08vAMa_}fR zPrBUFAdCcvM?$@eOVgX0K02EJWS+{{lHn)B)jyF|n~wT1t+v$}33V0Dz8#PTaAfX6 zDqvSKaNu>)ORa{X)ePcZqIwIJQ!=K-q3*L?6LA2-*a>_Y_IQ|D>uAt`kAZ&RC#Cb| zH5v%kU59aGBI(Usa_|bqR%-gCSV33y2bT1b^8v|fT&$;l6`nz{ZG8I@$ebHgIF#yN zg7Cfs)jk1CP6XLvAQ_mTA3W%wd|M8z#x<8_hj%?IrPV&BzlhdeX<_${)yNZgSdf%l zF}AAxC40YpXEBYJ2Y*=EWJ0`aB_Sw%1)cM-zjVf?7{uBsR&;K}m2 zv%ERO>m<^qDwJ{~dg>+W$cnU=DGE`F+_!r2@Qmt&KIpj?wCP@mdnpyN6LX78v;HUL zukef_JQV~R&zT7oBc%4cW$Dt%X(&Vz6;jD)p3I&jn-KJouY#vf{csZLV<|+@@%z;WZjzv4JJiFLjZ{5I#``f+jtJ9d-ycB+TQ{IOP~QM99-fW8I?ekcNSK9 z7sW|XUF(e37BBh`+PPX}je&y!NTnjlr$lM6Bm#NaZ5{gJ9z+%^} zqC@EF?<VKxEMt1raRu` z%zh7$A{2(q`HEp+loBM8x|}P>l4|S7yQOfcLpwOZ9d^C7pr1;vmjZ-mdDajS95|&A zVW&Wqg(~0m_E5~F@5>PgjAPOm;rJoxl8Y!Nh88>~t%@$D$zyUK`$7vP1bu6jy5gow zn6s0@B1i%OGys*%grs);iT0rC>fVlub;(9y__PXZ)<~t1Jb^_{(VbXXc8K3I4O>93`<^X`LQ6Q;n z6OI7MW`Rgc0PovtuFc{G8^pCloIrp!o|1$Bbv9kqiRfxA377*8^41a+i-HMcR>Rjx z7Fj^2f?%&hP?=A?EfxaXt>R>@p0nMj^?+J}f;f zu?R#Akk(0{LHWC2RVPoibrO0#s1^3nhTBc0pI2Zl0LqCXWJe;JPGN5A0QY)g4uST; z+oEf{Sv@xeimkKm4$LFE+?j+&I)MQ^@H7&jCW68ESHFl5dE&#mcO-0BAWQ-x^#(1p zB4W*_WZa}Ku9-Z-UzMZRnO94_kAg)WnY5L{forW9AjuoO71s$iz(Wy%MSetZIDsIR ziR2;#Q8Q^%1|rlBvtLF4@<3eW0u}TSDv3kLnmJtijU_j@cfJ;fwK?8c2Vc{97^i?y z0+iVaRw{vnC*eM~cV`b$GN8J7(2wk$>aOA6?-IyZr&RbHkR(Ahy53_o2QoZFg3u5< z0P2|uAsYdW*ihsVuTjn`7xX&#T3&>gP#{1E@Q|5vU;w zJhHL?#rg{1M*WvVq!dL%NY^1xFu)26ghdu%=G4{8KU3hXCB6@%E| zrSii%+M+-|^Gjtnp1eR3uR`Jm~9v1iBIlmc|dN z5FavN%?f?B`@l$@_>L z3FL7q%#%pMFT++$0wTqLU)2m)7=W$uj#h`DzY+Zu3=lXAgZ^})skOQ=8&pzaEUwB{ zAv&q2;7t{4*NbaF8U>}mPRXSx4RafLe9l*1RKE|ke(ASb@V9alcca)=I&EN3QiX|; zt*%xHPK`!7EBoc(a~=1WiinTc60tQ+HsqP$PL+Y&MKVz>f=(Y~687*EP}-LWR2z#Ssmx4cMA`;AODN0P$8|{H`q|wel!VwI7cGVwWx^lW4DE6rGq~!=ZPJ@W50o# zu7Ec8m`uJa0aL>w*AWsDBpaO&*!L?a>6kQ&MJ)%hB@s8>MY>J{K!mm6Rl|d4FvQ|K z;}549Y6R8pR3vj4dBVE)W5OFPNkE$ji;ifZnFA`Y7*#az^T6az{m^jdePem5xAk+T z6o^6Fo`KxOmFrQRnMuuTJCr0Kpx2+UnRI&X4qxlh&Wu7OWz7FZ_167taiAKNrlt`} z4xc&_)Q5GeKFL_8a-(g`Ghz>k+WQC6k><2xohY3RUab$`R_VZ-XOu zW|_cxpn0IDCmwn8=!*9lk6XWqQI3m^H{_e`?8#q?iD(&tBU-Q~Zn%_8UuL7{Yx;NF z6n86}drlp);8DjBiqs4f&~E^a!MM`5NX6nw+%7;)=;E7b5N{ylg(>Z&XYHgialF1_ zqy`j9xUu1fF#8#;o;8OgM^qqBK5IJsX$9Wlac+%HhG~#lG58LVRu%ZfiGBVH^XX0? zxg?jyf9W$D-~GP9Jf3$iW@RRgkV5-K!2ynd0*W*&B=>tD5152_2mrP-BtHeky3d6-Xd6$>Ck7Wcs9K#}XzA-c0;})+hNUgB%5j z62)&$K3px_n4JYciO*H;L$~s9xC&4L7I$$o1&Y>5b5%j>C}_NbT@NzQu6ugpu9IrG zFjL?;=F9&``|qG8-Zy*{-h?zlNvI-12qDA(0YecH0YeDAg(@Im=v76GGy#*)i_#I0 z5|Az+C^iHQML}HL#BgOe92J6=@W}KxrDJ`q3jZ!_iX23R-;cHb(66$+qV5*= ztuy(Ve6-?oL1VVc{F3`uubanT-%HzbWW~GZ%-8t`myUe%y_fX&A5_6(mET+YZ%SFk z(bwv#7m7fi#7^-7awAL|=^qO-i|a=h#>`>Qi2~{>{M*wWet7yxoV_f!XMR2ioz6t;|1bck@JdX%_EbN3k+j{NptK zYu8>289>Cdda&DEVc)}M`!fIB;nc46OIMyE6)0!I7S4WzgNpy>K5FxsmIW@1>aR+! z^pg6^b$Kq_Zl}vDVcIP<-#;<>~s2W|FWSgXJ*SY zGGq<5Rnp@_{{#vnSO%91&rgpkR}nLzAg&O_@}TnfpYANY0Z&@3s08!8xdr_w2M2R=iW_{rJ|) z2-VSt{fh0#gzPFkCud;{#v4f$rOef4iUIK)&icbLWmfxfjk@B{XTb zS>e954s)Hyr+u#1jkT^VsO6A@E(YE745>-e_X=xjxcRc1@H3bg{}3Eg2rusOdZ5`2g}O zAVfh_WB?!*kuL(MhVnByL}`;kyZ#va2kx4E_)MdDJ?dxb?s-tE8A=YS~D+Pa04IVIVW|H4=ExCu!v)|=j z5njFP!p6fcnS`>s^;Rkwlqo+)VSx=q*O5U*=*kA^ST8UIti4#?LO>c#hVKdkF!P3D${RK;3&EgRT2=`jG4MA_> z3cy4%7+epBDEyg4LQFG~y3S(-sL_VN%diuDC)IWv4oct;(`HCWVj)IT|uwoK% zBSmNc9NR4hMiMFFPxLa02o9>1%r>$|gk3SuAWKC2St@+--Ih?6CX0 z%RY(09g5BBb*@+{(m2x&BD$ua*K8r>u$!VvCd;0rl8BeO@WxF z5(aYPmaoxl5VG?ECl#-8vv)?sK#0ZAlhLJdpljM=gM@e=y3F$WzVh`6()5 zCEOq|xis7T#Rc$QHTB2>?ymIG#%usD+=(BDB)WxRCpq$1O8>r%#N&_$1?2=ep-iPH z>j@W&?+`L2^M!!51l=|@bpUxnwe2r#d|iu6W-Ma4yWwdYlcMQ*xC^4uQajRvArtgWjk14T~U;_8YgJ-b+22?f4~i@=#|}RD6^bB$+bU z{X#g!Ci9|tj4i7sl-$ahBpxrjG~M$64Wggg0c)f))Mfwq2+6Jv?H$QnG)yy=paxQX z#q|+aaq=Z`$S-P~^`A%RjZP}NUN2c%CQO@VwtLI&g&5vN(iWx z1Bwaq6hvn->xv~H}s`um<)mj+~Ul8ld}T&6N)2C-OszK*`i!5j2Vh)oa^GC zJxr(4iEPZfMKCesFCfqQj#Zb0N=N#vJeG2u4d7M9101N^D8;Zdrt*v&^?>|n0&L+X z#W?D<@_OdTN4LYD98!Ew9Q&E@>v`>#P-hiDn&c5{9DpmQT`+>q;2a7KGGLlhOB2Ra zC=yv?$9#l5JNvag1~_8@RbO^~m5-=!6@;94@8JmoSKH68@=UjvK6_3K82{?JEJHi= zMVoa!_|CaaQCAL9ew20nOGW@cMRw`l$RqZJc=*uuK0A-{iK0W4W|hL`!(z=TqLV%C zj{vD@3HnDzDMj&W5C|#Ju%yC*-6&50H~~oi9rH>rzF4U@}aA8k|}-} z)*knJgf5ygFw;4P^h^y71K#X8=yMis>?A5YRBF1^V4YvH^|Oc5j7*s_j;9Q|8^TN~ z^X{golSvo0_?HZ{%VKwyRNFw1$L}t#N9At5D!4tZ{k<&z;9cq1?F{mZ-KMTp`NaNo zBrT3|$!Dr4J&N2M(a^}yN&9{fX_$V-z^sig5pTWA@NRKQS*o&=qKn-{_nwmGwd`(T zVTpJev-U38b5L=2`+JY9b7l9BW@&ErAJ{CoQggPeqZuijh#Z+!x#@TNbjz+yZKaq3 z)}>M5l4C6p}{L3c5vM;HeAP`jmE zBNr@^b{e@5hw$Ta5<4Nhqe+#HXv-`Tg+%E3wYUhvP>LsxC*%^l8Dhmg*>g=+5 zh}T68qh6q(I^roCjTl|=-Fr}D3ngRHvK?g)hZKZw(X9GyAGOTdU8{VUEpHQ`J-}uV z6>Y6r@{waZ(xu1zM4{2yZn<5GmxZ`dDh~yZDS@YCYH1A4R>mU0}L&x?urPU3&l;WNaV7KuS z$IKvwwzHj?CRLi2+Pp}z+k3vbTkm1D8TLWGlR|^`a<|Q|DVrxu@`T-#lj<{P;swX7pRnGx|Zfx&M(JNg}nY$XGWFX!Q(aga^pGKO>112 zVh(*Z@>+WFlk{kETH>?5xyftwbcto_M>H#SF~>%{m9?s4^&XVx*NI*QE8^GMo4wNb z?u);RiP<>W-5S(ikc<7j&K=SY-HFx;gT?0xfcZL*3Gss6na3Yyvd@;_EI-&C=@Uzl zvs=3Bj?koj^M0IG+@+mlzO)(eL!-6xIR9`&NmEiL2c7y8%6-Clcp5d!S$ z@GhmtN9F>nFK#?;IqxQ+SN2{()_B3C&UIR$eWv_|P0R9AtoL+i(70DphAAbD$Q5#$ zgggcd8;sw<4iRyGCw&yB9&b$ig*X!iJ+BZ=Ykof$yD>{o8_i3b8!hoxE}}YFJv$*e zka67Y_d$33khjjWuJtyTwDVnW7mkp>Qo5f`XHGkaz0Uj9GFzVd_}5!{w)W_mq@$Hm z-h!v!r^W63_?UsYOMR8YNpq`FX(RjxhpZ2t$Bn4+x{v&fpZcpJ{&j0_7c|F67mshe z&f5ua`>1Gh#O?LRB)62Z?j&|aMdZs1ftHA*S&idJissm~z5U12xsTKa{;Qe}6LSiZ zF?Fh%17!K2o2B_Tp57SpSls`zf%d5QuY>yer@rNn1Ui72p{Efg^ix50TQ4k)p}vSd zCk3Hro>ect{dw`_L2tv2T``cOQ<~H$H6N~^zai~XHZ!=kDTDR4_r2ki`^&kq4y4rn0bkkm zS@qnAxT+J_{r&#nfZ&3G#zDpRQQ1d>>~E@~(i*g_s$R++o%o^lBDcg-Zp+R3!(3^q zA8%*V-lyNciRYxZ80?#5Me?UAE^>KikQ|5n7N4;D=~N_%D6 z@2*o=m~G2W`1@izXhi0T-;D97ioS30LwDf#bcfrl+k?rJ;un8e(;60s8-oWm8ojhY@tz~y**0sy^ z-JEI2(RxpQ!?R-52^ot;c+AXZq=#FByX26gZ`$N}rq_Ek%Kd_Ghq0_>((5nK&~fjl zb+q8U(AV1g#g$?fZDMS4k=B)|#9+)^%@wcKzL~ZLw|=pAkU}^AQvR2!S)CcXxeb2e zjzdU|>XTf|gx>sO|!jZc;#=6gTvgy`aH?T)$6 zYk&J+C6aR$BZ{GnYS`Dw3v(w<*vO>wJy-nt{?QK)JG3YF%!pe1w-bLo9Jg$=-Bx^m zwJiX@{|RUDdAjl2$98@%XrtFEop#%Xe{_qyZW5A@2|TIoP)4)%S6r%n=3e_W;Ntnk zA3Ia?1*M-b;t!{v*#SN_ZXFYcVysc6OILEg%o42kl!o5>J7MkXm470vto^-e$LI4h zU;k}=%S#Fj?kP z;bVH_v0;A6Ol08i#YeD4IZykQX#7&)(6Qk^PX^l_YZ!l;`N}(T;<-31v~Sq@=lHRP zJHj6ff)ES#dt%wlL)5aN9nz5fTy>?7bcKW#ZqreemxS z%Zoy&hf>u+-}G&zpFe$My%gqd4?6PZFk$fp?O~kI(od% z<{B)g?N2cI*=N6)^~u+hzwW&?c@}AVe+At1>3HAr;@Ud-=Q{Th(E$jmz7J^%V(d7m>b@5|{M1204!gTHN@KJxfgP-Ln7 z>-OX@^~Q-1i~0HC@jYg*Gp6tO{MgL>FAnFj>*-LS_R93i@Rq~XSYl)7nF}?K(qE2~ z1}xK$9o)eL*cCXP*YlHtyVCcE&Xi0uOTH$*b~Y=0Us}Abf8gYmIKNf#|Zu!WCY_AiR9)}0ypVMT({VAQKR693mlvEzHy#QbLO zIt_NRU^YQZ_3hDyzweTRn{@*nw;pc|J5hHXBR{eEyYL#m@-?R+UQ21}&aK~{nv(yO zXACl+A9pb0ow+lhnwLDY#Y#n|E0lN}0j&8Fq42@UwQ;iV#zy%0o{M&$5S9Z3rLm0T zBl34YSt|KAm7HU-{zJ_h#(!T>HbS7@4y3Qkiz{qD;TpxP&pkW~KlyGTXSas)%y!hf z!OV3#f9aoeU(;Nb-+f;Wpc?O%ee-^zaA&=qlDGeNd~O`QfyP$c5TzN7s$UVr)NP4lZy#LmV>&fhyDl((y5GwgYF{44Qxg&#|k)j=0eR2_|5o1O67 z*YtW%T-bk4FQzoj|JnNXa%95xszc?CpGz-aokmqxC9Q5WmY-~@#w6amQ@A4}$7Kmg zdT`lrTp5=W(>3_SaFefMrLoc zYiTZy{?yp6UMHOGCYH#V5j5uQB!Js+Dk!tEJ#q5$zQN2@zcnV#2>P zUyA#saeY+hQfteQ{!yFe;enSLx9Y>4BicUpWVhV>BCl~pV8{}2rK?=)cev4f!k#a8 z=PR;1ZaxZkKG6#La=oKJC}-Eqi&74U+QcUzkjynZdYkx_>F$wSDo!IyllT- zYr6N6G+G<}Yqa@ef}v)kR?%7Y7LCK#q>PH*RbGE`==*ZofV2yp!^+ zu?$x8X<|gBrg#03?#Wq@yU{ro#FV!>0g|WGB=M4jy|Ybrf00VQ!@s4z+Av=<5w`s{ z?{nYJ56Ma<+l!Bmtv0OvcmGP`%A1M%0)|wp+ZWp!Lhq5zKj*J9V3Ef__nTUO9v@3y zyIb=Yd0TCx|0-+en+x`j_~_wZVd!&%MQ?;q1}4AU=p1ENH^kqOf!_@|DT9}4MBo2M zfe);*)N>g>Vmvw!hUjx>(Ko9rP3mht=u}YZv0Gx4XHIqB*-wv-=@Ya@SV71N$|K9p_li5f7}5sK z0S&#CTh8Bkc<6c81?!EJqVsx)Lvk&$9KB}K>|X2rn&3Pqf=j^{IaQ-s(0J^CZuNTQ zUSp;A;xVE{NZBYJ5Q#>{4mBt(d$6IoyECkBzgK!4If<`-A#%- zuzBqT@A^X{pPrm8oUXU=QFpoY*;Us)u*jsU#r9(tSVc}x3wjD|M9|JU;iX!6*~lsd zcsY7mUH6idXFWwG!SR;K{*LG>4WBRaTvNRwKp9IB=4R33|8OCyvmsInokzfE2EZSR z5Z>9yo&_01qa)F6jGC~NVM!j$y&y73@en{EIuopKXoT5DynI?%3I|PcgtVqo3C(f_cnAj=r9_wRXJDB&?s9NnTnKqyB zyFz!y+(7C`d5-1KHay%qSpOIU1ZrlXpDqOU9a>q-JG{SqE$FK0f&Ry3owXBxNal$$ z2eXc;7~W%%?-<>C>}bAcOTtI1L$j(8MG<`my>;ft;pe8u^Hq#L+2l2aTj##|Z+@$M zheGuIp|;eV!BONvx6WMVdVL_ge0$zxK90PY4tOfB+I8_<#go*8c_o00!HE{(mQh{$HQ`KTNv=korK+fHXi9$iS(4 z-wP(W#{|~5WCR!HG92)}$x&rz4a-X7-dbA=Jj}*<@k#sj^a3L*f@$xnQ^zf6*>%MZ zg{jKU$3k^<5A5IHTWYl5(sisNu_7T6t7A|%P+5Q2sH2o7ud3*)rI~AZ@XRUZ=#%_Z zg98Qxe77lutWM%^Qi~25Vu{MOT3XkJD=Uo-`RM3cs^J?st`;^{!NGyUb*`@aG_%j2 za<)(i(b9ThMRRtiGxhf$(9ke3BoU~zx}Mx86^Zf~h3A%bID!#nFW$j|ln}#AjftZW zNKrZ@rjDMAI;r$pahr*8kBR9CEp3WA$sL1lqaGf%piNuQ`Yfo2wMax|g%kVt>!{+@ zarg#9BMUVWM@P>_oisqDY2j1|1cEwY?>(y7fCWumUA>1&bx@vgS^z_l)oyEKXRZe!8DF5nMWm)Io_QlI}&Nsf1zHmKk(ehYD~-S zrX*d?#(T844Ub1)a3l;)0f$i_;7B+O9)rQ-{&z$$AYm{HIGi+2Fc$n`q%j!5SnxMI z4)eb!53vKhfu6eQ*AI$aS^6u4Hcib{+*ltlE>Y15~#9;oDETi5?j0gTt~{>fvRb{!=Tr-`W28<}+Ts z^6pdzSXL?EepY~Qv1RyjIeN#rbLgT!hlLS=iBh=U6Kv(<>;C6=|N6)n?2@>;^$4Z> ze8Bw5^v+!dcOT-DQn5*?b5}vQ^lygf@}i( zENe)@+WQn6kh+KFsVOzDi<|tp1!$G zlI{wADI(uiQ)J|o6xc)XBhu-P;YVf}X1l%5htkB&`Ft+iqL5c(>=79)1hMOmg1WDJ zubB#?JNaPQZ!A@aknkK9DdI-nQiUIwW59&)Q64G~ij~s|A#{ z?8U;G%h{*Of4ZnTH)+1xH?BS%-9`ZVC4(6Kj)%26S-Dq_=5vQpn2G|Hv|Z;N854XW z4+0?~rX1_n<+Q=*-Fn*$`OcTRBoR`i6LPm@^V)?BG*cOh_AHh_oyVek%w<)%rj9aU z#aI~J9*qRc9>Mxq>>^5^9&9Q1or3h`Uc=Ii-12!;X&*cqCZy*U0TZ$8Tm>D$=c3c( zR00cllDZ7PAxR(76ip7zih>?iTF3z-gvnE>e!jDlP$65Z0_d)_W>YZoXQM_Xe4CDD zN-A}-h6FYXljg!!2J9h8r_ce4Eamn%6k$g)Wy=aSk$IxhQ9G1VB3`+4>Mj*7@3gp9 zH*cWJU9KNMNE;NG%@D`AVC35<1{7&m%ma40M}qqir5XLy1#B^$Bh$Je)<5rAHa}3G zTjJyTPJ}6e%y%hmXhM-n#r;1C?$XK>ZciRlteB_42j-`RdJ z3RxEJ%HZfi@{tEuXAt1+w0*gLFjBLtv|JR7TxkkdB6@;tCc#qOZ$;Q<>0KUNp#z^$ zNMV+_Tr^`uH_`N*EkG6a@EG1l2MMFCD6-(Vblu#y(RQNpf(SpD*LJ@BUgv5Ve;(=w06!JM9ZXhMMNzdJ5e2#`|zr6>aBa+HbJ*D|b@h>GswwnU} z&4ep?puzj@P{4`f0UEwhpnW%3>9_u*Sa=gtWQR&B)Nl7A2BZfB&dhl$tAip`G*#nn zQGT+wa#f956De%>-7Cqx(;^nL4I;g(rAWCM?onYe_vHYI`$Hcus&`GWasFkQOAmBu z;f3V`0mb>L!*&u`mPZWV*C?C2)=3n=&n*O0#b)Z6=!H$NrC(OPYF>aNBnpgMdAqWr zq3VCoEi@c8Pf2eP*X);@#JMKXPtzl4#|uJH21?o?&st>GC|1h_yM+D@sk~K_au0mx z+J>+?5G-lu5;Eg3P!>j5p*P!kzr<8G<1w80tV93a&itDTQEx2B@&$wc&t=m8xe~Gf z_Xz5sy+B5X12cwxJJ}&H0VnND&26N*Iy<|z8Ce+`){mX&F7@JBnM9t@Az?I*2;L|$ z4sE40?+aez!Oq>)&c%j?M#)-w$p%K(oO2cSoiNe&Cg|Yr`qbC^^P0VGo0u3KvFtV@ z>^`KftYetUaqhM;O!cyA^S3N!5Eb0rUDdT*F$5z#iH0F3%HriXIwW6*?w;`8POr>t zs;j!bnwL5rr=O^xzPFm{+Uu3;t3|rz-=?`&2}h9jqUI_R@Pf@|oT`Gp7D--RK}(Ai z9nHjP;nj8UIs^qBb!CD&$-;(afh4k!3ek~q(nLz2j+LGPmPIY|l_WPZa`lL0tUSVk z?ok@tt#3$f^jcu)&Dzk(hV=T+9?e#EMhg0(1UyllKn~O@bD-L>97tp`t1~wHH8esH zi3<8O1$l}Vkt|0eA7G%{KArlFCya~aKqW`UzL#?+5FHy1Nj6PWZ)hudUK zB*P>Up&n^uBaP9L^R}SbP{}NE8J-mBO&d3|VG68n9B^`_jQm#bP#Zck(vB9*toJ1$ zPDm<5GeYB-ab-qv!==qs3#&lpTpLw-EHILjni#_jrP|Rf#3OC&ta{u-X*8o^DzQ37 za1+ohyXAqv1q)YNpw4W1ZfZiN>t{Mq$ABzpL({VHu%HR%!6s%V2HGq~NzeKkDrBan zMoDIJ(lZ%}p*OvIE%1>El7b4Acr!S6j47D4zSKQ*_&E#1WChyE5%ucH3Pc-bVx(2s zupFx~I+SbFJYXvDAgCwe;@siTLYG85bEj8d6#WB$$hM63dm7?T*4o*5-gW=6(E z;neYhVj4qGkS8dptCMi*B#gR(zCKA%{pjoKQK>XR(Zk{7M#nJa3DVIqiR$Wl77jEF zL0V8PSvc4Usv;`Y4x=vp|F490{=WY)ks`zf|CCTDdoNSE`7Uq9CDO3R$QWSwWFewwBiTBbc{C8=^)5AuvVY2+aZ$eRUt*1!Kd}5jGKp_90SG4~}JShNv7GMH! zA9NSUD9<~WUf)9qI)t}WQK5NV>A7`)=6dN?pS3cMoY~%(Y>dMPR@K&-+ebV3=cqU& zaqQJ1a=Rz&LmX2Y?GNEp^l10$PFyXt2&uSbWnZqE@mZN(*KxV{R7M?}fII2u&{vQ&@dUOMKc zq;zrCx3DEQq|S$TyY2jNZvz8|)5GBi{t=gw18^ZvwfBej7at>(uNy`bIME%G($X?J z@5k2M=yu7>@>f?0yU9DrER8iie)8lsOC79MTYGzJdQpzbfv{@#-qefLE=Ro>=?(3p z53bh7c3jL-FTR!JeA9|qA7ypmn6I~iMQoX^eRoNCsFlJ=>nh$EbAJl)QWS&0EH}{6 zxY%~9>Wtt)Q^Y&@X|?_e(pGbd%CNMc5h6XH}@x%~ZA3t2Jz0s!k2Z zMJi(*uarewQFY^k4}{qIDl41pC0HpF_npu;GNqZP+u11-Ep&8rF+l~9r>m3njkq!S z6l=GLpvXO{(r4qs)rl&j!}absSLMq;wf5~J5VhQs6Wbcww6*XjT6@)%aRlXk4qC2q z1lmAHqV|D(1PqR#ju)U{!wxFhk|_X@CqRG-0vsrKSqs)W0p9!H@`%F|2m;`z@P99NuLna;^7}a3Fv8GC9{+v@TE(W) zs;llnj+}1z+-TS3kvyzfwu1Gw`iDhCr}g(CCsiMnXnr#v3em3ZOM{+#XFGc}H>;SE zf>gBWZl1bqRivI4I?(jAkzVsF(e2d7{xlKz%U1`~A533m3}!3Z-fZ*Cg<(pyJ8x

    cB+OLIP|JL^AK1)ahqj0m~{zXl(@4rX(rOjmt?UA2*xT<85aCKX9 ze*Dh$j}w=Uu3rwxn-3k_ls}wqm){ZCv%M7tv%h=u>#N)57`x+FeND?+)m};2-|{?PlcWnycqvoZ>v}r1JU;dfM^wM;)rp49y)SJ*4zwcsm;LE;L?q{9 zo_WI!*D0F}O_+q)25sSzol1HrE@1iKl0q2C9`DciD17my^;FjLW5)lw>*u|P6!mty zzfOY(hX1u5a;BOh;cuC_uXWMJ{}u*4j6)Tqr;7XbZ{)@Q@hqpCZOo`#J}z2*psE!8 z^SiAvtg6K8(x1-l{N$f=MR^sfeOdq6_PP-z>|v6b`S#Wvcv0A(`HZCTp}y_>oIeWs zVJH7h26!2Z+FKSCsRsWl3~MZxSI>%gelzU6METB3Np4VyO+cIGi@@o6vVH8VUwU$u z c}PnTl*H4 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

    6I7rHH?37fou;gQ$dAhSH^3z&1(O|o7K*hFwd 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

    9#x8$D1HospN<$5MG{a!A4jG1E?-A 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зkIwJ6RUihPOH=1Nl9mvYyvFw9p%-v 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�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