@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,483 @@
|
|
1
|
+
import { getGUID, isUrlAbsolute, combine, CopyFrom, TimelinePipe, isFunc, hOP } from "@pnp/core";
|
2
|
+
import { parseBinderWithErrorCheck, Queryable } from "@pnp/queryable";
|
3
|
+
import { spPost } from "./operations.js";
|
4
|
+
import { ISPQueryable, _SPQueryable } from "./spqueryable.js";
|
5
|
+
import { spfi, SPFI } from "./fi.js";
|
6
|
+
import { Web, IWeb, _Web } from "./webs/types.js";
|
7
|
+
|
8
|
+
declare module "./fi" {
|
9
|
+
interface SPFI {
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Creates a batch behavior and associated execute function
|
13
|
+
*
|
14
|
+
*/
|
15
|
+
batched(props?: ISPBatchProps): [SPFI, () => Promise<void>];
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
declare module "./webs/types" {
|
20
|
+
interface _Web {
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Creates a batch behavior and associated execute function
|
24
|
+
*
|
25
|
+
*/
|
26
|
+
batched(props?: ISPBatchProps): [IWeb, () => Promise<void>];
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
SPFI.prototype.batched = function (this: SPFI, props?: ISPBatchProps): [SPFI, () => Promise<void>] {
|
31
|
+
|
32
|
+
const batched = spfi(this);
|
33
|
+
|
34
|
+
const [behavior, execute] = createBatch(batched._root, props);
|
35
|
+
|
36
|
+
batched.using(behavior);
|
37
|
+
|
38
|
+
return [batched, execute];
|
39
|
+
};
|
40
|
+
|
41
|
+
_Web.prototype.batched = function (this: IWeb, props?: ISPBatchProps): [IWeb, () => Promise<void>] {
|
42
|
+
|
43
|
+
const batched = Web(this);
|
44
|
+
|
45
|
+
const [behavior, execute] = createBatch(batched, props);
|
46
|
+
|
47
|
+
batched.using(behavior);
|
48
|
+
|
49
|
+
return [batched, execute];
|
50
|
+
};
|
51
|
+
|
52
|
+
interface ISPBatchProps {
|
53
|
+
/**
|
54
|
+
* Controls the headers copied from the original request into the batched request, applied to all items
|
55
|
+
* default: /Accept|Content-Type|IF-Match/i
|
56
|
+
*/
|
57
|
+
headersCopyPattern?: RegExp;
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* The request record defines a tuple that is
|
62
|
+
*
|
63
|
+
* [0]: The queryable object representing the request
|
64
|
+
* [1]: The request url
|
65
|
+
* [2]: Any request init values (headers, etc)
|
66
|
+
* [3]: The resolve function back to the promise for the original operation
|
67
|
+
* [4]: The reject function back to the promise for the original operation
|
68
|
+
*/
|
69
|
+
type RequestRecord = [Queryable, string, RequestInit, (value: Response | PromiseLike<Response>) => void, (reason?: any) => void];
|
70
|
+
|
71
|
+
/**
|
72
|
+
* Tracks on a batched instance that registration is complete (the child request has gotten to the send moment and the request is included in the batch)
|
73
|
+
*/
|
74
|
+
const RegistrationCompleteSym = Symbol.for("batch_registration");
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Tracks on a batched instance that the child request timeline lifecycle is complete (called in child.dispose)
|
78
|
+
*/
|
79
|
+
const RequestCompleteSym = Symbol.for("batch_request");
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Special batch parsing behavior used to convert the batch response text into a set of Response objects for each request
|
83
|
+
* @returns A parser behavior
|
84
|
+
*/
|
85
|
+
function BatchParse(): TimelinePipe {
|
86
|
+
|
87
|
+
return parseBinderWithErrorCheck(async (response): Promise<Response[]> => {
|
88
|
+
const text = await response.text();
|
89
|
+
return parseResponse(text);
|
90
|
+
});
|
91
|
+
}
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Internal class used to execute the batch request through the timeline lifecycle
|
95
|
+
*/
|
96
|
+
class BatchQueryable extends _SPQueryable {
|
97
|
+
|
98
|
+
constructor(base: ISPQueryable, public requestBaseUrl = base.toUrl().replace(/_api[\\|/].*$/i, "")) {
|
99
|
+
|
100
|
+
super(requestBaseUrl, "_api/$batch");
|
101
|
+
|
102
|
+
// this will copy over the current observables from the base associated with this batch
|
103
|
+
// this will replace any other parsing present
|
104
|
+
this.using(CopyFrom(base, "replace"), BatchParse());
|
105
|
+
|
106
|
+
this.on.dispose(() => {
|
107
|
+
|
108
|
+
// there is a code path where you may invoke a batch, say on items.add, whose return
|
109
|
+
// is an object like { data: any, item: IItem }. The expectation from v1 on is `item` in that object
|
110
|
+
// is immediately usable to make additional queries. Without this step when that IItem instance is
|
111
|
+
// created using "this.getById" within IITems.add all of the current observers of "this" are
|
112
|
+
// linked to the IItem instance created (expected), BUT they will be the set of observers setup
|
113
|
+
// to handle the batch, meaning invoking `item` will result in a half batched call that
|
114
|
+
// doesn't really work. To deliver the expected functionality we "reset" the
|
115
|
+
// observers using the original instance, mimicing the behavior had
|
116
|
+
// the IItem been created from that base without a batch involved. We use CopyFrom to ensure
|
117
|
+
// that we maintain the references to the InternalResolve and InternalReject events through
|
118
|
+
// the end of this timeline lifecycle. This works because CopyFrom by design uses Object.keys
|
119
|
+
// which ignores symbol properties.
|
120
|
+
base.using(CopyFrom(this, "replace", (k) => /(auth|send|pre|init)/i.test(k)));
|
121
|
+
});
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
/**
|
126
|
+
* Creates a batched version of the supplied base, meaning that all chained fluent operations from the new base are part of the batch
|
127
|
+
*
|
128
|
+
* @param base The base from which to initialize the batch
|
129
|
+
* @param props Any properties used to initialize the batch functionality
|
130
|
+
* @returns A tuple of [behavior used to assign objects to the batch, the execute function used to resolve the batch requests]
|
131
|
+
*/
|
132
|
+
export function createBatch(base: ISPQueryable, props?: ISPBatchProps): [TimelinePipe, () => Promise<void>] {
|
133
|
+
|
134
|
+
const registrationPromises: Promise<void>[] = [];
|
135
|
+
const completePromises: Promise<void>[] = [];
|
136
|
+
const requests: RequestRecord[] = [];
|
137
|
+
const batchId = getGUID();
|
138
|
+
const batchQuery = new BatchQueryable(base);
|
139
|
+
// this query is used to copy back the behaviors after the batch executes
|
140
|
+
// it should not manipulated or have behaviors added.
|
141
|
+
const refQuery = new BatchQueryable(base);
|
142
|
+
|
143
|
+
const { headersCopyPattern } = {
|
144
|
+
headersCopyPattern: /Accept|Content-Type|IF-Match/i,
|
145
|
+
...props,
|
146
|
+
};
|
147
|
+
|
148
|
+
const execute = async () => {
|
149
|
+
|
150
|
+
await Promise.all(registrationPromises);
|
151
|
+
|
152
|
+
if (requests.length < 1) {
|
153
|
+
// even if we have no requests we need to await the complete promises to ensure
|
154
|
+
// that execute only resolves AFTER every child request disposes #2457
|
155
|
+
// this likely means caching is being used, we returned values for all child requests from the cache
|
156
|
+
return Promise.all(completePromises).then(() => void (0));
|
157
|
+
}
|
158
|
+
|
159
|
+
const batchBody: string[] = [];
|
160
|
+
let currentChangeSetId = "";
|
161
|
+
|
162
|
+
for (let i = 0; i < requests.length; i++) {
|
163
|
+
|
164
|
+
const [, url, init] = requests[i];
|
165
|
+
|
166
|
+
if (init.method === "GET") {
|
167
|
+
|
168
|
+
if (currentChangeSetId.length > 0) {
|
169
|
+
// end an existing change set
|
170
|
+
batchBody.push(`--changeset_${currentChangeSetId}--\n\n`);
|
171
|
+
currentChangeSetId = "";
|
172
|
+
}
|
173
|
+
|
174
|
+
batchBody.push(`--batch_${batchId}\n`);
|
175
|
+
|
176
|
+
} else {
|
177
|
+
|
178
|
+
if (currentChangeSetId.length < 1) {
|
179
|
+
// start new change set
|
180
|
+
currentChangeSetId = getGUID();
|
181
|
+
batchBody.push(`--batch_${batchId}\n`);
|
182
|
+
batchBody.push(`Content-Type: multipart/mixed; boundary="changeset_${currentChangeSetId}"\n\n`);
|
183
|
+
}
|
184
|
+
|
185
|
+
batchBody.push(`--changeset_${currentChangeSetId}\n`);
|
186
|
+
}
|
187
|
+
|
188
|
+
// common batch part prefix
|
189
|
+
batchBody.push("Content-Type: application/http\n");
|
190
|
+
batchBody.push("Content-Transfer-Encoding: binary\n\n");
|
191
|
+
|
192
|
+
// these are the per-request headers
|
193
|
+
const headers = new Headers(init.headers);
|
194
|
+
|
195
|
+
// this is the url of the individual request within the batch
|
196
|
+
const reqUrl = isUrlAbsolute(url) ? url : combine(batchQuery.requestBaseUrl, url);
|
197
|
+
|
198
|
+
if (init.method !== "GET") {
|
199
|
+
|
200
|
+
let method = init.method;
|
201
|
+
|
202
|
+
if (headers.has("X-HTTP-Method")) {
|
203
|
+
method = headers.get("X-HTTP-Method");
|
204
|
+
headers.delete("X-HTTP-Method");
|
205
|
+
}
|
206
|
+
|
207
|
+
batchBody.push(`${method} ${reqUrl} HTTP/1.1\n`);
|
208
|
+
|
209
|
+
} else {
|
210
|
+
batchBody.push(`${init.method} ${reqUrl} HTTP/1.1\n`);
|
211
|
+
}
|
212
|
+
|
213
|
+
// lastly we apply any default headers we need that may not exist
|
214
|
+
if (!headers.has("Accept")) {
|
215
|
+
headers.append("Accept", "application/json");
|
216
|
+
}
|
217
|
+
|
218
|
+
if (!headers.has("Content-Type")) {
|
219
|
+
headers.append("Content-Type", "application/json;charset=utf-8");
|
220
|
+
}
|
221
|
+
|
222
|
+
// write headers into batch body
|
223
|
+
headers.forEach((value: string, name: string) => {
|
224
|
+
if (headersCopyPattern.test(name)) {
|
225
|
+
batchBody.push(`${name}: ${value}\n`);
|
226
|
+
}
|
227
|
+
});
|
228
|
+
|
229
|
+
batchBody.push("\n");
|
230
|
+
|
231
|
+
if (init.body) {
|
232
|
+
batchBody.push(`${init.body}\n\n`);
|
233
|
+
}
|
234
|
+
}
|
235
|
+
|
236
|
+
if (currentChangeSetId.length > 0) {
|
237
|
+
// Close the changeset
|
238
|
+
batchBody.push(`--changeset_${currentChangeSetId}--\n\n`);
|
239
|
+
currentChangeSetId = "";
|
240
|
+
}
|
241
|
+
|
242
|
+
batchBody.push(`--batch_${batchId}--\n`);
|
243
|
+
|
244
|
+
const responses: Response[] = await spPost(batchQuery, {
|
245
|
+
body: batchBody.join(""),
|
246
|
+
headers: {
|
247
|
+
"Content-Type": `multipart/mixed; boundary=batch_${batchId}`,
|
248
|
+
},
|
249
|
+
});
|
250
|
+
|
251
|
+
if (responses.length !== requests.length) {
|
252
|
+
throw Error("Could not properly parse responses to match requests in batch.");
|
253
|
+
}
|
254
|
+
|
255
|
+
return new Promise<void>((res, rej) => {
|
256
|
+
|
257
|
+
try {
|
258
|
+
|
259
|
+
for (let index = 0; index < responses.length; index++) {
|
260
|
+
const [, , , resolve, reject] = requests[index];
|
261
|
+
try {
|
262
|
+
resolve(responses[index]);
|
263
|
+
} catch (e) {
|
264
|
+
reject(e);
|
265
|
+
}
|
266
|
+
}
|
267
|
+
|
268
|
+
// this small delay allows the promises to resolve correctly in order by dropping this resolve behind
|
269
|
+
// the other work in the event loop. Feels hacky, but it works so 🤷
|
270
|
+
setTimeout(res, 0);
|
271
|
+
|
272
|
+
} catch (e) {
|
273
|
+
|
274
|
+
setTimeout(() => rej(e), 0);
|
275
|
+
}
|
276
|
+
|
277
|
+
}).then(() => Promise.all(completePromises)).then(() => void (0));
|
278
|
+
};
|
279
|
+
|
280
|
+
const register = (instance: ISPQueryable) => {
|
281
|
+
|
282
|
+
instance.on.init(function (this: ISPQueryable) {
|
283
|
+
|
284
|
+
if (isFunc(this[RegistrationCompleteSym])) {
|
285
|
+
throw Error("This instance is already part of a batch. Please review the docs at https://pnp.github.io/pnpjs/concepts/batching#reuse.");
|
286
|
+
}
|
287
|
+
|
288
|
+
// we need to ensure we wait to start execute until all our batch children hit the .send method to be fully registered
|
289
|
+
registrationPromises.push(new Promise((resolve) => {
|
290
|
+
this[RegistrationCompleteSym] = resolve;
|
291
|
+
}));
|
292
|
+
|
293
|
+
return this;
|
294
|
+
});
|
295
|
+
|
296
|
+
instance.on.pre(async function (this: ISPQueryable, url, init, result) {
|
297
|
+
|
298
|
+
// Do not add to timeline if using BatchNever behavior
|
299
|
+
if (hOP(init.headers, "X-PnP-BatchNever")) {
|
300
|
+
|
301
|
+
// clean up the init operations from the timeline
|
302
|
+
// not strictly necessary as none of the logic that uses this should be in the request, but good to keep things tidy
|
303
|
+
if (typeof (this[RequestCompleteSym]) === "function") {
|
304
|
+
this[RequestCompleteSym]();
|
305
|
+
delete this[RequestCompleteSym];
|
306
|
+
}
|
307
|
+
|
308
|
+
this.using(CopyFrom(refQuery, "replace", (k) => /(init|pre)/i.test(k)));
|
309
|
+
|
310
|
+
return [url, init, result];
|
311
|
+
}
|
312
|
+
|
313
|
+
// the entire request will be auth'd - we don't need to run this for each batch request
|
314
|
+
this.on.auth.clear();
|
315
|
+
|
316
|
+
// we replace the send function with our batching logic
|
317
|
+
this.on.send.replace(async function (this: ISPQueryable, url: URL, init: RequestInit) {
|
318
|
+
|
319
|
+
// this is the promise that Queryable will see returned from .emit.send
|
320
|
+
const promise = new Promise<Response>((resolve, reject) => {
|
321
|
+
// add the request information into the batch
|
322
|
+
requests.push([this, url.toString(), init, resolve, reject]);
|
323
|
+
});
|
324
|
+
|
325
|
+
this.log(`[batch:${batchId}] (${(new Date()).getTime()}) Adding request ${init.method} ${url.toString()} to batch.`, 0);
|
326
|
+
|
327
|
+
// we need to ensure we wait to resolve execute until all our batch children have fully completed their request timelines
|
328
|
+
completePromises.push(new Promise((resolve) => {
|
329
|
+
this[RequestCompleteSym] = resolve;
|
330
|
+
}));
|
331
|
+
|
332
|
+
// indicate that registration of this request is complete
|
333
|
+
this[RegistrationCompleteSym]();
|
334
|
+
|
335
|
+
return promise;
|
336
|
+
});
|
337
|
+
|
338
|
+
this.on.dispose(function (this: ISPQueryable) {
|
339
|
+
|
340
|
+
if (isFunc(this[RegistrationCompleteSym])) {
|
341
|
+
|
342
|
+
// if this request is in a batch and caching is in play we need to resolve the registration promises to unblock processing of the batch
|
343
|
+
// because the request will never reach the "send" moment as the result is returned from "pre"
|
344
|
+
this[RegistrationCompleteSym]();
|
345
|
+
|
346
|
+
// remove the symbol props we added for good hygene
|
347
|
+
delete this[RegistrationCompleteSym];
|
348
|
+
}
|
349
|
+
|
350
|
+
if (isFunc(this[RequestCompleteSym])) {
|
351
|
+
|
352
|
+
// let things know we are done with this request
|
353
|
+
this[RequestCompleteSym]();
|
354
|
+
delete this[RequestCompleteSym];
|
355
|
+
|
356
|
+
// there is a code path where you may invoke a batch, say on items.add, whose return
|
357
|
+
// is an object like { data: any, item: IItem }. The expectation from v1 on is `item` in that object
|
358
|
+
// is immediately usable to make additional queries. Without this step when that IItem instance is
|
359
|
+
// created using "this.getById" within IITems.add all of the current observers of "this" are
|
360
|
+
// linked to the IItem instance created (expected), BUT they will be the set of observers setup
|
361
|
+
// to handle the batch, meaning invoking `item` will result in a half batched call that
|
362
|
+
// doesn't really work. To deliver the expected functionality we "reset" the
|
363
|
+
// observers using the original instance, mimicing the behavior had
|
364
|
+
// the IItem been created from that base without a batch involved. We use CopyFrom to ensure
|
365
|
+
// that we maintain the references to the InternalResolve and InternalReject events through
|
366
|
+
// the end of this timeline lifecycle. This works because CopyFrom by design uses Object.keys
|
367
|
+
// which ignores symbol properties.
|
368
|
+
this.using(CopyFrom(refQuery, "replace", (k) => /(auth|pre|send|init|dispose)/i.test(k)));
|
369
|
+
}
|
370
|
+
});
|
371
|
+
|
372
|
+
return [url, init, result];
|
373
|
+
});
|
374
|
+
|
375
|
+
return instance;
|
376
|
+
};
|
377
|
+
|
378
|
+
return [register, execute];
|
379
|
+
}
|
380
|
+
|
381
|
+
/**
|
382
|
+
* Behavior that blocks batching for the request regardless of "method"
|
383
|
+
*
|
384
|
+
* This is used for requests to bypass batching methods. Example - Request Digest where we need to get a request-digest inside of a batch.
|
385
|
+
* @returns TimelinePipe
|
386
|
+
*/
|
387
|
+
export function BatchNever() {
|
388
|
+
|
389
|
+
return (instance: Queryable) => {
|
390
|
+
|
391
|
+
instance.on.pre.prepend(async function (this: Queryable, url: string, init: RequestInit, result: any): Promise<[string, RequestInit, any]> {
|
392
|
+
|
393
|
+
init.headers = { ...init.headers, "X-PnP-BatchNever": "1" };
|
394
|
+
|
395
|
+
return [url, init, result];
|
396
|
+
});
|
397
|
+
|
398
|
+
return instance;
|
399
|
+
};
|
400
|
+
}
|
401
|
+
|
402
|
+
/**
|
403
|
+
* Parses the text body returned by the server from a batch request
|
404
|
+
*
|
405
|
+
* @param body String body from the server response
|
406
|
+
* @returns Parsed response objects
|
407
|
+
*/
|
408
|
+
function parseResponse(body: string): Response[] {
|
409
|
+
|
410
|
+
const responses: Response[] = [];
|
411
|
+
const header = "--batchresponse_";
|
412
|
+
// Ex. "HTTP/1.1 500 Internal Server Error"
|
413
|
+
const statusRegExp = new RegExp("^HTTP/[0-9.]+ +([0-9]+) +(.*)", "i");
|
414
|
+
const lines = body.split("\n");
|
415
|
+
let state = "batch";
|
416
|
+
let status: number;
|
417
|
+
let statusText: string;
|
418
|
+
let headers = {};
|
419
|
+
const bodyReader = [];
|
420
|
+
|
421
|
+
for (let i = 0; i < lines.length; ++i) {
|
422
|
+
let line = lines[i];
|
423
|
+
switch (state) {
|
424
|
+
case "batch":
|
425
|
+
if (line.substring(0, header.length) === header) {
|
426
|
+
state = "batchHeaders";
|
427
|
+
} else {
|
428
|
+
if (line.trim() !== "") {
|
429
|
+
throw Error(`Invalid response, line ${i}`);
|
430
|
+
}
|
431
|
+
}
|
432
|
+
break;
|
433
|
+
case "batchHeaders":
|
434
|
+
if (line.trim() === "") {
|
435
|
+
state = "status";
|
436
|
+
}
|
437
|
+
break;
|
438
|
+
case "status": {
|
439
|
+
const parts = statusRegExp.exec(line);
|
440
|
+
if (parts.length !== 3) {
|
441
|
+
throw Error(`Invalid status, line ${i}`);
|
442
|
+
}
|
443
|
+
status = parseInt(parts[1], 10);
|
444
|
+
statusText = parts[2];
|
445
|
+
state = "statusHeaders";
|
446
|
+
break;
|
447
|
+
}
|
448
|
+
case "statusHeaders":
|
449
|
+
if (line.trim() === "") {
|
450
|
+
state = "body";
|
451
|
+
} else {
|
452
|
+
const headerParts = line.split(":");
|
453
|
+
if (headerParts?.length === 2) {
|
454
|
+
headers[headerParts[0].trim()] = headerParts[1].trim();
|
455
|
+
}
|
456
|
+
}
|
457
|
+
break;
|
458
|
+
case "body":
|
459
|
+
|
460
|
+
// reset the body reader
|
461
|
+
bodyReader.length = 0;
|
462
|
+
// this allows us to capture batch bodies that are returned as multi-line (renderListDataAsStream, #2454)
|
463
|
+
while (line.substring(0, header.length) !== header) {
|
464
|
+
bodyReader.push(line);
|
465
|
+
line = lines[++i];
|
466
|
+
}
|
467
|
+
// because we have read the closing --batchresponse_ line, we need to move the line pointer back one
|
468
|
+
// so that the logic works as expected either to get the next result or end processing
|
469
|
+
i--;
|
470
|
+
|
471
|
+
responses.push(new Response(status === 204 ? null : bodyReader.join(""), { status, statusText, headers }));
|
472
|
+
state = "batch";
|
473
|
+
headers = {};
|
474
|
+
break;
|
475
|
+
}
|
476
|
+
}
|
477
|
+
|
478
|
+
if (state !== "status") {
|
479
|
+
throw Error("Unexpected end of input");
|
480
|
+
}
|
481
|
+
|
482
|
+
return responses;
|
483
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { TimelinePipe } from "@pnp/core";
|
2
|
+
import { InjectHeaders, Queryable, RejectOnError, ResolveOnData } from "@pnp/queryable";
|
3
|
+
import { Telemetry } from "./telemetry.js";
|
4
|
+
|
5
|
+
export function DefaultInit(): TimelinePipe<Queryable> {
|
6
|
+
|
7
|
+
return (instance: Queryable) => {
|
8
|
+
|
9
|
+
instance.on.pre(async (url, init, result) => {
|
10
|
+
|
11
|
+
init.cache = "no-cache";
|
12
|
+
init.credentials = "same-origin";
|
13
|
+
|
14
|
+
return [url, init, result];
|
15
|
+
});
|
16
|
+
|
17
|
+
instance.using(
|
18
|
+
Telemetry(),
|
19
|
+
RejectOnError(),
|
20
|
+
ResolveOnData());
|
21
|
+
|
22
|
+
return instance;
|
23
|
+
};
|
24
|
+
}
|
25
|
+
|
26
|
+
export function DefaultHeaders(): TimelinePipe<Queryable> {
|
27
|
+
|
28
|
+
return (instance: Queryable) => {
|
29
|
+
|
30
|
+
instance
|
31
|
+
.using(InjectHeaders({
|
32
|
+
"Accept": "application/json",
|
33
|
+
"Content-Type": "application/json;charset=utf-8",
|
34
|
+
}));
|
35
|
+
|
36
|
+
return instance;
|
37
|
+
};
|
38
|
+
}
|
@@ -0,0 +1,78 @@
|
|
1
|
+
import { combine, dateAdd, hOP, isFunc, objectDefinedNotNull, TimelinePipe } from "@pnp/core";
|
2
|
+
import { JSONParse, Queryable } from "@pnp/queryable";
|
3
|
+
import { extractWebUrl } from "../utils/extract-web-url.js";
|
4
|
+
import { ISPQueryable, SPQueryable } from "../spqueryable.js";
|
5
|
+
import { spPost } from "../operations.js";
|
6
|
+
import { BatchNever } from "../batching.js";
|
7
|
+
|
8
|
+
interface IDigestInfo {
|
9
|
+
expiration: Date;
|
10
|
+
value: string;
|
11
|
+
}
|
12
|
+
|
13
|
+
function clearExpired(digest: IDigestInfo | null | undefined): IDigestInfo | null {
|
14
|
+
const now = new Date();
|
15
|
+
return !objectDefinedNotNull(digest) || (now > digest.expiration) ? null : digest;
|
16
|
+
}
|
17
|
+
|
18
|
+
// allows for the caching of digests across all calls which each have their own IDigestInfo wrapper.
|
19
|
+
const digests = new Map<string, IDigestInfo>();
|
20
|
+
|
21
|
+
export function RequestDigest(hook?: (url: string, init: RequestInit) => IDigestInfo | null | undefined): TimelinePipe<Queryable> {
|
22
|
+
|
23
|
+
return (instance: Queryable) => {
|
24
|
+
|
25
|
+
instance.on.pre(async function (this: ISPQueryable, url, init, result) {
|
26
|
+
|
27
|
+
// add the request to the auth moment of the timeline
|
28
|
+
this.on.auth(async (url, init) => {
|
29
|
+
|
30
|
+
// eslint-disable-next-line max-len
|
31
|
+
if (/get/i.test(init.method) || (init.headers && (hOP(init.headers, "X-RequestDigest") || hOP(init.headers, "Authorization") || hOP(init.headers, "X-PnPjs-NoDigest")))) {
|
32
|
+
return [url, init];
|
33
|
+
}
|
34
|
+
|
35
|
+
const urlAsString = url.toString();
|
36
|
+
const webUrl = extractWebUrl(urlAsString);
|
37
|
+
|
38
|
+
// do we have one in the cache that is still valid
|
39
|
+
// from #2186 we need to always ensure the digest we get isn't expired
|
40
|
+
let digest: IDigestInfo = clearExpired(digests.get(webUrl));
|
41
|
+
|
42
|
+
if (!objectDefinedNotNull(digest) && isFunc(hook)) {
|
43
|
+
digest = clearExpired(hook(urlAsString, init));
|
44
|
+
}
|
45
|
+
|
46
|
+
if (!objectDefinedNotNull(digest)) {
|
47
|
+
|
48
|
+
digest = await spPost(SPQueryable([this, combine(webUrl, "_api/contextinfo")]).using(JSONParse(),BatchNever()), {
|
49
|
+
headers: {
|
50
|
+
"X-PnPjs-NoDigest": "1",
|
51
|
+
},
|
52
|
+
}).then(p => ({
|
53
|
+
expiration: dateAdd(new Date(), "second", p.FormDigestTimeoutSeconds),
|
54
|
+
value: p.FormDigestValue,
|
55
|
+
}));
|
56
|
+
}
|
57
|
+
|
58
|
+
if (objectDefinedNotNull(digest)) {
|
59
|
+
|
60
|
+
// if we got a digest, set it in the headers
|
61
|
+
init.headers = {
|
62
|
+
"X-RequestDigest": digest.value,
|
63
|
+
...init.headers,
|
64
|
+
};
|
65
|
+
|
66
|
+
// and cache it for future requests
|
67
|
+
digests.set(webUrl, digest);
|
68
|
+
}
|
69
|
+
|
70
|
+
return [url, init];
|
71
|
+
});
|
72
|
+
|
73
|
+
return [url, init, result];
|
74
|
+
});
|
75
|
+
|
76
|
+
return instance;
|
77
|
+
};
|
78
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { combine, isUrlAbsolute, TimelinePipe } from "@pnp/core";
|
2
|
+
import { BrowserFetchWithRetry, DefaultParse, Queryable } from "@pnp/queryable";
|
3
|
+
import { DefaultHeaders, DefaultInit } from "./defaults.js";
|
4
|
+
import { RequestDigest } from "./request-digest.js";
|
5
|
+
|
6
|
+
export interface ISPBrowserProps {
|
7
|
+
baseUrl?: string;
|
8
|
+
}
|
9
|
+
|
10
|
+
export function SPBrowser(props?: ISPBrowserProps): TimelinePipe<Queryable> {
|
11
|
+
|
12
|
+
if (props?.baseUrl && !isUrlAbsolute(props.baseUrl)) {
|
13
|
+
throw Error("SPBrowser props.baseUrl must be absolute when supplied.");
|
14
|
+
}
|
15
|
+
|
16
|
+
return (instance: Queryable) => {
|
17
|
+
|
18
|
+
instance.using(
|
19
|
+
DefaultHeaders(),
|
20
|
+
DefaultInit(),
|
21
|
+
BrowserFetchWithRetry(),
|
22
|
+
DefaultParse(),
|
23
|
+
RequestDigest());
|
24
|
+
|
25
|
+
if (isUrlAbsolute(props?.baseUrl)) {
|
26
|
+
|
27
|
+
// we want to fix up the url first
|
28
|
+
instance.on.pre.prepend(async (url, init, result) => {
|
29
|
+
|
30
|
+
if (!isUrlAbsolute(url)) {
|
31
|
+
url = combine(props.baseUrl, url);
|
32
|
+
}
|
33
|
+
|
34
|
+
return [url, init, result];
|
35
|
+
});
|
36
|
+
}
|
37
|
+
|
38
|
+
return instance;
|
39
|
+
};
|
40
|
+
}
|