@salesforce/ui-bundle-template-app-angular-template-b2x 11.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +82 -0
- package/dist/.forceignore +15 -0
- package/dist/.husky/pre-commit +4 -0
- package/dist/.prettierignore +11 -0
- package/dist/.prettierrc +17 -0
- package/dist/CHANGELOG.md +3966 -0
- package/dist/README.md +77 -0
- package/dist/config/project-scratch-def.json +13 -0
- package/dist/eslint.config.js +7 -0
- package/dist/force-app/main/default/classes/UIBundleAuthUtils.cls +68 -0
- package/dist/force-app/main/default/classes/UIBundleAuthUtils.cls-meta.xml +5 -0
- package/dist/force-app/main/default/classes/UIBundleChangePassword.cls +77 -0
- package/dist/force-app/main/default/classes/UIBundleChangePassword.cls-meta.xml +5 -0
- package/dist/force-app/main/default/classes/UIBundleForgotPassword.cls +71 -0
- package/dist/force-app/main/default/classes/UIBundleForgotPassword.cls-meta.xml +5 -0
- package/dist/force-app/main/default/classes/UIBundleLogin.cls +105 -0
- package/dist/force-app/main/default/classes/UIBundleLogin.cls-meta.xml +5 -0
- package/dist/force-app/main/default/classes/UIBundleRegistration.cls +162 -0
- package/dist/force-app/main/default/classes/UIBundleRegistration.cls-meta.xml +5 -0
- package/dist/force-app/main/default/digitalExperienceConfigs/angularexternalapp1.digitalExperienceConfig-meta.xml +8 -0
- package/dist/force-app/main/default/digitalExperiences/site/angularexternalapp1/angularexternalapp1.digitalExperience-meta.xml +11 -0
- package/dist/force-app/main/default/digitalExperiences/site/angularexternalapp1/sfdc_cms__site/angularexternalapp1/_meta.json +5 -0
- package/dist/force-app/main/default/digitalExperiences/site/angularexternalapp1/sfdc_cms__site/angularexternalapp1/content.json +10 -0
- package/dist/force-app/main/default/networks/angularexternalapp.network-meta.xml +60 -0
- package/dist/force-app/main/default/package.xml +24 -0
- package/dist/force-app/main/default/permissionsets/angularexternalapp_Guest_User_Api_Access.permissionset-meta.xml +9 -0
- package/dist/force-app/main/default/sites/angularexternalapp.site-meta.xml +31 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/.forceignore +15 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/.postcssrc.json +5 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/.prettierignore +8 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/.prettierrc +12 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/CHANGELOG.md +4 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/README.md +85 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/angular.json +98 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/angularexternalapp.uibundle-meta.xml +8 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/e2e/app.spec.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/esbuild/api-version.mjs +17 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/eslint.config.js +60 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/middleware/html.mjs +3 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/middleware/proxy.mjs +12 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/package.json +56 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/playwright.config.ts +25 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/public/favicon.ico +0 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/scripts/rewrite-e2e-assets.mjs +30 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/account-search.service.ts +196 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/distinctAccountIndustries.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/distinctAccountTypes.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/getAccountDetail.ts +128 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/searchAccounts.ts +58 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/data-client.service.spec.ts +184 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/data-client.service.ts +74 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/user-profile.service.ts +126 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.config.ts +22 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.html +1 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.routes.ts +77 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.spec.ts +18 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/layout/app-layout/app-layout.component.html +53 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/layout/app-layout/app-layout.component.spec.ts +89 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/layout/app-layout/app-layout.component.ts +81 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/_field-size.scss +42 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/alert/alert.component.html +31 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/alert/alert.component.ts +53 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/button/button.component.html +18 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/button/button.component.scss +112 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/button/button.component.ts +57 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/card/card.component.scss +34 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/card/card.component.ts +110 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/collapsible/collapsible.component.html +10 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/collapsible/collapsible.component.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-picker/date-picker.component.html +25 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-picker/date-picker.component.scss +36 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-picker/date-picker.component.ts +41 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.html +34 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.scss +33 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.ts +66 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/dialog/dialog.component.html +37 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/dialog/dialog.component.ts +55 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/field/field.component.html +21 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/field/field.component.ts +36 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/field-size.ts +8 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/input/input.component.html +19 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/input/input.component.scss +35 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/input/input.component.ts +36 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/label/label.component.html +3 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/label/label.component.ts +17 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/paginator/paginator.component.html +10 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/paginator/paginator.component.ts +37 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/popover/popover.component.html +41 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/popover/popover.component.ts +40 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/select/select.component.html +24 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/select/select.component.scss +35 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/select/select.component.ts +72 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/separator/separator.component.html +1 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/separator/separator.component.scss +23 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/separator/separator.component.ts +56 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/skeleton/skeleton.component.html +1 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/skeleton/skeleton.component.scss +28 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/skeleton/skeleton.component.ts +24 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/spinner/spinner.component.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/auth/auth.guard.ts +50 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/auth/auth.service.ts +126 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/components/status-alert/status-alert.component.html +7 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/components/status-alert/status-alert.component.ts +52 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/config/authentication.config.ts +75 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/auth-form/auth-form.component.html +38 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/auth-form/auth-form.component.ts +94 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/footer-link/footer-link.component.html +11 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/footer-link/footer-link.component.ts +26 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/reactive-form-page.base.ts +50 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/submit-button/submit-button.component.html +8 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/submit-button/submit-button.component.scss +17 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/submit-button/submit-button.component.ts +35 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/auth-app-layout/auth-app-layout.component.html +2 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/auth-app-layout/auth-app-layout.component.ts +30 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/card-layout/card-layout.component.html +17 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/card-layout/card-layout.component.ts +40 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/menu/auth-menu/auth-menu.component.html +26 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/menu/auth-menu/auth-menu.component.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-time-servlet.ts +130 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout-validator/session-timeout-validator.component.html +57 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout-validator/session-timeout-validator.component.ts +205 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout.config.ts +83 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout.service.ts +201 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/utils/auth-helpers.ts +68 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/utils/auth-validators.ts +72 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/utils/helpers.ts +85 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/active-filters/active-filters.component.html +23 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/active-filters/active-filters.component.ts +78 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-filter/date-filter.component.html +18 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-filter/date-filter.component.ts +137 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-range-filter/date-range-filter.component.html +11 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-range-filter/date-range-filter.component.ts +69 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/filter-field-wrapper/filter-field-wrapper.component.html +11 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/filter-field-wrapper/filter-field-wrapper.component.ts +36 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/multi-select-filter/multi-select-filter.component.html +10 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/multi-select-filter/multi-select-filter.component.ts +58 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/numeric-range-filter/numeric-range-filter.component.html +22 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/numeric-range-filter/numeric-range-filter.component.ts +146 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/search-filter/search-filter.component.html +8 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/search-filter/search-filter.component.ts +82 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/select-filter/select-filter.component.html +12 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/select-filter/select-filter.component.ts +65 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/text-filter/text-filter.component.html +12 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/text-filter/text-filter.component.ts +90 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/object-breadcrumb/object-breadcrumb.component.html +55 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/object-breadcrumb/object-breadcrumb.component.ts +40 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/pagination-controls/pagination-controls.component.html +8 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/pagination-controls/pagination-controls.component.ts +61 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/search-bar/search-bar.component.html +59 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/search-bar/search-bar.component.ts +108 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/sort-control/sort-control.component.html +50 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/sort-control/sort-control.component.ts +72 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/object-search-state.service.ts +232 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/debounce.ts +31 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/field-utils.ts +54 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/filter-utils.ts +354 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/index.ts +12 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/sort-utils.ts +46 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-detail/account-detail-page.component.html +174 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-detail/account-detail-page.component.scss +7 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-detail/account-detail-page.component.ts +199 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-search/account-search-page.component.html +111 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-search/account-search-page.component.ts +217 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/change-password/change-password-page.component.html +68 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/change-password/change-password-page.component.ts +82 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/forgot-password/forgot-password-page.component.html +35 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/forgot-password/forgot-password-page.component.ts +87 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home-page.component.html +18 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home-page.component.ts +47 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home.component.html +6 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home.component.spec.ts +23 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home.component.ts +13 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/login/login-page.component.html +47 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/login/login-page.component.ts +89 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/not-found/not-found.component.html +12 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/not-found/not-found.component.spec.ts +33 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/not-found/not-found.component.ts +15 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/profile/profile-page.component.html +126 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/profile/profile-page.component.ts +194 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/register/register-page.component.html +80 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/register/register-page.component.ts +93 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/reset-password/reset-password-page.component.html +60 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/reset-password/reset-password-page.component.ts +96 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/utils/async-data.ts +99 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/index.html +14 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/main.ts +5 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/styles.scss +170 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/theme.scss +39 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/src/types/sf-globals.d.ts +9 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/tsconfig.app.json +11 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/tsconfig.json +33 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/tsconfig.spec.json +10 -0
- package/dist/force-app/main/default/uiBundles/angularexternalapp/ui-bundle.json +7 -0
- package/dist/jest.config.js +6 -0
- package/dist/package-lock.json +10066 -0
- package/dist/package.json +46 -0
- package/dist/scripts/apex/hello.apex +10 -0
- package/dist/scripts/gitignore-templates.json +4 -0
- package/dist/scripts/graphql-search.sh +191 -0
- package/dist/scripts/org-setup-config-schema.mjs +103 -0
- package/dist/scripts/org-setup-dev.mjs +87 -0
- package/dist/scripts/org-setup-utils.mjs +369 -0
- package/dist/scripts/org-setup-xml.mjs +182 -0
- package/dist/scripts/org-setup.config.json +9 -0
- package/dist/scripts/org-setup.mjs +1702 -0
- package/dist/scripts/sf-project-setup.mjs +103 -0
- package/dist/scripts/soql/account.soql +6 -0
- package/dist/scripts/validate-org-setup-config.mjs +38 -0
- package/dist/sfdx-project.json +12 -0
- package/package.json +40 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Network xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<allowInternalUserLogin>false</allowInternalUserLogin>
|
|
4
|
+
<allowMembersToFlag>false</allowMembersToFlag>
|
|
5
|
+
<changePasswordTemplate>unfiled$public/CommunityChangePasswordEmailTemplate</changePasswordTemplate>
|
|
6
|
+
<communityRoles/>
|
|
7
|
+
<disableReputationRecordConversations>true</disableReputationRecordConversations>
|
|
8
|
+
<emailSenderAddress>admin@company.com</emailSenderAddress>
|
|
9
|
+
<emailSenderName>angularexternalapp</emailSenderName>
|
|
10
|
+
<embeddedLoginEnabled>false</embeddedLoginEnabled>
|
|
11
|
+
<enableApexCDNCaching>true</enableApexCDNCaching>
|
|
12
|
+
<enableCustomVFErrorPageOverrides>false</enableCustomVFErrorPageOverrides>
|
|
13
|
+
<enableDirectMessages>true</enableDirectMessages>
|
|
14
|
+
<enableExpFriendlyUrlsAsDefault>false</enableExpFriendlyUrlsAsDefault>
|
|
15
|
+
<enableExperienceBundleBasedSnaOverrideEnabled>true</enableExperienceBundleBasedSnaOverrideEnabled>
|
|
16
|
+
<enableGuestChatter>true</enableGuestChatter>
|
|
17
|
+
<enableGuestFileAccess>false</enableGuestFileAccess>
|
|
18
|
+
<enableGuestMemberVisibility>false</enableGuestMemberVisibility>
|
|
19
|
+
<enableImageOptimizationCDN>true</enableImageOptimizationCDN>
|
|
20
|
+
<enableInvitation>false</enableInvitation>
|
|
21
|
+
<enableKnowledgeable>false</enableKnowledgeable>
|
|
22
|
+
<enableLWRExperienceConnectedApp>false</enableLWRExperienceConnectedApp>
|
|
23
|
+
<enableMemberVisibility>false</enableMemberVisibility>
|
|
24
|
+
<enableNicknameDisplay>true</enableNicknameDisplay>
|
|
25
|
+
<enablePrivateMessages>false</enablePrivateMessages>
|
|
26
|
+
<enableReputation>false</enableReputation>
|
|
27
|
+
<enableShowAllNetworkSettings>false</enableShowAllNetworkSettings>
|
|
28
|
+
<enableSiteAsContainer>true</enableSiteAsContainer>
|
|
29
|
+
<enableTalkingAboutStats>true</enableTalkingAboutStats>
|
|
30
|
+
<enableTopicAssignmentRules>true</enableTopicAssignmentRules>
|
|
31
|
+
<enableTopicSuggestions>false</enableTopicSuggestions>
|
|
32
|
+
<enableUpDownVote>false</enableUpDownVote>
|
|
33
|
+
<forgotPasswordTemplate>unfiled$public/CommunityForgotPasswordEmailTemplate</forgotPasswordTemplate>
|
|
34
|
+
<gatherCustomerSentimentData>false</gatherCustomerSentimentData>
|
|
35
|
+
<headlessForgotPasswordTemplate>unfiled$public/CommunityHeadlessForgotPasswordTemplate</headlessForgotPasswordTemplate>
|
|
36
|
+
<headlessRegistrationTemplate>unfiled$public/CommunityHeadlessRegistrationTemplate</headlessRegistrationTemplate>
|
|
37
|
+
<networkMemberGroups>
|
|
38
|
+
<profile>admin</profile>
|
|
39
|
+
</networkMemberGroups>
|
|
40
|
+
<networkPageOverrides>
|
|
41
|
+
<changePasswordPageOverrideSetting>Standard</changePasswordPageOverrideSetting>
|
|
42
|
+
<forgotPasswordPageOverrideSetting>Designer</forgotPasswordPageOverrideSetting>
|
|
43
|
+
<homePageOverrideSetting>Designer</homePageOverrideSetting>
|
|
44
|
+
<loginPageOverrideSetting>Designer</loginPageOverrideSetting>
|
|
45
|
+
<selfRegProfilePageOverrideSetting>Designer</selfRegProfilePageOverrideSetting>
|
|
46
|
+
</networkPageOverrides>
|
|
47
|
+
<newSenderAddress>admin@company.com</newSenderAddress>
|
|
48
|
+
<picassoSite>angularexternalapp1</picassoSite>
|
|
49
|
+
<selfRegistration>false</selfRegistration>
|
|
50
|
+
<sendWelcomeEmail>true</sendWelcomeEmail>
|
|
51
|
+
<site>angularexternalapp</site>
|
|
52
|
+
<siteArchiveStatus>NotArchived</siteArchiveStatus>
|
|
53
|
+
<status>Live</status>
|
|
54
|
+
<tabs>
|
|
55
|
+
<defaultTab>home</defaultTab>
|
|
56
|
+
<standardTab>Chatter</standardTab>
|
|
57
|
+
</tabs>
|
|
58
|
+
<urlPathPrefix>angularexternalappvforcesite</urlPathPrefix>
|
|
59
|
+
<welcomeTemplate>unfiled$public/CommunityWelcomeEmailTemplate</welcomeTemplate>
|
|
60
|
+
</Network>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<types>
|
|
4
|
+
<members>angularexternalapp</members>
|
|
5
|
+
<name>CustomSite</name>
|
|
6
|
+
</types>
|
|
7
|
+
<types>
|
|
8
|
+
<members>site/angularexternalapp1</members>
|
|
9
|
+
<name>DigitalExperienceBundle</name>
|
|
10
|
+
</types>
|
|
11
|
+
<types>
|
|
12
|
+
<members>angularexternalapp1</members>
|
|
13
|
+
<name>DigitalExperienceConfig</name>
|
|
14
|
+
</types>
|
|
15
|
+
<types>
|
|
16
|
+
<members>angularexternalapp</members>
|
|
17
|
+
<name>Network</name>
|
|
18
|
+
</types>
|
|
19
|
+
<types>
|
|
20
|
+
<members>angularexternalapp_Guest_User_Api_Access</members>
|
|
21
|
+
<name>PermissionSet</name>
|
|
22
|
+
</types>
|
|
23
|
+
<version>67.0</version>
|
|
24
|
+
</Package>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<hasActivationRequired>false</hasActivationRequired>
|
|
4
|
+
<label>angularexternalapp Guest User API Access</label>
|
|
5
|
+
<userPermissions>
|
|
6
|
+
<enabled>true</enabled>
|
|
7
|
+
<name>ApiEnabled</name>
|
|
8
|
+
</userPermissions>
|
|
9
|
+
</PermissionSet>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<CustomSite xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<active>true</active>
|
|
4
|
+
<allowGuestPaymentsApi>false</allowGuestPaymentsApi>
|
|
5
|
+
<allowHomePage>false</allowHomePage>
|
|
6
|
+
<allowStandardAnswersPages>false</allowStandardAnswersPages>
|
|
7
|
+
<allowStandardIdeasPages>false</allowStandardIdeasPages>
|
|
8
|
+
<allowStandardLookups>false</allowStandardLookups>
|
|
9
|
+
<allowStandardPortalPages>true</allowStandardPortalPages>
|
|
10
|
+
<allowStandardSearch>false</allowStandardSearch>
|
|
11
|
+
<authorizationRequiredPage>CommunitiesLogin</authorizationRequiredPage>
|
|
12
|
+
<bandwidthExceededPage>BandwidthExceeded</bandwidthExceededPage>
|
|
13
|
+
<browserXssProtection>true</browserXssProtection>
|
|
14
|
+
<cachePublicVisualforcePagesInProxyServers>true</cachePublicVisualforcePagesInProxyServers>
|
|
15
|
+
<clickjackProtectionLevel>SameOriginOnly</clickjackProtectionLevel>
|
|
16
|
+
<contentSniffingProtection>true</contentSniffingProtection>
|
|
17
|
+
<enableAuraRequests>true</enableAuraRequests>
|
|
18
|
+
<fileNotFoundPage>FileNotFound</fileNotFoundPage>
|
|
19
|
+
<genericErrorPage>Exception</genericErrorPage>
|
|
20
|
+
<inMaintenancePage>InMaintenance</inMaintenancePage>
|
|
21
|
+
<indexPage>CommunitiesLanding</indexPage>
|
|
22
|
+
<masterLabel>angularexternalapp</masterLabel>
|
|
23
|
+
<redirectToCustomDomain>false</redirectToCustomDomain>
|
|
24
|
+
<referrerPolicyOriginWhenCrossOrigin>true</referrerPolicyOriginWhenCrossOrigin>
|
|
25
|
+
<selfRegPage>CommunitiesSelfReg</selfRegPage>
|
|
26
|
+
<!-- <serverIsDown>SNA_U2rxy_sf_default_cdn_byo1</serverIsDown> -->
|
|
27
|
+
<!-- <siteAdmin>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteAdmin> -->
|
|
28
|
+
<!-- <siteGuestRecordDefaultOwner>epic.out.d1d3a2d722c8@orgfarm.salesforce.com</siteGuestRecordDefaultOwner> -->
|
|
29
|
+
<siteType>ChatterNetwork</siteType>
|
|
30
|
+
<urlPathPrefix>angularexternalappvforcesite</urlPathPrefix>
|
|
31
|
+
</CustomSite>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status
|
|
2
|
+
# More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
package.xml
|
|
6
|
+
|
|
7
|
+
# LWC configuration files
|
|
8
|
+
**/jsconfig.json
|
|
9
|
+
**/.eslintrc.json
|
|
10
|
+
|
|
11
|
+
# LWC Jest
|
|
12
|
+
**/__tests__/**
|
|
13
|
+
|
|
14
|
+
node_modules/
|
|
15
|
+
.DS_Store
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Base Angular App
|
|
2
|
+
|
|
3
|
+
Base Angular App is a template application that demonstrates how to build an Angular UI Bundle on the Salesforce platform with the Angular CLI, TypeScript, Tailwind, and the Salesforce UI Bundle SDK. It provides a minimal shell (home, 404), routing with standalone components and signals, so feature apps can extend it via the patches pipeline.
|
|
4
|
+
|
|
5
|
+
This UI Bundle lives inside an SFDX project. The project root is the directory that contains `force-app/` and `sfdx-project.json`. Run the commands in the sections below from the paths indicated.
|
|
6
|
+
|
|
7
|
+
## Table of contents
|
|
8
|
+
|
|
9
|
+
- [Run (development)](#run-development)
|
|
10
|
+
- [Build](#build)
|
|
11
|
+
- [Deploy](#deploy)
|
|
12
|
+
- [Test](#test)
|
|
13
|
+
- [Lint](#lint)
|
|
14
|
+
|
|
15
|
+
## Run (development)
|
|
16
|
+
|
|
17
|
+
From the UI Bundle directory (`force-app/main/default/uiBundles/base-angular-app`):
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install
|
|
21
|
+
npm run dev
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
This starts the Salesforce Angular dev server (`sf-angular-serve`).
|
|
25
|
+
|
|
26
|
+
## Build
|
|
27
|
+
|
|
28
|
+
From the UI Bundle directory:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install
|
|
32
|
+
npm run build
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The production build is written to `dist/` inside the UI Bundle folder. Use `npm run watch` to rebuild on change in development mode. Deploy using the steps in [Deploy](#deploy).
|
|
36
|
+
|
|
37
|
+
## Deploy
|
|
38
|
+
|
|
39
|
+
From the **SFDX project root** (the directory that contains `force-app/`):
|
|
40
|
+
|
|
41
|
+
1. Build the UI Bundle:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cd force-app/main/default/uiBundles/base-angular-app && npm install && npm run build && cd -
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
2. Deploy the UI Bundle only:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
sf project deploy start --source-dir force-app/main/default/ui-bundles --target-org <alias>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or deploy all metadata:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
sf project deploy start --source-dir force-app --target-org <alias>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Replace `<alias>` with your target org alias.
|
|
60
|
+
|
|
61
|
+
## Test
|
|
62
|
+
|
|
63
|
+
From the UI Bundle directory:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm install
|
|
67
|
+
npm run test
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This runs the unit test suite via `ng test`. For end-to-end tests:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npm run build:e2e
|
|
74
|
+
npm run e2e
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
This builds with E2E asset rewrites and runs Playwright against the static build. Ensure Chromium is installed (`npx playwright install chromium` if needed).
|
|
78
|
+
|
|
79
|
+
## Lint
|
|
80
|
+
|
|
81
|
+
From the UI Bundle directory:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npm run lint
|
|
85
|
+
```
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"cli": {
|
|
5
|
+
"packageManager": "npm",
|
|
6
|
+
"analytics": false
|
|
7
|
+
},
|
|
8
|
+
"newProjectRoot": "projects",
|
|
9
|
+
"projects": {
|
|
10
|
+
"angularexternalapp": {
|
|
11
|
+
"projectType": "application",
|
|
12
|
+
"schematics": {
|
|
13
|
+
"@schematics/angular:component": {
|
|
14
|
+
"style": "scss"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"root": "",
|
|
18
|
+
"sourceRoot": "src",
|
|
19
|
+
"prefix": "app",
|
|
20
|
+
"architect": {
|
|
21
|
+
"build": {
|
|
22
|
+
"builder": "@angular-builders/custom-esbuild:application",
|
|
23
|
+
"options": {
|
|
24
|
+
"outputPath": {
|
|
25
|
+
"base": "dist",
|
|
26
|
+
"browser": ""
|
|
27
|
+
},
|
|
28
|
+
"deployUrl": "./",
|
|
29
|
+
"browser": "src/main.ts",
|
|
30
|
+
"tsConfig": "tsconfig.app.json",
|
|
31
|
+
"assets": [
|
|
32
|
+
{
|
|
33
|
+
"glob": "**/*",
|
|
34
|
+
"input": "public"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"styles": ["src/theme.scss", "src/styles.scss"],
|
|
38
|
+
"stylePreprocessorOptions": {
|
|
39
|
+
"sass": {
|
|
40
|
+
"silenceDeprecations": ["import"]
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"plugins": ["./esbuild/api-version.mjs"]
|
|
44
|
+
},
|
|
45
|
+
"configurations": {
|
|
46
|
+
"production": {
|
|
47
|
+
"budgets": [
|
|
48
|
+
{
|
|
49
|
+
"type": "anyComponentStyle",
|
|
50
|
+
"maximumWarning": "4kB",
|
|
51
|
+
"maximumError": "8kB"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"outputHashing": "all",
|
|
55
|
+
"optimization": {
|
|
56
|
+
"scripts": true,
|
|
57
|
+
"styles": {
|
|
58
|
+
"minify": true,
|
|
59
|
+
"inlineCritical": false
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"development": {
|
|
64
|
+
"optimization": false,
|
|
65
|
+
"extractLicenses": false,
|
|
66
|
+
"sourceMap": true
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"defaultConfiguration": "production"
|
|
70
|
+
},
|
|
71
|
+
"serve": {
|
|
72
|
+
"builder": "@angular-builders/custom-esbuild:dev-server",
|
|
73
|
+
"options": {
|
|
74
|
+
"middlewares": ["./middleware/html.mjs", "./middleware/proxy.mjs"]
|
|
75
|
+
},
|
|
76
|
+
"configurations": {
|
|
77
|
+
"production": {
|
|
78
|
+
"buildTarget": "angularexternalapp:build:production"
|
|
79
|
+
},
|
|
80
|
+
"development": {
|
|
81
|
+
"buildTarget": "angularexternalapp:build:development"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"defaultConfiguration": "development"
|
|
85
|
+
},
|
|
86
|
+
"test": {
|
|
87
|
+
"builder": "@angular/build:unit-test"
|
|
88
|
+
},
|
|
89
|
+
"lint": {
|
|
90
|
+
"builder": "@angular-eslint/builder:lint",
|
|
91
|
+
"options": {
|
|
92
|
+
"lintFilePatterns": ["src/**/*.ts", "src/**/*.html"]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<UIBundle xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
3
|
+
<masterLabel>angularexternalapp</masterLabel>
|
|
4
|
+
<description>A Salesforce UI Bundle.</description>
|
|
5
|
+
<isActive>true</isActive>
|
|
6
|
+
<version>1</version>
|
|
7
|
+
<target>Experience</target>
|
|
8
|
+
</UIBundle>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test.describe('base-angular-app', () => {
|
|
4
|
+
test('home page loads and shows welcome content', async ({ page }) => {
|
|
5
|
+
await page.goto('/');
|
|
6
|
+
await expect(page.getByRole('heading', { name: 'Home' })).toBeVisible();
|
|
7
|
+
await expect(page.getByText('Welcome to your Angular application.')).toBeVisible();
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
test('not found route shows 404', async ({ page }) => {
|
|
11
|
+
await page.goto('/non-existent-route');
|
|
12
|
+
await expect(page.getByRole('heading', { name: '404' })).toBeVisible();
|
|
13
|
+
await expect(page.getByText('Page not found')).toBeVisible();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build-time substitution of `__SF_API_VERSION__` (production + main app code in dev).
|
|
3
|
+
*
|
|
4
|
+
* Resolves the connected org's API version (from `sf` CLI session) once at
|
|
5
|
+
* builder startup and injects it via esbuild's `define`. Falls back to "65.0"
|
|
6
|
+
* if no session is available — matches @salesforce/platform-sdk's default.
|
|
7
|
+
*
|
|
8
|
+
* In `ng serve`, this plugin runs on the application esbuild pass but does NOT
|
|
9
|
+
* reach Vite's optimizeDeps prebundle of node_modules. `scripts/dev.mjs` covers
|
|
10
|
+
* that gap by passing the same value via `ng serve --define`.
|
|
11
|
+
*
|
|
12
|
+
* Referenced from angular.json: architect.build.options.plugins[].
|
|
13
|
+
*/
|
|
14
|
+
import { createApiVersionPlugin } from '@salesforce/angular-plugin-ui-bundle';
|
|
15
|
+
|
|
16
|
+
const { plugin } = await createApiVersionPlugin();
|
|
17
|
+
export default plugin;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import js from '@eslint/js';
|
|
2
|
+
import angular from 'angular-eslint';
|
|
3
|
+
import tseslint from 'typescript-eslint';
|
|
4
|
+
|
|
5
|
+
export default tseslint.config(
|
|
6
|
+
// Global ignores
|
|
7
|
+
{
|
|
8
|
+
ignores: ['dist/**/*', '.angular/**/*', 'coverage/**/*', 'node_modules/**/*'],
|
|
9
|
+
},
|
|
10
|
+
// TypeScript files
|
|
11
|
+
{
|
|
12
|
+
files: ['**/*.ts'],
|
|
13
|
+
extends: [
|
|
14
|
+
js.configs.recommended,
|
|
15
|
+
...tseslint.configs.recommended,
|
|
16
|
+
...angular.configs.tsRecommended,
|
|
17
|
+
],
|
|
18
|
+
processor: angular.processInlineTemplates,
|
|
19
|
+
rules: {
|
|
20
|
+
'@angular-eslint/directive-selector': [
|
|
21
|
+
'error',
|
|
22
|
+
{
|
|
23
|
+
type: 'attribute',
|
|
24
|
+
prefix: 'app',
|
|
25
|
+
style: 'camelCase',
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
'@angular-eslint/component-selector': [
|
|
29
|
+
'error',
|
|
30
|
+
{
|
|
31
|
+
type: 'element',
|
|
32
|
+
prefix: 'app',
|
|
33
|
+
style: 'kebab-case',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
// The UI wrapper components (app-button, app-card, …) intentionally
|
|
37
|
+
// alias an input to `class` so callers can write `class="…"` on the host
|
|
38
|
+
// and have it forward to the inner Material element. Allow that one name.
|
|
39
|
+
'@angular-eslint/no-input-rename': ['error', { allowedNames: ['class'] }],
|
|
40
|
+
'@typescript-eslint/no-unused-vars': [
|
|
41
|
+
'error',
|
|
42
|
+
{
|
|
43
|
+
argsIgnorePattern: '^_',
|
|
44
|
+
varsIgnorePattern: '^_',
|
|
45
|
+
caughtErrorsIgnorePattern: '^_',
|
|
46
|
+
ignoreRestSiblings: true,
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
'@typescript-eslint/no-explicit-any': 'off',
|
|
50
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
51
|
+
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
// Template files
|
|
55
|
+
{
|
|
56
|
+
files: ['**/*.html'],
|
|
57
|
+
extends: [...angular.configs.templateRecommended, ...angular.configs.templateAccessibility],
|
|
58
|
+
rules: {},
|
|
59
|
+
},
|
|
60
|
+
);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxy middleware for Angular CLI dev server.
|
|
3
|
+
*
|
|
4
|
+
* Forwards `/services/*` and other manifest-routed paths to the connected
|
|
5
|
+
* Salesforce org with authentication. Watches `ui-bundle.json` for changes
|
|
6
|
+
* and recreates the proxy handler automatically (manual browser refresh needed).
|
|
7
|
+
*
|
|
8
|
+
* Referenced from angular.json: architect.serve.options.middlewares[].
|
|
9
|
+
*/
|
|
10
|
+
import { createProxyMiddleware } from '@salesforce/angular-plugin-ui-bundle';
|
|
11
|
+
|
|
12
|
+
export default await createProxyMiddleware();
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "base-angular-app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=22"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"dev": "sf-angular-serve",
|
|
11
|
+
"dev:design": "sf-angular-serve",
|
|
12
|
+
"build": "ng build",
|
|
13
|
+
"watch": "ng build --watch --configuration development",
|
|
14
|
+
"test": "ng test",
|
|
15
|
+
"lint": "ng lint",
|
|
16
|
+
"build:e2e": "ng build && node scripts/rewrite-e2e-assets.mjs",
|
|
17
|
+
"e2e": "playwright test"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@angular/animations": "^21.2.0",
|
|
21
|
+
"@angular/cdk": "^21.2.0",
|
|
22
|
+
"@angular/common": "^21.2.0",
|
|
23
|
+
"@angular/compiler": "^21.2.0",
|
|
24
|
+
"@angular/core": "^21.2.0",
|
|
25
|
+
"@angular/forms": "^21.2.0",
|
|
26
|
+
"@angular/material": "^21.2.0",
|
|
27
|
+
"@angular/platform-browser": "^21.2.0",
|
|
28
|
+
"@angular/router": "^21.2.0",
|
|
29
|
+
"@salesforce/angular-plugin-ui-bundle": "^11.4.4",
|
|
30
|
+
"@salesforce/platform-sdk": "^11.4.4",
|
|
31
|
+
"rxjs": "~7.8.0",
|
|
32
|
+
"tslib": "^2.3.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@angular-builders/custom-esbuild": "^21.0.0",
|
|
36
|
+
"@angular-eslint/builder": "^21.0.0",
|
|
37
|
+
"@angular/build": "^21.2.11",
|
|
38
|
+
"@angular/cli": "^21.2.11",
|
|
39
|
+
"@angular/compiler-cli": "^21.2.0",
|
|
40
|
+
"@eslint/js": "^9.0.0",
|
|
41
|
+
"@playwright/test": "^1.49.0",
|
|
42
|
+
"@tailwindcss/postcss": "^4.0.0",
|
|
43
|
+
"angular-eslint": "^21.0.0",
|
|
44
|
+
"eslint": "^9.0.0",
|
|
45
|
+
"jsdom": "^28.0.0",
|
|
46
|
+
"postcss": "^8.5.0",
|
|
47
|
+
"serve": "^14.2.5",
|
|
48
|
+
"tailwindcss": "^4.0.0",
|
|
49
|
+
"typescript": "~5.9.2",
|
|
50
|
+
"typescript-eslint": "^8.0.0",
|
|
51
|
+
"vitest": "^4.1.0"
|
|
52
|
+
},
|
|
53
|
+
"overrides": {
|
|
54
|
+
"undici": "^7.28.0"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
const E2E_PORT = 5176;
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
testDir: './e2e',
|
|
7
|
+
fullyParallel: true,
|
|
8
|
+
forbidOnly: !!process.env.CI,
|
|
9
|
+
retries: process.env.CI ? 2 : 0,
|
|
10
|
+
workers: process.env.CI ? 1 : undefined,
|
|
11
|
+
reporter: 'html',
|
|
12
|
+
use: {
|
|
13
|
+
baseURL: `http://localhost:${E2E_PORT}`,
|
|
14
|
+
trace: 'on-first-retry',
|
|
15
|
+
},
|
|
16
|
+
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
17
|
+
webServer: {
|
|
18
|
+
// Serve built dist/ with a static server so e2e works in CI without an SF org
|
|
19
|
+
// (ng serve runs the SF plugin/proxy middleware and can fail without an org).
|
|
20
|
+
command: `npx serve dist -l ${E2E_PORT}`,
|
|
21
|
+
url: `http://localhost:${E2E_PORT}`,
|
|
22
|
+
reuseExistingServer: !process.env.CI,
|
|
23
|
+
timeout: process.env.CI ? 120_000 : 60_000,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
Binary file
|
package/dist/force-app/main/default/uiBundles/angularexternalapp/scripts/rewrite-e2e-assets.mjs
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prepares dist/ for e2e: root-relative asset paths + SPA fallback for serve.
|
|
3
|
+
*
|
|
4
|
+
* angular.json sets deployUrl: "./", so the built index.html references
|
|
5
|
+
* scripts/styles with a relative "./" prefix (e.g. ./main-HASH.js). When the
|
|
6
|
+
* SPA fallback serves index.html for a deep route like /non-existent-route,
|
|
7
|
+
* those "./" paths resolve against the wrong base and 404, so the app never
|
|
8
|
+
* boots. Rewrite them to root-relative "/" paths.
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { join, dirname } from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
13
|
+
|
|
14
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
// angular.json outputPath: { base: "dist", browser: "" } -> files land in dist/
|
|
16
|
+
const distDir = join(__dirname, '..', 'dist');
|
|
17
|
+
|
|
18
|
+
// Rewrite index.html so asset paths are root-relative (./main-x.js -> /main-x.js)
|
|
19
|
+
const indexPath = join(distDir, 'index.html');
|
|
20
|
+
let html = readFileSync(indexPath, 'utf8');
|
|
21
|
+
html = html.replace(/(src|href)="\.\//g, '$1="/');
|
|
22
|
+
writeFileSync(indexPath, html);
|
|
23
|
+
|
|
24
|
+
// SPA fallback so /non-existent-route etc. serve index.html
|
|
25
|
+
writeFileSync(
|
|
26
|
+
join(distDir, 'serve.json'),
|
|
27
|
+
JSON.stringify({
|
|
28
|
+
rewrites: [{ source: '**', destination: '/index.html' }],
|
|
29
|
+
}),
|
|
30
|
+
);
|