@nrwl/angular 13.1.1 → 13.2.0-beta.2
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/README.md +1 -1
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/nrwl-angular.js → esm2020/nrwl-angular.mjs} +0 -0
- package/esm2020/src/runtime/nx/data-persistence.mjs +327 -0
- package/esm2020/src/runtime/nx/nx.module.mjs +21 -0
- package/esm2020/testing/index.mjs +19 -0
- package/{esm2015/testing/nrwl-angular-testing.js → esm2020/testing/nrwl-angular-testing.mjs} +0 -0
- package/{esm2015/testing/src/testing-utils.js → esm2020/testing/src/testing-utils.mjs} +0 -0
- package/fesm2015/{nrwl-angular-testing.js → nrwl-angular-testing.mjs} +19 -3
- package/fesm2015/nrwl-angular-testing.mjs.map +1 -0
- package/fesm2015/{nrwl-angular.js → nrwl-angular.mjs} +16 -13
- package/fesm2015/nrwl-angular.mjs.map +1 -0
- package/fesm2020/nrwl-angular-testing.mjs +56 -0
- package/fesm2020/nrwl-angular-testing.mjs.map +1 -0
- package/fesm2020/nrwl-angular.mjs +351 -0
- package/fesm2020/nrwl-angular.mjs.map +1 -0
- package/generators.js +16 -16
- package/generators.js.map +1 -1
- package/migrations.json +161 -0
- package/ng-package.json +3 -9
- package/nrwl-angular.d.ts +1 -0
- package/package.json +40 -15
- package/src/builders/webpack-browser/schema.json +4 -9
- package/src/builders/webpack-browser/webpack-browser.impl.d.ts +1 -1
- package/src/builders/webpack-browser/webpack-browser.impl.js +12 -12
- package/src/builders/webpack-browser/webpack-browser.impl.js.map +1 -1
- package/src/builders/webpack-server/lib/index.js +1 -1
- package/src/builders/webpack-server/lib/index.js.map +1 -1
- package/src/builders/webpack-server/schema.d.ts +0 -12
- package/src/builders/webpack-server/schema.json +0 -104
- package/src/builders/webpack-server/webpack-server.impl.d.ts +1 -1
- package/src/builders/webpack-server/webpack-server.impl.js +10 -10
- package/src/builders/webpack-server/webpack-server.impl.js.map +1 -1
- package/src/executors/delegate-build/compat.js +1 -1
- package/src/executors/delegate-build/compat.js.map +1 -1
- package/src/executors/delegate-build/delegate-build.impl.js +8 -8
- package/src/executors/delegate-build/delegate-build.impl.js.map +1 -1
- package/src/executors/ng-packagr-lite/compat.js +1 -1
- package/src/executors/ng-packagr-lite/compat.js.map +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/compile-ngc.d.ts +4 -2
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/compile-ngc.js +22 -15
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/compile-ngc.js.map +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/compile-source-files.d.ts +12 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/compile-source-files.js +147 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/compile-source-files.js.map +1 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/entry-point.d.ts +3 -3
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/entry-point.di.js +2 -2
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/entry-point.di.js.map +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/entry-point.js +7 -7
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/entry-point.js.map +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/package.di.d.ts +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/package.di.js +5 -9
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/package.di.js.map +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/write-package.d.ts +2 -2
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/write-package.di.d.ts +2 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/write-package.di.js +4 -2
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/write-package.di.js.map +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/write-package.js +31 -29
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/write-package.js.map +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-lite.impl.js +6 -6
- package/src/executors/ng-packagr-lite/ng-packagr-lite.impl.js.map +1 -1
- package/src/executors/package/compat.js +1 -1
- package/src/executors/package/compat.js.map +1 -1
- package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.di.js +1 -1
- package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.di.js.map +1 -1
- package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.transform.js +19 -42
- package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.transform.js.map +1 -1
- package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/entry-point.di.js +1 -1
- package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/entry-point.di.js.map +1 -1
- package/src/executors/package/ng-packagr-adjustments/ng-package/package.di.js +1 -2
- package/src/executors/package/ng-packagr-adjustments/ng-package/package.di.js.map +1 -1
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.d.ts +19 -15
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.js +208 -40
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.js.map +1 -1
- package/src/executors/package/ng-packagr-adjustments/utilities/tailwindcss.js +3 -3
- package/src/executors/package/ng-packagr-adjustments/utilities/tailwindcss.js.map +1 -1
- package/src/executors/package/package.impl.js +15 -32
- package/src/executors/package/package.impl.js.map +1 -1
- package/src/generators/add-linting/add-linting.js +6 -6
- package/src/generators/add-linting/add-linting.js.map +1 -1
- package/src/generators/add-linting/compat.js +1 -1
- package/src/generators/add-linting/compat.js.map +1 -1
- package/src/generators/add-linting/lib/add-angular-eslint-dependencies.js +1 -1
- package/src/generators/add-linting/lib/add-angular-eslint-dependencies.js.map +1 -1
- package/src/generators/add-linting/lib/add-project-lint-target.js +2 -2
- package/src/generators/add-linting/lib/add-project-lint-target.js.map +1 -1
- package/src/generators/add-linting/lib/create-eslint-configuration.js +2 -2
- package/src/generators/add-linting/lib/create-eslint-configuration.js.map +1 -1
- package/src/generators/application/application.compat.js +1 -1
- package/src/generators/application/application.compat.js.map +1 -1
- package/src/generators/application/application.js +23 -23
- package/src/generators/application/application.js.map +1 -1
- package/src/generators/application/lib/add-e2e.js +8 -8
- package/src/generators/application/lib/add-e2e.js.map +1 -1
- package/src/generators/application/lib/add-linting.js +2 -2
- package/src/generators/application/lib/add-linting.js.map +1 -1
- package/src/generators/application/lib/add-mfe.js +2 -2
- package/src/generators/application/lib/add-mfe.js.map +1 -1
- package/src/generators/application/lib/add-protractor.js +5 -5
- package/src/generators/application/lib/add-protractor.js.map +1 -1
- package/src/generators/application/lib/add-proxy-config.js +3 -3
- package/src/generators/application/lib/add-proxy-config.js.map +1 -1
- package/src/generators/application/lib/add-unit-test-runner.js +3 -3
- package/src/generators/application/lib/add-unit-test-runner.js.map +1 -1
- package/src/generators/application/lib/create-files.js +1 -1
- package/src/generators/application/lib/create-files.js.map +1 -1
- package/src/generators/application/lib/enable-strict-type-checking.js +1 -1
- package/src/generators/application/lib/enable-strict-type-checking.js.map +1 -1
- package/src/generators/application/lib/index.js +19 -19
- package/src/generators/application/lib/index.js.map +1 -1
- package/src/generators/application/lib/normalize-options.js +6 -6
- package/src/generators/application/lib/normalize-options.js.map +1 -1
- package/src/generators/application/lib/remove-scaffolded-e2e.js +2 -2
- package/src/generators/application/lib/remove-scaffolded-e2e.js.map +1 -1
- package/src/generators/application/lib/root-router-config.js +2 -2
- package/src/generators/application/lib/root-router-config.js.map +1 -1
- package/src/generators/application/lib/set-app-strict-default.js +2 -2
- package/src/generators/application/lib/set-app-strict-default.js.map +1 -1
- package/src/generators/application/lib/update-component-spec.js +2 -2
- package/src/generators/application/lib/update-component-spec.js.map +1 -1
- package/src/generators/application/lib/update-component-styles.js +2 -2
- package/src/generators/application/lib/update-component-styles.js.map +1 -1
- package/src/generators/application/lib/update-component-template.js +2 -2
- package/src/generators/application/lib/update-component-template.js.map +1 -1
- package/src/generators/application/lib/update-config-files.js +13 -11
- package/src/generators/application/lib/update-config-files.js.map +1 -1
- package/src/generators/application/lib/update-e2e-project.js +7 -7
- package/src/generators/application/lib/update-e2e-project.js.map +1 -1
- package/src/generators/application/lib/update-editor-tsconfig.js +1 -1
- package/src/generators/application/lib/update-editor-tsconfig.js.map +1 -1
- package/src/generators/component-cypress-spec/compat.js +1 -1
- package/src/generators/component-cypress-spec/compat.js.map +1 -1
- package/src/generators/component-cypress-spec/component-cypress-spec.js +9 -9
- package/src/generators/component-cypress-spec/component-cypress-spec.js.map +1 -1
- package/src/generators/component-cypress-spec/lib/get-component-selector.js +3 -3
- package/src/generators/component-cypress-spec/lib/get-component-selector.js.map +1 -1
- package/src/generators/component-story/compat.js +1 -1
- package/src/generators/component-story/compat.js.map +1 -1
- package/src/generators/component-story/component-story.js +5 -5
- package/src/generators/component-story/component-story.js.map +1 -1
- package/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.js +8 -8
- package/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.js.map +1 -1
- package/src/generators/downgrade-module/compat.js +1 -1
- package/src/generators/downgrade-module/compat.js.map +1 -1
- package/src/generators/downgrade-module/downgrade-module.js +7 -7
- package/src/generators/downgrade-module/downgrade-module.js.map +1 -1
- package/src/generators/downgrade-module/lib/add-entry-components-to-module.js +2 -2
- package/src/generators/downgrade-module/lib/add-entry-components-to-module.js.map +1 -1
- package/src/generators/downgrade-module/lib/index.js +4 -4
- package/src/generators/downgrade-module/lib/index.js.map +1 -1
- package/src/generators/downgrade-module/lib/update-main.js +2 -2
- package/src/generators/downgrade-module/lib/update-main.js.map +1 -1
- package/src/generators/downgrade-module/lib/update-module-bootstrap.js +3 -3
- package/src/generators/downgrade-module/lib/update-module-bootstrap.js.map +1 -1
- package/src/generators/init/init.compat.js +1 -1
- package/src/generators/init/init.compat.js.map +1 -1
- package/src/generators/init/init.d.ts +1 -1
- package/src/generators/init/init.js +25 -13
- package/src/generators/init/init.js.map +1 -1
- package/src/generators/karma/compat.js +1 -1
- package/src/generators/karma/compat.js.map +1 -1
- package/src/generators/karma/karma.js +3 -3
- package/src/generators/karma/karma.js.map +1 -1
- package/src/generators/karma-project/compat.js +1 -1
- package/src/generators/karma-project/compat.js.map +1 -1
- package/src/generators/karma-project/karma-project.js +6 -6
- package/src/generators/karma-project/karma-project.js.map +1 -1
- package/src/generators/karma-project/lib/check-test-target.js +1 -1
- package/src/generators/karma-project/lib/check-test-target.js.map +1 -1
- package/src/generators/karma-project/lib/generate-karma-project-files.js +3 -3
- package/src/generators/karma-project/lib/generate-karma-project-files.js.map +1 -1
- package/src/generators/karma-project/lib/update-tsconfig.js +3 -3
- package/src/generators/karma-project/lib/update-tsconfig.js.map +1 -1
- package/src/generators/karma-project/lib/update-workspace-config.js +7 -7
- package/src/generators/karma-project/lib/update-workspace-config.js.map +1 -1
- package/src/generators/library/lib/add-children.js +4 -4
- package/src/generators/library/lib/add-children.js.map +1 -1
- package/src/generators/library/lib/add-lazy-loaded-router-configuration.js +2 -2
- package/src/generators/library/lib/add-lazy-loaded-router-configuration.js.map +1 -1
- package/src/generators/library/lib/add-load-children.js +3 -3
- package/src/generators/library/lib/add-load-children.js.map +1 -1
- package/src/generators/library/lib/add-module.js +4 -4
- package/src/generators/library/lib/add-module.js.map +1 -1
- package/src/generators/library/lib/add-router-configuration.js +4 -4
- package/src/generators/library/lib/add-router-configuration.js.map +1 -1
- package/src/generators/library/lib/enable-strict-type-checking.js +3 -3
- package/src/generators/library/lib/enable-strict-type-checking.js.map +1 -1
- package/src/generators/library/lib/normalize-options.js +6 -6
- package/src/generators/library/lib/normalize-options.js.map +1 -1
- package/src/generators/library/lib/update-lib-package-npm-scope.js +1 -1
- package/src/generators/library/lib/update-lib-package-npm-scope.js.map +1 -1
- package/src/generators/library/lib/update-ng-package.js +3 -3
- package/src/generators/library/lib/update-ng-package.js.map +1 -1
- package/src/generators/library/lib/update-project.js +10 -10
- package/src/generators/library/lib/update-project.js.map +1 -1
- package/src/generators/library/lib/update-tsconfig.js +11 -8
- package/src/generators/library/lib/update-tsconfig.js.map +1 -1
- package/src/generators/library/library.compat.js +1 -1
- package/src/generators/library/library.compat.js.map +1 -1
- package/src/generators/library/library.js +20 -23
- package/src/generators/library/library.js.map +1 -1
- package/src/generators/library/schema.d.ts +0 -2
- package/src/generators/library/schema.json +0 -5
- package/src/generators/library-secondary-entry-point/compat.js +1 -1
- package/src/generators/library-secondary-entry-point/compat.js.map +1 -1
- package/src/generators/library-secondary-entry-point/lib/add-files.js +3 -3
- package/src/generators/library-secondary-entry-point/lib/add-files.js.map +1 -1
- package/src/generators/library-secondary-entry-point/lib/add-path-mapping.js +1 -1
- package/src/generators/library-secondary-entry-point/lib/add-path-mapping.js.map +1 -1
- package/src/generators/library-secondary-entry-point/lib/index.js +4 -4
- package/src/generators/library-secondary-entry-point/lib/index.js.map +1 -1
- package/src/generators/library-secondary-entry-point/lib/normalize-options.js +4 -4
- package/src/generators/library-secondary-entry-point/lib/normalize-options.js.map +1 -1
- package/src/generators/library-secondary-entry-point/lib/update-linting-file-patterns.js +1 -1
- package/src/generators/library-secondary-entry-point/lib/update-linting-file-patterns.js.map +1 -1
- package/src/generators/library-secondary-entry-point/library-secondary-entry-point.js +6 -6
- package/src/generators/library-secondary-entry-point/library-secondary-entry-point.js.map +1 -1
- package/src/generators/move/lib/update-module-name.js +7 -7
- package/src/generators/move/lib/update-module-name.js.map +1 -1
- package/src/generators/move/lib/update-ng-package.js +4 -4
- package/src/generators/move/lib/update-ng-package.js.map +1 -1
- package/src/generators/move/move.js +6 -6
- package/src/generators/move/move.js.map +1 -1
- package/src/generators/ngrx/compat.js +1 -1
- package/src/generators/ngrx/compat.js.map +1 -1
- package/src/generators/ngrx/files/classes-syntax/__directory__/__fileName__.effects.spec.ts__tmpl__ +1 -1
- package/src/generators/ngrx/files/creator-syntax/__directory__/__fileName__.effects.spec.ts__tmpl__ +1 -1
- package/src/generators/ngrx/lib/add-exports-barrel.js +9 -9
- package/src/generators/ngrx/lib/add-exports-barrel.js.map +1 -1
- package/src/generators/ngrx/lib/add-imports-to-module.js +21 -21
- package/src/generators/ngrx/lib/add-imports-to-module.js.map +1 -1
- package/src/generators/ngrx/lib/add-ngrx-to-package-json.js +12 -1
- package/src/generators/ngrx/lib/add-ngrx-to-package-json.js.map +1 -1
- package/src/generators/ngrx/lib/generate-files.js +5 -5
- package/src/generators/ngrx/lib/generate-files.js.map +1 -1
- package/src/generators/ngrx/lib/normalize-options.js +1 -1
- package/src/generators/ngrx/lib/normalize-options.js.map +1 -1
- package/src/generators/ngrx/ngrx.js +7 -7
- package/src/generators/ngrx/ngrx.js.map +1 -1
- package/src/generators/setup-mfe/lib/add-entry-module.js +2 -2
- package/src/generators/setup-mfe/lib/add-entry-module.js.map +1 -1
- package/src/generators/setup-mfe/lib/add-implicit-deps.js +2 -2
- package/src/generators/setup-mfe/lib/add-implicit-deps.js.map +1 -1
- package/src/generators/setup-mfe/lib/add-remote-to-host.js +5 -5
- package/src/generators/setup-mfe/lib/add-remote-to-host.js.map +1 -1
- package/src/generators/setup-mfe/lib/change-build-target.js +2 -2
- package/src/generators/setup-mfe/lib/change-build-target.js.map +1 -1
- package/src/generators/setup-mfe/lib/fix-bootstrap.js +2 -2
- package/src/generators/setup-mfe/lib/fix-bootstrap.js.map +1 -1
- package/src/generators/setup-mfe/lib/generate-config.js +2 -2
- package/src/generators/setup-mfe/lib/generate-config.js.map +1 -1
- package/src/generators/setup-mfe/lib/get-remotes-with-ports.js +1 -1
- package/src/generators/setup-mfe/lib/get-remotes-with-ports.js.map +1 -1
- package/src/generators/setup-mfe/lib/index.js +8 -8
- package/src/generators/setup-mfe/lib/index.js.map +1 -1
- package/src/generators/setup-mfe/lib/setup-serve-target.js +4 -4
- package/src/generators/setup-mfe/lib/setup-serve-target.js.map +1 -1
- package/src/generators/setup-mfe/setup-mfe.compat.js +1 -1
- package/src/generators/setup-mfe/setup-mfe.compat.js.map +1 -1
- package/src/generators/setup-mfe/setup-mfe.js +12 -12
- package/src/generators/setup-mfe/setup-mfe.js.map +1 -1
- package/src/generators/stories/compat.js +1 -1
- package/src/generators/stories/compat.js.map +1 -1
- package/src/generators/stories/lib/component-info.js +7 -7
- package/src/generators/stories/lib/component-info.js.map +1 -1
- package/src/generators/stories/lib/get-e2e-project.js +1 -1
- package/src/generators/stories/lib/get-e2e-project.js.map +1 -1
- package/src/generators/stories/lib/module-info.js +46 -10
- package/src/generators/stories/lib/module-info.js.map +1 -1
- package/src/generators/stories/lib/tree-utilities.js +2 -2
- package/src/generators/stories/lib/tree-utilities.js.map +1 -1
- package/src/generators/stories/stories.js +6 -6
- package/src/generators/stories/stories.js.map +1 -1
- package/src/generators/storybook-configuration/compat.js +1 -1
- package/src/generators/storybook-configuration/compat.js.map +1 -1
- package/src/generators/storybook-configuration/lib/assert-compatible-storybook-version.js +1 -1
- package/src/generators/storybook-configuration/lib/assert-compatible-storybook-version.js.map +1 -1
- package/src/generators/storybook-configuration/lib/generate-stories.js +3 -3
- package/src/generators/storybook-configuration/lib/generate-stories.js.map +1 -1
- package/src/generators/storybook-configuration/lib/generate-storybook-configuration.js +2 -2
- package/src/generators/storybook-configuration/lib/generate-storybook-configuration.js.map +1 -1
- package/src/generators/storybook-configuration/storybook-configuration.js +5 -5
- package/src/generators/storybook-configuration/storybook-configuration.js.map +1 -1
- package/src/generators/storybook-migrate-defaults-5-to-6/compat.js +1 -1
- package/src/generators/storybook-migrate-defaults-5-to-6/compat.js.map +1 -1
- package/src/generators/storybook-migrate-defaults-5-to-6/storybook-migrate-defaults-5-to-6.js +1 -1
- package/src/generators/storybook-migrate-defaults-5-to-6/storybook-migrate-defaults-5-to-6.js.map +1 -1
- package/src/generators/storybook-migrate-stories-to-6-2/compat.js +1 -1
- package/src/generators/storybook-migrate-stories-to-6-2/compat.js.map +1 -1
- package/src/generators/storybook-migrate-stories-to-6-2/migrate-stories-to-6-2.js +2 -2
- package/src/generators/storybook-migrate-stories-to-6-2/migrate-stories-to-6-2.js.map +1 -1
- package/src/generators/upgrade-module/compat.js +1 -1
- package/src/generators/upgrade-module/compat.js.map +1 -1
- package/src/generators/upgrade-module/lib/add-imports-to-module.js +7 -7
- package/src/generators/upgrade-module/lib/add-imports-to-module.js.map +1 -1
- package/src/generators/upgrade-module/lib/create-files.js +3 -3
- package/src/generators/upgrade-module/lib/create-files.js.map +1 -1
- package/src/generators/upgrade-module/lib/index.js +4 -4
- package/src/generators/upgrade-module/lib/index.js.map +1 -1
- package/src/generators/upgrade-module/lib/update-module-bootstrap.js +5 -5
- package/src/generators/upgrade-module/lib/update-module-bootstrap.js.map +1 -1
- package/src/generators/upgrade-module/upgrade-module.js +7 -7
- package/src/generators/upgrade-module/upgrade-module.js.map +1 -1
- package/src/generators/utils/index.d.ts +1 -0
- package/src/generators/utils/index.js +5 -0
- package/src/generators/utils/index.js.map +1 -0
- package/src/generators/utils/insert-ngmodule-import.js +15 -15
- package/src/generators/utils/insert-ngmodule-import.js.map +1 -1
- package/src/generators/utils/storybook.js +4 -4
- package/src/generators/utils/storybook.js.map +1 -1
- package/src/generators/utils/testing.js +44 -6
- package/src/generators/utils/testing.js.map +1 -1
- package/src/generators/utils/upgrade.js +2 -2
- package/src/generators/utils/upgrade.js.map +1 -1
- package/src/generators/web-worker/compat.js +1 -1
- package/src/generators/web-worker/compat.js.map +1 -1
- package/src/generators/web-worker/lib/index.js +2 -2
- package/src/generators/web-worker/lib/index.js.map +1 -1
- package/src/generators/web-worker/lib/update-tsconfig.js +4 -4
- package/src/generators/web-worker/lib/update-tsconfig.js.map +1 -1
- package/src/generators/web-worker/web-worker.js +6 -6
- package/src/generators/web-worker/web-worker.js.map +1 -1
- package/src/migrations/update-10-0-0/update-10-0-0.js +5 -5
- package/src/migrations/update-10-0-0/update-10-0-0.js.map +1 -1
- package/src/migrations/update-10-2-0/update-10-2-0.js +4 -4
- package/src/migrations/update-10-2-0/update-10-2-0.js.map +1 -1
- package/src/migrations/update-10-3-0/update-10-3-0.js +15 -15
- package/src/migrations/update-10-3-0/update-10-3-0.js.map +1 -1
- package/src/migrations/update-10-4-0/update-10-4-0.js +9 -9
- package/src/migrations/update-10-4-0/update-10-4-0.js.map +1 -1
- package/src/migrations/update-10-5-0/add-template-support-and-presets-to-eslint.js +11 -11
- package/src/migrations/update-10-5-0/add-template-support-and-presets-to-eslint.js.map +1 -1
- package/src/migrations/update-11-0-0/update-builders-config.js +5 -5
- package/src/migrations/update-11-0-0/update-builders-config.js.map +1 -1
- package/src/migrations/update-12-0-0/update-ngcc-postinstall.js +2 -2
- package/src/migrations/update-12-0-0/update-ngcc-postinstall.js.map +1 -1
- package/src/migrations/update-12-3-0/convert-webpack-browser-build-target-to-delegate-build.js +10 -10
- package/src/migrations/update-12-3-0/convert-webpack-browser-build-target-to-delegate-build.js.map +1 -1
- package/src/migrations/update-12-3-0/update-angular-eslint-rules.js +5 -5
- package/src/migrations/update-12-3-0/update-angular-eslint-rules.js.map +1 -1
- package/src/migrations/update-12-3-0/update-storybook.js +8 -8
- package/src/migrations/update-12-3-0/update-storybook.js.map +1 -1
- package/src/migrations/update-12-3-0/update-webpack-browser-config.js +4 -4
- package/src/migrations/update-12-3-0/update-webpack-browser-config.js.map +1 -1
- package/src/migrations/update-12-9-0/update-invalid-import-paths.js +12 -12
- package/src/migrations/update-12-9-0/update-invalid-import-paths.js.map +1 -1
- package/src/migrations/update-13-0-0/add-postcss-packages.js +4 -4
- package/src/migrations/update-13-0-0/add-postcss-packages.js.map +1 -1
- package/src/migrations/update-13-2-0/update-angular-config.d.ts +2 -0
- package/src/migrations/update-13-2-0/update-angular-config.js +21 -0
- package/src/migrations/update-13-2-0/update-angular-config.js.map +1 -0
- package/src/migrations/update-13-2-0/update-angular-jest-config.d.ts +3 -0
- package/src/migrations/update-13-2-0/update-angular-jest-config.js +65 -0
- package/src/migrations/update-13-2-0/update-angular-jest-config.js.map +1 -0
- package/src/migrations/update-13-2-0/update-libraries.d.ts +2 -0
- package/src/migrations/update-13-2-0/update-libraries.js +59 -0
- package/src/migrations/update-13-2-0/update-libraries.js.map +1 -0
- package/src/migrations/update-13-2-0/update-testing-imports.d.ts +2 -0
- package/src/migrations/update-13-2-0/update-testing-imports.js +95 -0
- package/src/migrations/update-13-2-0/update-testing-imports.js.map +1 -0
- package/src/migrations/update-8-12-0/change-angular-lib-builder.js +3 -3
- package/src/migrations/update-8-12-0/change-angular-lib-builder.js.map +1 -1
- package/src/migrations/update-8-3-0/upgrade-ngrx-8-0.js +11 -11
- package/src/migrations/update-8-3-0/upgrade-ngrx-8-0.js.map +1 -1
- package/src/migrations/update-8-5-0/upgrade-cli-8-3.js +13 -13
- package/src/migrations/update-8-5-0/upgrade-cli-8-3.js.map +1 -1
- package/src/migrations/update-9-0-0/add-postinstall.js +3 -3
- package/src/migrations/update-9-0-0/add-postinstall.js.map +1 -1
- package/src/migrations/update-9-0-0/update-9-0-0.js +5 -5
- package/src/migrations/update-9-0-0/update-9-0-0.js.map +1 -1
- package/src/runtime/nx/data-persistence.js +20 -20
- package/src/runtime/nx/data-persistence.js.map +1 -1
- package/src/runtime/nx/nx.module.js +2 -2
- package/src/runtime/nx/nx.module.js.map +1 -1
- package/src/utils/nx-devkit/ast-utils.js +13 -13
- package/src/utils/nx-devkit/ast-utils.js.map +1 -1
- package/src/utils/nx-devkit/testing.js +2 -2
- package/src/utils/nx-devkit/testing.js.map +1 -1
- package/src/utils/testing.js +6 -6
- package/src/utils/testing.js.map +1 -1
- package/src/utils/versions.d.ts +6 -7
- package/src/utils/versions.js +8 -9
- package/src/utils/versions.js.map +1 -1
- package/tailwind.js +1 -1
- package/tailwind.js.map +1 -1
- package/testing/index.d.ts +17 -1
- package/testing/index.js +17 -5
- package/testing/index.js.map +1 -1
- package/testing/nrwl-angular-testing.d.ts +1 -0
- package/testing/package.json +7 -6
- package/testing/src/testing-utils.js +2 -2
- package/testing/src/testing-utils.js.map +1 -1
- package/bundles/nrwl-angular-testing.umd.js +0 -72
- package/bundles/nrwl-angular-testing.umd.js.map +0 -1
- package/bundles/nrwl-angular.umd.js +0 -690
- package/bundles/nrwl-angular.umd.js.map +0 -1
- package/esm2015/src/runtime/nx/data-persistence.js +0 -327
- package/esm2015/src/runtime/nx/nx.module.js +0 -16
- package/esm2015/testing/index.js +0 -3
- package/fesm2015/nrwl-angular-testing.js.map +0 -1
- package/fesm2015/nrwl-angular.js.map +0 -1
- package/nrwl-angular.metadata.json +0 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/init-tsconfig.d.ts +0 -10
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/init-tsconfig.js +0 -28
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/init-tsconfig.js.map +0 -1
- package/src/executors/package/ng-packagr-adjustments/ivy/styles/stylesheet-processor.d.ts +0 -30
- package/src/executors/package/ng-packagr-adjustments/ivy/styles/stylesheet-processor.js +0 -189
- package/src/executors/package/ng-packagr-adjustments/ivy/styles/stylesheet-processor.js.map +0 -1
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor-worker.d.ts +0 -9
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor-worker.js +0 -178
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor-worker.js.map +0 -1
- package/testing/nrwl-angular-testing.metadata.json +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nrwl-angular.umd.js","sources":["../../../../node_modules/tslib/tslib.es6.js","../../src/runtime/nx/data-persistence.ts","../../src/runtime/nx/nx.module.ts","../../nrwl-angular.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable, Type } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { ROUTER_NAVIGATION, RouterNavigationAction } from '@ngrx/router-store';\nimport { Action, Store, ActionCreator } from '@ngrx/store';\nimport { isObservable, Observable, of } from 'rxjs';\nimport {\n catchError,\n concatMap,\n filter,\n groupBy,\n map,\n mergeMap,\n switchMap,\n withLatestFrom,\n} from 'rxjs/operators';\n\n/**\n * See {@link DataPersistence.pessimisticUpdate} for more information.\n */\nexport interface PessimisticUpdateOpts<T, A> {\n run(a: A, state?: T): Observable<Action> | Action | void;\n onError(a: A, e: any): Observable<any> | any;\n}\n/**\n * See {@link DataPersistence.pessimisticUpdate} for more information.\n */\nexport interface OptimisticUpdateOpts<T, A> {\n run(a: A, state?: T): Observable<Action> | Action | void;\n undoAction(a: A, e: any): Observable<Action> | Action;\n}\n\n/**\n * See {@link DataPersistence.fetch} for more information.\n */\nexport interface FetchOpts<T, A> {\n id?(a: A, state?: T): any;\n run(a: A, state?: T): Observable<Action> | Action | void;\n onError?(a: A, e: any): Observable<any> | any;\n}\n\n/**\n * See {@link DataPersistence.navigation} for more information.\n */\nexport interface HandleNavigationOpts<T> {\n run(a: ActivatedRouteSnapshot, state?: T): Observable<Action> | Action | void;\n onError?(a: ActivatedRouteSnapshot, e: any): Observable<any> | any;\n}\n\nexport type ActionOrActionWithState<T, A> = A | [A, T];\nexport type ActionStateStream<T, A> = Observable<ActionOrActionWithState<T, A>>;\n\nexport function pessimisticUpdate<T, A extends Action>(\n opts: PessimisticUpdateOpts<T, A>\n) {\n return (source: ActionStateStream<T, A>): Observable<Action> => {\n return source.pipe(\n mapActionAndState(),\n concatMap(runWithErrorHandling(opts.run, opts.onError))\n );\n };\n}\n\nexport function optimisticUpdate<T, A extends Action>(\n opts: OptimisticUpdateOpts<T, A>\n) {\n return (source: ActionStateStream<T, A>): Observable<Action> => {\n return source.pipe(\n mapActionAndState(),\n concatMap(runWithErrorHandling(opts.run, opts.undoAction))\n );\n };\n}\n\nexport function fetch<T, A extends Action>(opts: FetchOpts<T, A>) {\n return (source: ActionStateStream<T, A>): Observable<Action> => {\n if (opts.id) {\n const groupedFetches = source.pipe(\n mapActionAndState(),\n groupBy(([action, store]) => {\n return opts.id(action, store);\n })\n );\n\n return groupedFetches.pipe(\n mergeMap((pairs) =>\n pairs.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)))\n )\n );\n }\n\n return source.pipe(\n mapActionAndState(),\n concatMap(runWithErrorHandling(opts.run, opts.onError))\n );\n };\n}\n\nexport function navigation<T, A extends Action>(\n component: Type<any>,\n opts: HandleNavigationOpts<T>\n) {\n return (source: ActionStateStream<T, A>) => {\n const nav = source.pipe(\n mapActionAndState(),\n filter(([action, state]) => isStateSnapshot(action)),\n map(([action, state]) => {\n if (!isStateSnapshot(action)) {\n // Because of the above filter we'll never get here,\n // but this properly type narrows `action`\n return;\n }\n\n return [\n findSnapshot(component, action.payload.routerState.root),\n state,\n ] as [ActivatedRouteSnapshot, T];\n }),\n filter(([snapshot, state]) => !!snapshot)\n );\n\n return nav.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)));\n };\n}\n\nfunction isStateSnapshot(\n action: any\n): action is RouterNavigationAction<RouterStateSnapshot> {\n return action.type === ROUTER_NAVIGATION;\n}\n\nfunction runWithErrorHandling<T, A, R>(\n run: (a: A, state?: T) => Observable<R> | R | void,\n onError: any\n) {\n return ([action, state]: [A, T]): Observable<R> => {\n try {\n const r = wrapIntoObservable(run(action, state));\n return r.pipe(catchError((e) => wrapIntoObservable(onError(action, e))));\n } catch (e) {\n return wrapIntoObservable(onError(action, e));\n }\n };\n}\n\n/**\n * @whatItDoes maps Observable<Action | [Action, State]> to\n * Observable<[Action, State]>\n */\nfunction mapActionAndState<T, A>() {\n return (source: Observable<ActionOrActionWithState<T, A>>) => {\n return source.pipe(\n map((value) => {\n const [action, store] = normalizeActionAndState(value);\n return [action, store] as [A, T];\n })\n );\n };\n}\n\n/**\n * @whatItDoes Normalizes either a bare action or an array of action and state\n * into an array of action and state (or undefined)\n */\nfunction normalizeActionAndState<T, A>(\n args: ActionOrActionWithState<T, A>\n): [A, T] {\n let action: A, state: T;\n\n if (args instanceof Array) {\n [action, state] = args;\n } else {\n action = args;\n }\n\n return [action, state];\n}\n\n/**\n * @whatItDoes Provides convenience methods for implementing common operations of persisting data.\n */\n@Injectable()\nexport class DataPersistence<T> {\n constructor(public store: Store<T>, public actions: Actions) {}\n\n /**\n *\n * @whatItDoes Handles pessimistic updates (updating the server first).\n *\n * Update the server implemented naively suffers from race conditions and poor error handling.\n *\n * `pessimisticUpdate` addresses these problems--it runs all fetches in order, which removes race conditions\n * and forces the developer to handle errors.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() updateTodo = this.s.pessimisticUpdate<UpdateTodo>('UPDATE_TODO', {\n * // provides an action and the current state of the store\n * run(a, state) {\n * // update the backend first, and then dispatch an action that will\n * // update the client side\n * return this.backend(state.user, a.payload).map(updated => ({\n * type: 'TODO_UPDATED',\n * payload: updated\n * }));\n * },\n *\n * onError(a, e: any) {\n * // we don't need to undo the changes on the client side.\n * // we can dispatch an error, or simply log the error here and return `null`\n * return null;\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * Note that if you don't return a new action from the run callback, you must set the dispatch property\n * of the effect to false, like this:\n *\n * ```\n * class TodoEffects {\n * @Effect({dispatch: false})\n * updateTodo; //...\n * }\n * ```\n */\n pessimisticUpdate<A extends Action = Action>(\n actionType: string | ActionCreator,\n opts: PessimisticUpdateOpts<T, A>\n ): Observable<any> {\n return this.actions.pipe(\n ofType<A>(actionType),\n withLatestFrom(this.store),\n pessimisticUpdate(opts)\n );\n }\n\n /**\n *\n * @whatItDoes Handles optimistic updates (updating the client first).\n *\n * `optimisticUpdate` addresses these problems--it runs all fetches in order, which removes race conditions\n * and forces the developer to handle errors.\n *\n * `optimisticUpdate` is different from `pessimisticUpdate`. In case of a failure, when using `optimisticUpdate`,\n * the developer already updated the state locally, so the developer must provide an undo action.\n *\n * The error handling must be done in the callback, or by means of the undo action.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() updateTodo = this.s.optimisticUpdate<UpdateTodo>('UPDATE_TODO', {\n * // provides an action and the current state of the store\n * run: (a, state) => {\n * return this.backend(state.user, a.payload);\n * },\n *\n * undoAction: (a, e: any) => {\n * // dispatch an undo action to undo the changes in the client state\n * return ({\n * type: 'UNDO_UPDATE_TODO',\n * payload: a\n * });\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * Note that if you don't return a new action from the run callback, you must set the dispatch property\n * of the effect to false, like this:\n *\n * ```\n * class TodoEffects {\n * @Effect({dispatch: false})\n * updateTodo; //...\n * }\n * ```\n */\n optimisticUpdate<A extends Action = Action>(\n actionType: string | ActionCreator,\n opts: OptimisticUpdateOpts<T, A>\n ): Observable<any> {\n return this.actions.pipe(\n ofType<A>(actionType),\n withLatestFrom(this.store),\n optimisticUpdate(opts)\n );\n }\n\n /**\n *\n * @whatItDoes Handles data fetching.\n *\n * Data fetching implemented naively suffers from race conditions and poor error handling.\n *\n * `fetch` addresses these problems--it runs all fetches in order, which removes race conditions\n * and forces the developer to handle errors.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() loadTodos = this.s.fetch<GetTodos>('GET_TODOS', {\n * // provides an action and the current state of the store\n * run: (a, state) => {\n * return this.backend(state.user, a.payload).map(r => ({\n * type: 'TODOS',\n * payload: r\n * });\n * },\n *\n * onError: (a, e: any) => {\n * // dispatch an undo action to undo the changes in the client state\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * This is correct, but because it set the concurrency to 1, it may not be performant.\n *\n * To fix that, you can provide the `id` function, like this:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() loadTodo = this.s.fetch<GetTodo>('GET_TODO', {\n * id: (a, state) => {\n * return a.payload.id;\n * }\n *\n * // provides an action and the current state of the store\n * run: (a, state) => {\n * return this.backend(state.user, a.payload).map(r => ({\n * type: 'TODO',\n * payload: r\n * });\n * },\n *\n * onError: (a, e: any) => {\n * // dispatch an undo action to undo the changes in the client state\n * return null;\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * With this setup, the requests for Todo 1 will run concurrently with the requests for Todo 2.\n *\n * In addition, if DataPersistence notices that there are multiple requests for Todo 1 scheduled,\n * it will only run the last one.\n */\n fetch<A extends Action = Action>(\n actionType: string | ActionCreator,\n opts: FetchOpts<T, A>\n ): Observable<any> {\n return this.actions.pipe(\n ofType<A>(actionType),\n withLatestFrom(this.store),\n fetch(opts)\n );\n }\n\n /**\n * @whatItDoes Handles data fetching as part of router navigation.\n *\n * Data fetching implemented naively suffers from race conditions and poor error handling.\n *\n * `navigation` addresses these problems.\n *\n * It checks if an activated router state contains the passed in component type, and, if it does, runs the `run`\n * callback. It provides the activated snapshot associated with the component and the current state. And it only runs\n * the last request.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() loadTodo = this.s.navigation(TodoComponent, {\n * run: (a, state) => {\n * return this.backend.fetchTodo(a.params['id']).map(todo => ({\n * type: 'TODO_LOADED',\n * payload: todo\n * }));\n * },\n * onError: (a, e: any) => {\n * // we can log and error here and return null\n * // we can also navigate back\n * return null;\n * }\n * });\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n */\n navigation(\n component: Type<any>,\n opts: HandleNavigationOpts<T>\n ): Observable<any> {\n return this.actions.pipe(\n withLatestFrom(this.store),\n navigation(component, opts)\n );\n }\n}\n\nfunction findSnapshot(\n component: Type<any>,\n s: ActivatedRouteSnapshot\n): ActivatedRouteSnapshot {\n if (s.routeConfig && s.routeConfig.component === component) {\n return s;\n }\n for (const c of s.children) {\n const ss = findSnapshot(component, c);\n if (ss) {\n return ss;\n }\n }\n return null;\n}\n\nfunction wrapIntoObservable<O>(obj: Observable<O> | O | void): Observable<O> {\n if (isObservable(obj)) {\n return obj;\n } else if (!obj) {\n return of();\n } else {\n return of(obj as O);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DataPersistence } from './data-persistence';\n\n/**\n * @whatItDoes Provides services for enterprise Angular applications.\n *\n * See {@link DataPersistence} for more information.\n */\n@NgModule({})\nexport class NxModule {\n static forRoot(): ModuleWithProviders<NxModule> {\n return { ngModule: NxModule, providers: [DataPersistence] };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["concatMap","groupBy","mergeMap","switchMap","filter","map","ROUTER_NAVIGATION","catchError","ofType","withLatestFrom","Injectable","Store","Actions","isObservable","of","NgModule"],"mappings":"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"}
|
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Actions, ofType } from '@ngrx/effects';
|
|
3
|
-
import { ROUTER_NAVIGATION } from '@ngrx/router-store';
|
|
4
|
-
import { Store } from '@ngrx/store';
|
|
5
|
-
import { isObservable, of } from 'rxjs';
|
|
6
|
-
import { catchError, concatMap, filter, groupBy, map, mergeMap, switchMap, withLatestFrom, } from 'rxjs/operators';
|
|
7
|
-
export function pessimisticUpdate(opts) {
|
|
8
|
-
return (source) => {
|
|
9
|
-
return source.pipe(mapActionAndState(), concatMap(runWithErrorHandling(opts.run, opts.onError)));
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export function optimisticUpdate(opts) {
|
|
13
|
-
return (source) => {
|
|
14
|
-
return source.pipe(mapActionAndState(), concatMap(runWithErrorHandling(opts.run, opts.undoAction)));
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export function fetch(opts) {
|
|
18
|
-
return (source) => {
|
|
19
|
-
if (opts.id) {
|
|
20
|
-
const groupedFetches = source.pipe(mapActionAndState(), groupBy(([action, store]) => {
|
|
21
|
-
return opts.id(action, store);
|
|
22
|
-
}));
|
|
23
|
-
return groupedFetches.pipe(mergeMap((pairs) => pairs.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)))));
|
|
24
|
-
}
|
|
25
|
-
return source.pipe(mapActionAndState(), concatMap(runWithErrorHandling(opts.run, opts.onError)));
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
export function navigation(component, opts) {
|
|
29
|
-
return (source) => {
|
|
30
|
-
const nav = source.pipe(mapActionAndState(), filter(([action, state]) => isStateSnapshot(action)), map(([action, state]) => {
|
|
31
|
-
if (!isStateSnapshot(action)) {
|
|
32
|
-
// Because of the above filter we'll never get here,
|
|
33
|
-
// but this properly type narrows `action`
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
return [
|
|
37
|
-
findSnapshot(component, action.payload.routerState.root),
|
|
38
|
-
state,
|
|
39
|
-
];
|
|
40
|
-
}), filter(([snapshot, state]) => !!snapshot));
|
|
41
|
-
return nav.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)));
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function isStateSnapshot(action) {
|
|
45
|
-
return action.type === ROUTER_NAVIGATION;
|
|
46
|
-
}
|
|
47
|
-
function runWithErrorHandling(run, onError) {
|
|
48
|
-
return ([action, state]) => {
|
|
49
|
-
try {
|
|
50
|
-
const r = wrapIntoObservable(run(action, state));
|
|
51
|
-
return r.pipe(catchError((e) => wrapIntoObservable(onError(action, e))));
|
|
52
|
-
}
|
|
53
|
-
catch (e) {
|
|
54
|
-
return wrapIntoObservable(onError(action, e));
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* @whatItDoes maps Observable<Action | [Action, State]> to
|
|
60
|
-
* Observable<[Action, State]>
|
|
61
|
-
*/
|
|
62
|
-
function mapActionAndState() {
|
|
63
|
-
return (source) => {
|
|
64
|
-
return source.pipe(map((value) => {
|
|
65
|
-
const [action, store] = normalizeActionAndState(value);
|
|
66
|
-
return [action, store];
|
|
67
|
-
}));
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* @whatItDoes Normalizes either a bare action or an array of action and state
|
|
72
|
-
* into an array of action and state (or undefined)
|
|
73
|
-
*/
|
|
74
|
-
function normalizeActionAndState(args) {
|
|
75
|
-
let action, state;
|
|
76
|
-
if (args instanceof Array) {
|
|
77
|
-
[action, state] = args;
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
action = args;
|
|
81
|
-
}
|
|
82
|
-
return [action, state];
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* @whatItDoes Provides convenience methods for implementing common operations of persisting data.
|
|
86
|
-
*/
|
|
87
|
-
export class DataPersistence {
|
|
88
|
-
constructor(store, actions) {
|
|
89
|
-
this.store = store;
|
|
90
|
-
this.actions = actions;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
*
|
|
94
|
-
* @whatItDoes Handles pessimistic updates (updating the server first).
|
|
95
|
-
*
|
|
96
|
-
* Update the server implemented naively suffers from race conditions and poor error handling.
|
|
97
|
-
*
|
|
98
|
-
* `pessimisticUpdate` addresses these problems--it runs all fetches in order, which removes race conditions
|
|
99
|
-
* and forces the developer to handle errors.
|
|
100
|
-
*
|
|
101
|
-
* ## Example:
|
|
102
|
-
*
|
|
103
|
-
* ```typescript
|
|
104
|
-
* @Injectable()
|
|
105
|
-
* class TodoEffects {
|
|
106
|
-
* @Effect() updateTodo = this.s.pessimisticUpdate<UpdateTodo>('UPDATE_TODO', {
|
|
107
|
-
* // provides an action and the current state of the store
|
|
108
|
-
* run(a, state) {
|
|
109
|
-
* // update the backend first, and then dispatch an action that will
|
|
110
|
-
* // update the client side
|
|
111
|
-
* return this.backend(state.user, a.payload).map(updated => ({
|
|
112
|
-
* type: 'TODO_UPDATED',
|
|
113
|
-
* payload: updated
|
|
114
|
-
* }));
|
|
115
|
-
* },
|
|
116
|
-
*
|
|
117
|
-
* onError(a, e: any) {
|
|
118
|
-
* // we don't need to undo the changes on the client side.
|
|
119
|
-
* // we can dispatch an error, or simply log the error here and return `null`
|
|
120
|
-
* return null;
|
|
121
|
-
* }
|
|
122
|
-
* });
|
|
123
|
-
*
|
|
124
|
-
* constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}
|
|
125
|
-
* }
|
|
126
|
-
* ```
|
|
127
|
-
*
|
|
128
|
-
* Note that if you don't return a new action from the run callback, you must set the dispatch property
|
|
129
|
-
* of the effect to false, like this:
|
|
130
|
-
*
|
|
131
|
-
* ```
|
|
132
|
-
* class TodoEffects {
|
|
133
|
-
* @Effect({dispatch: false})
|
|
134
|
-
* updateTodo; //...
|
|
135
|
-
* }
|
|
136
|
-
* ```
|
|
137
|
-
*/
|
|
138
|
-
pessimisticUpdate(actionType, opts) {
|
|
139
|
-
return this.actions.pipe(ofType(actionType), withLatestFrom(this.store), pessimisticUpdate(opts));
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
*
|
|
143
|
-
* @whatItDoes Handles optimistic updates (updating the client first).
|
|
144
|
-
*
|
|
145
|
-
* `optimisticUpdate` addresses these problems--it runs all fetches in order, which removes race conditions
|
|
146
|
-
* and forces the developer to handle errors.
|
|
147
|
-
*
|
|
148
|
-
* `optimisticUpdate` is different from `pessimisticUpdate`. In case of a failure, when using `optimisticUpdate`,
|
|
149
|
-
* the developer already updated the state locally, so the developer must provide an undo action.
|
|
150
|
-
*
|
|
151
|
-
* The error handling must be done in the callback, or by means of the undo action.
|
|
152
|
-
*
|
|
153
|
-
* ## Example:
|
|
154
|
-
*
|
|
155
|
-
* ```typescript
|
|
156
|
-
* @Injectable()
|
|
157
|
-
* class TodoEffects {
|
|
158
|
-
* @Effect() updateTodo = this.s.optimisticUpdate<UpdateTodo>('UPDATE_TODO', {
|
|
159
|
-
* // provides an action and the current state of the store
|
|
160
|
-
* run: (a, state) => {
|
|
161
|
-
* return this.backend(state.user, a.payload);
|
|
162
|
-
* },
|
|
163
|
-
*
|
|
164
|
-
* undoAction: (a, e: any) => {
|
|
165
|
-
* // dispatch an undo action to undo the changes in the client state
|
|
166
|
-
* return ({
|
|
167
|
-
* type: 'UNDO_UPDATE_TODO',
|
|
168
|
-
* payload: a
|
|
169
|
-
* });
|
|
170
|
-
* }
|
|
171
|
-
* });
|
|
172
|
-
*
|
|
173
|
-
* constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}
|
|
174
|
-
* }
|
|
175
|
-
* ```
|
|
176
|
-
*
|
|
177
|
-
* Note that if you don't return a new action from the run callback, you must set the dispatch property
|
|
178
|
-
* of the effect to false, like this:
|
|
179
|
-
*
|
|
180
|
-
* ```
|
|
181
|
-
* class TodoEffects {
|
|
182
|
-
* @Effect({dispatch: false})
|
|
183
|
-
* updateTodo; //...
|
|
184
|
-
* }
|
|
185
|
-
* ```
|
|
186
|
-
*/
|
|
187
|
-
optimisticUpdate(actionType, opts) {
|
|
188
|
-
return this.actions.pipe(ofType(actionType), withLatestFrom(this.store), optimisticUpdate(opts));
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
*
|
|
192
|
-
* @whatItDoes Handles data fetching.
|
|
193
|
-
*
|
|
194
|
-
* Data fetching implemented naively suffers from race conditions and poor error handling.
|
|
195
|
-
*
|
|
196
|
-
* `fetch` addresses these problems--it runs all fetches in order, which removes race conditions
|
|
197
|
-
* and forces the developer to handle errors.
|
|
198
|
-
*
|
|
199
|
-
* ## Example:
|
|
200
|
-
*
|
|
201
|
-
* ```typescript
|
|
202
|
-
* @Injectable()
|
|
203
|
-
* class TodoEffects {
|
|
204
|
-
* @Effect() loadTodos = this.s.fetch<GetTodos>('GET_TODOS', {
|
|
205
|
-
* // provides an action and the current state of the store
|
|
206
|
-
* run: (a, state) => {
|
|
207
|
-
* return this.backend(state.user, a.payload).map(r => ({
|
|
208
|
-
* type: 'TODOS',
|
|
209
|
-
* payload: r
|
|
210
|
-
* });
|
|
211
|
-
* },
|
|
212
|
-
*
|
|
213
|
-
* onError: (a, e: any) => {
|
|
214
|
-
* // dispatch an undo action to undo the changes in the client state
|
|
215
|
-
* }
|
|
216
|
-
* });
|
|
217
|
-
*
|
|
218
|
-
* constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}
|
|
219
|
-
* }
|
|
220
|
-
* ```
|
|
221
|
-
*
|
|
222
|
-
* This is correct, but because it set the concurrency to 1, it may not be performant.
|
|
223
|
-
*
|
|
224
|
-
* To fix that, you can provide the `id` function, like this:
|
|
225
|
-
*
|
|
226
|
-
* ```typescript
|
|
227
|
-
* @Injectable()
|
|
228
|
-
* class TodoEffects {
|
|
229
|
-
* @Effect() loadTodo = this.s.fetch<GetTodo>('GET_TODO', {
|
|
230
|
-
* id: (a, state) => {
|
|
231
|
-
* return a.payload.id;
|
|
232
|
-
* }
|
|
233
|
-
*
|
|
234
|
-
* // provides an action and the current state of the store
|
|
235
|
-
* run: (a, state) => {
|
|
236
|
-
* return this.backend(state.user, a.payload).map(r => ({
|
|
237
|
-
* type: 'TODO',
|
|
238
|
-
* payload: r
|
|
239
|
-
* });
|
|
240
|
-
* },
|
|
241
|
-
*
|
|
242
|
-
* onError: (a, e: any) => {
|
|
243
|
-
* // dispatch an undo action to undo the changes in the client state
|
|
244
|
-
* return null;
|
|
245
|
-
* }
|
|
246
|
-
* });
|
|
247
|
-
*
|
|
248
|
-
* constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}
|
|
249
|
-
* }
|
|
250
|
-
* ```
|
|
251
|
-
*
|
|
252
|
-
* With this setup, the requests for Todo 1 will run concurrently with the requests for Todo 2.
|
|
253
|
-
*
|
|
254
|
-
* In addition, if DataPersistence notices that there are multiple requests for Todo 1 scheduled,
|
|
255
|
-
* it will only run the last one.
|
|
256
|
-
*/
|
|
257
|
-
fetch(actionType, opts) {
|
|
258
|
-
return this.actions.pipe(ofType(actionType), withLatestFrom(this.store), fetch(opts));
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* @whatItDoes Handles data fetching as part of router navigation.
|
|
262
|
-
*
|
|
263
|
-
* Data fetching implemented naively suffers from race conditions and poor error handling.
|
|
264
|
-
*
|
|
265
|
-
* `navigation` addresses these problems.
|
|
266
|
-
*
|
|
267
|
-
* It checks if an activated router state contains the passed in component type, and, if it does, runs the `run`
|
|
268
|
-
* callback. It provides the activated snapshot associated with the component and the current state. And it only runs
|
|
269
|
-
* the last request.
|
|
270
|
-
*
|
|
271
|
-
* ## Example:
|
|
272
|
-
*
|
|
273
|
-
* ```typescript
|
|
274
|
-
* @Injectable()
|
|
275
|
-
* class TodoEffects {
|
|
276
|
-
* @Effect() loadTodo = this.s.navigation(TodoComponent, {
|
|
277
|
-
* run: (a, state) => {
|
|
278
|
-
* return this.backend.fetchTodo(a.params['id']).map(todo => ({
|
|
279
|
-
* type: 'TODO_LOADED',
|
|
280
|
-
* payload: todo
|
|
281
|
-
* }));
|
|
282
|
-
* },
|
|
283
|
-
* onError: (a, e: any) => {
|
|
284
|
-
* // we can log and error here and return null
|
|
285
|
-
* // we can also navigate back
|
|
286
|
-
* return null;
|
|
287
|
-
* }
|
|
288
|
-
* });
|
|
289
|
-
* constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}
|
|
290
|
-
* }
|
|
291
|
-
* ```
|
|
292
|
-
*/
|
|
293
|
-
navigation(component, opts) {
|
|
294
|
-
return this.actions.pipe(withLatestFrom(this.store), navigation(component, opts));
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
DataPersistence.decorators = [
|
|
298
|
-
{ type: Injectable }
|
|
299
|
-
];
|
|
300
|
-
DataPersistence.ctorParameters = () => [
|
|
301
|
-
{ type: Store },
|
|
302
|
-
{ type: Actions }
|
|
303
|
-
];
|
|
304
|
-
function findSnapshot(component, s) {
|
|
305
|
-
if (s.routeConfig && s.routeConfig.component === component) {
|
|
306
|
-
return s;
|
|
307
|
-
}
|
|
308
|
-
for (const c of s.children) {
|
|
309
|
-
const ss = findSnapshot(component, c);
|
|
310
|
-
if (ss) {
|
|
311
|
-
return ss;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
return null;
|
|
315
|
-
}
|
|
316
|
-
function wrapIntoObservable(obj) {
|
|
317
|
-
if (isObservable(obj)) {
|
|
318
|
-
return obj;
|
|
319
|
-
}
|
|
320
|
-
else if (!obj) {
|
|
321
|
-
return of();
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
return of(obj);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wZXJzaXN0ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ydW50aW1lL254L2RhdGEtcGVyc2lzdGVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFVLEtBQUssRUFBaUIsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sRUFDUCxHQUFHLEVBQ0gsUUFBUSxFQUNSLFNBQVMsRUFDVCxjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQXFDeEIsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixJQUFpQztJQUVqQyxPQUFPLENBQUMsTUFBK0IsRUFBc0IsRUFBRTtRQUM3RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLGlCQUFpQixFQUFFLEVBQ25CLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsSUFBZ0M7SUFFaEMsT0FBTyxDQUFDLE1BQStCLEVBQXNCLEVBQUU7UUFDN0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixpQkFBaUIsRUFBRSxFQUNuQixTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDM0Qs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RCxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDMUIsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLEVBQUUsRUFBRTtZQUNOLE9BQU8sRUFBRSxDQUFDO1NBQ1g7S0FDRjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUksR0FBNkI7SUFDMUQsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDckIsT0FBTyxHQUFHLENBQUM7S0FDWjtTQUFNLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDZixPQUFPLEVBQUUsRUFBRSxDQUFDO0tBQ2I7U0FBTTtRQUNMLE9BQU8sRUFBRSxDQUFDLEdBQVEsQ0FBQyxDQUFDO0tBQ3JCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWN0aW9ucywgb2ZUeXBlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBST1VURVJfTkFWSUdBVElPTiwgUm91dGVyTmF2aWdhdGlvbkFjdGlvbiB9IGZyb20gJ0BuZ3J4L3JvdXRlci1zdG9yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFN0b3JlLCBBY3Rpb25DcmVhdG9yIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgY29uY2F0TWFwLFxuICBmaWx0ZXIsXG4gIGdyb3VwQnksXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHN3aXRjaE1hcCxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBTZWUge0BsaW5rIERhdGFQZXJzaXN0ZW5jZS5wZXNzaW1pc3RpY1VwZGF0ZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVzc2ltaXN0aWNVcGRhdGVPcHRzPFQsIEE+IHtcbiAgcnVuKGE6IEEsIHN0YXRlPzogVCk6IE9ic2VydmFibGU8QWN0aW9uPiB8IEFjdGlvbiB8IHZvaWQ7XG4gIG9uRXJyb3IoYTogQSwgZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHwgYW55O1xufVxuLyoqXG4gKiBTZWUge0BsaW5rIERhdGFQZXJzaXN0ZW5jZS5wZXNzaW1pc3RpY1VwZGF0ZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW1pc3RpY1VwZGF0ZU9wdHM8VCwgQT4ge1xuICBydW4oYTogQSwgc3RhdGU/OiBUKTogT2JzZXJ2YWJsZTxBY3Rpb24+IHwgQWN0aW9uIHwgdm9pZDtcbiAgdW5kb0FjdGlvbihhOiBBLCBlOiBhbnkpOiBPYnNlcnZhYmxlPEFjdGlvbj4gfCBBY3Rpb247XG59XG5cbi8qKlxuICogU2VlIHtAbGluayBEYXRhUGVyc2lzdGVuY2UuZmV0Y2h9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZldGNoT3B0czxULCBBPiB7XG4gIGlkPyhhOiBBLCBzdGF0ZT86IFQpOiBhbnk7XG4gIHJ1bihhOiBBLCBzdGF0ZT86IFQpOiBPYnNlcnZhYmxlPEFjdGlvbj4gfCBBY3Rpb24gfCB2b2lkO1xuICBvbkVycm9yPyhhOiBBLCBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gfCBhbnk7XG59XG5cbi8qKlxuICogU2VlIHtAbGluayBEYXRhUGVyc2lzdGVuY2UubmF2aWdhdGlvbn0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlTmF2aWdhdGlvbk9wdHM8VD4ge1xuICBydW4oYTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBUKTogT2JzZXJ2YWJsZTxBY3Rpb24+IHwgQWN0aW9uIHwgdm9pZDtcbiAgb25FcnJvcj8oYTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHwgYW55O1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25PckFjdGlvbldpdGhTdGF0ZTxULCBBPiA9IEEgfCBbQSwgVF07XG5leHBvcnQgdHlwZSBBY3Rpb25TdGF0ZVN0cmVhbTxULCBBPiA9IE9ic2VydmFibGU8QWN0aW9uT3JBY3Rpb25XaXRoU3RhdGU8VCwgQT4+O1xuXG5leHBvcnQgZnVuY3Rpb24gcGVzc2ltaXN0aWNVcGRhdGU8VCwgQSBleHRlbmRzIEFjdGlvbj4oXG4gIG9wdHM6IFBlc3NpbWlzdGljVXBkYXRlT3B0czxULCBBPlxuKSB7XG4gIHJldHVybiAoc291cmNlOiBBY3Rpb25TdGF0ZVN0cmVhbTxULCBBPik6IE9ic2VydmFibGU8QWN0aW9uPiA9PiB7XG4gICAgcmV0dXJuIHNvdXJjZS5waXBlKFxuICAgICAgbWFwQWN0aW9uQW5kU3RhdGUoKSxcbiAgICAgIGNvbmNhdE1hcChydW5XaXRoRXJyb3JIYW5kbGluZyhvcHRzLnJ1biwgb3B0cy5vbkVycm9yKSlcbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3B0aW1pc3RpY1VwZGF0ZTxULCBBIGV4dGVuZHMgQWN0aW9uPihcbiAgb3B0czogT3B0aW1pc3RpY1VwZGF0ZU9wdHM8VCwgQT5cbikge1xuICByZXR1cm4gKHNvdXJjZTogQWN0aW9uU3RhdGVTdHJlYW08VCwgQT4pOiBPYnNlcnZhYmxlPEFjdGlvbj4gPT4ge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIG1hcEFjdGlvbkFuZFN0YXRlKCksXG4gICAgICBjb25jYXRNYXAocnVuV2l0aEVycm9ySGFuZGxpbmcob3B0cy5ydW4sIG9wdHMudW5kb0FjdGlvbikpXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoPFQsIEEgZXh0ZW5kcyBBY3Rpb24+KG9wdHM6IEZldGNoT3B0czxULCBBPikge1xuICByZXR1cm4gKHNvdXJjZTogQWN0aW9uU3RhdGVTdHJlYW08VCwgQT4pOiBPYnNlcnZhYmxlPEFjdGlvbj4gPT4ge1xuICAgIGlmIChvcHRzLmlkKSB7XG4gICAgICBjb25zdCBncm91cGVkRmV0Y2hlcyA9IHNvdXJjZS5waXBlKFxuICAgICAgICBtYXBBY3Rpb25BbmRTdGF0ZSgpLFxuICAgICAgICBncm91cEJ5KChbYWN0aW9uLCBzdG9yZV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gb3B0cy5pZChhY3Rpb24sIHN0b3JlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBncm91cGVkRmV0Y2hlcy5waXBlKFxuICAgICAgICBtZXJnZU1hcCgocGFpcnMpID0+XG4gICAgICAgICAgcGFpcnMucGlwZShzd2l0Y2hNYXAocnVuV2l0aEVycm9ySGFuZGxpbmcob3B0cy5ydW4sIG9wdHMub25FcnJvcikpKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIG1hcEFjdGlvbkFuZFN0YXRlKCksXG4gICAgICBjb25jYXRNYXAocnVuV2l0aEVycm9ySGFuZGxpbmcob3B0cy5ydW4sIG9wdHMub25FcnJvcikpXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hdmlnYXRpb248VCwgQSBleHRlbmRzIEFjdGlvbj4oXG4gIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICBvcHRzOiBIYW5kbGVOYXZpZ2F0aW9uT3B0czxUPlxuKSB7XG4gIHJldHVybiAoc291cmNlOiBBY3Rpb25TdGF0ZVN0cmVhbTxULCBBPikgPT4ge1xuICAgIGNvbnN0IG5hdiA9IHNvdXJjZS5waXBlKFxuICAgICAgbWFwQWN0aW9uQW5kU3RhdGUoKSxcbiAgICAgIGZpbHRlcigoW2FjdGlvbiwgc3RhdGVdKSA9PiBpc1N0YXRlU25hcHNob3QoYWN0aW9uKSksXG4gICAgICBtYXAoKFthY3Rpb24sIHN0YXRlXSkgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhdGVTbmFwc2hvdChhY3Rpb24pKSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGUgYWJvdmUgZmlsdGVyIHdlJ2xsIG5ldmVyIGdldCBoZXJlLFxuICAgICAgICAgIC8vIGJ1dCB0aGlzIHByb3Blcmx5IHR5cGUgbmFycm93cyBgYWN0aW9uYFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgZmluZFNuYXBzaG90KGNvbXBvbmVudCwgYWN0aW9uLnBheWxvYWQucm91dGVyU3RhdGUucm9vdCksXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgIF0gYXMgW0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFRdO1xuICAgICAgfSksXG4gICAgICBmaWx0ZXIoKFtzbmFwc2hvdCwgc3RhdGVdKSA9PiAhIXNuYXBzaG90KVxuICAgICk7XG5cbiAgICByZXR1cm4gbmF2LnBpcGUoc3dpdGNoTWFwKHJ1bldpdGhFcnJvckhhbmRsaW5nKG9wdHMucnVuLCBvcHRzLm9uRXJyb3IpKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGVTbmFwc2hvdChcbiAgYWN0aW9uOiBhbnlcbik6IGFjdGlvbiBpcyBSb3V0ZXJOYXZpZ2F0aW9uQWN0aW9uPFJvdXRlclN0YXRlU25hcHNob3Q+IHtcbiAgcmV0dXJuIGFjdGlvbi50eXBlID09PSBST1VURVJfTkFWSUdBVElPTjtcbn1cblxuZnVuY3Rpb24gcnVuV2l0aEVycm9ySGFuZGxpbmc8VCwgQSwgUj4oXG4gIHJ1bjogKGE6IEEsIHN0YXRlPzogVCkgPT4gT2JzZXJ2YWJsZTxSPiB8IFIgfCB2b2lkLFxuICBvbkVycm9yOiBhbnlcbikge1xuICByZXR1cm4gKFthY3Rpb24sIHN0YXRlXTogW0EsIFRdKTogT2JzZXJ2YWJsZTxSPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSB3cmFwSW50b09ic2VydmFibGUocnVuKGFjdGlvbiwgc3RhdGUpKTtcbiAgICAgIHJldHVybiByLnBpcGUoY2F0Y2hFcnJvcigoZSkgPT4gd3JhcEludG9PYnNlcnZhYmxlKG9uRXJyb3IoYWN0aW9uLCBlKSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gd3JhcEludG9PYnNlcnZhYmxlKG9uRXJyb3IoYWN0aW9uLCBlKSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIEB3aGF0SXREb2VzIG1hcHMgT2JzZXJ2YWJsZTxBY3Rpb24gfCBbQWN0aW9uLCBTdGF0ZV0+IHRvXG4gKiBPYnNlcnZhYmxlPFtBY3Rpb24sIFN0YXRlXT5cbiAqL1xuZnVuY3Rpb24gbWFwQWN0aW9uQW5kU3RhdGU8VCwgQT4oKSB7XG4gIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPEFjdGlvbk9yQWN0aW9uV2l0aFN0YXRlPFQsIEE+PikgPT4ge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIG1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgW2FjdGlvbiwgc3RvcmVdID0gbm9ybWFsaXplQWN0aW9uQW5kU3RhdGUodmFsdWUpO1xuICAgICAgICByZXR1cm4gW2FjdGlvbiwgc3RvcmVdIGFzIFtBLCBUXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAd2hhdEl0RG9lcyBOb3JtYWxpemVzIGVpdGhlciBhIGJhcmUgYWN0aW9uIG9yIGFuIGFycmF5IG9mIGFjdGlvbiBhbmQgc3RhdGVcbiAqIGludG8gYW4gYXJyYXkgb2YgYWN0aW9uIGFuZCBzdGF0ZSAob3IgdW5kZWZpbmVkKVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBY3Rpb25BbmRTdGF0ZTxULCBBPihcbiAgYXJnczogQWN0aW9uT3JBY3Rpb25XaXRoU3RhdGU8VCwgQT5cbik6IFtBLCBUXSB7XG4gIGxldCBhY3Rpb246IEEsIHN0YXRlOiBUO1xuXG4gIGlmIChhcmdzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBbYWN0aW9uLCBzdGF0ZV0gPSBhcmdzO1xuICB9IGVsc2Uge1xuICAgIGFjdGlvbiA9IGFyZ3M7XG4gIH1cblxuICByZXR1cm4gW2FjdGlvbiwgc3RhdGVdO1xufVxuXG4vKipcbiAqIEB3aGF0SXREb2VzIFByb3ZpZGVzIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGltcGxlbWVudGluZyBjb21tb24gb3BlcmF0aW9ucyBvZiBwZXJzaXN0aW5nIGRhdGEuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhUGVyc2lzdGVuY2U8VD4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RvcmU6IFN0b3JlPFQ+LCBwdWJsaWMgYWN0aW9uczogQWN0aW9ucykge31cblxuICAvKipcbiAgICpcbiAgICogQHdoYXRJdERvZXMgSGFuZGxlcyBwZXNzaW1pc3RpYyB1cGRhdGVzICh1cGRhdGluZyB0aGUgc2VydmVyIGZpcnN0KS5cbiAgICpcbiAgICogVXBkYXRlIHRoZSBzZXJ2ZXIgaW1wbGVtZW50ZWQgbmFpdmVseSBzdWZmZXJzIGZyb20gcmFjZSBjb25kaXRpb25zIGFuZCBwb29yIGVycm9yIGhhbmRsaW5nLlxuICAgKlxuICAgKiBgcGVzc2ltaXN0aWNVcGRhdGVgIGFkZHJlc3NlcyB0aGVzZSBwcm9ibGVtcy0taXQgcnVucyBhbGwgZmV0Y2hlcyBpbiBvcmRlciwgd2hpY2ggcmVtb3ZlcyByYWNlIGNvbmRpdGlvbnNcbiAgICogYW5kIGZvcmNlcyB0aGUgZGV2ZWxvcGVyIHRvIGhhbmRsZSBlcnJvcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGU6XG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogQEluamVjdGFibGUoKVxuICAgKiBjbGFzcyBUb2RvRWZmZWN0cyB7XG4gICAqICAgQEVmZmVjdCgpIHVwZGF0ZVRvZG8gPSB0aGlzLnMucGVzc2ltaXN0aWNVcGRhdGU8VXBkYXRlVG9kbz4oJ1VQREFURV9UT0RPJywge1xuICAgKiAgICAgLy8gcHJvdmlkZXMgYW4gYWN0aW9uIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3RvcmVcbiAgICogICAgIHJ1bihhLCBzdGF0ZSkge1xuICAgKiAgICAgICAvLyB1cGRhdGUgdGhlIGJhY2tlbmQgZmlyc3QsIGFuZCB0aGVuIGRpc3BhdGNoIGFuIGFjdGlvbiB0aGF0IHdpbGxcbiAgICogICAgICAgLy8gdXBkYXRlIHRoZSBjbGllbnQgc2lkZVxuICAgKiAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kKHN0YXRlLnVzZXIsIGEucGF5bG9hZCkubWFwKHVwZGF0ZWQgPT4gKHtcbiAgICogICAgICAgICB0eXBlOiAnVE9ET19VUERBVEVEJyxcbiAgICogICAgICAgICBwYXlsb2FkOiB1cGRhdGVkXG4gICAqICAgICAgIH0pKTtcbiAgICogICAgIH0sXG4gICAqXG4gICAqICAgICBvbkVycm9yKGEsIGU6IGFueSkge1xuICAgKiAgICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIHVuZG8gdGhlIGNoYW5nZXMgb24gdGhlIGNsaWVudCBzaWRlLlxuICAgKiAgICAgICAvLyB3ZSBjYW4gZGlzcGF0Y2ggYW4gZXJyb3IsIG9yIHNpbXBseSBsb2cgdGhlIGVycm9yIGhlcmUgYW5kIHJldHVybiBgbnVsbGBcbiAgICogICAgICAgcmV0dXJuIG51bGw7XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBzOiBEYXRhUGVyc2lzdGVuY2U8VG9kb3NTdGF0ZT4sIHByaXZhdGUgYmFja2VuZDogQmFja2VuZCkge31cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHlvdSBkb24ndCByZXR1cm4gYSBuZXcgYWN0aW9uIGZyb20gdGhlIHJ1biBjYWxsYmFjaywgeW91IG11c3Qgc2V0IHRoZSBkaXNwYXRjaCBwcm9wZXJ0eVxuICAgKiBvZiB0aGUgZWZmZWN0IHRvIGZhbHNlLCBsaWtlIHRoaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiBjbGFzcyBUb2RvRWZmZWN0cyB7XG4gICAqICAgQEVmZmVjdCh7ZGlzcGF0Y2g6IGZhbHNlfSlcbiAgICogICB1cGRhdGVUb2RvOyAvLy4uLlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcGVzc2ltaXN0aWNVcGRhdGU8QSBleHRlbmRzIEFjdGlvbiA9IEFjdGlvbj4oXG4gICAgYWN0aW9uVHlwZTogc3RyaW5nIHwgQWN0aW9uQ3JlYXRvcixcbiAgICBvcHRzOiBQZXNzaW1pc3RpY1VwZGF0ZU9wdHM8VCwgQT5cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zLnBpcGUoXG4gICAgICBvZlR5cGU8QT4oYWN0aW9uVHlwZSksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlKSxcbiAgICAgIHBlc3NpbWlzdGljVXBkYXRlKG9wdHMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAd2hhdEl0RG9lcyBIYW5kbGVzIG9wdGltaXN0aWMgdXBkYXRlcyAodXBkYXRpbmcgdGhlIGNsaWVudCBmaXJzdCkuXG4gICAqXG4gICAqIGBvcHRpbWlzdGljVXBkYXRlYCBhZGRyZXNzZXMgdGhlc2UgcHJvYmxlbXMtLWl0IHJ1bnMgYWxsIGZldGNoZXMgaW4gb3JkZXIsIHdoaWNoIHJlbW92ZXMgcmFjZSBjb25kaXRpb25zXG4gICAqIGFuZCBmb3JjZXMgdGhlIGRldmVsb3BlciB0byBoYW5kbGUgZXJyb3JzLlxuICAgKlxuICAgKiBgb3B0aW1pc3RpY1VwZGF0ZWAgaXMgZGlmZmVyZW50IGZyb20gYHBlc3NpbWlzdGljVXBkYXRlYC4gSW4gY2FzZSBvZiBhIGZhaWx1cmUsIHdoZW4gdXNpbmcgYG9wdGltaXN0aWNVcGRhdGVgLFxuICAgKiB0aGUgZGV2ZWxvcGVyIGFscmVhZHkgdXBkYXRlZCB0aGUgc3RhdGUgbG9jYWxseSwgc28gdGhlIGRldmVsb3BlciBtdXN0IHByb3ZpZGUgYW4gdW5kbyBhY3Rpb24uXG4gICAqXG4gICAqIFRoZSBlcnJvciBoYW5kbGluZyBtdXN0IGJlIGRvbmUgaW4gdGhlIGNhbGxiYWNrLCBvciBieSBtZWFucyBvZiB0aGUgdW5kbyBhY3Rpb24uXG4gICAqXG4gICAqICMjIEV4YW1wbGU6XG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogQEluamVjdGFibGUoKVxuICAgKiBjbGFzcyBUb2RvRWZmZWN0cyB7XG4gICAqICAgQEVmZmVjdCgpIHVwZGF0ZVRvZG8gPSB0aGlzLnMub3B0aW1pc3RpY1VwZGF0ZTxVcGRhdGVUb2RvPignVVBEQVRFX1RPRE8nLCB7XG4gICAqICAgICAvLyBwcm92aWRlcyBhbiBhY3Rpb24gYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzdG9yZVxuICAgKiAgICAgcnVuOiAoYSwgc3RhdGUpID0+IHtcbiAgICogICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZChzdGF0ZS51c2VyLCBhLnBheWxvYWQpO1xuICAgKiAgICAgfSxcbiAgICpcbiAgICogICAgIHVuZG9BY3Rpb246IChhLCBlOiBhbnkpID0+IHtcbiAgICogICAgICAgLy8gZGlzcGF0Y2ggYW4gdW5kbyBhY3Rpb24gdG8gdW5kbyB0aGUgY2hhbmdlcyBpbiB0aGUgY2xpZW50IHN0YXRlXG4gICAqICAgICAgIHJldHVybiAoe1xuICAgKiAgICAgICAgIHR5cGU6ICdVTkRPX1VQREFURV9UT0RPJyxcbiAgICogICAgICAgICBwYXlsb2FkOiBhXG4gICAqICAgICAgIH0pO1xuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgczogRGF0YVBlcnNpc3RlbmNlPFRvZG9zU3RhdGU+LCBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmQpIHt9XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpZiB5b3UgZG9uJ3QgcmV0dXJuIGEgbmV3IGFjdGlvbiBmcm9tIHRoZSBydW4gY2FsbGJhY2ssIHlvdSBtdXN0IHNldCB0aGUgZGlzcGF0Y2ggcHJvcGVydHlcbiAgICogb2YgdGhlIGVmZmVjdCB0byBmYWxzZSwgbGlrZSB0aGlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogY2xhc3MgVG9kb0VmZmVjdHMge1xuICAgKiAgIEBFZmZlY3Qoe2Rpc3BhdGNoOiBmYWxzZX0pXG4gICAqICAgdXBkYXRlVG9kbzsgLy8uLi5cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIG9wdGltaXN0aWNVcGRhdGU8QSBleHRlbmRzIEFjdGlvbiA9IEFjdGlvbj4oXG4gICAgYWN0aW9uVHlwZTogc3RyaW5nIHwgQWN0aW9uQ3JlYXRvcixcbiAgICBvcHRzOiBPcHRpbWlzdGljVXBkYXRlT3B0czxULCBBPlxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmFjdGlvbnMucGlwZShcbiAgICAgIG9mVHlwZTxBPihhY3Rpb25UeXBlKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUpLFxuICAgICAgb3B0aW1pc3RpY1VwZGF0ZShvcHRzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHdoYXRJdERvZXMgSGFuZGxlcyBkYXRhIGZldGNoaW5nLlxuICAgKlxuICAgKiBEYXRhIGZldGNoaW5nIGltcGxlbWVudGVkIG5haXZlbHkgc3VmZmVycyBmcm9tIHJhY2UgY29uZGl0aW9ucyBhbmQgcG9vciBlcnJvciBoYW5kbGluZy5cbiAgICpcbiAgICogYGZldGNoYCBhZGRyZXNzZXMgdGhlc2UgcHJvYmxlbXMtLWl0IHJ1bnMgYWxsIGZldGNoZXMgaW4gb3JkZXIsIHdoaWNoIHJlbW92ZXMgcmFjZSBjb25kaXRpb25zXG4gICAqIGFuZCBmb3JjZXMgdGhlIGRldmVsb3BlciB0byBoYW5kbGUgZXJyb3JzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlOlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIEBJbmplY3RhYmxlKClcbiAgICogY2xhc3MgVG9kb0VmZmVjdHMge1xuICAgKiAgIEBFZmZlY3QoKSBsb2FkVG9kb3MgPSB0aGlzLnMuZmV0Y2g8R2V0VG9kb3M+KCdHRVRfVE9ET1MnLCB7XG4gICAqICAgICAvLyBwcm92aWRlcyBhbiBhY3Rpb24gYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzdG9yZVxuICAgKiAgICAgcnVuOiAoYSwgc3RhdGUpID0+IHtcbiAgICogICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZChzdGF0ZS51c2VyLCBhLnBheWxvYWQpLm1hcChyID0+ICh7XG4gICAqICAgICAgICAgdHlwZTogJ1RPRE9TJyxcbiAgICogICAgICAgICBwYXlsb2FkOiByXG4gICAqICAgICAgIH0pO1xuICAgKiAgICAgfSxcbiAgICpcbiAgICogICAgIG9uRXJyb3I6IChhLCBlOiBhbnkpID0+IHtcbiAgICogICAgICAgLy8gZGlzcGF0Y2ggYW4gdW5kbyBhY3Rpb24gdG8gdW5kbyB0aGUgY2hhbmdlcyBpbiB0aGUgY2xpZW50IHN0YXRlXG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBzOiBEYXRhUGVyc2lzdGVuY2U8VG9kb3NTdGF0ZT4sIHByaXZhdGUgYmFja2VuZDogQmFja2VuZCkge31cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogVGhpcyBpcyBjb3JyZWN0LCBidXQgYmVjYXVzZSBpdCBzZXQgdGhlIGNvbmN1cnJlbmN5IHRvIDEsIGl0IG1heSBub3QgYmUgcGVyZm9ybWFudC5cbiAgICpcbiAgICogVG8gZml4IHRoYXQsIHlvdSBjYW4gcHJvdmlkZSB0aGUgYGlkYCBmdW5jdGlvbiwgbGlrZSB0aGlzOlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIEBJbmplY3RhYmxlKClcbiAgICogY2xhc3MgVG9kb0VmZmVjdHMge1xuICAgKiAgIEBFZmZlY3QoKSBsb2FkVG9kbyA9IHRoaXMucy5mZXRjaDxHZXRUb2RvPignR0VUX1RPRE8nLCB7XG4gICAqICAgICBpZDogKGEsIHN0YXRlKSA9PiB7XG4gICAqICAgICAgIHJldHVybiBhLnBheWxvYWQuaWQ7XG4gICAqICAgICB9XG4gICAqXG4gICAqICAgICAvLyBwcm92aWRlcyBhbiBhY3Rpb24gYW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzdG9yZVxuICAgKiAgICAgcnVuOiAoYSwgc3RhdGUpID0+IHtcbiAgICogICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZChzdGF0ZS51c2VyLCBhLnBheWxvYWQpLm1hcChyID0+ICh7XG4gICAqICAgICAgICAgdHlwZTogJ1RPRE8nLFxuICAgKiAgICAgICAgIHBheWxvYWQ6IHJcbiAgICogICAgICAgfSk7XG4gICAqICAgICB9LFxuICAgKlxuICAgKiAgICAgb25FcnJvcjogKGEsIGU6IGFueSkgPT4ge1xuICAgKiAgICAgICAvLyBkaXNwYXRjaCBhbiB1bmRvIGFjdGlvbiB0byB1bmRvIHRoZSBjaGFuZ2VzIGluIHRoZSBjbGllbnQgc3RhdGVcbiAgICogICAgICAgcmV0dXJuIG51bGw7XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBzOiBEYXRhUGVyc2lzdGVuY2U8VG9kb3NTdGF0ZT4sIHByaXZhdGUgYmFja2VuZDogQmFja2VuZCkge31cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogV2l0aCB0aGlzIHNldHVwLCB0aGUgcmVxdWVzdHMgZm9yIFRvZG8gMSB3aWxsIHJ1biBjb25jdXJyZW50bHkgd2l0aCB0aGUgcmVxdWVzdHMgZm9yIFRvZG8gMi5cbiAgICpcbiAgICogSW4gYWRkaXRpb24sIGlmIERhdGFQZXJzaXN0ZW5jZSBub3RpY2VzIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIHJlcXVlc3RzIGZvciBUb2RvIDEgc2NoZWR1bGVkLFxuICAgKiBpdCB3aWxsIG9ubHkgcnVuIHRoZSBsYXN0IG9uZS5cbiAgICovXG4gIGZldGNoPEEgZXh0ZW5kcyBBY3Rpb24gPSBBY3Rpb24+KFxuICAgIGFjdGlvblR5cGU6IHN0cmluZyB8IEFjdGlvbkNyZWF0b3IsXG4gICAgb3B0czogRmV0Y2hPcHRzPFQsIEE+XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucy5waXBlKFxuICAgICAgb2ZUeXBlPEE+KGFjdGlvblR5cGUpLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZSksXG4gICAgICBmZXRjaChvcHRzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHdoYXRJdERvZXMgSGFuZGxlcyBkYXRhIGZldGNoaW5nIGFzIHBhcnQgb2Ygcm91dGVyIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIERhdGEgZmV0Y2hpbmcgaW1wbGVtZW50ZWQgbmFpdmVseSBzdWZmZXJzIGZyb20gcmFjZSBjb25kaXRpb25zIGFuZCBwb29yIGVycm9yIGhhbmRsaW5nLlxuICAgKlxuICAgKiBgbmF2aWdhdGlvbmAgYWRkcmVzc2VzIHRoZXNlIHByb2JsZW1zLlxuICAgKlxuICAgKiBJdCBjaGVja3MgaWYgYW4gYWN0aXZhdGVkIHJvdXRlciBzdGF0ZSBjb250YWlucyB0aGUgcGFzc2VkIGluIGNvbXBvbmVudCB0eXBlLCBhbmQsIGlmIGl0IGRvZXMsIHJ1bnMgdGhlIGBydW5gXG4gICAqIGNhbGxiYWNrLiBJdCBwcm92aWRlcyB0aGUgYWN0aXZhdGVkIHNuYXBzaG90IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50IGFuZCB0aGUgY3VycmVudCBzdGF0ZS4gQW5kIGl0IG9ubHkgcnVuc1xuICAgKiB0aGUgbGFzdCByZXF1ZXN0LlxuICAgKlxuICAgKiAjIyBFeGFtcGxlOlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIEBJbmplY3RhYmxlKClcbiAgICogY2xhc3MgVG9kb0VmZmVjdHMge1xuICAgKiAgIEBFZmZlY3QoKSBsb2FkVG9kbyA9IHRoaXMucy5uYXZpZ2F0aW9uKFRvZG9Db21wb25lbnQsIHtcbiAgICogICAgIHJ1bjogKGEsIHN0YXRlKSA9PiB7XG4gICAqICAgICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZmV0Y2hUb2RvKGEucGFyYW1zWydpZCddKS5tYXAodG9kbyA9PiAoe1xuICAgKiAgICAgICAgIHR5cGU6ICdUT0RPX0xPQURFRCcsXG4gICAqICAgICAgICAgcGF5bG9hZDogdG9kb1xuICAgKiAgICAgICB9KSk7XG4gICAqICAgICB9LFxuICAgKiAgICAgb25FcnJvcjogKGEsIGU6IGFueSkgPT4ge1xuICAgKiAgICAgICAvLyB3ZSBjYW4gbG9nIGFuZCBlcnJvciBoZXJlIGFuZCByZXR1cm4gbnVsbFxuICAgKiAgICAgICAvLyB3ZSBjYW4gYWxzbyBuYXZpZ2F0ZSBiYWNrXG4gICAqICAgICAgIHJldHVybiBudWxsO1xuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgczogRGF0YVBlcnNpc3RlbmNlPFRvZG9zU3RhdGU+LCBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmQpIHt9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBuYXZpZ2F0aW9uKFxuICAgIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgIG9wdHM6IEhhbmRsZU5hdmlnYXRpb25PcHRzPFQ+XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucy5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZSksXG4gICAgICBuYXZpZ2F0aW9uKGNvbXBvbmVudCwgb3B0cylcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRTbmFwc2hvdChcbiAgY29tcG9uZW50OiBUeXBlPGFueT4sXG4gIHM6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Rcbik6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICBpZiAocy5yb3V0ZUNvbmZpZyAmJiBzLnJvdXRlQ29uZmlnLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgZm9yIChjb25zdCBjIG9mIHMuY2hpbGRyZW4pIHtcbiAgICBjb25zdCBzcyA9IGZpbmRTbmFwc2hvdChjb21wb25lbnQsIGMpO1xuICAgIGlmIChzcykge1xuICAgICAgcmV0dXJuIHNzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gd3JhcEludG9PYnNlcnZhYmxlPE8+KG9iajogT2JzZXJ2YWJsZTxPPiB8IE8gfCB2b2lkKTogT2JzZXJ2YWJsZTxPPiB7XG4gIGlmIChpc09ic2VydmFibGUob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSBpZiAoIW9iaikge1xuICAgIHJldHVybiBvZigpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBvZihvYmogYXMgTyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { DataPersistence } from './data-persistence';
|
|
3
|
-
/**
|
|
4
|
-
* @whatItDoes Provides services for enterprise Angular applications.
|
|
5
|
-
*
|
|
6
|
-
* See {@link DataPersistence} for more information.
|
|
7
|
-
*/
|
|
8
|
-
export class NxModule {
|
|
9
|
-
static forRoot() {
|
|
10
|
-
return { ngModule: NxModule, providers: [DataPersistence] };
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
NxModule.decorators = [
|
|
14
|
-
{ type: NgModule, args: [{},] }
|
|
15
|
-
];
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3J1bnRpbWUvbngvbngubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRDs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLFFBQVE7SUFDbkIsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7OztZQUpGLFFBQVEsU0FBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFQZXJzaXN0ZW5jZSB9IGZyb20gJy4vZGF0YS1wZXJzaXN0ZW5jZSc7XG5cbi8qKlxuICogQHdoYXRJdERvZXMgUHJvdmlkZXMgc2VydmljZXMgZm9yIGVudGVycHJpc2UgQW5ndWxhciBhcHBsaWNhdGlvbnMuXG4gKlxuICogU2VlIHtAbGluayBEYXRhUGVyc2lzdGVuY2V9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICovXG5ATmdNb2R1bGUoe30pXG5leHBvcnQgY2xhc3MgTnhNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE54TW9kdWxlPiB7XG4gICAgcmV0dXJuIHsgbmdNb2R1bGU6IE54TW9kdWxlLCBwcm92aWRlcnM6IFtEYXRhUGVyc2lzdGVuY2VdIH07XG4gIH1cbn1cbiJdfQ==
|
package/esm2015/testing/index.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { cold, hot, getTestScheduler, time } from 'jasmine-marbles';
|
|
2
|
-
export { readAll, readFirst } from './src/testing-utils';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBjb2xkLCBob3QsIGdldFRlc3RTY2hlZHVsZXIsIHRpbWUgfSBmcm9tICdqYXNtaW5lLW1hcmJsZXMnO1xuZXhwb3J0IHsgcmVhZEFsbCwgcmVhZEZpcnN0IH0gZnJvbSAnLi9zcmMvdGVzdGluZy11dGlscyc7XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nrwl-angular-testing.js","sources":["../../testing/src/testing-utils.ts","../../testing/nrwl-angular-testing.ts"],"sourcesContent":["import type { Observable } from 'rxjs';\nimport { first, toArray } from 'rxjs/operators';\n\n/**\n * @whatItDoes reads all the values from an observable and returns a promise\n * with an array of all values. This should be used in combination with async/await.\n *\n * ## Example\n *\n * ```typescript\n * const obs = of(1, 2, 3, 4);\n * const res = await readAll(obs)\n * expect(res).toEqual([1, 2, 3, 4]);\n * ```\n */\nexport function readAll<T>(o: Observable<T>): Promise<T[]> {\n return o.pipe(toArray()).toPromise();\n}\n\n/**\n * @whatItDoes reads the first value from an observable and returns a promise\n * with it. This should be used in combination with async/await.\n *\n * ## Example\n *\n * ```typescript\n * const obs = of(1, 2, 3, 4);\n * const res = await readFirst(obs)\n * expect(res).toEqual(1);\n * ```\n */\nexport function readFirst<T>(o: Observable<T>): Promise<T> {\n return o.pipe(first()).toPromise();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAGA;;;;;;;;;;;;SAYgB,OAAO,CAAI,CAAgB;IACzC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;SAYgB,SAAS,CAAI,CAAgB;IAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACrC;;ACjCA;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nrwl-angular.js","sources":["../../src/runtime/nx/data-persistence.ts","../../src/runtime/nx/nx.module.ts","../../nrwl-angular.ts"],"sourcesContent":["import { Injectable, Type } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { ROUTER_NAVIGATION, RouterNavigationAction } from '@ngrx/router-store';\nimport { Action, Store, ActionCreator } from '@ngrx/store';\nimport { isObservable, Observable, of } from 'rxjs';\nimport {\n catchError,\n concatMap,\n filter,\n groupBy,\n map,\n mergeMap,\n switchMap,\n withLatestFrom,\n} from 'rxjs/operators';\n\n/**\n * See {@link DataPersistence.pessimisticUpdate} for more information.\n */\nexport interface PessimisticUpdateOpts<T, A> {\n run(a: A, state?: T): Observable<Action> | Action | void;\n onError(a: A, e: any): Observable<any> | any;\n}\n/**\n * See {@link DataPersistence.pessimisticUpdate} for more information.\n */\nexport interface OptimisticUpdateOpts<T, A> {\n run(a: A, state?: T): Observable<Action> | Action | void;\n undoAction(a: A, e: any): Observable<Action> | Action;\n}\n\n/**\n * See {@link DataPersistence.fetch} for more information.\n */\nexport interface FetchOpts<T, A> {\n id?(a: A, state?: T): any;\n run(a: A, state?: T): Observable<Action> | Action | void;\n onError?(a: A, e: any): Observable<any> | any;\n}\n\n/**\n * See {@link DataPersistence.navigation} for more information.\n */\nexport interface HandleNavigationOpts<T> {\n run(a: ActivatedRouteSnapshot, state?: T): Observable<Action> | Action | void;\n onError?(a: ActivatedRouteSnapshot, e: any): Observable<any> | any;\n}\n\nexport type ActionOrActionWithState<T, A> = A | [A, T];\nexport type ActionStateStream<T, A> = Observable<ActionOrActionWithState<T, A>>;\n\nexport function pessimisticUpdate<T, A extends Action>(\n opts: PessimisticUpdateOpts<T, A>\n) {\n return (source: ActionStateStream<T, A>): Observable<Action> => {\n return source.pipe(\n mapActionAndState(),\n concatMap(runWithErrorHandling(opts.run, opts.onError))\n );\n };\n}\n\nexport function optimisticUpdate<T, A extends Action>(\n opts: OptimisticUpdateOpts<T, A>\n) {\n return (source: ActionStateStream<T, A>): Observable<Action> => {\n return source.pipe(\n mapActionAndState(),\n concatMap(runWithErrorHandling(opts.run, opts.undoAction))\n );\n };\n}\n\nexport function fetch<T, A extends Action>(opts: FetchOpts<T, A>) {\n return (source: ActionStateStream<T, A>): Observable<Action> => {\n if (opts.id) {\n const groupedFetches = source.pipe(\n mapActionAndState(),\n groupBy(([action, store]) => {\n return opts.id(action, store);\n })\n );\n\n return groupedFetches.pipe(\n mergeMap((pairs) =>\n pairs.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)))\n )\n );\n }\n\n return source.pipe(\n mapActionAndState(),\n concatMap(runWithErrorHandling(opts.run, opts.onError))\n );\n };\n}\n\nexport function navigation<T, A extends Action>(\n component: Type<any>,\n opts: HandleNavigationOpts<T>\n) {\n return (source: ActionStateStream<T, A>) => {\n const nav = source.pipe(\n mapActionAndState(),\n filter(([action, state]) => isStateSnapshot(action)),\n map(([action, state]) => {\n if (!isStateSnapshot(action)) {\n // Because of the above filter we'll never get here,\n // but this properly type narrows `action`\n return;\n }\n\n return [\n findSnapshot(component, action.payload.routerState.root),\n state,\n ] as [ActivatedRouteSnapshot, T];\n }),\n filter(([snapshot, state]) => !!snapshot)\n );\n\n return nav.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)));\n };\n}\n\nfunction isStateSnapshot(\n action: any\n): action is RouterNavigationAction<RouterStateSnapshot> {\n return action.type === ROUTER_NAVIGATION;\n}\n\nfunction runWithErrorHandling<T, A, R>(\n run: (a: A, state?: T) => Observable<R> | R | void,\n onError: any\n) {\n return ([action, state]: [A, T]): Observable<R> => {\n try {\n const r = wrapIntoObservable(run(action, state));\n return r.pipe(catchError((e) => wrapIntoObservable(onError(action, e))));\n } catch (e) {\n return wrapIntoObservable(onError(action, e));\n }\n };\n}\n\n/**\n * @whatItDoes maps Observable<Action | [Action, State]> to\n * Observable<[Action, State]>\n */\nfunction mapActionAndState<T, A>() {\n return (source: Observable<ActionOrActionWithState<T, A>>) => {\n return source.pipe(\n map((value) => {\n const [action, store] = normalizeActionAndState(value);\n return [action, store] as [A, T];\n })\n );\n };\n}\n\n/**\n * @whatItDoes Normalizes either a bare action or an array of action and state\n * into an array of action and state (or undefined)\n */\nfunction normalizeActionAndState<T, A>(\n args: ActionOrActionWithState<T, A>\n): [A, T] {\n let action: A, state: T;\n\n if (args instanceof Array) {\n [action, state] = args;\n } else {\n action = args;\n }\n\n return [action, state];\n}\n\n/**\n * @whatItDoes Provides convenience methods for implementing common operations of persisting data.\n */\n@Injectable()\nexport class DataPersistence<T> {\n constructor(public store: Store<T>, public actions: Actions) {}\n\n /**\n *\n * @whatItDoes Handles pessimistic updates (updating the server first).\n *\n * Update the server implemented naively suffers from race conditions and poor error handling.\n *\n * `pessimisticUpdate` addresses these problems--it runs all fetches in order, which removes race conditions\n * and forces the developer to handle errors.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() updateTodo = this.s.pessimisticUpdate<UpdateTodo>('UPDATE_TODO', {\n * // provides an action and the current state of the store\n * run(a, state) {\n * // update the backend first, and then dispatch an action that will\n * // update the client side\n * return this.backend(state.user, a.payload).map(updated => ({\n * type: 'TODO_UPDATED',\n * payload: updated\n * }));\n * },\n *\n * onError(a, e: any) {\n * // we don't need to undo the changes on the client side.\n * // we can dispatch an error, or simply log the error here and return `null`\n * return null;\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * Note that if you don't return a new action from the run callback, you must set the dispatch property\n * of the effect to false, like this:\n *\n * ```\n * class TodoEffects {\n * @Effect({dispatch: false})\n * updateTodo; //...\n * }\n * ```\n */\n pessimisticUpdate<A extends Action = Action>(\n actionType: string | ActionCreator,\n opts: PessimisticUpdateOpts<T, A>\n ): Observable<any> {\n return this.actions.pipe(\n ofType<A>(actionType),\n withLatestFrom(this.store),\n pessimisticUpdate(opts)\n );\n }\n\n /**\n *\n * @whatItDoes Handles optimistic updates (updating the client first).\n *\n * `optimisticUpdate` addresses these problems--it runs all fetches in order, which removes race conditions\n * and forces the developer to handle errors.\n *\n * `optimisticUpdate` is different from `pessimisticUpdate`. In case of a failure, when using `optimisticUpdate`,\n * the developer already updated the state locally, so the developer must provide an undo action.\n *\n * The error handling must be done in the callback, or by means of the undo action.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() updateTodo = this.s.optimisticUpdate<UpdateTodo>('UPDATE_TODO', {\n * // provides an action and the current state of the store\n * run: (a, state) => {\n * return this.backend(state.user, a.payload);\n * },\n *\n * undoAction: (a, e: any) => {\n * // dispatch an undo action to undo the changes in the client state\n * return ({\n * type: 'UNDO_UPDATE_TODO',\n * payload: a\n * });\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * Note that if you don't return a new action from the run callback, you must set the dispatch property\n * of the effect to false, like this:\n *\n * ```\n * class TodoEffects {\n * @Effect({dispatch: false})\n * updateTodo; //...\n * }\n * ```\n */\n optimisticUpdate<A extends Action = Action>(\n actionType: string | ActionCreator,\n opts: OptimisticUpdateOpts<T, A>\n ): Observable<any> {\n return this.actions.pipe(\n ofType<A>(actionType),\n withLatestFrom(this.store),\n optimisticUpdate(opts)\n );\n }\n\n /**\n *\n * @whatItDoes Handles data fetching.\n *\n * Data fetching implemented naively suffers from race conditions and poor error handling.\n *\n * `fetch` addresses these problems--it runs all fetches in order, which removes race conditions\n * and forces the developer to handle errors.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() loadTodos = this.s.fetch<GetTodos>('GET_TODOS', {\n * // provides an action and the current state of the store\n * run: (a, state) => {\n * return this.backend(state.user, a.payload).map(r => ({\n * type: 'TODOS',\n * payload: r\n * });\n * },\n *\n * onError: (a, e: any) => {\n * // dispatch an undo action to undo the changes in the client state\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * This is correct, but because it set the concurrency to 1, it may not be performant.\n *\n * To fix that, you can provide the `id` function, like this:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() loadTodo = this.s.fetch<GetTodo>('GET_TODO', {\n * id: (a, state) => {\n * return a.payload.id;\n * }\n *\n * // provides an action and the current state of the store\n * run: (a, state) => {\n * return this.backend(state.user, a.payload).map(r => ({\n * type: 'TODO',\n * payload: r\n * });\n * },\n *\n * onError: (a, e: any) => {\n * // dispatch an undo action to undo the changes in the client state\n * return null;\n * }\n * });\n *\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n *\n * With this setup, the requests for Todo 1 will run concurrently with the requests for Todo 2.\n *\n * In addition, if DataPersistence notices that there are multiple requests for Todo 1 scheduled,\n * it will only run the last one.\n */\n fetch<A extends Action = Action>(\n actionType: string | ActionCreator,\n opts: FetchOpts<T, A>\n ): Observable<any> {\n return this.actions.pipe(\n ofType<A>(actionType),\n withLatestFrom(this.store),\n fetch(opts)\n );\n }\n\n /**\n * @whatItDoes Handles data fetching as part of router navigation.\n *\n * Data fetching implemented naively suffers from race conditions and poor error handling.\n *\n * `navigation` addresses these problems.\n *\n * It checks if an activated router state contains the passed in component type, and, if it does, runs the `run`\n * callback. It provides the activated snapshot associated with the component and the current state. And it only runs\n * the last request.\n *\n * ## Example:\n *\n * ```typescript\n * @Injectable()\n * class TodoEffects {\n * @Effect() loadTodo = this.s.navigation(TodoComponent, {\n * run: (a, state) => {\n * return this.backend.fetchTodo(a.params['id']).map(todo => ({\n * type: 'TODO_LOADED',\n * payload: todo\n * }));\n * },\n * onError: (a, e: any) => {\n * // we can log and error here and return null\n * // we can also navigate back\n * return null;\n * }\n * });\n * constructor(private s: DataPersistence<TodosState>, private backend: Backend) {}\n * }\n * ```\n */\n navigation(\n component: Type<any>,\n opts: HandleNavigationOpts<T>\n ): Observable<any> {\n return this.actions.pipe(\n withLatestFrom(this.store),\n navigation(component, opts)\n );\n }\n}\n\nfunction findSnapshot(\n component: Type<any>,\n s: ActivatedRouteSnapshot\n): ActivatedRouteSnapshot {\n if (s.routeConfig && s.routeConfig.component === component) {\n return s;\n }\n for (const c of s.children) {\n const ss = findSnapshot(component, c);\n if (ss) {\n return ss;\n }\n }\n return null;\n}\n\nfunction wrapIntoObservable<O>(obj: Observable<O> | O | void): Observable<O> {\n if (isObservable(obj)) {\n return obj;\n } else if (!obj) {\n return of();\n } else {\n return of(obj as O);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DataPersistence } from './data-persistence';\n\n/**\n * @whatItDoes Provides services for enterprise Angular applications.\n *\n * See {@link DataPersistence} for more information.\n */\n@NgModule({})\nexport class NxModule {\n static forRoot(): ModuleWithProviders<NxModule> {\n return { ngModule: NxModule, providers: [DataPersistence] };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"DataPersistence":{"__symbolic":"class","arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":181,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Store","module":"@ngrx/store","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":183,"character":34,"context":{"typeName":"T"},"module":"./src/runtime/nx/data-persistence"}]},{"__symbolic":"reference","module":"@ngrx/effects","name":"Actions","line":183,"character":54}]}],"pessimisticUpdate":[{"__symbolic":"method"}],"optimisticUpdate":[{"__symbolic":"method"}],"fetch":[{"__symbolic":"method"}],"navigation":[{"__symbolic":"method"}]}},"fetch":{"__symbolic":"function","parameters":["opts"],"value":{"__symbolic":"error","message":"Lambda not supported","line":75,"character":9,"module":"./src/runtime/nx/data-persistence"}},"navigation":{"__symbolic":"function","parameters":["component","opts"],"value":{"__symbolic":"error","message":"Lambda not supported","line":102,"character":9,"module":"./src/runtime/nx/data-persistence"}},"optimisticUpdate":{"__symbolic":"function","parameters":["opts"],"value":{"__symbolic":"error","message":"Lambda not supported","line":66,"character":9,"module":"./src/runtime/nx/data-persistence"}},"pessimisticUpdate":{"__symbolic":"function","parameters":["opts"],"value":{"__symbolic":"error","message":"Lambda not supported","line":55,"character":9,"module":"./src/runtime/nx/data-persistence"}},"NxModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NxModule"},"providers":[{"__symbolic":"reference","name":"DataPersistence"}]}}}}},"origins":{"DataPersistence":"./src/runtime/nx/data-persistence","fetch":"./src/runtime/nx/data-persistence","navigation":"./src/runtime/nx/data-persistence","optimisticUpdate":"./src/runtime/nx/data-persistence","pessimisticUpdate":"./src/runtime/nx/data-persistence","NxModule":"./src/runtime/nx/nx.module"},"importAs":"@nrwl/angular"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adapted from the original ngPackagr source.
|
|
3
|
-
*
|
|
4
|
-
* This initialization however does not print a warning when Ivy is disabled,
|
|
5
|
-
* since the incremental build packages are not intended for distribution
|
|
6
|
-
*/
|
|
7
|
-
import type { ParsedConfiguration } from '@angular/compiler-cli';
|
|
8
|
-
import type { Transform } from 'ng-packagr/lib/graph/transform';
|
|
9
|
-
export declare const initTsConfigTransformFactory: (defaultTsConfig: ParsedConfiguration) => Transform;
|
|
10
|
-
export declare const NX_INIT_TS_CONFIG_TRANSFORM: import("ng-packagr/lib/graph/transform.di").TransformProvider;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Adapted from the original ngPackagr source.
|
|
4
|
-
*
|
|
5
|
-
* This initialization however does not print a warning when Ivy is disabled,
|
|
6
|
-
* since the incremental build packages are not intended for distribution
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.NX_INIT_TS_CONFIG_TRANSFORM = exports.initTsConfigTransformFactory = void 0;
|
|
10
|
-
const tslib_1 = require("tslib");
|
|
11
|
-
const transform_1 = require("ng-packagr/lib/graph/transform");
|
|
12
|
-
const transform_di_1 = require("ng-packagr/lib/graph/transform.di");
|
|
13
|
-
const init_tsconfig_di_1 = require("ng-packagr/lib/ng-package/entry-point/init-tsconfig.di");
|
|
14
|
-
const nodes_1 = require("ng-packagr/lib/ng-package/nodes");
|
|
15
|
-
const tsconfig_1 = require("ng-packagr/lib/ts/tsconfig");
|
|
16
|
-
const initTsConfigTransformFactory = (defaultTsConfig) => transform_1.transformFromPromise((graph) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
-
// Initialize tsconfig for each entry point
|
|
18
|
-
const entryPoints = graph.filter(nodes_1.isEntryPoint);
|
|
19
|
-
tsconfig_1.initializeTsConfig(defaultTsConfig, entryPoints);
|
|
20
|
-
return graph;
|
|
21
|
-
}));
|
|
22
|
-
exports.initTsConfigTransformFactory = initTsConfigTransformFactory;
|
|
23
|
-
exports.NX_INIT_TS_CONFIG_TRANSFORM = transform_di_1.provideTransform({
|
|
24
|
-
provide: init_tsconfig_di_1.INIT_TS_CONFIG_TOKEN,
|
|
25
|
-
useFactory: exports.initTsConfigTransformFactory,
|
|
26
|
-
deps: [init_tsconfig_di_1.DEFAULT_TS_CONFIG_TOKEN],
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=init-tsconfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init-tsconfig.js","sourceRoot":"","sources":["../../../../../../../packages/angular/src/executors/ng-packagr-lite/ng-packagr-adjustments/init-tsconfig.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAIH,8DAAsE;AACtE,oEAAqE;AACrE,6FAGgE;AAChE,2DAA+D;AAC/D,yDAAgE;AAEzD,MAAM,4BAA4B,GAAG,CAC1C,eAAoC,EACzB,EAAE,CACb,gCAAoB,CAAC,CAAO,KAAK,EAAE,EAAE;IACnC,2CAA2C;IAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAY,CAAC,CAAC;IAC/C,6BAAkB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC;AACf,CAAC,CAAA,CAAC,CAAC;AATQ,QAAA,4BAA4B,gCASpC;AAEQ,QAAA,2BAA2B,GAAG,+BAAgB,CAAC;IAC1D,OAAO,EAAE,uCAAoB;IAC7B,UAAU,EAAE,oCAA4B;IACxC,IAAI,EAAE,CAAC,0CAAuB,CAAC;CAChC,CAAC,CAAC"}
|