@zxncij2390/monorepo3 3.18.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.eslintignore +16 -0
- package/.eslintrc.cjs +150 -0
- package/.github/ISSUE_TEMPLATE/bug-report.yml +178 -0
- package/.github/ISSUE_TEMPLATE/enhancement.yml +99 -0
- package/.github/ISSUE_TEMPLATE/question.yml +72 -0
- package/.github/ISSUE_TEMPLATE.md +39 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +24 -0
- package/.github/workflows/lock.yml +18 -0
- package/.github/workflows/publish-buildsystem.yml +34 -0
- package/.github/workflows/publish-docs.yml +21 -0
- package/.github/workflows/publish.yml +40 -0
- package/.github/workflows/pull_request.yaml +28 -0
- package/.github/workflows/push.yaml +32 -0
- package/.github/workflows/v3-nightly.yml +40 -0
- package/.mocharc.cjs +68 -0
- package/.vscode/launch.json +103 -0
- package/.vscode/settings.json +17 -0
- package/.vscode/tasks.json +124 -0
- package/AUTHORS +13 -0
- package/CHANGELOG.md +33 -0
- package/CODE_OF_CONDUCT.md +6 -0
- package/CONTRIBUTING.md +9 -0
- package/LICENSE +25 -0
- package/README.md +66 -0
- package/buildsystem-config.ts +146 -0
- package/debug/launch/graph.ts +20 -0
- package/debug/launch/main.ts +38 -0
- package/debug/launch/setup.ts +50 -0
- package/debug/launch/sp.ts +21 -0
- package/debug/launch/tsconfig.json +27 -0
- package/debug/serve/main.ts +47 -0
- package/debug/serve/plumbing/local-module-resolver-plugin.ts +68 -0
- package/debug/serve/plumbing/run.ts +24 -0
- package/debug/serve/plumbing/serve.ts +27 -0
- package/debug/serve/plumbing/webpack.config.ts +43 -0
- package/debug/serve/spa.html +12 -0
- package/debug/serve/tsconfig.json +15 -0
- package/debug/spfx/.eslintrc.js +352 -0
- package/debug/spfx/README.md +73 -0
- package/debug/spfx/package-lock.json +57299 -0
- package/debug/spfx/package.json +38 -0
- package/debug/spfx/pnpjs-local-debug-start.js +19 -0
- package/debug/spfx/teams/f4c0e5ff-c402-46b7-8073-8cc506808d06_color.png +0 -0
- package/debug/spfx/teams/f4c0e5ff-c402-46b7-8073-8cc506808d06_outline.png +0 -0
- package/docs/_theme/main.html +5 -0
- package/docs/azidjsclient/index.md +36 -0
- package/docs/concepts/adv-clientside-pages.md +169 -0
- package/docs/concepts/auth-browser.md +42 -0
- package/docs/concepts/auth-nodejs.md +101 -0
- package/docs/concepts/auth-spfx.md +76 -0
- package/docs/concepts/authentication.md +42 -0
- package/docs/concepts/batching-caching.md +77 -0
- package/docs/concepts/batching.md +257 -0
- package/docs/concepts/calling-other-endpoints.md +213 -0
- package/docs/concepts/custom-bundle.md +15 -0
- package/docs/concepts/error-handling.md +245 -0
- package/docs/concepts/invokable.md +7 -0
- package/docs/concepts/nightly-builds.md +19 -0
- package/docs/concepts/project-preset.md +123 -0
- package/docs/concepts/selective-imports.md +106 -0
- package/docs/concepts/typings.md +23 -0
- package/docs/contributing/debug-tests.md +76 -0
- package/docs/contributing/debugging.md +135 -0
- package/docs/contributing/documentation.md +34 -0
- package/docs/contributing/extending-the-library.md +223 -0
- package/docs/contributing/index.md +22 -0
- package/docs/contributing/local-debug-configuration.md +28 -0
- package/docs/contributing/npm-scripts.md +148 -0
- package/docs/contributing/pull-requests.md +27 -0
- package/docs/contributing/settings.md +98 -0
- package/docs/contributing/setup-dev-machine.md +36 -0
- package/docs/core/behavior-recipes.md +199 -0
- package/docs/core/behaviors.md +179 -0
- package/docs/core/moments.md +215 -0
- package/docs/core/observers.md +100 -0
- package/docs/core/storage.md +90 -0
- package/docs/core/timeline.md +190 -0
- package/docs/core/util.md +191 -0
- package/docs/css/extra.css +33 -0
- package/docs/getting-started.md +361 -0
- package/docs/graph/behaviors.md +267 -0
- package/docs/graph/bookings.md +180 -0
- package/docs/graph/calendars.md +270 -0
- package/docs/graph/cloud-communications.md +40 -0
- package/docs/graph/columns.md +125 -0
- package/docs/graph/contacts.md +298 -0
- package/docs/graph/content-types.md +193 -0
- package/docs/graph/directoryobjects.md +106 -0
- package/docs/graph/groups.md +164 -0
- package/docs/graph/insights.md +151 -0
- package/docs/graph/invitations.md +22 -0
- package/docs/graph/items.md +38 -0
- package/docs/graph/lists.md +87 -0
- package/docs/graph/messages.md +20 -0
- package/docs/graph/onedrive.md +614 -0
- package/docs/graph/outlook.md +82 -0
- package/docs/graph/photos.md +71 -0
- package/docs/graph/planner.md +249 -0
- package/docs/graph/search.md +25 -0
- package/docs/graph/shares.md +44 -0
- package/docs/graph/sites.md +47 -0
- package/docs/graph/subscriptions.md +79 -0
- package/docs/graph/teams.md +293 -0
- package/docs/graph/users.md +134 -0
- package/docs/img/ConsoleListenerColors.png +0 -0
- package/docs/img/Logo.png +0 -0
- package/docs/img/PnPJS_FluentAPI.gif +0 -0
- package/docs/img/SPFx-On-Premesis-2016-1.png +0 -0
- package/docs/img/TimelineArchitecture.jpg +0 -0
- package/docs/img/csp_copyccvalue.png +0 -0
- package/docs/img/csp_networktab.png +0 -0
- package/docs/img/office365-header-icon.png +0 -0
- package/docs/img/usage-2020-eoy.png +0 -0
- package/docs/img/usage-2021-eoy.png +0 -0
- package/docs/img/usage-2022-eoy.png +0 -0
- package/docs/index.md +56 -0
- package/docs/logging/index.md +262 -0
- package/docs/msaljsclient/index.md +33 -0
- package/docs/news/2020-year-in-review.md +162 -0
- package/docs/news/2021-year-in-review.md +148 -0
- package/docs/news/2022-year-in-review.md +122 -0
- package/docs/nodejs/behaviors.md +164 -0
- package/docs/nodejs/sp-extensions.md +99 -0
- package/docs/packages.md +53 -0
- package/docs/queryable/behaviors.md +496 -0
- package/docs/queryable/extensions.md +204 -0
- package/docs/queryable/queryable.md +385 -0
- package/docs/sp/alias-parameters.md +76 -0
- package/docs/sp/alm.md +139 -0
- package/docs/sp/attachments.md +157 -0
- package/docs/sp/behaviors.md +142 -0
- package/docs/sp/clientside-pages.md +1048 -0
- package/docs/sp/column-defaults.md +241 -0
- package/docs/sp/comments-likes.md +302 -0
- package/docs/sp/content-types.md +131 -0
- package/docs/sp/context-info.md +67 -0
- package/docs/sp/favorites.md +91 -0
- package/docs/sp/features.md +83 -0
- package/docs/sp/fields.md +668 -0
- package/docs/sp/files.md +559 -0
- package/docs/sp/folders.md +532 -0
- package/docs/sp/forms.md +22 -0
- package/docs/sp/groupSiteManager.md +40 -0
- package/docs/sp/hubsites.md +140 -0
- package/docs/sp/items.md +601 -0
- package/docs/sp/lists.md +572 -0
- package/docs/sp/navigation.md +171 -0
- package/docs/sp/permissions.md +82 -0
- package/docs/sp/profiles.md +407 -0
- package/docs/sp/publishing-sitepageservice.md +16 -0
- package/docs/sp/recycle-bin.md +72 -0
- package/docs/sp/regional-settings.md +108 -0
- package/docs/sp/related-items.md +136 -0
- package/docs/sp/search.md +207 -0
- package/docs/sp/security.md +196 -0
- package/docs/sp/sharing.md +273 -0
- package/docs/sp/site-designs.md +117 -0
- package/docs/sp/site-groups.md +144 -0
- package/docs/sp/site-scripts.md +123 -0
- package/docs/sp/site-users.md +211 -0
- package/docs/sp/sites.md +269 -0
- package/docs/sp/social.md +182 -0
- package/docs/sp/sp-utilities-utility.md +159 -0
- package/docs/sp/subscriptions.md +79 -0
- package/docs/sp/taxonomy.md +470 -0
- package/docs/sp/tenant-properties.md +55 -0
- package/docs/sp/user-custom-actions.md +95 -0
- package/docs/sp/views.md +226 -0
- package/docs/sp/webs.md +947 -0
- package/docs/sp-admin/index.md +139 -0
- package/docs/transition-guide.md +87 -0
- package/docs/v1/404.html +1611 -0
- package/docs/v1/assets/fonts/font-awesome.css +4 -0
- package/docs/v1/assets/fonts/material-icons.css +13 -0
- package/docs/v1/assets/fonts/specimen/FontAwesome.ttf +0 -0
- package/docs/v1/assets/fonts/specimen/FontAwesome.woff +0 -0
- package/docs/v1/assets/fonts/specimen/FontAwesome.woff2 +0 -0
- package/docs/v1/assets/fonts/specimen/MaterialIcons-Regular.ttf +0 -0
- package/docs/v1/assets/fonts/specimen/MaterialIcons-Regular.woff +0 -0
- package/docs/v1/assets/fonts/specimen/MaterialIcons-Regular.woff2 +0 -0
- package/docs/v1/assets/images/favicon.png +0 -0
- package/docs/v1/assets/images/icons/bitbucket.1b09e088.svg +20 -0
- package/docs/v1/assets/images/icons/github.f0b8504a.svg +18 -0
- package/docs/v1/assets/images/icons/gitlab.6dd19c00.svg +38 -0
- package/docs/v1/assets/javascripts/application.583bbe55.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.da.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.de.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.du.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.es.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.fi.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.fr.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.hu.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.it.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.jp.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.multi.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.no.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.pt.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.ro.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.ru.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.stemmer.support.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.sv.js +1 -0
- package/docs/v1/assets/javascripts/lunr/lunr.tr.js +1 -0
- package/docs/v1/assets/javascripts/lunr/tinyseg.js +1 -0
- package/docs/v1/assets/javascripts/modernizr.1aa3b519.js +1 -0
- package/docs/v1/assets/stylesheets/application-palette.22915126.css +1176 -0
- package/docs/v1/assets/stylesheets/application.451f80e5.css +2552 -0
- package/docs/v1/common/docs/adalclient/index.html +1994 -0
- package/docs/v1/common/docs/collections/index.html +1786 -0
- package/docs/v1/common/docs/custom-httpclientimpl/index.html +1798 -0
- package/docs/v1/common/docs/index.html +1787 -0
- package/docs/v1/common/docs/libconfig/index.html +1930 -0
- package/docs/v1/common/docs/netutil/index.html +1860 -0
- package/docs/v1/common/docs/storage/index.html +1850 -0
- package/docs/v1/common/docs/util/index.html +2058 -0
- package/docs/v1/config-store/docs/configuration/index.html +1730 -0
- package/docs/v1/config-store/docs/index.html +1761 -0
- package/docs/v1/config-store/docs/providers/index.html +1782 -0
- package/docs/v1/documentation/SPFx-On-Premesis-2016/index.html +1720 -0
- package/docs/v1/documentation/beta-versions/index.html +1742 -0
- package/docs/v1/documentation/css/extra.css +33 -0
- package/docs/v1/documentation/debugging/index.html +2098 -0
- package/docs/v1/documentation/deployment/index.html +1972 -0
- package/docs/v1/documentation/documentation/index.html +1760 -0
- package/docs/v1/documentation/getting-started/index.html +2280 -0
- package/docs/v1/documentation/getting-started-dev/index.html +1799 -0
- package/docs/v1/documentation/gulp-commands/index.html +2100 -0
- package/docs/v1/documentation/img/Logo.png +0 -0
- package/docs/v1/documentation/img/PnPJS_FluentAPI.gif +0 -0
- package/docs/v1/documentation/img/SPFx-On-Premesis-2016-1.png +0 -0
- package/docs/v1/documentation/img/office365-header-icon.png +0 -0
- package/docs/v1/documentation/img/pnpjs-common-uml.svg +220 -0
- package/docs/v1/documentation/img/pnpjs-config-store-uml.svg +56 -0
- package/docs/v1/documentation/img/pnpjs-graph-uml.svg +602 -0
- package/docs/v1/documentation/img/pnpjs-logging-uml.svg +59 -0
- package/docs/v1/documentation/img/pnpjs-nodejs-uml.svg +85 -0
- package/docs/v1/documentation/img/pnpjs-odata-uml.svg +253 -0
- package/docs/v1/documentation/img/pnpjs-sp-addinhelpers-uml.svg +48 -0
- package/docs/v1/documentation/img/pnpjs-sp-clientsvc-uml.svg +167 -0
- package/docs/v1/documentation/img/pnpjs-sp-taxonomy-uml.svg +458 -0
- package/docs/v1/documentation/img/pnpjs-sp-uml.svg +2833 -0
- package/docs/v1/documentation/package-structure/index.html +1875 -0
- package/docs/v1/documentation/packages/index.html +1741 -0
- package/docs/v1/documentation/polyfill/index.html +1877 -0
- package/docs/v1/documentation/theme/main.html +5 -0
- package/docs/v1/documentation/transition-guide/index.html +1977 -0
- package/docs/v1/graph/docs/contacts/index.html +2080 -0
- package/docs/v1/graph/docs/directoryobjects/index.html +1865 -0
- package/docs/v1/graph/docs/index.html +1858 -0
- package/docs/v1/graph/docs/insights/index.html +1698 -0
- package/docs/v1/graph/docs/invitations/index.html +1742 -0
- package/docs/v1/graph/docs/onedrive/index.html +2086 -0
- package/docs/v1/graph/docs/people/index.html +1664 -0
- package/docs/v1/graph/docs/planner/index.html +2097 -0
- package/docs/v1/graph/docs/security/index.html +1692 -0
- package/docs/v1/graph/docs/sites/index.html +2043 -0
- package/docs/v1/graph/docs/subscriptions/index.html +1835 -0
- package/docs/v1/graph/docs/teams/index.html +2097 -0
- package/docs/v1/index.html +1889 -0
- package/docs/v1/logging/docs/index.html +2045 -0
- package/docs/v1/nodejs/docs/adal-certificate-fetch-client/index.html +1676 -0
- package/docs/v1/nodejs/docs/adal-fetch-client/index.html +1713 -0
- package/docs/v1/nodejs/docs/bearer-token-fetch-client/index.html +1712 -0
- package/docs/v1/nodejs/docs/index.html +1764 -0
- package/docs/v1/nodejs/docs/provider-hosted-app/index.html +1725 -0
- package/docs/v1/nodejs/docs/proxy/index.html +1699 -0
- package/docs/v1/nodejs/docs/sp-fetch-client/index.html +1895 -0
- package/docs/v1/odata/docs/caching/index.html +1988 -0
- package/docs/v1/odata/docs/core/index.html +1829 -0
- package/docs/v1/odata/docs/index.html +1781 -0
- package/docs/v1/odata/docs/odata-batch/index.html +1755 -0
- package/docs/v1/odata/docs/parsers/index.html +1862 -0
- package/docs/v1/odata/docs/pipeline/index.html +1811 -0
- package/docs/v1/odata/docs/queryable/index.html +1967 -0
- package/docs/v1/pnpjs/docs/index.html +1814 -0
- package/docs/v1/search/search_index.json +1 -0
- package/docs/v1/sitemap.xml +428 -0
- package/docs/v1/sitemap.xml.gz +0 -0
- package/docs/v1/sp/docs/alias-parameters/index.html +1830 -0
- package/docs/v1/sp/docs/alm/index.html +1920 -0
- package/docs/v1/sp/docs/attachments/index.html +1998 -0
- package/docs/v1/sp/docs/client-side-pages/index.html +2031 -0
- package/docs/v1/sp/docs/comments-likes/index.html +1958 -0
- package/docs/v1/sp/docs/content-types/index.html +1758 -0
- package/docs/v1/sp/docs/entity-merging/index.html +1838 -0
- package/docs/v1/sp/docs/features/index.html +1824 -0
- package/docs/v1/sp/docs/fields/index.html +2031 -0
- package/docs/v1/sp/docs/files/index.html +2178 -0
- package/docs/v1/sp/docs/index.html +1894 -0
- package/docs/v1/sp/docs/items/index.html +2362 -0
- package/docs/v1/sp/docs/navigation-service/index.html +1791 -0
- package/docs/v1/sp/docs/permissions/index.html +1860 -0
- package/docs/v1/sp/docs/profiles/index.html +1794 -0
- package/docs/v1/sp/docs/related-items/index.html +1886 -0
- package/docs/v1/sp/docs/search/index.html +1830 -0
- package/docs/v1/sp/docs/sharing/index.html +2058 -0
- package/docs/v1/sp/docs/sitedesigns/index.html +1851 -0
- package/docs/v1/sp/docs/sites/index.html +2186 -0
- package/docs/v1/sp/docs/social/index.html +2011 -0
- package/docs/v1/sp/docs/sp-utilities-utility/index.html +2061 -0
- package/docs/v1/sp/docs/tenant-properties/index.html +1795 -0
- package/docs/v1/sp/docs/views/index.html +1869 -0
- package/docs/v1/sp/docs/webs/index.html +1972 -0
- package/docs/v1/sp-addinhelpers/docs/index.html +1771 -0
- package/docs/v1/sp-addinhelpers/docs/sp-request-executor-client/index.html +1760 -0
- package/docs/v1/sp-addinhelpers/docs/sp-rest-addin/index.html +1711 -0
- package/docs/v1/sp-clientsvc/docs/index.html +1736 -0
- package/docs/v1/sp-taxonomy/docs/index.html +1887 -0
- package/docs/v1/sp-taxonomy/docs/labels/index.html +1827 -0
- package/docs/v1/sp-taxonomy/docs/term-groups/index.html +1875 -0
- package/docs/v1/sp-taxonomy/docs/term-sets/index.html +1946 -0
- package/docs/v1/sp-taxonomy/docs/term-stores/index.html +2111 -0
- package/docs/v1/sp-taxonomy/docs/terms/index.html +2036 -0
- package/docs/v1/sp-taxonomy/docs/utilities/index.html +1783 -0
- package/docs/v2/404.html +2108 -0
- package/docs/v2/SPFx-on-premises/index.html +2278 -0
- package/docs/v2/_theme/main.html +5 -0
- package/docs/v2/adaljsclient/adalclient/index.html +15 -0
- package/docs/v2/adaljsclient/index.html +15 -0
- package/docs/v2/assets/images/favicon.png +0 -0
- package/docs/v2/assets/javascripts/bundle.9554a270.min.js +2 -0
- package/docs/v2/assets/javascripts/bundle.9554a270.min.js.map +1 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
- package/docs/v2/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
- package/docs/v2/assets/javascripts/lunr/tinyseg.min.js +1 -0
- package/docs/v2/assets/javascripts/vendor.77e55a48.min.js +30 -0
- package/docs/v2/assets/javascripts/vendor.77e55a48.min.js.map +1 -0
- package/docs/v2/assets/javascripts/worker/search.4ac00218.min.js +59 -0
- package/docs/v2/assets/javascripts/worker/search.4ac00218.min.js.map +1 -0
- package/docs/v2/assets/stylesheets/main.38780c08.min.css +3 -0
- package/docs/v2/assets/stylesheets/main.38780c08.min.css.map +1 -0
- package/docs/v2/assets/stylesheets/palette.3f72e892.min.css +3 -0
- package/docs/v2/assets/stylesheets/palette.3f72e892.min.css.map +1 -0
- package/docs/v2/authentication/adaljsclient/index.html +2510 -0
- package/docs/v2/authentication/bearertokenclient/index.html +2251 -0
- package/docs/v2/authentication/client-spa/index.html +2206 -0
- package/docs/v2/authentication/client-spfx/index.html +2397 -0
- package/docs/v2/authentication/index.html +2307 -0
- package/docs/v2/authentication/lambdaclient/index.html +2304 -0
- package/docs/v2/authentication/msaljsclient/index.html +2413 -0
- package/docs/v2/authentication/server-nodejs/index.html +2404 -0
- package/docs/v2/authentication/sp-app-registration/index.html +2273 -0
- package/docs/v2/common/collections/index.html +2277 -0
- package/docs/v2/common/custom-httpclientimpl/index.html +2300 -0
- package/docs/v2/common/index.html +2262 -0
- package/docs/v2/common/libconfig/index.html +2413 -0
- package/docs/v2/common/netutil/index.html +2350 -0
- package/docs/v2/common/storage/index.html +2339 -0
- package/docs/v2/common/util/index.html +2638 -0
- package/docs/v2/concepts/configuration/index.html +2685 -0
- package/docs/v2/concepts/custom-bundle/index.html +2279 -0
- package/docs/v2/concepts/error-handling/index.html +2539 -0
- package/docs/v2/concepts/ie11-mode/index.html +2278 -0
- package/docs/v2/concepts/invokable/index.html +2254 -0
- package/docs/v2/concepts/polyfill/index.html +2401 -0
- package/docs/v2/concepts/selective-imports/index.html +2360 -0
- package/docs/v2/concepts/settings/index.html +2551 -0
- package/docs/v2/config-store/configuration/index.html +2226 -0
- package/docs/v2/config-store/index.html +2239 -0
- package/docs/v2/config-store/providers/index.html +2275 -0
- package/docs/v2/contributing/debug-tests/index.html +2323 -0
- package/docs/v2/contributing/debugging/index.html +2514 -0
- package/docs/v2/contributing/documentation/index.html +2291 -0
- package/docs/v2/contributing/extending-the-library/index.html +2521 -0
- package/docs/v2/contributing/index.html +2270 -0
- package/docs/v2/contributing/local-debug-configuration/index.html +2284 -0
- package/docs/v2/contributing/pull-requests/index.html +2261 -0
- package/docs/v2/contributing/setup-dev-machine/index.html +2284 -0
- package/docs/v2/css/extra.css +33 -0
- package/docs/v2/debug-tests/index.html +15 -0
- package/docs/v2/debugging/index.html +15 -0
- package/docs/v2/documentation/index.html +15 -0
- package/docs/v2/getting-started/index.html +2789 -0
- package/docs/v2/getting-started-dev/index.html +15 -0
- package/docs/v2/graph/calendars/index.html +2569 -0
- package/docs/v2/graph/contacts/index.html +2673 -0
- package/docs/v2/graph/directoryobjects/index.html +2402 -0
- package/docs/v2/graph/groups/index.html +2488 -0
- package/docs/v2/graph/index.html +2333 -0
- package/docs/v2/graph/insights/index.html +2478 -0
- package/docs/v2/graph/invitations/index.html +2273 -0
- package/docs/v2/graph/onedrive/index.html +2617 -0
- package/docs/v2/graph/outlook/index.html +2363 -0
- package/docs/v2/graph/photos/index.html +2351 -0
- package/docs/v2/graph/planner/index.html +2628 -0
- package/docs/v2/graph/search/index.html +2264 -0
- package/docs/v2/graph/subscriptions/index.html +2333 -0
- package/docs/v2/graph/teams/index.html +2619 -0
- package/docs/v2/graph/users/index.html +2461 -0
- package/docs/v2/img/ConsoleListenerColors.png +0 -0
- package/docs/v2/img/Logo.png +0 -0
- package/docs/v2/img/PnPJS_FluentAPI.gif +0 -0
- package/docs/v2/img/SPFx-On-Premesis-2016-1.png +0 -0
- package/docs/v2/img/office365-header-icon.png +0 -0
- package/docs/v2/img/usage-2020-eoy.png +0 -0
- package/docs/v2/index.html +2410 -0
- package/docs/v2/logging/index.html +2622 -0
- package/docs/v2/news/2020-year-in-review/index.html +2525 -0
- package/docs/v2/nodejs/adal-fetch-client/index.html +2204 -0
- package/docs/v2/nodejs/bearer-token-fetch-client/index.html +2203 -0
- package/docs/v2/nodejs/index.html +2261 -0
- package/docs/v2/nodejs/provider-hosted-app/index.html +2220 -0
- package/docs/v2/nodejs/proxy/index.html +2238 -0
- package/docs/v2/nodejs/sp-extensions/index.html +2362 -0
- package/docs/v2/nodejs/sp-fetch-client/index.html +2294 -0
- package/docs/v2/nodejs-support/index.html +2398 -0
- package/docs/v2/npm-scripts/index.html +2521 -0
- package/docs/v2/odata/caching/index.html +2465 -0
- package/docs/v2/odata/core/index.html +2322 -0
- package/docs/v2/odata/debug/index.html +2358 -0
- package/docs/v2/odata/extensions/index.html +2581 -0
- package/docs/v2/odata/index.html +2259 -0
- package/docs/v2/odata/odata-batch/index.html +2250 -0
- package/docs/v2/odata/parsers/index.html +2355 -0
- package/docs/v2/odata/pipeline/index.html +2297 -0
- package/docs/v2/odata/queryable/index.html +2455 -0
- package/docs/v2/packages/index.html +2251 -0
- package/docs/v2/pnpjs/index.html +2281 -0
- package/docs/v2/search/search_index.json +1 -0
- package/docs/v2/sitemap.xml +483 -0
- package/docs/v2/sitemap.xml.gz +0 -0
- package/docs/v2/sp/alias-parameters/index.html +2330 -0
- package/docs/v2/sp/alm/index.html +2433 -0
- package/docs/v2/sp/attachments/index.html +2504 -0
- package/docs/v2/sp/clientside-pages/index.html +3477 -0
- package/docs/v2/sp/column-defaults/index.html +2540 -0
- package/docs/v2/sp/comments-likes/index.html +2646 -0
- package/docs/v2/sp/content-types/index.html +2462 -0
- package/docs/v2/sp/custom-irequestclient/index.html +2339 -0
- package/docs/v2/sp/entity-merging/index.html +2325 -0
- package/docs/v2/sp/features/index.html +2440 -0
- package/docs/v2/sp/fields/index.html +3103 -0
- package/docs/v2/sp/files/index.html +2949 -0
- package/docs/v2/sp/folders/index.html +2968 -0
- package/docs/v2/sp/forms/index.html +2289 -0
- package/docs/v2/sp/hubsites/index.html +2485 -0
- package/docs/v2/sp/index.html +2328 -0
- package/docs/v2/sp/items/index.html +2974 -0
- package/docs/v2/sp/lists/index.html +3387 -0
- package/docs/v2/sp/navigation/index.html +2535 -0
- package/docs/v2/sp/permissions/index.html +2338 -0
- package/docs/v2/sp/profiles/index.html +2806 -0
- package/docs/v2/sp/regional-settings/index.html +2394 -0
- package/docs/v2/sp/related-items/index.html +2417 -0
- package/docs/v2/sp/search/index.html +2474 -0
- package/docs/v2/sp/security/index.html +2432 -0
- package/docs/v2/sp/sharing/index.html +2589 -0
- package/docs/v2/sp/site-designs/index.html +2414 -0
- package/docs/v2/sp/site-groups/index.html +2504 -0
- package/docs/v2/sp/site-scripts/index.html +2433 -0
- package/docs/v2/sp/site-users/index.html +2641 -0
- package/docs/v2/sp/sites/index.html +2727 -0
- package/docs/v2/sp/social/index.html +2517 -0
- package/docs/v2/sp/sp-utilities-utility/index.html +2460 -0
- package/docs/v2/sp/subscriptions/index.html +2395 -0
- package/docs/v2/sp/taxonomy/index.html +2565 -0
- package/docs/v2/sp/tenant-properties/index.html +2286 -0
- package/docs/v2/sp/user-custom-actions/index.html +2424 -0
- package/docs/v2/sp/views/index.html +2652 -0
- package/docs/v2/sp/webs/index.html +4190 -0
- package/docs/v2/sp-addinhelpers/index.html +2274 -0
- package/docs/v2/sp-addinhelpers/sp-request-executor-client/index.html +2253 -0
- package/docs/v2/sp-addinhelpers/sp-rest-addin/index.html +2206 -0
- package/docs/v2/transition-guide/index.html +2435 -0
- package/mkdocs-requirements.txt +2 -0
- package/mkdocs.yml +188 -0
- package/package.json +96 -0
- package/packages/azidjsclient/index.ts +68 -0
- package/packages/azidjsclient/package.json +13 -0
- package/packages/azidjsclient/tsconfig.json +12 -0
- package/packages/core/behaviors/assign-from.ts +17 -0
- package/packages/core/behaviors/copy-from.ts +58 -0
- package/packages/core/extendable.ts +193 -0
- package/packages/core/index.ts +11 -0
- package/packages/core/moments.ts +117 -0
- package/packages/core/package.json +10 -0
- package/packages/core/storage.ts +274 -0
- package/packages/core/timeline.ts +387 -0
- package/packages/core/tsconfig.json +10 -0
- package/packages/core/util.ts +169 -0
- package/packages/graph/attachments/conversations.ts +14 -0
- package/packages/graph/attachments/index.ts +8 -0
- package/packages/graph/attachments/types.ts +37 -0
- package/packages/graph/batching.ts +408 -0
- package/packages/graph/behaviors/consistency-level.ts +17 -0
- package/packages/graph/behaviors/defaults.ts +41 -0
- package/packages/graph/behaviors/endpoint.ts +22 -0
- package/packages/graph/behaviors/graphbrowser.ts +38 -0
- package/packages/graph/behaviors/paged.ts +109 -0
- package/packages/graph/behaviors/spfx.ts +46 -0
- package/packages/graph/behaviors/telemetry.ts +19 -0
- package/packages/graph/bookings/funcs.ts +18 -0
- package/packages/graph/bookings/index.ts +62 -0
- package/packages/graph/bookings/types.ts +352 -0
- package/packages/graph/calendars/funcs.ts +58 -0
- package/packages/graph/calendars/groups.ts +19 -0
- package/packages/graph/calendars/index.ts +18 -0
- package/packages/graph/calendars/types.ts +73 -0
- package/packages/graph/calendars/users.ts +28 -0
- package/packages/graph/cloud-communications/index.ts +24 -0
- package/packages/graph/cloud-communications/types.ts +32 -0
- package/packages/graph/cloud-communications/users.ts +15 -0
- package/packages/graph/columns/addColumns.ts +28 -0
- package/packages/graph/columns/content-types.ts +44 -0
- package/packages/graph/columns/index.ts +14 -0
- package/packages/graph/columns/lists.ts +33 -0
- package/packages/graph/columns/sites.ts +32 -0
- package/packages/graph/columns/types.ts +24 -0
- package/packages/graph/contacts/index.ts +14 -0
- package/packages/graph/contacts/types.ts +126 -0
- package/packages/graph/contacts/users.ts +17 -0
- package/packages/graph/content-types/index.ts +11 -0
- package/packages/graph/content-types/lists.ts +44 -0
- package/packages/graph/content-types/sites.ts +70 -0
- package/packages/graph/content-types/types.ts +112 -0
- package/packages/graph/conversations/groups.ts +20 -0
- package/packages/graph/conversations/index.ts +19 -0
- package/packages/graph/conversations/types.ts +147 -0
- package/packages/graph/decorators.ts +164 -0
- package/packages/graph/directory-objects/index.ts +24 -0
- package/packages/graph/directory-objects/types.ts +94 -0
- package/packages/graph/fi.ts +46 -0
- package/packages/graph/graphqueryable.ts +193 -0
- package/packages/graph/groups/index.ts +25 -0
- package/packages/graph/groups/types.ts +130 -0
- package/packages/graph/index.ts +21 -0
- package/packages/graph/insights/index.ts +20 -0
- package/packages/graph/insights/types.ts +105 -0
- package/packages/graph/insights/users.ts +14 -0
- package/packages/graph/invitations/index.ts +22 -0
- package/packages/graph/invitations/types.ts +41 -0
- package/packages/graph/lists/drive.ts +21 -0
- package/packages/graph/lists/index.ts +10 -0
- package/packages/graph/lists/sites.ts +16 -0
- package/packages/graph/lists/types.ts +47 -0
- package/packages/graph/members/groups.ts +17 -0
- package/packages/graph/members/index.ts +8 -0
- package/packages/graph/members/types.ts +40 -0
- package/packages/graph/messages/index.ts +14 -0
- package/packages/graph/messages/types.ts +46 -0
- package/packages/graph/messages/users.ts +27 -0
- package/packages/graph/onedrive/funcs.ts +40 -0
- package/packages/graph/onedrive/groups.ts +33 -0
- package/packages/graph/onedrive/index.ts +48 -0
- package/packages/graph/onedrive/sites.ts +35 -0
- package/packages/graph/onedrive/types.ts +482 -0
- package/packages/graph/onedrive/users.ts +56 -0
- package/packages/graph/onenote/index.ts +16 -0
- package/packages/graph/onenote/types.ts +119 -0
- package/packages/graph/onenote/users.ts +14 -0
- package/packages/graph/operations.ts +22 -0
- package/packages/graph/outlook/index.ts +11 -0
- package/packages/graph/outlook/types.ts +58 -0
- package/packages/graph/outlook/users.ts +14 -0
- package/packages/graph/package.json +16 -0
- package/packages/graph/photos/groups.ts +14 -0
- package/packages/graph/photos/index.ts +7 -0
- package/packages/graph/photos/types.ts +33 -0
- package/packages/graph/photos/users.ts +14 -0
- package/packages/graph/planner/groups.ts +14 -0
- package/packages/graph/planner/index.ts +42 -0
- package/packages/graph/planner/types.ts +213 -0
- package/packages/graph/planner/users.ts +14 -0
- package/packages/graph/post-install.cjs +20 -0
- package/packages/graph/presets/all.ts +42 -0
- package/packages/graph/search/index.ts +18 -0
- package/packages/graph/search/types.ts +20 -0
- package/packages/graph/shares/index.ts +23 -0
- package/packages/graph/shares/types.ts +47 -0
- package/packages/graph/sites/group.ts +14 -0
- package/packages/graph/sites/index.ts +25 -0
- package/packages/graph/sites/types.ts +45 -0
- package/packages/graph/subscriptions/index.ts +24 -0
- package/packages/graph/subscriptions/types.ts +59 -0
- package/packages/graph/teams/index.ts +68 -0
- package/packages/graph/teams/types.ts +333 -0
- package/packages/graph/teams/users.ts +14 -0
- package/packages/graph/tsconfig.json +16 -0
- package/packages/graph/users/index.ts +34 -0
- package/packages/graph/users/types.ts +56 -0
- package/packages/graph/utils/type.ts +3 -0
- package/packages/logging/index.ts +145 -0
- package/packages/logging/listeners.ts +134 -0
- package/packages/logging/package.json +10 -0
- package/packages/logging/tsconfig.json +7 -0
- package/packages/msaljsclient/index.ts +40 -0
- package/packages/msaljsclient/package.json +12 -0
- package/packages/msaljsclient/tsconfig.json +12 -0
- package/packages/nodejs/behaviors/fetch.ts +130 -0
- package/packages/nodejs/behaviors/graphdefault.ts +50 -0
- package/packages/nodejs/behaviors/msal.ts +24 -0
- package/packages/nodejs/behaviors/spdefault.ts +45 -0
- package/packages/nodejs/behaviors/stream-parse.ts +7 -0
- package/packages/nodejs/index.ts +33 -0
- package/packages/nodejs/package.json +17 -0
- package/packages/nodejs/sp-extensions/stream.ts +136 -0
- package/packages/nodejs/tsconfig.json +28 -0
- package/packages/queryable/add-prop.ts +18 -0
- package/packages/queryable/behaviors/bearer-token.ts +15 -0
- package/packages/queryable/behaviors/browser-fetch.ts +131 -0
- package/packages/queryable/behaviors/caching-pessimistic.ts +67 -0
- package/packages/queryable/behaviors/caching.ts +149 -0
- package/packages/queryable/behaviors/cancelable.ts +264 -0
- package/packages/queryable/behaviors/inject-headers.ts +23 -0
- package/packages/queryable/behaviors/parsers.ts +134 -0
- package/packages/queryable/behaviors/resolvers.ts +28 -0
- package/packages/queryable/behaviors/timeout.ts +24 -0
- package/packages/queryable/index.ts +19 -0
- package/packages/queryable/invokable.ts +42 -0
- package/packages/queryable/operations.ts +32 -0
- package/packages/queryable/package.json +11 -0
- package/packages/queryable/queryable-factory.ts +19 -0
- package/packages/queryable/queryable.ts +239 -0
- package/packages/queryable/request-builders.ts +20 -0
- package/packages/queryable/tsconfig.json +11 -0
- package/packages/readme.md +21 -0
- package/packages/sp/appcatalog/index.ts +35 -0
- package/packages/sp/appcatalog/types.ts +176 -0
- package/packages/sp/appcatalog/web.ts +19 -0
- package/packages/sp/attachments/index.ts +11 -0
- package/packages/sp/attachments/item.ts +17 -0
- package/packages/sp/attachments/types.ts +95 -0
- package/packages/sp/batching.ts +483 -0
- package/packages/sp/behaviors/defaults.ts +38 -0
- package/packages/sp/behaviors/request-digest.ts +78 -0
- package/packages/sp/behaviors/spbrowser.ts +40 -0
- package/packages/sp/behaviors/spfx.ts +83 -0
- package/packages/sp/behaviors/telemetry.ts +35 -0
- package/packages/sp/clientside-pages/funcs.ts +27 -0
- package/packages/sp/clientside-pages/index.ts +27 -0
- package/packages/sp/clientside-pages/types.ts +1661 -0
- package/packages/sp/clientside-pages/web.ts +93 -0
- package/packages/sp/column-defaults/folder.ts +89 -0
- package/packages/sp/column-defaults/index.ts +8 -0
- package/packages/sp/column-defaults/list.ts +219 -0
- package/packages/sp/column-defaults/types.ts +19 -0
- package/packages/sp/comments/clientside-page.ts +120 -0
- package/packages/sp/comments/index.ts +14 -0
- package/packages/sp/comments/item.ts +77 -0
- package/packages/sp/comments/types.ts +160 -0
- package/packages/sp/content-types/index.ts +17 -0
- package/packages/sp/content-types/item.ts +17 -0
- package/packages/sp/content-types/list.ts +17 -0
- package/packages/sp/content-types/types.ts +181 -0
- package/packages/sp/content-types/web.ts +17 -0
- package/packages/sp/context-info/index.ts +40 -0
- package/packages/sp/decorators.ts +18 -0
- package/packages/sp/favorites/index.ts +32 -0
- package/packages/sp/favorites/types.ts +187 -0
- package/packages/sp/features/index.ts +11 -0
- package/packages/sp/features/site.ts +17 -0
- package/packages/sp/features/types.ts +73 -0
- package/packages/sp/features/web.ts +17 -0
- package/packages/sp/fi.ts +46 -0
- package/packages/sp/fields/index.ts +22 -0
- package/packages/sp/fields/list.ts +17 -0
- package/packages/sp/fields/types.ts +648 -0
- package/packages/sp/fields/web.ts +23 -0
- package/packages/sp/files/folder.ts +17 -0
- package/packages/sp/files/index.ts +25 -0
- package/packages/sp/files/item.ts +17 -0
- package/packages/sp/files/readable-file.ts +40 -0
- package/packages/sp/files/types.ts +771 -0
- package/packages/sp/files/web.ts +46 -0
- package/packages/sp/folders/index.ts +19 -0
- package/packages/sp/folders/item.ts +16 -0
- package/packages/sp/folders/list.ts +17 -0
- package/packages/sp/folders/types.ts +439 -0
- package/packages/sp/folders/web.ts +50 -0
- package/packages/sp/forms/index.ts +9 -0
- package/packages/sp/forms/list.ts +14 -0
- package/packages/sp/forms/types.ts +41 -0
- package/packages/sp/groupsitemanager/index.ts +18 -0
- package/packages/sp/groupsitemanager/types.ts +433 -0
- package/packages/sp/hubsites/index.ts +31 -0
- package/packages/sp/hubsites/site.ts +43 -0
- package/packages/sp/hubsites/types.ts +71 -0
- package/packages/sp/hubsites/web.ts +38 -0
- package/packages/sp/index.ts +24 -0
- package/packages/sp/items/get-all.ts +52 -0
- package/packages/sp/items/index.ts +18 -0
- package/packages/sp/items/list.ts +14 -0
- package/packages/sp/items/types.ts +405 -0
- package/packages/sp/lists/index.ts +23 -0
- package/packages/sp/lists/types.ts +851 -0
- package/packages/sp/lists/web.ts +68 -0
- package/packages/sp/navigation/index.ts +35 -0
- package/packages/sp/navigation/types.ts +243 -0
- package/packages/sp/navigation/web.ts +19 -0
- package/packages/sp/operations.ts +33 -0
- package/packages/sp/package.json +15 -0
- package/packages/sp/post-install.cjs +20 -0
- package/packages/sp/presets/all.ts +75 -0
- package/packages/sp/profiles/index.ts +30 -0
- package/packages/sp/profiles/types.ts +595 -0
- package/packages/sp/publishing-sitepageservice/index.ts +22 -0
- package/packages/sp/publishing-sitepageservice/types.ts +18 -0
- package/packages/sp/recycle-bin/index.ts +36 -0
- package/packages/sp/recycle-bin/types.ts +113 -0
- package/packages/sp/regional-settings/content-type.ts +11 -0
- package/packages/sp/regional-settings/field.ts +11 -0
- package/packages/sp/regional-settings/funcs.ts +10 -0
- package/packages/sp/regional-settings/index.ts +18 -0
- package/packages/sp/regional-settings/list.ts +11 -0
- package/packages/sp/regional-settings/types.ts +159 -0
- package/packages/sp/regional-settings/user-custom-actions.ts +11 -0
- package/packages/sp/regional-settings/web.ts +21 -0
- package/packages/sp/related-items/index.ts +7 -0
- package/packages/sp/related-items/types.ts +194 -0
- package/packages/sp/related-items/web.ts +22 -0
- package/packages/sp/search/index.ts +48 -0
- package/packages/sp/search/query.ts +254 -0
- package/packages/sp/search/suggest.ts +130 -0
- package/packages/sp/search/types.ts +480 -0
- package/packages/sp/security/funcs.ts +94 -0
- package/packages/sp/security/index.ts +21 -0
- package/packages/sp/security/item.ts +29 -0
- package/packages/sp/security/list.ts +29 -0
- package/packages/sp/security/types.ts +440 -0
- package/packages/sp/security/web.ts +34 -0
- package/packages/sp/sharing/file.ts +75 -0
- package/packages/sp/sharing/folder.ts +69 -0
- package/packages/sp/sharing/funcs.ts +258 -0
- package/packages/sp/sharing/index.ts +27 -0
- package/packages/sp/sharing/item.ts +53 -0
- package/packages/sp/sharing/types.ts +626 -0
- package/packages/sp/sharing/web.ts +109 -0
- package/packages/sp/site-designs/index.ts +29 -0
- package/packages/sp/site-designs/types.ts +456 -0
- package/packages/sp/site-designs/web.ts +41 -0
- package/packages/sp/site-groups/index.ts +11 -0
- package/packages/sp/site-groups/types.ts +133 -0
- package/packages/sp/site-groups/web.ts +73 -0
- package/packages/sp/site-scripts/index.ts +27 -0
- package/packages/sp/site-scripts/list.ts +27 -0
- package/packages/sp/site-scripts/types.ts +243 -0
- package/packages/sp/site-scripts/web.ts +24 -0
- package/packages/sp/site-users/index.ts +12 -0
- package/packages/sp/site-users/types.ts +195 -0
- package/packages/sp/site-users/web.ts +56 -0
- package/packages/sp/sites/index.ts +26 -0
- package/packages/sp/sites/types.ts +422 -0
- package/packages/sp/social/index.ts +33 -0
- package/packages/sp/social/types.ts +381 -0
- package/packages/sp/spqueryable.ts +244 -0
- package/packages/sp/sputilities/index.ts +23 -0
- package/packages/sp/sputilities/types.ts +197 -0
- package/packages/sp/subscriptions/index.ts +10 -0
- package/packages/sp/subscriptions/list.ts +18 -0
- package/packages/sp/subscriptions/types.ts +107 -0
- package/packages/sp/taxonomy/index.ts +50 -0
- package/packages/sp/taxonomy/types.ts +508 -0
- package/packages/sp/tsconfig.json +16 -0
- package/packages/sp/types.ts +283 -0
- package/packages/sp/user-custom-actions/index.ts +15 -0
- package/packages/sp/user-custom-actions/list.ts +18 -0
- package/packages/sp/user-custom-actions/site.ts +18 -0
- package/packages/sp/user-custom-actions/types.ts +133 -0
- package/packages/sp/user-custom-actions/web.ts +21 -0
- package/packages/sp/utils/encode-path-str.ts +29 -0
- package/packages/sp/utils/extract-web-url.ts +21 -0
- package/packages/sp/utils/file-names.ts +35 -0
- package/packages/sp/utils/metadata.ts +5 -0
- package/packages/sp/utils/odata-url-from.ts +42 -0
- package/packages/sp/utils/to-resource-path.ts +9 -0
- package/packages/sp/views/index.ts +14 -0
- package/packages/sp/views/list.ts +33 -0
- package/packages/sp/views/types.ts +210 -0
- package/packages/sp/webparts/file.ts +21 -0
- package/packages/sp/webparts/index.ts +11 -0
- package/packages/sp/webparts/types.ts +141 -0
- package/packages/sp/webs/index.ts +32 -0
- package/packages/sp/webs/types.ts +350 -0
- package/packages/sp-admin/index.ts +46 -0
- package/packages/sp-admin/office-tenant.ts +567 -0
- package/packages/sp-admin/package.json +13 -0
- package/packages/sp-admin/site-properties.ts +45 -0
- package/packages/sp-admin/tenant.ts +595 -0
- package/packages/sp-admin/tsconfig.json +20 -0
- package/packages/sp-admin/types.ts +1679 -0
- package/packages/tsconfig-watch.json +9 -0
- package/packages/tsconfig.json +37 -0
- package/pre-install.cjs +1 -0
- package/samples/custom-bundle-webpack/index.ts +33 -0
- package/samples/custom-bundle-webpack/package-lock.json +4601 -0
- package/samples/custom-bundle-webpack/package.json +18 -0
- package/samples/custom-bundle-webpack/readme.md +102 -0
- package/samples/custom-bundle-webpack/tsconfig.json +12 -0
- package/samples/custom-bundle-webpack/webpack.config.js +27 -0
- package/samples/nodejs-app/.vscode/launch.json +27 -0
- package/samples/nodejs-app/.vscode/settings.json +10 -0
- package/samples/nodejs-app/.vscode/tasks.json +22 -0
- package/samples/nodejs-app/index.ts +63 -0
- package/samples/nodejs-app/package-lock.json +259 -0
- package/samples/nodejs-app/package.json +21 -0
- package/samples/nodejs-app/readme.md +140 -0
- package/samples/nodejs-app/tsconfig.json +14 -0
- package/samples/nodejs-commonjs/package-lock.json +702 -0
- package/samples/nodejs-commonjs/package.json +21 -0
- package/samples/nodejs-commonjs/readme.md +58 -0
- package/samples/nodejs-commonjs/src/index.ts +23 -0
- package/samples/nodejs-commonjs/src/settings.ts +35 -0
- package/samples/nodejs-commonjs/tsconfig.json +35 -0
- package/samples/project-preset/README.md +73 -0
- package/samples/project-preset/package-lock.json +21097 -0
- package/samples/project-preset/package.json +29 -0
- package/samples/project-preset/teams/4530a515-8ba7-45bb-9a27-be06b33c59d4_color.png +0 -0
- package/samples/project-preset/teams/4530a515-8ba7-45bb-9a27-be06b33c59d4_outline.png +0 -0
- package/samples/readme.md +16 -0
- package/settings.example.js +57 -0
- package/test/args.ts +107 -0
- package/test/clean-subsite.ts +36 -0
- package/test/core/assumptions.ts +99 -0
- package/test/core/storage.ts +60 -0
- package/test/core/timeline.ts +205 -0
- package/test/core/util.ts +205 -0
- package/test/graph/assets/testconvert.docx +0 -0
- package/test/graph/batch.ts +125 -0
- package/test/graph/calendars.ts +234 -0
- package/test/graph/columns.ts +247 -0
- package/test/graph/contacts.ts +254 -0
- package/test/graph/content-types.ts +206 -0
- package/test/graph/directoryobjects.ts +115 -0
- package/test/graph/groups.ts +130 -0
- package/test/graph/lists.ts +72 -0
- package/test/graph/onedrive.ts +365 -0
- package/test/graph/outlook.ts +95 -0
- package/test/graph/paging.ts +91 -0
- package/test/graph/planner.ts +160 -0
- package/test/graph/querable.ts +97 -0
- package/test/graph/search.ts +4 -0
- package/test/graph/shares.ts +26 -0
- package/test/graph/sites.ts +40 -0
- package/test/graph/teams.ts +76 -0
- package/test/graph/utilities/getTestingGraphSPSite.ts +27 -0
- package/test/graph/utilities/getValidUser.ts +37 -0
- package/test/load-settings.ts +103 -0
- package/test/logging/logging.ts +86 -0
- package/test/mocha-root-hooks.ts +227 -0
- package/test/nodejs/sp-extensions.ts +86 -0
- package/test/pnp-test.ts +60 -0
- package/test/queryable/add-prop.ts +24 -0
- package/test/queryable/behaviors.ts +188 -0
- package/test/queryable/invokable.ts +35 -0
- package/test/queryable/queryable.ts +118 -0
- package/test/sp/alias.ts +46 -0
- package/test/sp/appcatalog.ts +142 -0
- package/test/sp/assets/helloworld.sppkg +0 -0
- package/test/sp/assets/sample_file.jpg +0 -0
- package/test/sp/attachments.ts +134 -0
- package/test/sp/batch.ts +362 -0
- package/test/sp/clientside-pages.ts +426 -0
- package/test/sp/column-defaults.ts +225 -0
- package/test/sp/comments.ts +202 -0
- package/test/sp/content-types.ts +68 -0
- package/test/sp/favorites.ts +2 -0
- package/test/sp/features.ts +201 -0
- package/test/sp/fields.ts +396 -0
- package/test/sp/files.ts +338 -0
- package/test/sp/folders.ts +242 -0
- package/test/sp/forms.ts +22 -0
- package/test/sp/groupsitemanager.ts +88 -0
- package/test/sp/hubsites.ts +41 -0
- package/test/sp/items.ts +179 -0
- package/test/sp/lists.ts +319 -0
- package/test/sp/navigation.ts +167 -0
- package/test/sp/profiles.ts +2 -0
- package/test/sp/query-escaping.ts +94 -0
- package/test/sp/recycle-bin.ts +1 -0
- package/test/sp/regional-settings.ts +58 -0
- package/test/sp/related-items.ts +94 -0
- package/test/sp/search.ts +39 -0
- package/test/sp/security.ts +90 -0
- package/test/sp/sharing.ts +313 -0
- package/test/sp/site-designs.ts +224 -0
- package/test/sp/site-groups.ts +98 -0
- package/test/sp/site-scripts.ts +162 -0
- package/test/sp/site-users.ts +93 -0
- package/test/sp/sites.ts +156 -0
- package/test/sp/social.ts +2 -0
- package/test/sp/spfx.ts +52 -0
- package/test/sp/sputilities.ts +78 -0
- package/test/sp/subscriptions.ts +64 -0
- package/test/sp/taxonomy.ts +178 -0
- package/test/sp/user-custom-actions.ts +31 -0
- package/test/sp/views.ts +117 -0
- package/test/sp/webparts.ts +38 -0
- package/test/sp/webs.ts +249 -0
- package/test/test-invokable-props.ts +35 -0
- package/test/test-props.ts +90 -0
- package/test/test-recording.ts +171 -0
- package/test/tsconfig.json +18 -0
- package/tools/buildsystem/package-lock.json +4404 -0
- package/tools/buildsystem/package.json +56 -0
- package/tools/buildsystem/readme.md +23 -0
- package/tools/config.js +34 -0
- package/tools/local-module-resolver/cjs.ts +33 -0
- package/tools/local-module-resolver/esm-debug.ts +2 -0
- package/tools/local-module-resolver/esm-test.ts +2 -0
- package/tools/local-module-resolver/esm.ts +112 -0
- package/tools/local-module-resolver/readme.md +8 -0
- package/tsconfig.buildsystem.json +17 -0
- package/tsconfig.json +42 -0
@@ -0,0 +1,496 @@
|
|
1
|
+
# @pnp/queryable : behaviors
|
2
|
+
|
3
|
+
The article describes the behaviors exported by the `@pnp/queryable` library. Please also see available behaviors in [@pnp/core](../core/behaviors.md), [@pnp/nodejs](../nodejs/behaviors.md), [@pnp/sp](../sp/behaviors.md), and [@pnp/graph](../graph/behaviors.md).
|
4
|
+
|
5
|
+
Generally you won't need to use these behaviors individually when using the defaults supplied by the library, but when appropriate you can create your own [composed behaviors](../core/behavior-recipes.md) using these as building blocks.
|
6
|
+
|
7
|
+
## Bearer Token
|
8
|
+
|
9
|
+
Allows you to inject an existing bearer token into the request. This behavior will _not replace_ any existing authentication behaviors, so you may want to ensure they are cleared if you are supplying your own tokens, regardless of their source. This behavior does no caching or performs any operation other than including your token in an authentication heading.
|
10
|
+
|
11
|
+
```TypeScript
|
12
|
+
import { BearerToken } from "@pnp/queryable";
|
13
|
+
|
14
|
+
import "@pnp/sp/webs";
|
15
|
+
|
16
|
+
const sp = spfi(...).using(BearerToken("HereIsMyBearerTokenStringFromSomeSource"));
|
17
|
+
|
18
|
+
// optionally clear any configured authentication as you are supplying a token so additional calls shouldn't be needed
|
19
|
+
// but take care as other behaviors may add observers to auth
|
20
|
+
sp.on.auth.clear();
|
21
|
+
|
22
|
+
// the bearer token supplied above will be applied to all requests made from `sp`
|
23
|
+
const webInfo = await sp.webs();
|
24
|
+
```
|
25
|
+
|
26
|
+
## BrowserFetch
|
27
|
+
|
28
|
+
This behavior, for use in web browsers, provides basic fetch support through the browser's fetch global method. It replaces any other registered observers on the send moment by default, but this can be controlled via the props. Remember, when registering observers on the send moment only the first one will be used so not replacing
|
29
|
+
|
30
|
+
> For fetch configuration in nodejs please see [@pnp/nodejs behaviors]("../../../nodejs/behaviors.md).
|
31
|
+
|
32
|
+
```TypeScript
|
33
|
+
import { BrowserFetch } from "@pnp/queryable";
|
34
|
+
|
35
|
+
import "@pnp/sp/webs";
|
36
|
+
|
37
|
+
const sp = spfi(...).using(BrowserFetch());
|
38
|
+
|
39
|
+
const webInfo = await sp.webs();
|
40
|
+
```
|
41
|
+
|
42
|
+
```TypeScript
|
43
|
+
import { BrowserFetch } from "@pnp/queryable";
|
44
|
+
|
45
|
+
import "@pnp/sp/webs";
|
46
|
+
|
47
|
+
const sp = spfi(...).using(BrowserFetch({ replace: false }));
|
48
|
+
|
49
|
+
const webInfo = await sp.webs();
|
50
|
+
```
|
51
|
+
|
52
|
+
## BrowserFetchWithRetry
|
53
|
+
|
54
|
+
This behavior makes fetch requests but will attempt to retry the request on certain failures such as throttling.
|
55
|
+
|
56
|
+
```TypeScript
|
57
|
+
import { BrowserFetchWithRetry } from "@pnp/queryable";
|
58
|
+
|
59
|
+
import "@pnp/sp/webs";
|
60
|
+
|
61
|
+
const sp = spfi(...).using(BrowserFetchWithRetry());
|
62
|
+
|
63
|
+
const webInfo = await sp.webs();
|
64
|
+
```
|
65
|
+
|
66
|
+
You can also control how the behavior works through its props. The `replace` value works as described above for BrowserFetch. `interval` specifies the initial dynamic back off value in milliseconds. This value is ignored if a "Retry-After" header exists in the response. `retries` indicates the number of times to retry before failing the request, the default is 3. A default of 3 will result in up to 4 total requests being the initial request and threee potential retries.
|
67
|
+
|
68
|
+
```TypeScript
|
69
|
+
import { BrowserFetchWithRetry } from "@pnp/queryable";
|
70
|
+
|
71
|
+
import "@pnp/sp/webs";
|
72
|
+
|
73
|
+
const sp = spfi(...).using(BrowserFetchWithRetry({
|
74
|
+
retries: 2,
|
75
|
+
interval: 400,
|
76
|
+
replace: true,
|
77
|
+
}));
|
78
|
+
|
79
|
+
const webInfo = await sp.webs();
|
80
|
+
```
|
81
|
+
|
82
|
+
## Caching
|
83
|
+
|
84
|
+
This behavior allows you to cache the results of get requests in either session or local storage. If neither is available (such as in Nodejs) the library will shim using an in memory map. It is a good idea to include caching in your projects to improve performance. By default items in the cache will expire after 5 minutes.
|
85
|
+
|
86
|
+
```TypeScript
|
87
|
+
import { Caching } from "@pnp/queryable";
|
88
|
+
|
89
|
+
import "@pnp/sp/webs";
|
90
|
+
|
91
|
+
const sp = spfi(...).using(Caching());
|
92
|
+
|
93
|
+
// caching will save the data into session storage on the first request - the key is based on the full url including query strings
|
94
|
+
const webInfo = await sp.webs();
|
95
|
+
|
96
|
+
// caching will retriece this value from the cache saving a network requests the second time it is loaded (either in the same page, a reload of the page, etc.)
|
97
|
+
const webInfo2 = await sp.webs();
|
98
|
+
```
|
99
|
+
|
100
|
+
### Custom Key Function
|
101
|
+
|
102
|
+
You can also supply custom functionality to control how keys are generated and calculate the expirations.
|
103
|
+
|
104
|
+
The cache key factory has the form `(url: string) => string` and you must ensure your keys are unique enough that you won't have collisions.
|
105
|
+
|
106
|
+
The expire date factory has the form `(url: string) => Date` and should return the Date when the cached data should expire. If you know that some particular data won't expire often you can set this date far in the future, or for more frequently updated information you can set it lower. If you set the expiration too short there is no reason to use caching as any stored information will likely always be expired. Additionally, you can set the storage to use local storage which will persist across sessions.
|
107
|
+
|
108
|
+
> Note that for sp.search() requests if you want to specify a key you will need to use the CacheKey behavior below, the keyFactory value will be overwritten
|
109
|
+
|
110
|
+
```TypeScript
|
111
|
+
import { getHashCode, PnPClientStorage, dateAdd, TimelinePipe } from "@pnp/core";
|
112
|
+
import { Caching } from "@pnp/queryable";
|
113
|
+
|
114
|
+
import "@pnp/sp/webs";
|
115
|
+
|
116
|
+
const sp = spfi(...).using(Caching({
|
117
|
+
store: "local",
|
118
|
+
// use a hascode for the key
|
119
|
+
keyFactory: (url) => getHashCode(url.toLowerCase()).toString(),
|
120
|
+
// cache for one minute
|
121
|
+
expireFunc: (url) => dateAdd(new Date(), "minute", 1),
|
122
|
+
}));
|
123
|
+
|
124
|
+
// caching will save the data into session storage on the first request - the key is based on the full url including query strings
|
125
|
+
const webInfo = await sp.webs();
|
126
|
+
|
127
|
+
// caching will retriece this value from the cache saving a network requests the second time it is loaded (either in the same page, a reload of the page, etc.)
|
128
|
+
const webInfo2 = await sp.webs();
|
129
|
+
```
|
130
|
+
|
131
|
+
As with any behavior you have the option to only apply caching to certain requests:
|
132
|
+
|
133
|
+
```TypeScript
|
134
|
+
import { getHashCode, dateAdd } from "@pnp/core";
|
135
|
+
import { Caching } from "@pnp/queryable";
|
136
|
+
|
137
|
+
import "@pnp/sp/webs";
|
138
|
+
import "@pnp/sp/lists";
|
139
|
+
import "@pnp/sp/items";
|
140
|
+
|
141
|
+
const sp = spfi(...);
|
142
|
+
|
143
|
+
// caching will only apply to requests using `cachingList` as the base of the fluent chain
|
144
|
+
const cachingList = sp.web.lists.getByTitle("{List Title}").using(Caching());
|
145
|
+
|
146
|
+
// caching will save the data into session storage on the first request - the key is based on the full url including query strings
|
147
|
+
const itemsInfo = await cachingList.items();
|
148
|
+
|
149
|
+
// caching will retriece this value from the cache saving a network requests the second time it is loaded (either in the same page, a reload of the page, etc.)
|
150
|
+
const itemsInfo2 = await cachingList.items();
|
151
|
+
```
|
152
|
+
|
153
|
+
### bindCachingCore
|
154
|
+
|
155
|
+
_Added in 3.10.0_
|
156
|
+
|
157
|
+
The `bindCachingCore` method is supplied to allow all caching behaviors to share a common logic around the handling of ICachingProps. Usage of this function is not required to build your own caching method. However, it does provide consistent logic and will incoroporate any future enhancements. It can be used to create your own caching behavior. Here we show how we use the binding function within `Caching` as a basic example.
|
158
|
+
|
159
|
+
The `bindCachingCore` method is designed for use in a `pre` observer and the first two parameters are the url and init passed to pre. The third parameter is an optional Partial<ICachingProps>. It returns a tuple with three values. The first is a calculated value indicating if this request should be cached based on the internal default logic of the library, you can use this value in conjunction with your own logic. The second value is a function that will get a cached value, note no key is passed - the key is calculated and held within `bindCachingCore`. The third value is a function to which you pass a value to cache. The key and expiration are similarly calculated and held within `bindCachingCore`.
|
160
|
+
|
161
|
+
```TS
|
162
|
+
import { TimelinePipe } from "@pnp/core";
|
163
|
+
import { bindCachingCore, ICachingProps, Queryable } from "@pnp/queryable";
|
164
|
+
|
165
|
+
export function Caching(props?: ICachingProps): TimelinePipe<Queryable> {
|
166
|
+
|
167
|
+
return (instance: Queryable) => {
|
168
|
+
|
169
|
+
instance.on.pre(async function (this: Queryable, url: string, init: RequestInit, result: any): Promise<[string, RequestInit, any]> {
|
170
|
+
|
171
|
+
const [shouldCache, getCachedValue, setCachedValue] = bindCachingCore(url, init, props);
|
172
|
+
|
173
|
+
// only cache get requested data or where the CacheAlways header is present (allows caching of POST requests)
|
174
|
+
if (shouldCache) {
|
175
|
+
|
176
|
+
const cached = getCachedValue();
|
177
|
+
|
178
|
+
// we need to ensure that result stays "undefined" unless we mean to set null as the result
|
179
|
+
if (cached === null) {
|
180
|
+
|
181
|
+
// if we don't have a cached result we need to get it after the request is sent and parsed
|
182
|
+
this.on.post(async function (url: URL, result: any) {
|
183
|
+
|
184
|
+
setCachedValue(result);
|
185
|
+
|
186
|
+
return [url, result];
|
187
|
+
});
|
188
|
+
|
189
|
+
} else {
|
190
|
+
|
191
|
+
result = cached;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
195
|
+
return [url, init, result];
|
196
|
+
});
|
197
|
+
|
198
|
+
return instance;
|
199
|
+
};
|
200
|
+
}
|
201
|
+
```
|
202
|
+
|
203
|
+
## CacheKey
|
204
|
+
|
205
|
+
_Added in 3.5.0_
|
206
|
+
|
207
|
+
This behavior allows you to set a pre-determined cache key for a given request. It needs to be used **PER** request otherwise the value will be continuously overwritten.
|
208
|
+
|
209
|
+
```TypeScript
|
210
|
+
import { Caching, CacheKey } from "@pnp/queryable";
|
211
|
+
import "@pnp/sp/webs";
|
212
|
+
import "@pnp/sp/lists";
|
213
|
+
|
214
|
+
const sp = spfi(...).using(Caching());
|
215
|
+
|
216
|
+
// note the application of the behavior on individual requests, if you share a CacheKey behavior across requests you'll encounter conflicts
|
217
|
+
const webInfo = await sp.web.using(CacheKey("MyWebInfoCacheKey"))();
|
218
|
+
|
219
|
+
const listsInfo = await sp.web.lists.using(CacheKey("MyListsInfoCacheKey"))();
|
220
|
+
```
|
221
|
+
|
222
|
+
## CacheAlways
|
223
|
+
|
224
|
+
_Added in 3.8.0_
|
225
|
+
|
226
|
+
This behavior allows you to force caching for a given request. This should not be used for update/create operations as the request will not execute if a result is found in the cache
|
227
|
+
|
228
|
+
```TypeScript
|
229
|
+
import { Caching, CacheAlways } from "@pnp/queryable";
|
230
|
+
import "@pnp/sp/webs";
|
231
|
+
import "@pnp/sp/lists";
|
232
|
+
|
233
|
+
const sp = spfi(...).using(Caching());
|
234
|
+
|
235
|
+
const webInfo = await sp.web.using(CacheAlways())();
|
236
|
+
```
|
237
|
+
|
238
|
+
## CacheNever
|
239
|
+
|
240
|
+
_Added in 3.10.0_
|
241
|
+
|
242
|
+
This behavior allows you to force skipping caching for a given request.
|
243
|
+
|
244
|
+
```TypeScript
|
245
|
+
import { Caching, CacheNever } from "@pnp/queryable";
|
246
|
+
import "@pnp/sp/webs";
|
247
|
+
import "@pnp/sp/lists";
|
248
|
+
|
249
|
+
const sp = spfi(...).using(Caching());
|
250
|
+
|
251
|
+
const webInfo = await sp.web.using(CacheNever())();
|
252
|
+
```
|
253
|
+
|
254
|
+
## Caching Pessimistic Refresh
|
255
|
+
|
256
|
+
This behavior is slightly different than our default Caching behavior in that it will always return the cached value if there is one, but also asyncronously update the cached value in the background. Like the default CAchine behavior it allows you to cache the results of get requests in either session or local storage. If neither is available (such as in Nodejs) the library will shim using an in memory map.
|
257
|
+
|
258
|
+
If you do not provide an expiration function then the cache will be updated asyncronously on every call, if you do provide an expiration then the cached value will only be updated, although still asyncronously, only when the cache has expired.
|
259
|
+
|
260
|
+
```TypeScript
|
261
|
+
import { CachingPessimisticRefresh } from "@pnp/queryable";
|
262
|
+
|
263
|
+
import "@pnp/sp/webs";
|
264
|
+
|
265
|
+
const sp = spfi(...).using(CachingPessimisticRefresh());
|
266
|
+
|
267
|
+
// caching will save the data into session storage on the first request - the key is based on the full url including query strings
|
268
|
+
const webInfo = await sp.webs();
|
269
|
+
|
270
|
+
// caching will retriece this value from the cache saving a network requests the second time it is loaded (either in the same page, a reload of the page, etc.)
|
271
|
+
const webInfo2 = await sp.webs();
|
272
|
+
```
|
273
|
+
|
274
|
+
Again as with the default Caching behavior you can provide custom functions for key generation and expiration. Please see the [Custom Key Function documentation above](#Custom-Key-Function) for more details.
|
275
|
+
|
276
|
+
## InjectHeaders
|
277
|
+
|
278
|
+
Adds any specified headers to a given request. Can be used multiple times with a timeline. The supplied headers are added to all requests, and last applied wins - meaning if two InjectHeaders are included in the pipeline which inlcude a value for the same header, the second one applied will be used.
|
279
|
+
|
280
|
+
```TypeScript
|
281
|
+
import { InjectHeaders } from "@pnp/queryable";
|
282
|
+
|
283
|
+
import "@pnp/sp/webs";
|
284
|
+
|
285
|
+
const sp = spfi(...).using(InjectHeaders({
|
286
|
+
"X-Something": "a value",
|
287
|
+
"MyCompanySpecialAuth": "special company token",
|
288
|
+
}));
|
289
|
+
|
290
|
+
const webInfo = await sp.webs();
|
291
|
+
```
|
292
|
+
|
293
|
+
## Parsers
|
294
|
+
|
295
|
+
Parsers convert the returned fetch Response into something usable. We have included the most common parsers we think you'll need - but you can always write your own parser based on the [signature of the parse moment](./queryable.md#parse).
|
296
|
+
|
297
|
+
> All of these parsers when applied through using will replace any other observers on the parse moment.
|
298
|
+
|
299
|
+
### DefaultParse
|
300
|
+
|
301
|
+
Performs error handling and parsing of JSON responses. This is the one you'll use for most of your requests and it is included in all the defaults.
|
302
|
+
|
303
|
+
```TypeScript
|
304
|
+
import { DefaultParse } from "@pnp/queryable";
|
305
|
+
|
306
|
+
import "@pnp/sp/webs";
|
307
|
+
|
308
|
+
const sp = spfi(...).using(DefaultParse());
|
309
|
+
|
310
|
+
const webInfo = await sp.webs();
|
311
|
+
```
|
312
|
+
|
313
|
+
### TextParse
|
314
|
+
|
315
|
+
Checks for errors and parses the results as text with no further manipulation.
|
316
|
+
|
317
|
+
```TypeScript
|
318
|
+
import { TextParse } from "@pnp/queryable";
|
319
|
+
|
320
|
+
import "@pnp/sp/webs";
|
321
|
+
|
322
|
+
const sp = spfi(...).using(TextParse());
|
323
|
+
```
|
324
|
+
|
325
|
+
### BlobParse
|
326
|
+
|
327
|
+
Checks for errors and parses the results a Blob with no further manipulation.
|
328
|
+
|
329
|
+
```TypeScript
|
330
|
+
import { BlobParse } from "@pnp/queryable";
|
331
|
+
|
332
|
+
import "@pnp/sp/webs";
|
333
|
+
|
334
|
+
const sp = spfi(...).using(BlobParse());
|
335
|
+
```
|
336
|
+
|
337
|
+
### JSONParse
|
338
|
+
|
339
|
+
Checks for errors and parses the results as JSON with no further manipulation. Meaning you will get the raw JSON response vs DefaultParse which will remove wrapping JSON.
|
340
|
+
|
341
|
+
```TypeScript
|
342
|
+
import { JSONParse } from "@pnp/queryable";
|
343
|
+
|
344
|
+
import "@pnp/sp/webs";
|
345
|
+
|
346
|
+
const sp = spfi(...).using(JSONParse());
|
347
|
+
```
|
348
|
+
|
349
|
+
### BufferParse
|
350
|
+
|
351
|
+
Checks for errors and parses the results a Buffer with no further manipulation.
|
352
|
+
|
353
|
+
```TypeScript
|
354
|
+
import { BufferParse } from "@pnp/queryable";
|
355
|
+
|
356
|
+
import "@pnp/sp/webs";
|
357
|
+
|
358
|
+
const sp = spfi(...).using(BufferParse());
|
359
|
+
```
|
360
|
+
|
361
|
+
### HeaderParse
|
362
|
+
|
363
|
+
Checks for errors and parses the headers of the Response as the result. This is a specialised parses which can be used in those infrequent scenarios where you need information from the headers of a response.
|
364
|
+
|
365
|
+
```TypeScript
|
366
|
+
import { HeaderParse } from "@pnp/queryable";
|
367
|
+
|
368
|
+
import "@pnp/sp/webs";
|
369
|
+
|
370
|
+
const sp = spfi(...).using(HeaderParse());
|
371
|
+
```
|
372
|
+
|
373
|
+
### JSONHeaderParse
|
374
|
+
|
375
|
+
Checks for errors and parses the headers of the Respnose as well as the JSON and returns an object with both values.
|
376
|
+
|
377
|
+
```TypeScript
|
378
|
+
import { JSONHeaderParse } from "@pnp/queryable";
|
379
|
+
|
380
|
+
import "@pnp/sp/webs";
|
381
|
+
|
382
|
+
const sp = spfi(...).using(JSONHeaderParse());
|
383
|
+
|
384
|
+
...sp.data
|
385
|
+
...sp.headers
|
386
|
+
```
|
387
|
+
|
388
|
+
## Resolvers
|
389
|
+
|
390
|
+
These two behaviors are special and should always be included when composing your own defaults. They implement the expected behavior of resolving or rejecting the promise returned when executing a timeline. They are implemented as behaviors should there be a need to do something different the logic is not locked into the core of the library.
|
391
|
+
|
392
|
+
### ResolveOnData, RejectOnError
|
393
|
+
|
394
|
+
```TypeScript
|
395
|
+
import { ResolveOnData, RejectOnError } from "@pnp/queryable";
|
396
|
+
|
397
|
+
import "@pnp/sp/webs";
|
398
|
+
|
399
|
+
const sp = spfi(...).using(ResolveOnData(), RejectOnError());
|
400
|
+
```
|
401
|
+
|
402
|
+
## Timeout
|
403
|
+
|
404
|
+
The Timeout behavior allows you to include a timeout in requests. You can specify either a number, representing the number of milliseconds until the request should timeout or an AbortSignal.
|
405
|
+
|
406
|
+
> In Nodejs you will need to polyfill `AbortController` if your version (<15) does not include it when using Timeout and passing a number. If you are supplying your own AbortSignal you do not.
|
407
|
+
|
408
|
+
```TypeScript
|
409
|
+
import { Timeout } from "@pnp/queryable";
|
410
|
+
|
411
|
+
import "@pnp/sp/webs";
|
412
|
+
|
413
|
+
// requests should timeout in 5 seconds
|
414
|
+
const sp = spfi(...).using(Timeout(5000));
|
415
|
+
```
|
416
|
+
|
417
|
+
```TypeScript
|
418
|
+
import { Timeout } from "@pnp/queryable";
|
419
|
+
|
420
|
+
import "@pnp/sp/webs";
|
421
|
+
|
422
|
+
const controller = new AbortController();
|
423
|
+
|
424
|
+
const sp = spfi(...).using(Timeout(controller.signal));
|
425
|
+
|
426
|
+
// abort requests after 6 seconds using our own controller
|
427
|
+
const timer = setTimeout(() => {
|
428
|
+
controller.abort();
|
429
|
+
}, 6000);
|
430
|
+
|
431
|
+
// this request will be cancelled if it doesn't complete in 6 seconds
|
432
|
+
const webInfo = await sp.webs();
|
433
|
+
|
434
|
+
// be a good citizen and cancel unneeded timers
|
435
|
+
clearTimeout(timer);
|
436
|
+
```
|
437
|
+
|
438
|
+
## Cancelable
|
439
|
+
|
440
|
+
![Beta](https://img.shields.io/badge/Beta-important.svg)
|
441
|
+
|
442
|
+
_Updated as Beta 2 in 3.5.0_
|
443
|
+
|
444
|
+
This behavior allows you to cancel requests before they are complete. It is similar to timeout however you control when and if the request is canceled. Please consider this behavior as beta while we work to stabalize the functionality.
|
445
|
+
|
446
|
+
### Known Issues
|
447
|
+
|
448
|
+
- Due to how the event loop works you may get unhandled rejections after canceling a request
|
449
|
+
|
450
|
+
```TypeScript
|
451
|
+
import { Cancelable, CancelablePromise } from "@pnp/queryable";
|
452
|
+
import { IWebInfo } from "@pnp/sp/webs";
|
453
|
+
import "@pnp/sp/webs";
|
454
|
+
|
455
|
+
const sp = spfi().using(Cancelable());
|
456
|
+
|
457
|
+
const p: CancelablePromise<IWebInfo> = <any>sp.web();
|
458
|
+
|
459
|
+
setTimeout(() => {
|
460
|
+
|
461
|
+
// you should await the cancel operation to ensure it completes
|
462
|
+
await p.cancel();
|
463
|
+
}, 200);
|
464
|
+
|
465
|
+
// this is awaiting the results of the request
|
466
|
+
const webInfo: IWebInfo = await p;
|
467
|
+
```
|
468
|
+
|
469
|
+
### Cancel long running operations
|
470
|
+
|
471
|
+
Some operations such as chunked uploads that take longer to complete are good candidates for canceling based on user input such as a button select.
|
472
|
+
|
473
|
+
```TypeScript
|
474
|
+
import { Cancelable, CancelablePromise } from "@pnp/queryable";
|
475
|
+
import { IFileAddResult } from "@pnp/sp/files";
|
476
|
+
import "@pnp/sp/webs";
|
477
|
+
import "@pnp/sp/files";
|
478
|
+
import "@pnp/sp/folders";
|
479
|
+
import { getRandomString } from "@pnp/core";
|
480
|
+
import { createReadStream } from "fs";
|
481
|
+
|
482
|
+
const sp = spfi().using(Cancelable());
|
483
|
+
|
484
|
+
const file = createReadStream(join("C:/some/path", "test.mp4"));
|
485
|
+
|
486
|
+
const p: CancelablePromise<IFileAddResult> = <any>sp.web.getFolderByServerRelativePath("/sites/dev/Shared Documents").files.addChunked(`te's't-${getRandomString(4)}.mp4`, <any>file);
|
487
|
+
|
488
|
+
setTimeout(() => {
|
489
|
+
|
490
|
+
// you should await the cancel operation to ensure it completes
|
491
|
+
await p.cancel();
|
492
|
+
}, 10000);
|
493
|
+
|
494
|
+
// this is awaiting the results of the request
|
495
|
+
await p;
|
496
|
+
```
|
@@ -0,0 +1,204 @@
|
|
1
|
+
# Extensions
|
2
|
+
|
3
|
+
Extending is the concept of overriding or adding functionality into an object or environment without altering the underlying class instances. This can be useful for debugging, testing, or injecting custom functionality. Extensions work with any [invokable](../concepts/invokable.md) and allow you to control any behavior of the library with extensions.
|
4
|
+
|
5
|
+
## Types of Extensions
|
6
|
+
|
7
|
+
There are two types of Extensions available as well as three methods for registration. You can register any type of extension with any of the registration options.
|
8
|
+
|
9
|
+
### Function Extensions
|
10
|
+
|
11
|
+
The first type is a simple function with a signature:
|
12
|
+
|
13
|
+
```TypeScript
|
14
|
+
(op: "apply" | "get" | "has" | "set", target: T, ...rest: any[]): void
|
15
|
+
```
|
16
|
+
|
17
|
+
This function is passed the current operation as the first argument, currently one of "apply", "get", "has", or "set". The second argument is the target instance upon which the operation is being invoked. The remaining parameters vary by the operation being performed, but will match their respective ProxyHandler method signatures.
|
18
|
+
|
19
|
+
### Named Extensions
|
20
|
+
|
21
|
+
Named extensions are designed to add or replace a single property or method, though you can register multiple using the same object. These extensions are defined by using an object which has the property/methods you want to override described. Registering named extensions globally will override that operation to all invokables.
|
22
|
+
|
23
|
+
```TypeScript
|
24
|
+
import { extendFactory } from "@pnp/queryable";
|
25
|
+
import { sp, List, Lists, IWeb, ILists, List, IList, Web } from "@pnp/sp/presets/all";
|
26
|
+
import { escapeQueryStrValue } from "@pnp/sp/utils/escapeQueryStrValue";
|
27
|
+
|
28
|
+
// create a plain object with the props and methods we want to add/change
|
29
|
+
const myExtensions = {
|
30
|
+
// override the lists property
|
31
|
+
get lists(this: IWeb): ILists {
|
32
|
+
// we will always order our lists by title and select just the Title for ALL calls (just as an example)
|
33
|
+
return Lists(this).orderBy("Title").select("Title");
|
34
|
+
},
|
35
|
+
// override the getByTitle method
|
36
|
+
getByTitle: function (this: ILists, title: string): IList {
|
37
|
+
// in our example our list has moved, so we rewrite the request on the fly
|
38
|
+
if (title === "List1") {
|
39
|
+
return List(this, `getByTitle('List2')`);
|
40
|
+
} else {
|
41
|
+
// you can't at this point call the "base" method as you will end up in loop within the proxy
|
42
|
+
// so you need to ensure you patch/include any original functionality you need
|
43
|
+
return List(this, `getByTitle('${escapeQueryStrValue(title)}')`);
|
44
|
+
}
|
45
|
+
},
|
46
|
+
};
|
47
|
+
|
48
|
+
// register all the named Extensions
|
49
|
+
extendFactory(Web, myExtensions);
|
50
|
+
|
51
|
+
// this will use our extension to ensure the lists are ordered
|
52
|
+
const lists = await sp.web.lists();
|
53
|
+
|
54
|
+
console.log(JSON.stringify(lists, null, 2));
|
55
|
+
|
56
|
+
// we will get the items from List1 but within the extension it is rewritten as List2
|
57
|
+
const items = await sp.web.lists.getByTitle("List1").items();
|
58
|
+
|
59
|
+
console.log(JSON.stringify(items.length, null, 2));
|
60
|
+
```
|
61
|
+
|
62
|
+
### ProxyHandler Extensions
|
63
|
+
|
64
|
+
You can also register a partial ProxyHandler implementation as an extension. You can implement one or more of the ProxyHandler methods as needed. Here we implement the same override of getByTitle globally. This is the most complicated method of creating an extension and assumes an understanding of how ProxyHandlers work.
|
65
|
+
|
66
|
+
```TypeScript
|
67
|
+
import { extendFactory } from "@pnp/queryable";
|
68
|
+
import { sp, Lists, IWeb, ILists, Web } from "@pnp/sp/presets/all";
|
69
|
+
import { escapeQueryStrValue } from "@pnp/sp/utils/escapeSingleQuote";
|
70
|
+
|
71
|
+
const myExtensions = {
|
72
|
+
get: (target, p: string | number | symbol, _receiver: any) => {
|
73
|
+
switch (p) {
|
74
|
+
case "getByTitle":
|
75
|
+
return (title: string) => {
|
76
|
+
|
77
|
+
// in our example our list has moved, so we rewrite the request on the fly
|
78
|
+
if (title === "LookupList") {
|
79
|
+
return List(target, `getByTitle('OrderByList')`);
|
80
|
+
} else {
|
81
|
+
// you can't at this point call the "base" method as you will end up in loop within the proxy
|
82
|
+
// so you need to ensure you patch/include any original functionality you need
|
83
|
+
return List(target, `getByTitle('${escapeQueryStrValue(title)}')`);
|
84
|
+
}
|
85
|
+
};
|
86
|
+
}
|
87
|
+
},
|
88
|
+
};
|
89
|
+
|
90
|
+
extendFactory(Web, myExtensions);
|
91
|
+
|
92
|
+
const lists = sp.web.lists;
|
93
|
+
const items = await lists.getByTitle("LookupList").items();
|
94
|
+
|
95
|
+
console.log(JSON.stringify(items.length, null, 2));
|
96
|
+
```
|
97
|
+
|
98
|
+
## Registering Extensions
|
99
|
+
|
100
|
+
You can register Extensions on an invocable factory or on a per-object basis, and you can register a single extension or an array of Extensions.
|
101
|
+
|
102
|
+
### Factory Registration
|
103
|
+
|
104
|
+
The pattern you will likely find most useful is the ability to extend an invocable factory. This will apply your extensions to all instances created with that factory, meaning all IWebs or ILists will have the extension methods. The example below shows how to add a property to IWeb as well as a method to IList.
|
105
|
+
|
106
|
+
```TypeScript
|
107
|
+
import { spfi } from "@pnp/sp";
|
108
|
+
import "@pnp/sp/webs";
|
109
|
+
import "@pnp/sp/lists/web";
|
110
|
+
import { IWeb, Web } from "@pnp/sp/webs";
|
111
|
+
import { ILists, Lists } from "@pnp/sp/lists";
|
112
|
+
import { extendFactory } from "@pnp/queryable";
|
113
|
+
import { sp } from "@pnp/sp";
|
114
|
+
|
115
|
+
const sp = spfi().using(...);
|
116
|
+
|
117
|
+
// sets up the types correctly when importing across your application
|
118
|
+
declare module "@pnp/sp/webs/types" {
|
119
|
+
|
120
|
+
// we need to extend the interface
|
121
|
+
interface IWeb {
|
122
|
+
orderedLists: ILists;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
// sets up the types correctly when importing across your application
|
127
|
+
declare module "@pnp/sp/lists/types" {
|
128
|
+
|
129
|
+
// we need to extend the interface
|
130
|
+
interface ILists {
|
131
|
+
getOrderedListsQuery: (this: ILists) => ILists;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
extendFactory(Web, {
|
136
|
+
// add an ordered lists property
|
137
|
+
get orderedLists(this: IWeb): ILists {
|
138
|
+
return this.lists.getOrderedListsQuery();
|
139
|
+
},
|
140
|
+
});
|
141
|
+
|
142
|
+
extendFactory(Lists, {
|
143
|
+
// add an ordered lists property
|
144
|
+
getOrderedListsQuery(this: ILists): ILists {
|
145
|
+
return this.top(10).orderBy("Title").select("Title");
|
146
|
+
},
|
147
|
+
});
|
148
|
+
|
149
|
+
// regardless of how we access the web and lists collections our extensions remain with all new instance based on
|
150
|
+
const web = Web([sp.web, "https://tenant.sharepoint.com/sites/dev/"]);
|
151
|
+
const lists1 = await web.orderedLists();
|
152
|
+
console.log(JSON.stringify(lists1, null, 2));
|
153
|
+
|
154
|
+
const lists2 = await Web([sp.web, "https://tenant.sharepoint.com/sites/dev/"]).orderedLists();
|
155
|
+
console.log(JSON.stringify(lists2, null, 2));
|
156
|
+
|
157
|
+
const lists3 = await sp.web.orderedLists();
|
158
|
+
console.log(JSON.stringify(lists3, null, 2));
|
159
|
+
```
|
160
|
+
|
161
|
+
### Instance Registration
|
162
|
+
|
163
|
+
You can also register Extensions on a single object instance, which is often the preferred approach as it will have less of a performance impact across your whole application. This is useful for debugging, overriding methods/properties, or controlling the behavior of specific object instances.
|
164
|
+
|
165
|
+
> Extensions are not transferred to child objects in a fluent chain, be sure you are extending the instance you think you are.
|
166
|
+
|
167
|
+
Here we show the same override operation of getByTitle on the lists collection, but safely only overriding the single instance.
|
168
|
+
|
169
|
+
``` TypeScript
|
170
|
+
import { extendObj } from "@pnp/queryable";
|
171
|
+
import { sp, List, ILists } from "@pnp/sp/presets/all";
|
172
|
+
|
173
|
+
const myExtensions = {
|
174
|
+
getByTitle: function (this: ILists, title: string) {
|
175
|
+
// in our example our list has moved, so we rewrite the request on the fly
|
176
|
+
if (title === "List1") {
|
177
|
+
return List(this, "getByTitle('List2')");
|
178
|
+
} else {
|
179
|
+
// you can't at this point call the "base" method as you will end up in loop within the proxy
|
180
|
+
// so you need to ensure you patch/include any original functionality you need
|
181
|
+
return List(this, `getByTitle('${escapeQueryStrValue(title)}')`);
|
182
|
+
}
|
183
|
+
},
|
184
|
+
};
|
185
|
+
|
186
|
+
const lists = extendObj(sp.web.lists, myExtensions);
|
187
|
+
const items = await lists.getByTitle("LookupList").items();
|
188
|
+
|
189
|
+
console.log(JSON.stringify(items.length, null, 2));
|
190
|
+
```
|
191
|
+
|
192
|
+
## Enable & Disable Extensions and Clear Global Extensions
|
193
|
+
|
194
|
+
Extensions are automatically enabled when you set an extension through any of the above outlined methods. You can disable and enable extensions on demand if needed.
|
195
|
+
|
196
|
+
```TypeScript
|
197
|
+
import { enableExtensions, disableExtensions, clearGlobalExtensions } from "@pnp/queryable";
|
198
|
+
|
199
|
+
// disable Extensions
|
200
|
+
disableExtensions();
|
201
|
+
|
202
|
+
// enable Extensions
|
203
|
+
enableExtensions();
|
204
|
+
```
|