culparepellendus 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.env.example +2 -0
- package/.eslintrc.js +20 -0
- package/.github/workflows/deploy-docs.yml +27 -0
- package/.github/workflows/pre-release-tests.yml +45 -0
- package/.github/workflows/pull-request-tests.yml +45 -0
- package/.prettierignore +2 -0
- package/.prettierrc +19 -0
- package/.vscode/launch.json +24 -0
- package/.vscode/settings.json +3 -0
- package/codecov.yml +7 -0
- package/demos/.eslintrc.js +13 -0
- package/demos/ago-node-cli/README.md +29 -0
- package/demos/ago-node-cli/ago.js +33 -0
- package/demos/ago-node-cli/index.js +11 -0
- package/demos/ago-node-cli/lib/item-export-command.js +48 -0
- package/demos/ago-node-cli/lib/item-search-command.js +35 -0
- package/demos/ago-node-cli/package-lock.json +430 -0
- package/demos/ago-node-cli/package.json +30 -0
- package/demos/attachments/README.md +5 -0
- package/demos/attachments/index.html +165 -0
- package/demos/attachments/package-lock.json +543 -0
- package/demos/attachments/package.json +18 -0
- package/demos/batch-geocoder-node/NYC_Restaurant_Inspection_Results.csv +100 -0
- package/demos/batch-geocoder-node/README.md +15 -0
- package/demos/batch-geocoder-node/batch-geocode.js +115 -0
- package/demos/batch-geocoder-node/config-template.js +18 -0
- package/demos/batch-geocoder-node/package-lock.json +336 -0
- package/demos/batch-geocoder-node/package.json +37 -0
- package/demos/express/README.md +15 -0
- package/demos/express/config.json.template +3 -0
- package/demos/express/package-lock.json +1008 -0
- package/demos/express/package.json +18 -0
- package/demos/express/server.js +33 -0
- package/demos/feature-service-browser/README.md +6 -0
- package/demos/feature-service-browser/index.html +122 -0
- package/demos/feature-service-browser/package-lock.json +543 -0
- package/demos/feature-service-browser/package.json +18 -0
- package/demos/geocoder-browser/README.md +10 -0
- package/demos/geocoder-browser/config.js.template +1 -0
- package/demos/geocoder-browser/index.html +131 -0
- package/demos/geocoder-browser/package-lock.json +610 -0
- package/demos/geocoder-browser/package.json +19 -0
- package/demos/geocoder-browser/post-sign-in.html +25 -0
- package/demos/jsapi-integration/README.md +25 -0
- package/demos/jsapi-integration/config.js +6 -0
- package/demos/jsapi-integration/index.html +93 -0
- package/demos/jsapi-integration/package-lock.json +247 -0
- package/demos/jsapi-integration/package.json +19 -0
- package/demos/node-cli-item-management/README.md +10 -0
- package/demos/node-cli-item-management/index.js +238 -0
- package/demos/node-cli-item-management/package-lock.json +432 -0
- package/demos/node-cli-item-management/package.json +27 -0
- package/demos/node-cli-item-management/screenshot.png +0 -0
- package/demos/oauth2-browser/README.md +14 -0
- package/demos/oauth2-browser/authenticate.html +30 -0
- package/demos/oauth2-browser/config.js.template +6 -0
- package/demos/oauth2-browser/index.html +211 -0
- package/demos/oauth2-browser/logo.svg +4 -0
- package/demos/oauth2-browser/package-lock.json +474 -0
- package/demos/oauth2-browser/package.json +18 -0
- package/demos/oauth2-browser/style.css +36 -0
- package/demos/oauth2-browser-retry/README.md +25 -0
- package/demos/oauth2-browser-retry/authenticate.html +22 -0
- package/demos/oauth2-browser-retry/index.html +116 -0
- package/demos/oauth2-browser-retry/logo.svg +4 -0
- package/demos/stream-response-to-file/README.md +7 -0
- package/demos/stream-response-to-file/index.js +36 -0
- package/demos/stream-response-to-file/output/.gitkeep +0 -0
- package/demos/stream-response-to-file/package-lock.json +227 -0
- package/demos/stream-response-to-file/package.json +33 -0
- package/demos/tree-shaking-rollup/.babelrc +3 -0
- package/demos/tree-shaking-rollup/README.md +9 -0
- package/demos/tree-shaking-rollup/index.html +11 -0
- package/demos/tree-shaking-rollup/package-lock.json +5646 -0
- package/demos/tree-shaking-rollup/package.json +25 -0
- package/demos/tree-shaking-rollup/rollup.config.js +17 -0
- package/demos/tree-shaking-rollup/src/index.js +8 -0
- package/demos/tree-shaking-webpack/README.md +8 -0
- package/demos/tree-shaking-webpack/index.html +11 -0
- package/demos/tree-shaking-webpack/package-lock.json +11455 -0
- package/demos/tree-shaking-webpack/package.json +24 -0
- package/demos/tree-shaking-webpack/src/index.js +10 -0
- package/demos/tree-shaking-webpack/webpack.config.js +27 -0
- package/demos/vue/.env.example +11 -0
- package/demos/vue/.eslintrc.js +17 -0
- package/demos/vue/.postcssrc.js +5 -0
- package/demos/vue/README.md +17 -0
- package/demos/vue/babel.config.js +3 -0
- package/demos/vue/package-lock.json +28044 -0
- package/demos/vue/package.json +33 -0
- package/demos/vue/public/favicon.ico +0 -0
- package/demos/vue/public/index.html +24 -0
- package/demos/vue/src/assets/logo.svg +29 -0
- package/demos/vue/src/components/App.vue +305 -0
- package/demos/vue/src/components/Authenticate.vue +65 -0
- package/demos/vue/src/components/Loader.vue +230 -0
- package/demos/vue/src/main.js +92 -0
- package/demos/webmap-checker-sapper/.env.example +5 -0
- package/demos/webmap-checker-sapper/README.md +123 -0
- package/demos/webmap-checker-sapper/appveyor.yml +18 -0
- package/demos/webmap-checker-sapper/cypress/fixtures/example.json +5 -0
- package/demos/webmap-checker-sapper/cypress/integration/spec.js +19 -0
- package/demos/webmap-checker-sapper/cypress/plugins/index.js +17 -0
- package/demos/webmap-checker-sapper/cypress/support/commands.js +25 -0
- package/demos/webmap-checker-sapper/cypress/support/index.js +20 -0
- package/demos/webmap-checker-sapper/cypress.json +4 -0
- package/demos/webmap-checker-sapper/package-lock.json +9622 -0
- package/demos/webmap-checker-sapper/package.json +50 -0
- package/demos/webmap-checker-sapper/rollup.config.js +87 -0
- package/demos/webmap-checker-sapper/src/client.js +20 -0
- package/demos/webmap-checker-sapper/src/components/LayerStatus.html +108 -0
- package/demos/webmap-checker-sapper/src/components/Nav.html +21 -0
- package/demos/webmap-checker-sapper/src/components/WebMap.html +62 -0
- package/demos/webmap-checker-sapper/src/routes/_error.html +41 -0
- package/demos/webmap-checker-sapper/src/routes/_layout.html +21 -0
- package/demos/webmap-checker-sapper/src/routes/auth/authorize.js +18 -0
- package/demos/webmap-checker-sapper/src/routes/auth/exchange-token.js +20 -0
- package/demos/webmap-checker-sapper/src/routes/auth/post-sign-in.js +24 -0
- package/demos/webmap-checker-sapper/src/routes/auth/sign-out.js +10 -0
- package/demos/webmap-checker-sapper/src/routes/index.html +20 -0
- package/demos/webmap-checker-sapper/src/routes/webmaps/[webmapId].html +83 -0
- package/demos/webmap-checker-sapper/src/routes/webmaps/index.html +59 -0
- package/demos/webmap-checker-sapper/src/server.js +101 -0
- package/demos/webmap-checker-sapper/src/service-worker.js +82 -0
- package/demos/webmap-checker-sapper/src/template.html +33 -0
- package/demos/webmap-checker-sapper/src/userInfoMiddleware.js +21 -0
- package/demos/webmap-checker-sapper/src/utils.js +33 -0
- package/demos/webmap-checker-sapper/static/favicon.png +0 -0
- package/demos/webmap-checker-sapper/static/global.css +36 -0
- package/demos/webmap-checker-sapper/static/manifest.json +20 -0
- package/demos/webmap-checker-sapper/static/svelte-logo-192.png +0 -0
- package/demos/webmap-checker-sapper/static/svelte-logo-512.png +0 -0
- package/docs/.eslintrc.js +12 -0
- package/docs/FAQ.md +48 -0
- package/docs/HISTORY.md +62 -0
- package/docs/acetate.config.js +262 -0
- package/docs/build-typedoc.js +434 -0
- package/docs/generate-srihashes.js +53 -0
- package/docs/src/_layout.html +86 -0
- package/docs/src/api/_declaration.html +600 -0
- package/docs/src/api/_layout.html +204 -0
- package/docs/src/api/_package.html +38 -0
- package/docs/src/api/index.html +16 -0
- package/docs/src/guides/_layout.html +24 -0
- package/docs/src/guides/amd-requirejs-dojo.md +40 -0
- package/docs/src/guides/browser-authentication.md +39 -0
- package/docs/src/guides/bundlers.md +52 -0
- package/docs/src/guides/cli-authentication.md +9 -0
- package/docs/src/guides/client-server-authentication.md +9 -0
- package/docs/src/guides/embedded-apps.md +106 -0
- package/docs/src/guides/from-a-cdn.md +38 -0
- package/docs/src/guides/index.md +59 -0
- package/docs/src/guides/node.md +104 -0
- package/docs/src/guides/package-overview.md +111 -0
- package/docs/src/guides/server-authentication.md +9 -0
- package/docs/src/guides/whats-new-v2-0.md +305 -0
- package/docs/src/img/icons.png +0 -0
- package/docs/src/img/icons@2x.png +0 -0
- package/docs/src/img/oauth-browser.png +0 -0
- package/docs/src/index.html +12 -0
- package/docs/src/js/api-search.js +112 -0
- package/docs/src/js/nav-toggle.js +41 -0
- package/docs/src/sass/_highlight.scss +96 -0
- package/docs/src/sass/_icons.scss +157 -0
- package/docs/src/sass/style.scss +242 -0
- package/docs/src/srihashes.json +12 -0
- package/jasmine.json +7 -0
- package/jasmine.live.json +7 -0
- package/karma.conf.js +107 -0
- package/lerna.json +8 -0
- package/notes/README.md +68 -0
- package/package.json +87 -0
- package/packages/arcgis-rest-auth/README.md +71 -0
- package/packages/arcgis-rest-auth/package-lock.json +27 -0
- package/packages/arcgis-rest-auth/package.json +69 -0
- package/packages/arcgis-rest-auth/post-message-auth-spec.md +70 -0
- package/packages/arcgis-rest-auth/src/ApiKey.ts +41 -0
- package/packages/arcgis-rest-auth/src/ApplicationSession.ts +122 -0
- package/packages/arcgis-rest-auth/src/UserSession.ts +1376 -0
- package/packages/arcgis-rest-auth/src/app-tokens.ts +131 -0
- package/packages/arcgis-rest-auth/src/authenticated-request-options.ts +24 -0
- package/packages/arcgis-rest-auth/src/federation-utils.ts +85 -0
- package/packages/arcgis-rest-auth/src/fetch-token.ts +50 -0
- package/packages/arcgis-rest-auth/src/generate-token.ts +35 -0
- package/packages/arcgis-rest-auth/src/index.ts +13 -0
- package/packages/arcgis-rest-auth/src/validate-app-access.ts +68 -0
- package/packages/arcgis-rest-auth/test/ApiKey.test.ts +35 -0
- package/packages/arcgis-rest-auth/test/ApplicationSession.test.ts +124 -0
- package/packages/arcgis-rest-auth/test/UserSession.test.ts +2430 -0
- package/packages/arcgis-rest-auth/test/app-tokens.test.ts +95 -0
- package/packages/arcgis-rest-auth/test/federation-utils.test.ts +323 -0
- package/packages/arcgis-rest-auth/test/fetchToken.test.ts +112 -0
- package/packages/arcgis-rest-auth/test/generateToken.test.ts +102 -0
- package/packages/arcgis-rest-auth/test/utils.ts +14 -0
- package/packages/arcgis-rest-auth/test/validate-app-access.test.ts +46 -0
- package/packages/arcgis-rest-auth/tsconfig.json +6 -0
- package/packages/arcgis-rest-demographics/README.md +75 -0
- package/packages/arcgis-rest-demographics/package-lock.json +11 -0
- package/packages/arcgis-rest-demographics/package.json +69 -0
- package/packages/arcgis-rest-demographics/src/getAvailableCountries.ts +113 -0
- package/packages/arcgis-rest-demographics/src/getAvailableDataCollections.ts +166 -0
- package/packages/arcgis-rest-demographics/src/getAvailableGeographyLevels.ts +88 -0
- package/packages/arcgis-rest-demographics/src/getGeography.ts +152 -0
- package/packages/arcgis-rest-demographics/src/helpers.ts +28 -0
- package/packages/arcgis-rest-demographics/src/index.ts +8 -0
- package/packages/arcgis-rest-demographics/src/queryDemographicData.ts +106 -0
- package/packages/arcgis-rest-demographics/test/getAvailableCountries.test.ts +92 -0
- package/packages/arcgis-rest-demographics/test/getAvailableDataCollections.test.ts +115 -0
- package/packages/arcgis-rest-demographics/test/getAvailableGeographyLevels.test.ts +72 -0
- package/packages/arcgis-rest-demographics/test/getGeography.test.ts +141 -0
- package/packages/arcgis-rest-demographics/test/mocks/responses.ts +4 -0
- package/packages/arcgis-rest-demographics/test/queryDemographicData.test.live.ts +42 -0
- package/packages/arcgis-rest-demographics/test/queryDemographicData.test.ts +113 -0
- package/packages/arcgis-rest-demographics/tsconfig.json +6 -0
- package/packages/arcgis-rest-feature-layer/README.md +77 -0
- package/packages/arcgis-rest-feature-layer/package-lock.json +11 -0
- package/packages/arcgis-rest-feature-layer/package.json +64 -0
- package/packages/arcgis-rest-feature-layer/src/add.ts +56 -0
- package/packages/arcgis-rest-feature-layer/src/addAttachment.ts +53 -0
- package/packages/arcgis-rest-feature-layer/src/applyEdits.ts +95 -0
- package/packages/arcgis-rest-feature-layer/src/decodeValues.ts +122 -0
- package/packages/arcgis-rest-feature-layer/src/delete.ts +61 -0
- package/packages/arcgis-rest-feature-layer/src/deleteAttachments.ts +52 -0
- package/packages/arcgis-rest-feature-layer/src/getAllLayersAndTables.ts +30 -0
- package/packages/arcgis-rest-feature-layer/src/getAttachments.ts +55 -0
- package/packages/arcgis-rest-feature-layer/src/getLayer.ts +24 -0
- package/packages/arcgis-rest-feature-layer/src/getService.ts +26 -0
- package/packages/arcgis-rest-feature-layer/src/helpers.ts +97 -0
- package/packages/arcgis-rest-feature-layer/src/index.ts +32 -0
- package/packages/arcgis-rest-feature-layer/src/query.ts +204 -0
- package/packages/arcgis-rest-feature-layer/src/queryRelated.ts +89 -0
- package/packages/arcgis-rest-feature-layer/src/update.ts +60 -0
- package/packages/arcgis-rest-feature-layer/src/updateAttachment.ts +59 -0
- package/packages/arcgis-rest-feature-layer/test/attachments.test.ts +200 -0
- package/packages/arcgis-rest-feature-layer/test/crud.test.ts +197 -0
- package/packages/arcgis-rest-feature-layer/test/decodeValues.test.ts +67 -0
- package/packages/arcgis-rest-feature-layer/test/getAllLayersAndTables.test.ts +28 -0
- package/packages/arcgis-rest-feature-layer/test/getLayer.test.ts +31 -0
- package/packages/arcgis-rest-feature-layer/test/getService.test.ts +31 -0
- package/packages/arcgis-rest-feature-layer/test/helpers.test.ts +25 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/allLayersAndTablesResponse.ts +906 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/cvdQueryResponse.ts +225 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/feature.ts +302 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/fields.ts +779 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/foo.txt +1 -0
- package/packages/arcgis-rest-feature-layer/test/mocks/service.ts +398 -0
- package/packages/arcgis-rest-feature-layer/test/query.test.ts +167 -0
- package/packages/arcgis-rest-feature-layer/tsconfig.json +6 -0
- package/packages/arcgis-rest-geocoding/README.md +86 -0
- package/packages/arcgis-rest-geocoding/package-lock.json +43 -0
- package/packages/arcgis-rest-geocoding/package.json +66 -0
- package/packages/arcgis-rest-geocoding/src/bulk.ts +104 -0
- package/packages/arcgis-rest-geocoding/src/geocode.ts +166 -0
- package/packages/arcgis-rest-geocoding/src/helpers.ts +56 -0
- package/packages/arcgis-rest-geocoding/src/index.ts +15 -0
- package/packages/arcgis-rest-geocoding/src/reverse.ts +84 -0
- package/packages/arcgis-rest-geocoding/src/suggest.ts +45 -0
- package/packages/arcgis-rest-geocoding/test/bulk.test.ts +194 -0
- package/packages/arcgis-rest-geocoding/test/geocode.test.ts +253 -0
- package/packages/arcgis-rest-geocoding/test/helpers.test.ts +85 -0
- package/packages/arcgis-rest-geocoding/test/mocks/responses.ts +591 -0
- package/packages/arcgis-rest-geocoding/test/reverse.test.ts +126 -0
- package/packages/arcgis-rest-geocoding/test/suggest.test.ts +53 -0
- package/packages/arcgis-rest-geocoding/tsconfig.json +6 -0
- package/packages/arcgis-rest-portal/README.md +73 -0
- package/packages/arcgis-rest-portal/package-lock.json +37 -0
- package/packages/arcgis-rest-portal/package.json +64 -0
- package/packages/arcgis-rest-portal/src/groups/add-users.ts +140 -0
- package/packages/arcgis-rest-portal/src/groups/create.ts +43 -0
- package/packages/arcgis-rest-portal/src/groups/get.ts +184 -0
- package/packages/arcgis-rest-portal/src/groups/helpers.ts +14 -0
- package/packages/arcgis-rest-portal/src/groups/invite-users.ts +127 -0
- package/packages/arcgis-rest-portal/src/groups/join.ts +57 -0
- package/packages/arcgis-rest-portal/src/groups/notification.ts +77 -0
- package/packages/arcgis-rest-portal/src/groups/protect.ts +56 -0
- package/packages/arcgis-rest-portal/src/groups/remove-users.ts +76 -0
- package/packages/arcgis-rest-portal/src/groups/remove.ts +32 -0
- package/packages/arcgis-rest-portal/src/groups/search.ts +47 -0
- package/packages/arcgis-rest-portal/src/groups/update-user-membership.ts +63 -0
- package/packages/arcgis-rest-portal/src/groups/update.ts +39 -0
- package/packages/arcgis-rest-portal/src/index.ts +70 -0
- package/packages/arcgis-rest-portal/src/items/add.ts +138 -0
- package/packages/arcgis-rest-portal/src/items/content.ts +67 -0
- package/packages/arcgis-rest-portal/src/items/create.ts +150 -0
- package/packages/arcgis-rest-portal/src/items/export.ts +80 -0
- package/packages/arcgis-rest-portal/src/items/get.ts +437 -0
- package/packages/arcgis-rest-portal/src/items/helpers.ts +292 -0
- package/packages/arcgis-rest-portal/src/items/protect.ts +41 -0
- package/packages/arcgis-rest-portal/src/items/reassign.ts +61 -0
- package/packages/arcgis-rest-portal/src/items/remove.ts +141 -0
- package/packages/arcgis-rest-portal/src/items/search.ts +25 -0
- package/packages/arcgis-rest-portal/src/items/update.ts +185 -0
- package/packages/arcgis-rest-portal/src/items/upload.ts +125 -0
- package/packages/arcgis-rest-portal/src/orgs/notification.ts +131 -0
- package/packages/arcgis-rest-portal/src/services/get-unique-service-name.ts +35 -0
- package/packages/arcgis-rest-portal/src/services/is-service-name-available.ts +30 -0
- package/packages/arcgis-rest-portal/src/sharing/access.ts +84 -0
- package/packages/arcgis-rest-portal/src/sharing/helpers.ts +81 -0
- package/packages/arcgis-rest-portal/src/sharing/is-item-shared-with-group.ts +42 -0
- package/packages/arcgis-rest-portal/src/sharing/share-item-with-group.ts +340 -0
- package/packages/arcgis-rest-portal/src/sharing/unshare-item-with-group.ts +105 -0
- package/packages/arcgis-rest-portal/src/users/get-user-tags.ts +52 -0
- package/packages/arcgis-rest-portal/src/users/get-user-url.ts +18 -0
- package/packages/arcgis-rest-portal/src/users/get-user.ts +58 -0
- package/packages/arcgis-rest-portal/src/users/invitation.ts +156 -0
- package/packages/arcgis-rest-portal/src/users/notification.ts +68 -0
- package/packages/arcgis-rest-portal/src/users/search-users.ts +37 -0
- package/packages/arcgis-rest-portal/src/users/update.ts +66 -0
- package/packages/arcgis-rest-portal/src/util/SearchQueryBuilder.ts +391 -0
- package/packages/arcgis-rest-portal/src/util/array.ts +16 -0
- package/packages/arcgis-rest-portal/src/util/generic-search.ts +114 -0
- package/packages/arcgis-rest-portal/src/util/get-portal-settings.ts +45 -0
- package/packages/arcgis-rest-portal/src/util/get-portal-url.ts +28 -0
- package/packages/arcgis-rest-portal/src/util/get-portal.ts +53 -0
- package/packages/arcgis-rest-portal/src/util/get-subscription-info.ts +43 -0
- package/packages/arcgis-rest-portal/src/util/scrub-control-chars.ts +13 -0
- package/packages/arcgis-rest-portal/src/util/search.ts +47 -0
- package/packages/arcgis-rest-portal/test/groups/add-users.test.ts +239 -0
- package/packages/arcgis-rest-portal/test/groups/crud.test.ts +180 -0
- package/packages/arcgis-rest-portal/test/groups/get.test.ts +176 -0
- package/packages/arcgis-rest-portal/test/groups/invite-users.test.ts +146 -0
- package/packages/arcgis-rest-portal/test/groups/join.test.ts +72 -0
- package/packages/arcgis-rest-portal/test/groups/notification.test.ts +112 -0
- package/packages/arcgis-rest-portal/test/groups/protect.test.ts +72 -0
- package/packages/arcgis-rest-portal/test/groups/remove-users.test.ts +140 -0
- package/packages/arcgis-rest-portal/test/groups/search.test.ts +151 -0
- package/packages/arcgis-rest-portal/test/groups/update-user-membership.test.ts +62 -0
- package/packages/arcgis-rest-portal/test/items/add.test.ts +323 -0
- package/packages/arcgis-rest-portal/test/items/content.test.ts +156 -0
- package/packages/arcgis-rest-portal/test/items/create.test.ts +400 -0
- package/packages/arcgis-rest-portal/test/items/export.test.ts +122 -0
- package/packages/arcgis-rest-portal/test/items/get.test.ts +583 -0
- package/packages/arcgis-rest-portal/test/items/helpers.test.ts +60 -0
- package/packages/arcgis-rest-portal/test/items/protect.test.ts +122 -0
- package/packages/arcgis-rest-portal/test/items/reassign.test.ts +131 -0
- package/packages/arcgis-rest-portal/test/items/remove.test.ts +261 -0
- package/packages/arcgis-rest-portal/test/items/search.test.ts +322 -0
- package/packages/arcgis-rest-portal/test/items/update.test.ts +556 -0
- package/packages/arcgis-rest-portal/test/items/upload.test.ts +282 -0
- package/packages/arcgis-rest-portal/test/mocks/groups/responses.ts +208 -0
- package/packages/arcgis-rest-portal/test/mocks/items/foo.zip +0 -0
- package/packages/arcgis-rest-portal/test/mocks/items/item.ts +526 -0
- package/packages/arcgis-rest-portal/test/mocks/items/resources.ts +38 -0
- package/packages/arcgis-rest-portal/test/mocks/items/search.ts +121 -0
- package/packages/arcgis-rest-portal/test/mocks/portal/response.ts +126 -0
- package/packages/arcgis-rest-portal/test/mocks/portal/settings-response.ts +56 -0
- package/packages/arcgis-rest-portal/test/mocks/sharing/sharing.ts +18 -0
- package/packages/arcgis-rest-portal/test/mocks/users/invitation.ts +70 -0
- package/packages/arcgis-rest-portal/test/mocks/users/notification.ts +34 -0
- package/packages/arcgis-rest-portal/test/mocks/users/user-search.ts +388 -0
- package/packages/arcgis-rest-portal/test/mocks/users/user-tags.ts +5 -0
- package/packages/arcgis-rest-portal/test/mocks/users/user.ts +174 -0
- package/packages/arcgis-rest-portal/test/orgs/notification.test.ts +144 -0
- package/packages/arcgis-rest-portal/test/services/get-unique-service-name.test.ts +59 -0
- package/packages/arcgis-rest-portal/test/services/is-service-name-available.test.ts +46 -0
- package/packages/arcgis-rest-portal/test/sharing/access.test.ts +162 -0
- package/packages/arcgis-rest-portal/test/sharing/helpers.test.ts +55 -0
- package/packages/arcgis-rest-portal/test/sharing/share-item-with-group.test.ts +1382 -0
- package/packages/arcgis-rest-portal/test/sharing/unshare-item-with-group.test.ts +288 -0
- package/packages/arcgis-rest-portal/test/users/get-user-tags.test.ts +71 -0
- package/packages/arcgis-rest-portal/test/users/get-user-url.test.ts +40 -0
- package/packages/arcgis-rest-portal/test/users/get-user.test.ts +90 -0
- package/packages/arcgis-rest-portal/test/users/invitation.test.ts +127 -0
- package/packages/arcgis-rest-portal/test/users/notification.test.ts +77 -0
- package/packages/arcgis-rest-portal/test/users/search.test.ts +42 -0
- package/packages/arcgis-rest-portal/test/users/update.test.ts +151 -0
- package/packages/arcgis-rest-portal/test/util/SearchQueryBuilder.test.ts +345 -0
- package/packages/arcgis-rest-portal/test/util/array.test.ts +30 -0
- package/packages/arcgis-rest-portal/test/util/get-portal-settings.test.ts +68 -0
- package/packages/arcgis-rest-portal/test/util/get-portal-url.test.ts +37 -0
- package/packages/arcgis-rest-portal/test/util/portal.test.ts +148 -0
- package/packages/arcgis-rest-portal/test/util/scrub-control-chars.test.ts +22 -0
- package/packages/arcgis-rest-portal/tsconfig.json +6 -0
- package/packages/arcgis-rest-request/README.md +72 -0
- package/packages/arcgis-rest-request/package-lock.json +13 -0
- package/packages/arcgis-rest-request/package.json +60 -0
- package/packages/arcgis-rest-request/src/index.ts +25 -0
- package/packages/arcgis-rest-request/src/request.ts +433 -0
- package/packages/arcgis-rest-request/src/utils/ArcGISRequestError.ts +76 -0
- package/packages/arcgis-rest-request/src/utils/ErrorTypes.ts +29 -0
- package/packages/arcgis-rest-request/src/utils/GrantTypes.ts +5 -0
- package/packages/arcgis-rest-request/src/utils/HTTPMethods.ts +6 -0
- package/packages/arcgis-rest-request/src/utils/IAuthenticationManager.ts +22 -0
- package/packages/arcgis-rest-request/src/utils/IFetchTokenParams.ts +11 -0
- package/packages/arcgis-rest-request/src/utils/IGenerateTokenParams.ts +9 -0
- package/packages/arcgis-rest-request/src/utils/IParamBuilder.ts +3 -0
- package/packages/arcgis-rest-request/src/utils/IParams.ts +6 -0
- package/packages/arcgis-rest-request/src/utils/IParamsBuilder.ts +5 -0
- package/packages/arcgis-rest-request/src/utils/IRequestOptions.ts +54 -0
- package/packages/arcgis-rest-request/src/utils/ITokenRequestOptions.ts +9 -0
- package/packages/arcgis-rest-request/src/utils/ResponseFormats.ts +10 -0
- package/packages/arcgis-rest-request/src/utils/append-custom-params.ts +49 -0
- package/packages/arcgis-rest-request/src/utils/clean-url.ts +20 -0
- package/packages/arcgis-rest-request/src/utils/decode-query-string.ts +27 -0
- package/packages/arcgis-rest-request/src/utils/encode-form-data.ts +38 -0
- package/packages/arcgis-rest-request/src/utils/encode-query-string.ts +35 -0
- package/packages/arcgis-rest-request/src/utils/process-params.ts +109 -0
- package/packages/arcgis-rest-request/src/utils/retryAuthError.ts +10 -0
- package/packages/arcgis-rest-request/src/utils/warn.ts +11 -0
- package/packages/arcgis-rest-request/src/utils/with-options.ts +48 -0
- package/packages/arcgis-rest-request/test/mocks/errors.ts +76 -0
- package/packages/arcgis-rest-request/test/mocks/geojson-feature-collection.ts +13 -0
- package/packages/arcgis-rest-request/test/mocks/param-builder.ts +7 -0
- package/packages/arcgis-rest-request/test/mocks/sharing-rest-info.ts +41 -0
- package/packages/arcgis-rest-request/test/mocks/webmap.ts +41 -0
- package/packages/arcgis-rest-request/test/request.test.ts +621 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISAuthError.test.ts +191 -0
- package/packages/arcgis-rest-request/test/utils/ArcGISRequestError.test.ts +51 -0
- package/packages/arcgis-rest-request/test/utils/check-for-errors.test.ts +111 -0
- package/packages/arcgis-rest-request/test/utils/clean-url.test.ts +50 -0
- package/packages/arcgis-rest-request/test/utils/encode-form-data.test.ts +133 -0
- package/packages/arcgis-rest-request/test/utils/encode-query-string.test.ts +18 -0
- package/packages/arcgis-rest-request/test/utils/process-params.test.ts +205 -0
- package/packages/arcgis-rest-request/test/utils/with-options.test.ts +133 -0
- package/packages/arcgis-rest-request/tsconfig.json +4 -0
- package/packages/arcgis-rest-routing/README.md +75 -0
- package/packages/arcgis-rest-routing/package-lock.json +43 -0
- package/packages/arcgis-rest-routing/package.json +65 -0
- package/packages/arcgis-rest-routing/src/closestFacility.ts +225 -0
- package/packages/arcgis-rest-routing/src/helpers.ts +104 -0
- package/packages/arcgis-rest-routing/src/index.ts +14 -0
- package/packages/arcgis-rest-routing/src/originDestinationMatrix.ts +223 -0
- package/packages/arcgis-rest-routing/src/serviceArea.ts +173 -0
- package/packages/arcgis-rest-routing/src/solveRoute.ts +180 -0
- package/packages/arcgis-rest-routing/test/closestFacility.test.ts +683 -0
- package/packages/arcgis-rest-routing/test/mocks/inputs.ts +132 -0
- package/packages/arcgis-rest-routing/test/mocks/responses.ts +13322 -0
- package/packages/arcgis-rest-routing/test/originDestinationMatrix.test.ts +797 -0
- package/packages/arcgis-rest-routing/test/serviceArea.test.ts +601 -0
- package/packages/arcgis-rest-routing/test/solveRoute.test.ts +677 -0
- package/packages/arcgis-rest-routing/tsconfig.json +6 -0
- package/packages/arcgis-rest-service-admin/README.md +73 -0
- package/packages/arcgis-rest-service-admin/package-lock.json +11 -0
- package/packages/arcgis-rest-service-admin/package.json +65 -0
- package/packages/arcgis-rest-service-admin/src/addTo.ts +70 -0
- package/packages/arcgis-rest-service-admin/src/create.ts +189 -0
- package/packages/arcgis-rest-service-admin/src/get-service-admin-info.ts +34 -0
- package/packages/arcgis-rest-service-admin/src/get-view-sources.ts +20 -0
- package/packages/arcgis-rest-service-admin/src/index.ts +14 -0
- package/packages/arcgis-rest-service-admin/src/update.ts +50 -0
- package/packages/arcgis-rest-service-admin/test/addTo.test.ts +350 -0
- package/packages/arcgis-rest-service-admin/test/create.test.ts +294 -0
- package/packages/arcgis-rest-service-admin/test/get-service-admin-info.test.ts +37 -0
- package/packages/arcgis-rest-service-admin/test/get-view-sources.test.ts +40 -0
- package/packages/arcgis-rest-service-admin/test/mocks/layerDefinition.ts +79 -0
- package/packages/arcgis-rest-service-admin/test/mocks/service.ts +81 -0
- package/packages/arcgis-rest-service-admin/test/update.test.ts +115 -0
- package/packages/arcgis-rest-service-admin/tsconfig.json +5 -0
- package/packages/arcgis-rest-types/README.md +66 -0
- package/packages/arcgis-rest-types/package-lock.json +5 -0
- package/packages/arcgis-rest-types/package.json +54 -0
- package/packages/arcgis-rest-types/src/feature.ts +42 -0
- package/packages/arcgis-rest-types/src/geometry.ts +272 -0
- package/packages/arcgis-rest-types/src/group.ts +72 -0
- package/packages/arcgis-rest-types/src/index.ts +9 -0
- package/packages/arcgis-rest-types/src/item.ts +81 -0
- package/packages/arcgis-rest-types/src/service.ts +156 -0
- package/packages/arcgis-rest-types/src/statisticDefinition.ts +33 -0
- package/packages/arcgis-rest-types/src/symbol.ts +170 -0
- package/packages/arcgis-rest-types/src/user.ts +49 -0
- package/packages/arcgis-rest-types/src/webmap.ts +1405 -0
- package/packages/arcgis-rest-types/tsconfig.json +10 -0
- package/support/changelog.js +393 -0
- package/support/deploy-doc-site.js +16 -0
- package/support/dev.sh +6 -0
- package/support/publish.sh +47 -0
- package/support/test-helpers.js +9 -0
- package/tsconfig.json +63 -0
- package/umd-base-profile.js +81 -0
- package/umd-production-profile.js +13 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
---
|
2
|
+
title: Using ArcGIS REST JS in Node.js
|
3
|
+
navTitle: Node.js
|
4
|
+
description: Learn how to integrate the ArcGIS REST JS library into a Node.js app.
|
5
|
+
order: 50
|
6
|
+
group: 1-get-started
|
7
|
+
---
|
8
|
+
|
9
|
+
# Get Started with Node.js
|
10
|
+
|
11
|
+
Make sure you have polyfills for [`fetch`](https://github.com/lquixada/cross-fetch) and [`FormData`](https://github.com/form-data/isomorphic-form-data) installed before using any ArcGIS REST JS library. You can find `npm install` commands for all packages in the [API reference](/arcgis-rest-js/api).
|
12
|
+
|
13
|
+
```bash
|
14
|
+
npm install @esri/arcgis-rest-request @esri/arcgis-rest-auth cross-fetch isomorphic-form-data
|
15
|
+
```
|
16
|
+
|
17
|
+
Require `cross-fetch` and `isomorphic-form-data` before using any of the ArcGIS REST JS methods.
|
18
|
+
|
19
|
+
```js
|
20
|
+
// ensures fetch is available as a global
|
21
|
+
require("cross-fetch/polyfill");
|
22
|
+
require("isomorphic-form-data");
|
23
|
+
|
24
|
+
const { request } = require("@esri/arcgis-rest-request");
|
25
|
+
|
26
|
+
request("https://www.arcgis.com/sharing/rest/info")
|
27
|
+
.then(response => console.log(response));
|
28
|
+
```
|
29
|
+
|
30
|
+
Or, if using NodeJS version v13 or higher, if you set `"type": "module"` in the `package.json` you can use [ES Modules](https://nodejs.org/docs/latest-v12.x/api/packages.html#packages_determining_module_system) import syntax:
|
31
|
+
|
32
|
+
```js
|
33
|
+
import fetch from "node-fetch";
|
34
|
+
import FormData from "isomorphic-form-data";
|
35
|
+
import arcgisRestRequest from "@esri/arcgis-rest-request";
|
36
|
+
arcgisRestRequest.setDefaultRequestOptions({ fetch, FormData });
|
37
|
+
|
38
|
+
arcgisRestRequest.request("https://www.arcgis.com/sharing/rest/info")
|
39
|
+
.then(response => console.log(response));
|
40
|
+
```
|
41
|
+
|
42
|
+
You can also pass through your own named `fetch` implementation.
|
43
|
+
|
44
|
+
```js
|
45
|
+
const fetch = require("node-fetch")
|
46
|
+
const {
|
47
|
+
request,
|
48
|
+
setDefaultRequestOptions
|
49
|
+
} = require("@esri/arcgis-rest-request");
|
50
|
+
|
51
|
+
// one by one
|
52
|
+
request("https://www.arcgis.com/sharing/rest/info", { fetch })
|
53
|
+
|
54
|
+
// or in *every* request
|
55
|
+
setDefaultRequestOptions({ fetch })
|
56
|
+
```
|
57
|
+
|
58
|
+
## Demo - [Express](https://github.com/Esri/arcgis-rest-js/tree/master/demos/express)
|
59
|
+
|
60
|
+
### Authentication
|
61
|
+
|
62
|
+
To access premium content and services without asking for user credentials, using an [API key](https://developers.arcgis.com/documentation/mapping-apis-and-services/security/api-keys/) or [application credentials](https://developers.arcgis.com/documentation/mapping-apis-and-services/security/application-credentials/) is typically the best approach.
|
63
|
+
|
64
|
+
#### API Key
|
65
|
+
|
66
|
+
```js
|
67
|
+
// no auth required
|
68
|
+
request(`https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World/solve?token={API_KEY}`)
|
69
|
+
```
|
70
|
+
|
71
|
+
#### Application credentials
|
72
|
+
|
73
|
+
```js
|
74
|
+
const { ApplicationSession } = require("@esri/arcgis-rest-auth");
|
75
|
+
|
76
|
+
const authentication = new ApplicationSession({
|
77
|
+
clientId: "public",
|
78
|
+
clientSecret: "secret"
|
79
|
+
})
|
80
|
+
|
81
|
+
// url not accessible to anonymous users
|
82
|
+
const url = `https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World`
|
83
|
+
|
84
|
+
// token will be appended by rest-js
|
85
|
+
request(url, {
|
86
|
+
authentication
|
87
|
+
})
|
88
|
+
```
|
89
|
+
|
90
|
+
## Demo - [batch geocoding](https://github.com/Esri/arcgis-rest-js/tree/master/demos/batch-geocoder-node)
|
91
|
+
|
92
|
+
Applications cannot [create, share, access or modify items](https://developers.arcgis.com/documentation/core-concepts/security-and-authentication/limitations-of-application-authentication/) in ArcGIS Online or ArcGIS Enterprise. For this, a [`UserSession`](/arcgis-rest-js/api/auth/UserSession/) is more appropriate.
|
93
|
+
|
94
|
+
```js
|
95
|
+
const { UserSession } = require("@esri/arcgis-rest-auth");
|
96
|
+
|
97
|
+
// hardcoded username / password
|
98
|
+
const authentication = new UserSession({
|
99
|
+
username: "jsmith",
|
100
|
+
password: "123456"
|
101
|
+
})
|
102
|
+
```
|
103
|
+
|
104
|
+
See the [Browser Authentication](../browser-authentication/) for more information about implementing OAuth 2.0.
|
@@ -0,0 +1,111 @@
|
|
1
|
+
---
|
2
|
+
title: Package Overview
|
3
|
+
description: Overview of packages provided by ArcGIS REST JS.
|
4
|
+
order: 10
|
5
|
+
group: 0-introduction
|
6
|
+
---
|
7
|
+
|
8
|
+
# Why `@esri/arcgis-rest-js`?
|
9
|
+
|
10
|
+
`@esri/arcgis-rest-js` simplifies making requests to ArcGIS Online and Enterprise in both browsers and Node.js.
|
11
|
+
|
12
|
+
There's no better way to explain what that means than comparing an `@esri/arcgis-rest-js` call to the same web request made using plain old JavaScript.
|
13
|
+
|
14
|
+
### @esri/arcgis-rest
|
15
|
+
|
16
|
+
```js
|
17
|
+
import { getUser } from "@esri/arcgis-rest-portal";
|
18
|
+
|
19
|
+
// pass in a username and get back information about the user
|
20
|
+
getUser(`jgravois`)
|
21
|
+
.then(response) // { firstName: "john", description: "open source geodev" ... }
|
22
|
+
```
|
23
|
+
|
24
|
+
### vs. Vanilla JavaScript
|
25
|
+
|
26
|
+
```js
|
27
|
+
// construct the url yourself and don't forget to tack on f=json
|
28
|
+
const url = "https://www.arcgis.com/sharing/rest/community/users/jgravois?f=json";
|
29
|
+
|
30
|
+
var xhr = new XMLHttpRequest();
|
31
|
+
xhr.onreadystatechange = function() {
|
32
|
+
if (xhr.readyState == XMLHttpRequest.DONE) {
|
33
|
+
xhr.responseText; // { firstName: "john", description: "open source geodev" ... }
|
34
|
+
}
|
35
|
+
}
|
36
|
+
xhr.open('GET', url, true);
|
37
|
+
xhr.send(null);
|
38
|
+
```
|
39
|
+
|
40
|
+
wow, thats a lot easier! `@esri/arcgis-rest-js` is able to intuit the actual url (by default it assumes you're interacting with ArcGIS Online) prior to making the request and internalizes a lot of tedious logic for handling the response.
|
41
|
+
|
42
|
+
Our packages tap into a new JavaScript spec called [`fetch()`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) under the hood though, so lets compare 🍎s to 🍎s.
|
43
|
+
|
44
|
+
```js
|
45
|
+
import { deleteFeatures } from "@esri/arcgis-rest-feature-layer";
|
46
|
+
|
47
|
+
const url = `http://sampleserver6.arcgisonline.com/arcgis/rest/services/SF311/FeatureServer/1/`
|
48
|
+
|
49
|
+
// https://esri.github.io/arcgis-rest-js/api/feature-service/deleteFeatures/
|
50
|
+
deleteFeatures({
|
51
|
+
url,
|
52
|
+
objectIds: [ 2360245 ]
|
53
|
+
})
|
54
|
+
.then(response)
|
55
|
+
```
|
56
|
+
|
57
|
+
```js
|
58
|
+
// append operation name to url
|
59
|
+
url += `deleteFeatures`;
|
60
|
+
|
61
|
+
fetch(url, {
|
62
|
+
// set the request type
|
63
|
+
method: "POST",
|
64
|
+
// append appropriate headers
|
65
|
+
headers: {
|
66
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
67
|
+
},
|
68
|
+
// concatenate and encode each parameter manually
|
69
|
+
// and remember to append f=json
|
70
|
+
body: `objectIds=${encodeURIComponent(2360245)}&f=json`
|
71
|
+
})
|
72
|
+
.then(response => {
|
73
|
+
// cast the response as JSON
|
74
|
+
if (response.ok) {
|
75
|
+
return response.json()
|
76
|
+
}
|
77
|
+
})
|
78
|
+
.then(response => {
|
79
|
+
// trap for ArcGIS error objects in 200 responses
|
80
|
+
if (!response.error) {
|
81
|
+
console.log(response);
|
82
|
+
}
|
83
|
+
})
|
84
|
+
```
|
85
|
+
|
86
|
+
As you can see, `@esri/arcgis-rest-js` is still handling a _lot_ of the details internally.
|
87
|
+
|
88
|
+
* the operation name is appended to urls
|
89
|
+
* a `"POST"` is made automatically (when appropriate)
|
90
|
+
* query string parameters are encoded
|
91
|
+
* appropriate `headers` are appended
|
92
|
+
* `FormData` is created internally (when necessary)
|
93
|
+
* `200` responses that contain an error are trapped for
|
94
|
+
* the generic `f=json` parameter is appended
|
95
|
+
|
96
|
+
And we haven't even begun to discuss [authentication](../browser-authentication/).
|
97
|
+
|
98
|
+
Whether you're trying to automate interacting with premium services in Node.js or creating a website that will allow users to sign into [ArcGIS Online](https://www.arcgis.com) safely and manage their own content, `@esri/arcgis-rest-js` has you covered.
|
99
|
+
|
100
|
+
# Package Overview
|
101
|
+
|
102
|
+
The library is a collection of _very_ small mix and match packages that are framework agnostic and make a variety of ArcGIS tasks more convenient.
|
103
|
+
|
104
|
+
* [`@esri/arcgis-rest-request`](../../api/request/) - Underpins other packages and supports making low-level requests.
|
105
|
+
* [`@esri/arcgis-rest-auth`](../../api/auth/) - Provides methods for authenticating named users and applications.
|
106
|
+
* [`@esri/arcgis-rest-portal`](../../api/portal/) - Methods for working with ArcGIS Online/Enterprise content and users.
|
107
|
+
* [`@esri/arcgis-rest-feature-layer`](../../api/feature-layer/) - Functions for querying and editing features inside of hosted feature layers.
|
108
|
+
* [`@esri/arcgis-rest-service-admin`](../../api/service-admin/) - Functions for administering hosted services.
|
109
|
+
* [`@esri/arcgis-rest-geocoding`](../../api/geocoding/) - Geocoding wrapper for `@esri/arcgis-rest-js`
|
110
|
+
* [`@esri/arcgis-rest-routing`](../../api/routing/) - Routing and directions wrapper for `@esri/arcgis-rest-js`.
|
111
|
+
* [`@esri/arcgis-rest-types`](../../api/types/) - Common Typings for TypeScript developers.
|
@@ -0,0 +1,9 @@
|
|
1
|
+
---
|
2
|
+
title: Server-based authentication with ArcGIS REST JS
|
3
|
+
navTitle: Server-based OAuth 2.0
|
4
|
+
description: Learn how to authenticate users with ArcGIS REST JS and OAuth 2.0 in a Node.js server.
|
5
|
+
order: 10
|
6
|
+
group: 2-authentication
|
7
|
+
---
|
8
|
+
|
9
|
+
# Authentication in Server-based Apps
|
@@ -0,0 +1,305 @@
|
|
1
|
+
---
|
2
|
+
title: What's New in v2.0.0
|
3
|
+
navTitle: What's New in v2.0.0
|
4
|
+
description: Learn what's new in v2.0.0 of ArcGIS REST JS.
|
5
|
+
order: 60
|
6
|
+
group: 1-get-started
|
7
|
+
---
|
8
|
+
|
9
|
+
# What's new in `v2.0.0?`
|
10
|
+
|
11
|
+
Our family of users and contributors has grown [(a lot!)](https://github.com/Esri/arcgis-rest-js/blob/master/docs/FAQ.md#who-is-using-these-packages) since our first release so we decided to rollup our sleeves (groan) and overhaul the API. Our goals were to:
|
12
|
+
|
13
|
+
1. Make ArcGIS REST JS as consistent (and simple) as possible
|
14
|
+
2. Introduce building blocks for compositional/fluent APIs
|
15
|
+
3. Provide a few new options to reuse common parameters
|
16
|
+
|
17
|
+
## Fluent APIs
|
18
|
+
|
19
|
+
In [`v2.0.0`](https://github.com/Esri/arcgis-rest-js/releases/v2.0.0) we introduced a new class called [`SearchQueryBuilder`](../../api/portal/SearchQueryBuilder/) to help compose complex parameters.
|
20
|
+
|
21
|
+
```ts
|
22
|
+
import { searchItems, SearchQueryBuilder } from "@esri/arcgis-rest-portal";
|
23
|
+
|
24
|
+
const q = new SearchQueryBuilder()
|
25
|
+
.match("Trees")
|
26
|
+
.and()
|
27
|
+
.match("US Forest Service")
|
28
|
+
.in("owner")
|
29
|
+
.and()
|
30
|
+
.startGroup()
|
31
|
+
.match("Web Mapping Application")
|
32
|
+
.in("type")
|
33
|
+
.or()
|
34
|
+
.match("Mobile Application")
|
35
|
+
.in("type")
|
36
|
+
.endGroup()
|
37
|
+
|
38
|
+
// "Trees AND owner: US Forest Service AND (type: "Web Mapping Application" OR type: "Mobile Application")"
|
39
|
+
searchItems({ q })
|
40
|
+
```
|
41
|
+
|
42
|
+
Currently only [`searchItems()`](../../api/portal/searchItems/) and [`searchGroups()`](../../api/portal/searchGroups/) accept `SearchQueryBuilder` as an input, but we've included building blocks (groan) to create additional implementations as well.
|
43
|
+
|
44
|
+
## Paging
|
45
|
+
|
46
|
+
The promises returned by [`searchItems()`](../../api/portal/searchItems/) and [`searchGroups()`](../../api/portal/searchGroups/) also got a handy new [`nextPage()`](../../api/portal/searchItems/#nextPage) method to make it easier to sift through paginated results.
|
47
|
+
|
48
|
+
```ts
|
49
|
+
searchItems({ q })
|
50
|
+
.then(response => {
|
51
|
+
if (response.nextPage) {
|
52
|
+
r.nextPage()
|
53
|
+
.then(responsePageTwo)
|
54
|
+
}
|
55
|
+
})
|
56
|
+
```
|
57
|
+
|
58
|
+
## Reuse parameters
|
59
|
+
|
60
|
+
We added two new methods to `@esri/arcgis-rest-request` as helpers for passing repeat options through.
|
61
|
+
|
62
|
+
### [`setDefaultRequestOptions()`](../../api/request/setDefaultRequestOptions/)
|
63
|
+
|
64
|
+
Now, if you want to ensure that _all_ requests include a custom option, you can use `setDefaultRequestOptions()`.
|
65
|
+
|
66
|
+
```ts
|
67
|
+
import { request, setDefaultRequestOptions } from "@esri/arcgis-rest-request";
|
68
|
+
|
69
|
+
setDefaultRequestOptions({
|
70
|
+
headers: { "Custom-Header": "Test Value" }
|
71
|
+
});
|
72
|
+
|
73
|
+
const url = `https://www.arcgis.com/sharing/rest/info`;
|
74
|
+
|
75
|
+
// the custom header will *always* be passed along
|
76
|
+
request(url)
|
77
|
+
```
|
78
|
+
|
79
|
+
You should _not_ pass `authentication` to this method if your code runs in a shared environment like a web server that handles requests for more than one user.
|
80
|
+
|
81
|
+
### [`withOptions()`](../../api/request/withOptions/)
|
82
|
+
|
83
|
+
If you'd like to selectively append common options to _a specific method_, you can use the new `withOptions()` method.
|
84
|
+
|
85
|
+
```ts
|
86
|
+
import { request, withOptions } from "@esri/arcgis-rest-request";
|
87
|
+
|
88
|
+
const authenticatedRequest = withOptions({
|
89
|
+
authentication: session
|
90
|
+
}, request);
|
91
|
+
|
92
|
+
// includes authenticated session
|
93
|
+
authenticatedRequest(url)
|
94
|
+
|
95
|
+
// does NOT include authenticated session
|
96
|
+
request(url)
|
97
|
+
```
|
98
|
+
|
99
|
+
## Breaking Changes
|
100
|
+
|
101
|
+
In order to make the API more consistent and a little easier to navigate, we had to break a few 🍳s.
|
102
|
+
|
103
|
+
#### One `portal` package to rule them all (even for ArcGIS Online)
|
104
|
+
|
105
|
+
We consolidated four existing packages into a new one called [`@esri/arcgis-rest-portal`](../../api/portal/). Whether you want to talk to ArcGIS Online _or_ Enterprise, now you'll do this:
|
106
|
+
```bash
|
107
|
+
# new
|
108
|
+
npm install @esri/arcgis-rest-portal
|
109
|
+
```
|
110
|
+
instead of this:
|
111
|
+
```bash
|
112
|
+
# old
|
113
|
+
npm install @esri/arcgis-rest-items &&
|
114
|
+
@esri/arcgis-rest-users &&
|
115
|
+
@esri/arcgis-rest-groups &&
|
116
|
+
@esri/arcgis-rest-sharing
|
117
|
+
```
|
118
|
+
The table below lists methods in this package that have been deprecated, given a facelift, or given a new home.
|
119
|
+
|
120
|
+
| Old | New | Package
|
121
|
+
| -- | -- | -- |
|
122
|
+
| ~~`serializeGroup()`~~ | | ~~`groups`~~ |
|
123
|
+
| ~~`addItemJsonData()`~~ | [`addItemData()`](https://esri.github.io/arcgis-rest-js/api/portal/addItemData/) | ~~`items`~~ |
|
124
|
+
| ~~`createItemInFolder({ folder })`~~ | [`createItemInFolder({ folderId })`](https://esri.github.io/arcgis-rest-js/api/portal/createItemInFolder/) | ~~`items`~~ `portal` |
|
125
|
+
| ~~`searchItems( string|opts )`~~ | [`searchItems( string|opts|Builder )`](https://esri.github.io/arcgis-rest-js/api/portal/searchItems/) | ~~`items`~~ `portal` |
|
126
|
+
| ~~`searchGroups( form, opts )`~~ | [`searchGroups( string|opts|Builder )`](https://esri.github.io/arcgis-rest-js/api/portal/searchGroups/) | ~~`groups`~~ `portal` |
|
127
|
+
| ~~`getItemResources( opts )`~~ | [`getItemResources( id, opts? )`](https://esri.github.io/arcgis-rest-js/api/portal/getItemResources/) | ~~`items`~~ `portal` |
|
128
|
+
| `getUserUrl()` | [`getUserUrl()`](https://esri.github.io/arcgis-rest-js/api/portal/getUserUrl/) | ~~`auth`~~ `portal` |
|
129
|
+
| `getPortalUrl()` | [`getPortalUrl()`](https://esri.github.io/arcgis-rest-js/api/portal/getPortalUrl/) | ~~`request`~~ `portal` |
|
130
|
+
| `getPortal()` | [`getPortal()`](https://esri.github.io/arcgis-rest-js/api/portal/getPortal/) | ~~`request`~~ `portal` |
|
131
|
+
| | [`SearchQueryBuilder`](https://esri.github.io/arcgis-rest-js/api/portal/SearchQueryBuilder/) | `portal` |
|
132
|
+
|
133
|
+
#### `@esri/arcgis-rest-request`
|
134
|
+
|
135
|
+
The only breaking changes we made to `request` were to refactor an internal method and move a couple others into the new [`portal`](../../api/portal/) package.
|
136
|
+
|
137
|
+
| Old | New | Package Name |
|
138
|
+
| -- | -- | -- |
|
139
|
+
| `getPortalUrl()` | [`getPortalUrl()`](https://esri.github.io/arcgis-rest-js/api/portal/getPortalUrl/) | ~~`request`~~ `portal` |
|
140
|
+
| `getPortal()` | [`getPortal()`](https://esri.github.io/arcgis-rest-js/api/portal/getPortal/) | ~~`request`~~ `portal` |
|
141
|
+
|
142
|
+
#### If you work with private services (shhhh)
|
143
|
+
|
144
|
+
We didn't make many changes in `@esri/arcgis-rest-auth`, but one method moved and two others got simpler.
|
145
|
+
|
146
|
+
| Old | New | Package Name |
|
147
|
+
| -- | -- | -- |
|
148
|
+
| `getUserUrl()` | [`getUserUrl()`](https://esri.github.io/arcgis-rest-js/api/portal/getUserUrl/) | ~~`auth`~~ `portal` |
|
149
|
+
| `fetchToken(params|opts)` | `fetchToken(opts)` |
|
150
|
+
| `generateToken(params|opts)` | `generateToken(opts)` |
|
151
|
+
|
152
|
+
#### `@esri/arcgis-rest-routing`
|
153
|
+
|
154
|
+
In this package, we renamed one constant.
|
155
|
+
|
156
|
+
| Old | New |
|
157
|
+
| -- | -- |
|
158
|
+
| ~~`worldRoutingService`~~ | [`ARCGIS_ONLINE_ROUTING_URL`](https://esri.github.io/arcgis-rest-js/api/routing/ARCGIS_ONLINE_ROUTING_URL/) |
|
159
|
+
|
160
|
+
#### Geocoding addresses
|
161
|
+
|
162
|
+
In the interest of consistency, we renamed the geocoding package too.
|
163
|
+
|
164
|
+
```bash
|
165
|
+
# new
|
166
|
+
npm install @esri/arcgis-rest-geocoding
|
167
|
+
```
|
168
|
+
|
169
|
+
```bash
|
170
|
+
# old
|
171
|
+
npm install @esri/arcgis-rest-geocoder
|
172
|
+
```
|
173
|
+
|
174
|
+
We renamed one method (and one constant) as well.
|
175
|
+
|
176
|
+
| Old | New |
|
177
|
+
| -- | -- |
|
178
|
+
| ~~`serviceInfo()`~~ | [`getGeocodeService()`](https://esri.github.io/arcgis-rest-js/api/geocoding/getGeocodeService/) |
|
179
|
+
| ~~`worldGeocoder`~~ | [`ARCGIS_ONLINE_GEOCODING_URL`](https://esri.github.io/arcgis-rest-js/api/geocoding/ARCGIS_ONLINE_GEOCODING_URL/) |
|
180
|
+
|
181
|
+
#### Querying and editing feature layers
|
182
|
+
|
183
|
+
This package was also renamed. If you're already using `queryFeatures()` or making edits inside hosted feature layers, now you'll install this:
|
184
|
+
|
185
|
+
```bash
|
186
|
+
# new
|
187
|
+
npm install @esri/arcgis-rest-feature-layer
|
188
|
+
```
|
189
|
+
|
190
|
+
instead of this:
|
191
|
+
```bash
|
192
|
+
# old
|
193
|
+
npm install @esri/arcgis-rest-feature-service
|
194
|
+
```
|
195
|
+
The `feature-layer` methods that were refactored or re-homed are listed below.
|
196
|
+
|
197
|
+
| Old | New | Package |
|
198
|
+
| -- | -- | -- |
|
199
|
+
| ~~`addFeatures({ adds })`~~ | [`addFeatures({ features })`](https://esri.github.io/arcgis-rest-js/api/feature-layer/addFeatures/) |
|
200
|
+
| ~~`updateFeatures({ updates })`~~ | [`updateFeatures({ features })`](https://esri.github.io/arcgis-rest-js/api/feature-layer/updateFeatures/) |
|
201
|
+
| ~~`deleteFeatures({ deletes })`~~ | [`deleteFeatures({ objectIds })`](https://esri.github.io/arcgis-rest-js/api/feature-layer/deleteFeatures/) |
|
202
|
+
| ~~`getLayer(url, options)`~~ | [`getLayer(options)`](https://esri.github.io/arcgis-rest-js/api/feature-layer/getLayer/) |
|
203
|
+
|
204
|
+
#### Publishing and updating new hosted feature services
|
205
|
+
|
206
|
+
If you're already using `rest-js` to publish _new_ hosted feature services, that package has a new (shorter) name too.
|
207
|
+
|
208
|
+
```bash
|
209
|
+
# new
|
210
|
+
npm install @esri/arcgis-rest-service-admin
|
211
|
+
```
|
212
|
+
instead of this:
|
213
|
+
```bash
|
214
|
+
# old
|
215
|
+
npm install @esri/arcgis-rest-feature-service-admin
|
216
|
+
```
|
217
|
+
After you save those seven keystrokes, everything else will be familiar.
|
218
|
+
|
219
|
+
#### Helper methods
|
220
|
+
|
221
|
+
In this release we also made the decision to stop documenting internal helper methods like `appendCustomParams`. In the future, undocumented methods may change without notice.
|
222
|
+
|
223
|
+
## Breaking Changes for TypeScript developers
|
224
|
+
|
225
|
+
Each package now installs shared TypeScript typings automatically and re-exports them, so its no longer necessary to install a separate package yourself.
|
226
|
+
|
227
|
+
```ts
|
228
|
+
// old
|
229
|
+
import { IPoint } from "@esri/arcgis-rest-common-types";
|
230
|
+
import { reverseGeocode } from "@esri/arcgis-rest-geocoder";
|
231
|
+
|
232
|
+
reverseGeocode({ x: 34, y: -118} as IPoint);
|
233
|
+
|
234
|
+
// new
|
235
|
+
import { IPoint, reverseGeocode } from "@esri/arcgis-rest-geocoding";
|
236
|
+
|
237
|
+
reverseGeocode({ x: 34, y: -118} as IPoint);
|
238
|
+
```
|
239
|
+
|
240
|
+
If you'd _like_ to install the typings yourself, there is a more concise package name for that too.
|
241
|
+
|
242
|
+
```bash
|
243
|
+
# new package name
|
244
|
+
npm install @esri/arcgis-rest-types
|
245
|
+
```
|
246
|
+
|
247
|
+
The table below lists interfaces and types that have been removed or renamed in the name of consistency and brevity. This also better aligns the names of options and response interfaces with their corresponding function.
|
248
|
+
|
249
|
+
| Old Interface/Type | New Interface/Type |
|
250
|
+
| -- | -- |
|
251
|
+
| ~~`esriFieldTypes`~~ | `FieldTypes` |
|
252
|
+
| ~~`esriGeometryType`~~ | `GeometryType` |
|
253
|
+
| ~~`esriUnits`~~ | `Units` |
|
254
|
+
| ~~`IOauth2Options`~~ | `IOAuth2Options` |
|
255
|
+
| ~~`IBulkGeocodingRequestOptions`~~ | `IBulkGeocodeOptions` |
|
256
|
+
| ~~`IGeocodeRequestOptions`~~ | `IGeocodeOptions` |
|
257
|
+
| ~~`IGeocodeParams`~~ | |
|
258
|
+
| ~~`ISolveRouteRequestOptions`~~ | `ISolveRouteOptions` |
|
259
|
+
| ~~`IEditFeaturesParams`~~ | `ISharedEditOptions` |
|
260
|
+
| ~~`IQueryFeaturesParams`~~ | `ISharedQueryOptions` |
|
261
|
+
| ~~`IQueryFeaturesRequestOptions`~~ | `IQueryFeaturesOptions` |
|
262
|
+
| ~~`IQueryRelatedRequestOptions`~~ | `IQueryRelatedOptions` |
|
263
|
+
| ~~`IAddFeaturesRequestOptions`~~ | `IAddFeaturesOptions` |
|
264
|
+
| ~~`IUpdateFeaturesRequestOptions`~~ | `IUpdateFeaturesOptions` |
|
265
|
+
| ~~`IDeleteFeaturesRequestOptions`~~ | `IDeleteFeaturesOptions` |
|
266
|
+
| ~~`IDecodeValuesRequestOptions`~~ | `IDecodeValuesOptions` |
|
267
|
+
| ~~`ILayerRequestOptions`~~ | `IGetLayerOptions` |
|
268
|
+
| ~~`IFeatureRequestOptions`~~ | `IGetFeatureOptions` |
|
269
|
+
| ~~`IAddToServiceDefinitionRequestOptions`~~ | `IAddToServiceDefinitionOptions` |
|
270
|
+
| ~~`ICreateServiceRequestOptions`~~ | `ICreateServiceOptions` |
|
271
|
+
| ~~`IItemResourceAddRequestOptions`~~ | |
|
272
|
+
| ~~`IGroupAddRequestOptions`~~ | `ICreateGroupOptions` |
|
273
|
+
| ~~`IPagingParamsRequestOptions`~~ | `IGetGroupContentOptions` |
|
274
|
+
| ~~`IGroupIdRequestOptions`~~ | `IUserGroupOptions` |
|
275
|
+
| ~~`IGroupNotificationRequestOptions`~~ | `ICreateGroupNotificationOptions` |
|
276
|
+
| ~~`ISearchRequestOptions`~~ | `ISearchOptions` |
|
277
|
+
| ~~`IGroupUpdateRequestOptions`~~ | `IUpdateGroupOptions` |
|
278
|
+
| ~~`IItemIdRequestOptions`~~ | `IUserItemOptions` |
|
279
|
+
| ~~`IItemResourceRequestOptions`~~ | `IItemResourceOptions` |
|
280
|
+
| ~~`IItemAddResponse`~~ | `ICreateItemResponse` |
|
281
|
+
| ~~`IManageItemRelationshipRequestOptions`~~ | `IManageItemRelationshipOptions` |
|
282
|
+
| ~~`IItemDataAddRequestOptions`~~ | `IAddItemDataOptions` |
|
283
|
+
| ~~`IItemCrudRequestOptions`~~ | `ICreateUpdateItemOptions` |
|
284
|
+
| ~~`IAddFolderRequestOptions`~~ | `ICreateFolderOptions` |
|
285
|
+
| ~~`IItemAddRequestOptions`~~ | `ICreateItemOptions` |
|
286
|
+
| ~~`IItemDataRequestOptions`~~ | `IItemDataOptions` |
|
287
|
+
| ~~`IItemRelationshipRequestOptions`~~ | `IItemRelationshipOptions` |
|
288
|
+
| ~~`IItemGroupResponse`~~ | `IGetItemGroupsResponse` |
|
289
|
+
| ~~`IItemRequestOptions`~~ | |
|
290
|
+
| ~~`IFolderIdRequestOptions`~~ | `IFolderIdOptions` |
|
291
|
+
| ~~`IItemUpdateResponse`~~ | `IUpdateItemResponse` |
|
292
|
+
| ~~`IItemMoveResponse`~~ | `IMoveItemResponse` |
|
293
|
+
| ~~`IItemUpdateRequestOptions`~~ | `IUpdateItemOptions` |
|
294
|
+
| ~~`IItemMoveRequestOptions`~~ | `IMoveItemOptions` |
|
295
|
+
| ~~`ISharingRequestOptions`~~ | `ISharingOptions` |
|
296
|
+
| ~~`ISetAccessRequestOptions`~~ | `ISetAccessOptions` |
|
297
|
+
| ~~`IGroupSharingRequestOptions`~~ | `IGroupSharingOptions` |
|
298
|
+
| ~~`IGetUserRequestOptions`~~ | `IGetUserOptions` |
|
299
|
+
| ~~`IInvitationRequestOptions`~~ | `IGetUserInvitationOptions` |
|
300
|
+
| ~~`INotificationIdRequestOptions`~~ | `IRemoveNotificationOptions` |
|
301
|
+
| ~~`IUpdateUserRequestOptions`~~ | `IUpdateUserOptions` |
|
302
|
+
| | `IParamBuilder` |
|
303
|
+
| | `IParamsBuilder` |
|
304
|
+
|
305
|
+
That's it! We know that moving so much 🧀 is a hassle, but developers of the future send their thanks! 🎩
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,12 @@
|
|
1
|
+
|
2
|
+
<header class="sub-nav" role="banner">
|
3
|
+
<div class="grid-container">
|
4
|
+
<div class="column-24 text-center leader-4 trailer-5">
|
5
|
+
<h1 class="font-size-7 text-white">ArcGIS REST JS</h1>
|
6
|
+
<p class="text-white font-size-2">Compact, modular JavaScript wrappers for the ArcGIS REST API</a>.</p>
|
7
|
+
{% link "./guides/", "Get Started", class="btn btn-large btn-clear-white" %}
|
8
|
+
{% link "./api/", "API Reference", class="btn btn-large btn-clear-white" %}
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
</header>
|
12
|
+
</div>
|
@@ -0,0 +1,112 @@
|
|
1
|
+
Vue.component("api-search", {
|
2
|
+
template: `
|
3
|
+
<div>
|
4
|
+
<form v-on:submit.prevent="onSubmit" class="input-group trailer-half leader-0">
|
5
|
+
<input ref="input" v-model="searchTerm" v-on:keyup.enter="onSubmit" v-on:keyup.up="onSelectPrevious" v-on:keyup.down="onSelectNext" v-on:keyup="onChange" class="input-group-input" type="text" placeholder="Search the API Reference">
|
6
|
+
<span class="input-group-button">
|
7
|
+
<button type="submit" class="btn"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" class="svg-icon"><path d="M31.607 27.838l-6.133-6.137a1.336 1.336 0 0 0-1.887 0l-.035.035-2.533-2.533-.014.014c3.652-4.556 3.422-11.195-.803-15.42-4.529-4.527-11.875-4.531-16.404 0-4.531 4.531-4.529 11.875 0 16.406 4.205 4.204 10.811 4.455 15.365.848l.004.003-.033.033 2.541 2.54a1.33 1.33 0 0 0 .025 1.848l6.135 6.133a1.33 1.33 0 0 0 1.887 0l1.885-1.883a1.332 1.332 0 0 0 0-1.887zM17.811 17.809a8.213 8.213 0 0 1-11.619 0 8.217 8.217 0 0 1 0-11.622 8.219 8.219 0 0 1 11.619.004 8.216 8.216 0 0 1 0 11.618z"/></svg></button>
|
8
|
+
</span>
|
9
|
+
</form>
|
10
|
+
|
11
|
+
<div class="panel" v-show="results.length <= 0 && searchTerm">
|
12
|
+
No Results.
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div v-show="results.length <= 0 && !searchTerm">
|
16
|
+
<slot></slot>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<ul v-show="results.length > 0" class="list-plain">
|
20
|
+
<li v-for="result, index in results" class="api-search-result api-list-item" v-bind:class="[result.icon, {'is-selected': index === selectedResultIndex}]">
|
21
|
+
<a v-bind:href="result.url" class="tsd-kind-icon" v-html="result.title"></a>
|
22
|
+
</li>
|
23
|
+
</ul>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
`,
|
27
|
+
data: function() {
|
28
|
+
return {
|
29
|
+
results: [],
|
30
|
+
selectedResultIndex: 0,
|
31
|
+
searchTerm: ""
|
32
|
+
};
|
33
|
+
},
|
34
|
+
methods: {
|
35
|
+
highlightText: function(text, matches) {
|
36
|
+
return matches
|
37
|
+
.map(match => {
|
38
|
+
let characters = text.split("");
|
39
|
+
|
40
|
+
for (let i = match.indices.length - 1; i >= 0; i--) {
|
41
|
+
let start = match.indices[i][0];
|
42
|
+
let end = match.indices[i][1] + 1;
|
43
|
+
let foundMatch = characters.slice(start, end).join("");
|
44
|
+
characters.splice(
|
45
|
+
start,
|
46
|
+
end - start,
|
47
|
+
`<span style="text-decoration: underline; font-weight: 500;">${foundMatch}</span>`
|
48
|
+
);
|
49
|
+
}
|
50
|
+
|
51
|
+
return characters.join("");
|
52
|
+
})
|
53
|
+
.join();
|
54
|
+
},
|
55
|
+
onSubmit: function() {
|
56
|
+
if (this.results.length && this.results[this.selectedResultIndex]) {
|
57
|
+
window.location.href = this.results[this.selectedResultIndex].url;
|
58
|
+
}
|
59
|
+
},
|
60
|
+
|
61
|
+
search: function(text) {
|
62
|
+
return this.index.search(text).map(result => {
|
63
|
+
return {
|
64
|
+
title: this.highlightText(result.item.title, result.matches),
|
65
|
+
icon: result.item.icon,
|
66
|
+
url: result.item.url
|
67
|
+
};
|
68
|
+
});
|
69
|
+
},
|
70
|
+
|
71
|
+
onChange: function(e) {
|
72
|
+
this.results = this.search(e.target.value);
|
73
|
+
|
74
|
+
if (e.keyCode === 38 || e.keyCode === 40) {
|
75
|
+
e.preventDefault();
|
76
|
+
e.stopPropagation();
|
77
|
+
}
|
78
|
+
},
|
79
|
+
|
80
|
+
onSelectNext: function(e) {
|
81
|
+
this.selectedResultIndex =
|
82
|
+
this.selectedResultIndex === this.results.length - 1
|
83
|
+
? 0
|
84
|
+
: this.selectedResultIndex + 1;
|
85
|
+
e.preventDefault();
|
86
|
+
e.stopPropagation();
|
87
|
+
},
|
88
|
+
|
89
|
+
onSelectPrevious: function(e) {
|
90
|
+
this.selectedResultIndex =
|
91
|
+
this.selectedResultIndex === 0
|
92
|
+
? this.results.length - 1
|
93
|
+
: this.selectedResultIndex - 1;
|
94
|
+
|
95
|
+
e.preventDefault();
|
96
|
+
e.stopPropagation();
|
97
|
+
}
|
98
|
+
},
|
99
|
+
created: function() {
|
100
|
+
this.index = new Fuse(ESRI_REST_API_REF_INDEX, {
|
101
|
+
shouldSort: true,
|
102
|
+
threshold: 0.25,
|
103
|
+
location: 0,
|
104
|
+
distance: 200,
|
105
|
+
maxPatternLength: 32,
|
106
|
+
minMatchCharLength: 2,
|
107
|
+
findAllMatches: true,
|
108
|
+
includeMatches: true,
|
109
|
+
keys: ["title"]
|
110
|
+
});
|
111
|
+
}
|
112
|
+
});
|