diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 061fc5f4f..61d23457a 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -88,3 +88,91 @@ body: required: true +======= +name: 🐞 Bug or Error Report +description: Submit a bug or error report. +labels: ["type: something isn't working", "status: investigate"] + +body: +- type: markdown + attributes: + value: | + This issue type is for submitting bugs or errors you believe you have found with the PnPjs library. If your submission references permission errors or 5xx status code responses, this is almost certainly not a bug with PnPjs but rather and issue with your configuration, please refer to other support options listed on the [new issue chooser page](https://github.dev/juliemturner/pnpjs/issues/new/choose). Please provide as much information as possible so we can best address your submission. Thanks! + + - Follow our guidance on [How To Create Good Issues](https://github.dev/juliemturner/pnpjs/wiki/How-to-Create-Good-Issues). + - Remember to include sufficient details and context. + - If you have multiple questions, suggestions, or bugs, please submit them in separate issues. +- type: dropdown + attributes: + label: Major Version + options: + - 4.x + - 3.x + - 2.x (No longer supported) + - 1.x (No longer supported) + validations: + required: true +- type: input + id: minorver + attributes: + label: Minor Version Number + description: Include the minor and patch version numbers, e.g. for 4.1.0 + placeholder: '1.0' + validations: + required: true +- type: dropdown + attributes: + label: Target environment + options: + - All + - SharePoint Framework + - NodeJS + - Browser App (Hosted external to Microsoft 365 platform) + - other (enter in the "Additional environment details" area below) + validations: + required: true +- type: textarea + attributes: + label: Additional environment details + description: Please describe the environment you're working in and how you're authenticating. + placeholder: | + I'm using NodeJS and certificate based MSAL for authentication. + validations: + required: true +- type: textarea + attributes: + label: Expected or Desired Behavior + description: Describe what you are trying to accomplish. + placeholder: | + I'm trying to get items from a list in a site. + validations: + required: true +- type: textarea + attributes: + label: Observed Behavior + description: Describe the results you're getting. + placeholder: | + I'm getting an empty response + validations: + required: true +- type: textarea + attributes: + label: Steps to Reproduce + description: Please included code fenced example code, OR a link to a code snippet using GitHub or CodePen or the like to show how your code is structured. See the sample above. + placeholder: | + Here is the code I'm running + + ```TypeScript + import { spfi } from "@pnp/sp"; + import "@pnp/sp/webs"; + import "@pnp/sp/lists"; + import "@pnp/sp/items"; + + const sp = spfi(...); + + // get all the items from a list + const items: any[] = await sp.web.lists.getByTitle("My List").items(); + console.log(items); + ``` + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml index 15c1db418..08c4d75ac 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.yml +++ b/.github/ISSUE_TEMPLATE/enhancement.yml @@ -2,6 +2,56 @@ name: 🏗 Enhancement description: Suggest an enhancement labels: ["type: enhancement", "status: investigate"] +body: +- type: markdown + attributes: + value: | + This issue type is for suggesting or discussing enhancements to the library. + + - Follow our guidance on [How To Create Good Issues](https://github.dev/juliemturner/pnpjs/wiki/How-to-Create-Good-Issues). + - Remember to include sufficient details and context. + - If you have multiple questions, suggestions, or bugs, please submit them in separate issues. +- type: dropdown + attributes: + label: Target environment + options: + - All + - SharePoint Framework + - NodeJS + - Browser App (Hosted external to Microsoft 365 platform) + - other (enter in the "Additional environment details" area below) + validations: + required: false +- type: textarea + attributes: + label: Additional environment details + description: Please describe the environment you're working in and how you're authenticating. + placeholder: | + I'm using NodeJS and certificate based MSAL for authentication. +- type: textarea + attributes: + label: Enhancement Idea + description: Please included details to describe your situation, code fenced example code OR a link to a code snippet using GitHub or CodePen or the like to show how your code is structured and get you the right help more quickly. + placeholder: | + I'm struggling to get a list item. Here is the code I'm running. Can anyone help me figure out what's wrong? + + ```TypeScript + import { spfi } from "@pnp/sp"; + import "@pnp/sp/webs"; + import "@pnp/sp/lists"; + import "@pnp/sp/items"; + + const sp = spfi(...); + + // get all the items from a list + const items: any[] = await sp.web.lists.getByTitle("My List").items(); + console.log(items); + ``` +======= +name: 🏗 Enhancement +description: Suggest an enhancement +labels: ["type: enhancement", "status: investigate"] + body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml index 0b0796afe..7ba6f95ba 100644 --- a/.github/ISSUE_TEMPLATE/question.yml +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -69,4 +69,4 @@ body: console.log(items); ``` validations: - required: true + required: true \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index c5f38a722..1a2142260 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file. 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). +## 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 @@ -551,5 +561,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Dropped entire package, no longer needed - config-store: - - Dropped entire package. - + - Dropped entire package. \ No newline at end of file diff --git a/debug/launch/graph.ts b/debug/launch/graph.ts index 10659d478..f2646a551 100644 --- a/debug/launch/graph.ts +++ b/debug/launch/graph.ts @@ -17,4 +17,4 @@ export async function Example(settings: any) { }); process.exit(0); -} +} \ No newline at end of file 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. diff --git a/docs/graph/onedrive.md b/docs/graph/onedrive.md index 0411cb349..fb4f968ad 100644 --- a/docs/graph/onedrive.md +++ b/docs/graph/onedrive.md @@ -577,6 +577,16 @@ const delta: IDeltaItems = await graph.users.getById("user@tenant.onmicrosoft.co // Get the changes for the drive items from token const delta: IDeltaItems = await graph.me.drive.root.delta("{token}")(); + +// consume all the values using async iterator +for await (const val of delta.next.paged()) { + console.log(JSON.stringify(val, null, 2)); +} + +// consume all the values using async iterator in pages of 20 +for await (const val of delta.next.top(20).paged()) { + console.log(JSON.stringify(val, null, 2)); +} ``` ## Get Drive Item Analytics diff --git a/docs/graph/planner.md b/docs/graph/planner.md index 6535567c5..b850df567 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. @@ -247,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(); + +``` 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. diff --git a/docs/sp/fields.md b/docs/sp/fields.md index 48449e729..8ec6ce5f8 100644 --- a/docs/sp/fields.md +++ b/docs/sp/fields.md @@ -254,6 +254,31 @@ const r = await field.field.select("Id")(); console.log(r.Id); ``` +### Add an Image Field + +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 "@pnp/sp/webs"; +import "@pnp/sp/lists"; +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"); +// 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")(); + +// log the field Id to console +console.log(r.Id); +``` + ### Add a Multi-line Text Field Use the addMultilineText method to create a new multi-line text field. diff --git a/docs/sp/security.md b/docs/sp/security.md index 233fb5411..9d6bbc0e2 100644 --- a/docs/sp/security.md +++ b/docs/sp/security.md @@ -108,7 +108,7 @@ const user = await sp.web.currentUser(); const r = await list.roleAssignments.add(user.Id, defs[0].Id); // remove a role assignment -const { Id: fullRoleDefId } = await list.roleDefinitions.getByName('Full Control')(); +const { Id: fullRoleDefId } = await sp.web.roleDefinitions.getByName('Full Control')(); const ras = await list.roleAssignments(); // filter/find the role assignment you want to remove // here we just grab the first diff --git a/package-lock.json b/package-lock.json index 97d1d80d2..4618dcfb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,33 +1,33 @@ { "name": "@pnp/monorepo", - "version": "3.18.0", + "version": "3.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@pnp/monorepo", - "version": "3.18.0", + "version": "3.19.0", "license": "MIT", "devDependencies": { - "@azure/identity": "3.3.0", + "@azure/identity": "3.3.1", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", "@pnp/buildsystem": "3.1.0", - "@types/chai": "4.3.6", + "@types/chai": "4.3.8", "@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/gulp": "4.0.15", + "@types/mocha": "10.0.2", "@types/node": "16.11.7", - "@types/webpack": "5.28.2", - "@types/yargs": "17.0.24", + "@types/webpack": "5.28.3", + "@types/yargs": "17.0.28", "@typescript-eslint/eslint-plugin": "5.59.9", "@typescript-eslint/parser": "5.59.9", - "chai": "4.3.8", + "chai": "4.3.10", "chai-as-promised": "7.1.1", "del-cli": "5.1.0", - "eslint": "8.49.0", + "eslint": "8.51.0", "findup-sync": "5.0.0", "mocha": "10.2.0", "msal": "1.4.18", @@ -36,7 +36,7 @@ "string-replace-loader": "3.1.0", "tslib": "2.6.2", "typescript": "4.5.5", - "webpack": "5.88.2", + "webpack": "5.89.0", "webpack-cli": "5.1.4", "webpack-dev-server": "4.15.1", "yargs": "17.7.2" @@ -131,9 +131,9 @@ } }, "node_modules/@azure/core-util": { - "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==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.5.0.tgz", + "integrity": "sha512-GZBpVFDtQ/15hW1OgBcRdT4Bl7AEpcEZqLfbAvOtm1CQUncKWiYapFHVD588hmlV27NbOOtSm3cnLF3lvoHi4g==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -144,9 +144,9 @@ } }, "node_modules/@azure/identity": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.3.0.tgz", - "integrity": "sha512-gISa/dAAxrWt6F2WiDXZY0y2xY4MLlN2wkNW4cPuq5OgPQKLSkxLc4I2WR04puTfZyQZnpXbAapAMEj1b96fgg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.3.1.tgz", + "integrity": "sha512-96im0LrJt0kzsMqA8XjWxqbd2pPuEZHDlyLM4zdMv6nowLV/ul3dOW5X55OuLoFX+h22tYnMcGmQb3tlkdt/UA==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -302,21 +302,21 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "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.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -420,9 +420,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", - "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -452,9 +452,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -636,9 +636,9 @@ } }, "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==", + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", + "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", "dev": true, "dependencies": { "@types/connect": "*", @@ -646,9 +646,9 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", + "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", "dev": true, "dependencies": { "@types/node": "*" @@ -661,9 +661,9 @@ "dev": true }, "node_modules/@types/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-yW/qTM4mRBBcsA9Xw9FbcImYtFPY7sgr+G/O5RDYVmxiy9a+pE5FyoFUi8JYCZY5nicj8atrr1pcfPiYpeNGOA==", "dev": true }, "node_modules/@types/chai-as-promised": { @@ -701,9 +701,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.4", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.4.tgz", + "integrity": "sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==", "dev": true, "dependencies": { "@types/estree": "*", @@ -711,9 +711,9 @@ } }, "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==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", + "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -721,9 +721,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "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==", "dev": true }, "node_modules/@types/expect": { @@ -733,9 +733,9 @@ "dev": true }, "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==", + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.19.tgz", + "integrity": "sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -745,9 +745,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "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==", + "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==", "dev": true, "dependencies": { "@types/node": "*", @@ -777,9 +777,9 @@ } }, "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==", + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.15.tgz", + "integrity": "sha512-szoYxzzEjyhhvx/pf1TxB0Hu348pgK0tr2Zm+guCh5HFiz7Ix+2N89Qsctk0qBpAp2fbIjmT96coHWxm69+u6Q==", "dev": true, "dependencies": { "@types/undertaker": ">=1.2.6", @@ -788,51 +788,51 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", + "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", "dev": true }, "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "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==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, "node_modules/@types/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.3.tgz", + "integrity": "sha512-QX1czv7QoLU76Asb1NSVSlu5zTMx/TFNswUDtQSbH9hgvCg+JHvIEoVvVSzBf1WNCT8XsK515W+p3wFOCuvhCg==", "dev": true, "dependencies": { "@types/braces": "*" } }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "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==", "dev": true }, "node_modules/@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.3", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", "dev": true }, "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.2.tgz", + "integrity": "sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w==", "dev": true }, "node_modules/@types/node": { @@ -842,15 +842,15 @@ "dev": true }, "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==", + "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==", "dev": true }, "node_modules/@types/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g==", + "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": { @@ -860,9 +860,9 @@ "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==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", + "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", "dev": true }, "node_modules/@types/retry": { @@ -872,15 +872,15 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", + "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -888,18 +888,18 @@ } }, "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==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", + "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -908,18 +908,18 @@ } }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.34", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", + "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/streamx": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/streamx/-/streamx-2.9.1.tgz", - "integrity": "sha512-9bywzhouyedmci7WCIPFwJ8zASDnxt2gaVUy52X0p0Tt085IJSAEP0L6j4SSNeDMSLzpYu6cPz0GrJZ7kPJ6Bg==", + "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": "*" @@ -943,9 +943,9 @@ "dev": true }, "node_modules/@types/vinyl": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.7.tgz", - "integrity": "sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==", + "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", @@ -953,9 +953,9 @@ } }, "node_modules/@types/vinyl-fs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.2.tgz", - "integrity": "sha512-ctNcmmzbMIKooXjRkyyUCOu2Z4AyqibL+RhXoF3pb7K7j+ezItnakmpm31LymkYHSIM5ey0tjIFzTvFOTSBCGw==", + "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": "*", @@ -964,9 +964,9 @@ } }, "node_modules/@types/webpack": { - "version": "5.28.2", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.2.tgz", - "integrity": "sha512-7tcxyrIOd7WGimZIcWU6pDsNh2edGGnwYExOvd3l/nMvuxqwVPrFXnnTbYCnplqV9BJoU7Mo2mfFtiH8CNFvYw==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.3.tgz", + "integrity": "sha512-Hd0GBzpP0mO2ZKChw2V7flK45m01/2g9FalpMum2X66uouzG3P1vkxvOtLVzAWLna4N9h0s2sVjND9Slnlef8A==", "dev": true, "dependencies": { "@types/node": "*", @@ -975,27 +975,27 @@ } }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.7.tgz", + "integrity": "sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.28", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.28.tgz", + "integrity": "sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "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==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -2086,9 +2086,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -2105,10 +2105,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -2235,9 +2235,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001532", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz", - "integrity": "sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==", + "version": "1.0.30001549", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", + "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", "dev": true, "funding": [ { @@ -2255,18 +2255,18 @@ ] }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -2301,10 +2301,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -2877,6 +2880,20 @@ "node": ">= 0.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", @@ -2887,11 +2904,12 @@ } }, "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==", + "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" }, @@ -3119,9 +3137,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.513", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz", - "integrity": "sha512-cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==", + "version": "1.4.554", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", + "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==", "dev": true }, "node_modules/emoji-regex": { @@ -3273,15 +3291,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.51.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -3972,12 +3990,12 @@ } }, "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.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, @@ -3986,9 +4004,9 @@ } }, "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==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/flush-write-stream": { @@ -4002,9 +4020,9 @@ } }, "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==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true, "funding": [ { @@ -4122,9 +4140,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "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": { @@ -4148,10 +4166,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", @@ -4163,9 +4184,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" @@ -4691,9 +4712,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4746,6 +4767,18 @@ "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", @@ -5344,13 +5377,10 @@ } }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -6248,9 +6278,9 @@ } }, "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" @@ -6279,13 +6309,13 @@ } }, "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/lazystream": { @@ -6493,12 +6523,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": { @@ -7231,9 +7261,9 @@ } }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "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 }, @@ -7537,9 +7567,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.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", + "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8585,9 +8615,9 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "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", @@ -9323,9 +9353,9 @@ } }, "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==", + "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": { @@ -9620,9 +9650,9 @@ } }, "node_modules/terser": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", - "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", + "integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -10184,9 +10214,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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": [ { @@ -10419,9 +10449,9 @@ } }, "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "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", @@ -10717,12 +10747,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": { @@ -10818,9 +10849,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 6f495c96d..9f8a0bc04 100644 --- a/package.json +++ b/package.json @@ -2,28 +2,28 @@ "name": "@pnp/monorepo", "private": true, "type": "module", - "version": "3.18.0", + "version": "3.19.0", "description": "A JavaScript library for SharePoint & Graph development.", "devDependencies": { - "@azure/identity": "3.3.0", + "@azure/identity": "3.3.1", "@azure/msal-node": "1.18.3", "@microsoft/microsoft-graph-types": "2.38.0", "@pnp/buildsystem": "3.1.0", - "@types/chai": "4.3.6", + "@types/chai": "4.3.8", "@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/gulp": "4.0.15", + "@types/mocha": "10.0.2", "@types/node": "16.11.7", - "@types/webpack": "5.28.2", - "@types/yargs": "17.0.24", + "@types/webpack": "5.28.3", + "@types/yargs": "17.0.28", "@typescript-eslint/eslint-plugin": "5.59.9", "@typescript-eslint/parser": "5.59.9", - "chai": "4.3.8", + "chai": "4.3.10", "chai-as-promised": "7.1.1", "del-cli": "5.1.0", - "eslint": "8.49.0", + "eslint": "8.51.0", "findup-sync": "5.0.0", "mocha": "10.2.0", "msal": "1.4.18", @@ -32,7 +32,7 @@ "string-replace-loader": "3.1.0", "tslib": "2.6.2", "typescript": "4.5.5", - "webpack": "5.88.2", + "webpack": "5.89.0", "webpack-cli": "5.1.4", "webpack-dev-server": "4.15.1", "yargs": "17.7.2" diff --git a/packages/azidjsclient/package.json b/packages/azidjsclient/package.json index 32bfc2d1c..b704e8df9 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.3.0", + "@azure/identity": "3.3.1", "tslib": "2.6.2" } } \ No newline at end of file diff --git a/packages/graph/behaviors/paged.ts b/packages/graph/behaviors/paged.ts index 2d9c67ff7..94f6a259b 100644 --- a/packages/graph/behaviors/paged.ts +++ b/packages/graph/behaviors/paged.ts @@ -5,33 +5,39 @@ import { ConsistencyLevel } from "./consistency-level.js"; export interface IPagedResult { count: number; - value: any[] | null; + value: any | any[] | null; hasNext: boolean; - next(): Promise; + nextLink: string; } /** - * Configures a collection query to returned paged results + * A function that will take a collection defining IGraphQueryableCollection and return the count of items + * in that collection. Not all Graph collections support Count. * - * @param col Collection forming the basis of the paged collection, this param is NOT modified - * @returns A duplicate collection which will return paged results + * @param col The collection to count + * @returns number representing the count */ -export function AsPaged(col: IGraphQueryableCollection, supportsCount = false): IGraphQueryableCollection { +export async function Count(col: IGraphQueryableCollection): Promise { - const q = GraphQueryableCollection(col).using(Paged(supportsCount), ConsistencyLevel()); + const q = GraphQueryableCollection(col).using(Paged(), ConsistencyLevel()); + q.query.set("$count", "true"); + q.top(1); - const queryParams = ["$search", "$top", "$select", "$expand", "$filter", "$orderby"]; + const y: IPagedResult = await q(); + return y.count; +} - if (supportsCount) { +/** + * Configures a collection query to returned paged results via async iteration + * + * @param col Collection forming the basis of the paged collection, this param is NOT modified + * @returns A duplicate collection which will return paged results + */ +export function AsAsyncIterable(col: IGraphQueryableCollection): AsyncIterable { - // we might be constructing our query with a next url that will already contain $count so we need - // to ensure we don't add it again, likewise if it is already in our query collection we don't add it again - if (!q.query.has("$count") && !/\$count=true/i.test(q.toUrl())) { - q.query.set("$count", "true"); - } + const q = GraphQueryableCollection(col).using(Paged(), ConsistencyLevel()); - queryParams.push("$count"); - } + const queryParams = ["$search", "$top", "$select", "$expand", "$filter", "$orderby"]; for (let i = 0; i < queryParams.length; i++) { const param = col.query.get(queryParams[i]); @@ -40,7 +46,32 @@ export function AsPaged(col: IGraphQueryableCollection, supportsCount = false): } } - return q; + 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 }; + } + }, + }; + }, + }; } /** @@ -48,7 +79,7 @@ export function AsPaged(col: IGraphQueryableCollection, supportsCount = false): * * @returns A TimelinePipe used to configure the queryable */ -export function Paged(supportsCount = false): TimelinePipe { +export function Paged(): TimelinePipe { return (instance: IGraphQueryable) => { @@ -59,14 +90,14 @@ export function Paged(supportsCount = false): TimelinePipe { const json = txt.replace(/\s/ig, "").length > 0 ? JSON.parse(txt) : {}; const nextLink = json["@odata.nextLink"]; - const count = supportsCount && hOP(json, "@odata.count") ? parseInt(json["@odata.count"], 10) : 0; + const count = hOP(json, "@odata.count") ? parseInt(json["@odata.count"], 10) : -1; const hasNext = !stringIsNullOrEmpty(nextLink); result = { count, hasNext, - next: () => (hasNext ? AsPaged(GraphQueryableCollection([instance, nextLink]), supportsCount)() : null), + nextLink: hasNext ? nextLink : null, value: parseODataJSON(json), }; diff --git a/packages/graph/directory-objects/types.ts b/packages/graph/directory-objects/types.ts index ad83019b7..c1e8b6c13 100644 --- a/packages/graph/directory-objects/types.ts +++ b/packages/graph/directory-objects/types.ts @@ -3,7 +3,7 @@ import { DirectoryObject as IDirectoryObjectType } from "@microsoft/microsoft-gr import { defaultPath, getById, IGetById, deleteable, IDeleteable } from "../decorators.js"; import { body } from "@pnp/queryable"; import { graphPost } from "../operations.js"; -import { AsPaged, IPagedResult } from "../behaviors/paged.js"; +import { Count } from "../behaviors/paged.js"; /** * Represents a Directory Object entity @@ -65,18 +65,7 @@ export class _DirectoryObjects extends _GraphQ * If the resource doesn't support count, this value will always be zero */ public async count(): Promise { - const q = AsPaged(this, true); - const r: IPagedResult = await q.top(1)(); - return r.count; - } - - /** - * 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(): Promise { - return AsPaged(this, true)(); + return Count(this); } } export interface IDirectoryObjects extends _DirectoryObjects, IGetById { } diff --git a/packages/graph/graphqueryable.ts b/packages/graph/graphqueryable.ts index 3582a7979..77d029776 100644 --- a/packages/graph/graphqueryable.ts +++ b/packages/graph/graphqueryable.ts @@ -1,7 +1,7 @@ import { isArray } from "@pnp/core"; import { IInvokable, Queryable, queryableFactory } from "@pnp/queryable"; import { ConsistencyLevel } from "./behaviors/consistency-level.js"; -import { AsPaged, IPagedResult } from "./behaviors/paged.js"; +import { AsAsyncIterable } from "./behaviors/paged.js"; export type GraphInit = string | IGraphQueryable | [IGraphQueryable, string]; @@ -167,9 +167,8 @@ export class _GraphQueryableCollection extends _GraphQueryable< * If the resource doesn't support count, this value will always be zero */ public async count(): Promise { - const q = AsPaged(this); - const r: IPagedResult = await q.top(1)(); - return r.count; + // 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; } /** @@ -177,8 +176,8 @@ export class _GraphQueryableCollection extends _GraphQueryable< * * @returns an object containing results, the ability to determine if there are more results, and request the next page of results */ - public paged(): Promise { - return AsPaged(this)(); + public paged(): AsyncIterable { + return AsAsyncIterable(this); } } export interface IGraphQueryableCollection extends _GraphQueryableCollection { } diff --git a/packages/graph/messages/users.ts b/packages/graph/messages/users.ts index 0712770bd..fba861a72 100644 --- a/packages/graph/messages/users.ts +++ b/packages/graph/messages/users.ts @@ -1,20 +1,21 @@ 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 { IMessages, Messages, IMailboxSettings, MailboxSettings, IMailFolders, MailFolders } from "./types.js"; import { graphPost } from "../operations.js"; +import { Message } from "@microsoft/microsoft-graph-types"; declare module "../users/types" { interface _User { readonly messages: IMessages; readonly mailboxSettings: IMailboxSettings; readonly mailFolders: IMailFolders; - sendMail(message: IMessage): Promise; + sendMail(message: Message): Promise; } interface IUser { readonly messages: IMessages; readonly mailboxSettings: IMailboxSettings; readonly mailFolders: IMailFolders; - sendMail(message: IMessage): Promise; + sendMail(message: Message): Promise; } } @@ -22,6 +23,6 @@ addProp(_User, "messages", Messages); addProp(_User, "mailboxSettings", MailboxSettings); addProp(_User, "mailFolders", MailFolders); -_User.prototype.sendMail = function (this: _User, message: IMessage): Promise { +_User.prototype.sendMail = function (message: Message): Promise { return graphPost(User(this, "sendMail"), body(message)); }; diff --git a/packages/graph/onedrive/types.ts b/packages/graph/onedrive/types.ts index ec611a8da..deb0e0b35 100644 --- a/packages/graph/onedrive/types.ts +++ b/packages/graph/onedrive/types.ts @@ -14,7 +14,6 @@ import { defaultPath, getById, IGetById, deleteable, IDeleteable, updateable, IU import { body, BlobParse, CacheNever, errorCheck, InjectHeaders } from "@pnp/queryable"; import { graphPatch, graphPost, graphPut } from "../operations.js"; import { driveItemUpload } from "./funcs.js"; -import { AsPaged } from "../behaviors/paged.js"; /** * Describes a Drive instance @@ -150,15 +149,17 @@ export class _Root extends _GraphQueryableInstance { public delta(token?: string): IGraphQueryableCollection { const path = `delta${(token) ? `(token=${token})` : ""}`; - const query = GraphQueryableCollection(this, path); + const query: IGraphQueryableCollection = GraphQueryableCollection(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 = { - next: () => (nextLink ? AsPaged(GraphQueryableCollection([this, nextLink]))() : null), + // TODO:: update docs to show how to load next with async iterator + next: () => (nextLink ? GraphQueryableCollection([this, nextLink]) : null), delta: () => (deltaLink ? GraphQueryableCollection([query, deltaLink])() : null), values: json.value, }; @@ -350,8 +351,8 @@ export class _DriveItem extends _GraphQueryableInstance { * @returns IGraphQueryableCollection */ public analytics(analyticsOptions?: IAnalyticsOptions): IGraphQueryableCollection { - const query = `analytics/${analyticsOptions?analyticsOptions.timeRange:"lastSevenDays"}`; - return GraphQueryableCollection(this, query); + const query = `analytics/${analyticsOptions ? analyticsOptions.timeRange : "lastSevenDays"}`; + return >GraphQueryableCollection(this, query); } } export interface IDriveItem extends _DriveItem, IDeleteable, IUpdateable { } diff --git a/packages/graph/onedrive/users.ts b/packages/graph/onedrive/users.ts index 2d21ba12f..0fbdebdeb 100644 --- a/packages/graph/onedrive/users.ts +++ b/packages/graph/onedrive/users.ts @@ -43,13 +43,7 @@ _Drive.prototype.special = function special(specialFolder: SpecialFolder): IDriv return DriveItem(this, `special/${specialFolder}`); }; -export enum SpecialFolder { - "Documents" = "documents", - "Photos" = "photos", - "CameraRoll" = "cameraroll", - "AppRoot" = "approot", - "Music" = "music", -} +export type SpecialFolder = "documents" | "photos" | "cameraroll" | "approot" | "music"; _DriveItem.prototype.restore = function restore(restoreOptions: IItemOptions): Promise { return graphPost(DriveItem(this, "restore"), body(restoreOptions)); diff --git a/packages/sp/fields/types.ts b/packages/sp/fields/types.ts index 3b801afb6..bc013ec9d 100644 --- a/packages/sp/fields/types.ts +++ b/packages/sp/fields/types.ts @@ -485,7 +485,7 @@ const FieldTypeClassMapping = { [FieldTypes.DateTime]:"SP.FieldDateTime", [FieldTypes.GridChoice]:"SP.FieldRatingScale", [FieldTypes.Guid]: "SP.FieldGuid", - [FieldTypes.Image]:"FieldMultiLineText", + [FieldTypes.Image]:"SP.FieldMultiLineText", [FieldTypes.Integer]:"SP.FieldNumber", [FieldTypes.Location]:"SP.FieldLocation", [FieldTypes.Lookup]:"SP.FieldLookup", diff --git a/packages/sp/items/get-all.ts b/packages/sp/items/get-all.ts index 194e77fdf..ce4ecc4c6 100644 --- a/packages/sp/items/get-all.ts +++ b/packages/sp/items/get-all.ts @@ -30,7 +30,7 @@ _Items.prototype.getAll = async function (this: _Items, requestSize = 2 // $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)) { + if (/^\$select|filter|top|orderby|expand$/i.test(k)) { items.query.set(k, v); } }); diff --git a/packages/sp/lists/types.ts b/packages/sp/lists/types.ts index b99334e92..0a10911ca 100644 --- a/packages/sp/lists/types.ts +++ b/packages/sp/lists/types.ts @@ -384,6 +384,10 @@ export interface IListEnsureResult { * Specifies a Collaborative Application Markup Language (CAML) query on a list or joined lists. */ export interface ICamlQuery { + /** + * Gets or sets a value that indicates whether the query can return incremental results. + */ + AllowIncrementalResults?: boolean; /** * Gets or sets a value that indicates whether the query returns dates in Coordinated Universal Time (UTC) format. diff --git a/test/graph/paging.ts b/test/graph/paging.ts index 69052fa4b..844a56a3c 100644 --- a/test/graph/paging.ts +++ b/test/graph/paging.ts @@ -35,29 +35,14 @@ describe("Groups", function () { } }); - it("pages users 1", async function () { - - let users = await this.pnp.graph.users.top(2).paged(); - - expect(users).to.have.property("hasNext", true); - - users = await users.next(); - - expect(users).to.have.property("hasNext", true); - }); - it("pages all users", async function () { const count = await this.pnp.graph.users.count(); const allUsers = []; - let users = await this.pnp.graph.users.top(20).select("displayName").paged(); - allUsers.push(...users.value); - - while (users.hasNext) { - users = await users.next(); - allUsers.push(...users.value); + for await (const users of this.pnp.graph.users.top(20).select("displayName").paged()) { + allUsers.push(...users); } expect(allUsers.length).to.eq(count); @@ -65,18 +50,17 @@ describe("Groups", function () { it("pages groups", async function () { - let groups = await this.pnp.graph.groups.top(2).paged(); + const count = await this.pnp.graph.groups.count(); + + expect(count).is.gt(0); - expect(groups).to.have.property("hasNext", true); - expect(groups).to.have.property("count").gt(0); - expect(groups.value.length).to.eq(2); + const allGroups = []; - groups = await groups.next(); + for await (const groups of this.pnp.graph.groups.top(20).select("displayName").paged()) { + allGroups.push(...groups); + } - expect(groups).to.have.property("hasNext", true); - // count only returns on the first call, not subsequent paged calls - expect(groups).to.have.property("count").eq(0); - expect(groups.value.length).to.eq(2); + expect(allGroups.length).to.eq(count); }); it("groups count", async function () { @@ -86,38 +70,15 @@ describe("Groups", function () { expect(count).to.be.gt(0); }); - it("pages all groups", async function () { - - const count = await this.pnp.graph.groups.count(); - - const allGroups = []; - let groups = await this.pnp.graph.groups.top(20).select("mailNickname").paged(); - - allGroups.push(...groups.value); - - while (groups.hasNext) { - groups = await groups.next(); - allGroups.push(...groups.value); - } - - expect(allGroups.length).to.be.gt((count - 10)).and.lt((count + 10)); - }); - it("pages items", async function () { - let pagedResults = await itemsCol.top(5).paged(); + const allItems = []; - expect(pagedResults.value.length).to.eq(5); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(pagedResults.hasNext).to.be.true; - expect(pagedResults.count).to.eq(0); - - pagedResults = await pagedResults.next(); + for await (const items of itemsCol.paged()) { + allItems.push(...items); + } - expect(pagedResults.value.length).to.eq(5); - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - expect(pagedResults.hasNext).to.be.true; - expect(pagedResults.count).to.eq(0); + expect(allItems.length).to.be.gt(0); }); it("items count", async function () { @@ -125,6 +86,6 @@ describe("Groups", function () { const count = await itemsCol.count(); // items doesn't support count, should be zero - expect(count).to.eq(0); + expect(count).to.eq(-1); }); }); diff --git a/test/sp/fields.ts b/test/sp/fields.ts index 2684e3843..1ff44b14e 100644 --- a/test/sp/fields.ts +++ b/test/sp/fields.ts @@ -64,6 +64,11 @@ describe("Fields", function () { const field = await this.pnp.sp.web.fields.addText(testFieldNameRand, { Group: testFieldGroup }); return expect(field.data.Title).to.be.equal(testFieldNameRand); }); + it("addImageField", 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", async function () { const testFieldNameRand = `${testFieldName}_${getRandomString(10)}`; const field = await this.pnp.sp.web.fields.addNumber(testFieldNameRand, { Group: testFieldGroup });