@ngxs/store 3.7.6-dev.master-5f9405c → 3.7.6-dev.master-5bdcd2a

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.
@@ -2668,6 +2668,7 @@
2668
2668
  function SelectorOptions(options) {
2669
2669
  return (function decorate(target, methodName, descriptor) {
2670
2670
  if (methodName) {
2671
+ descriptor || (descriptor = Object.getOwnPropertyDescriptor(target, methodName));
2671
2672
  // Method Decorator
2672
2673
  var originalFn = descriptor.value || descriptor.originalFn;
2673
2674
  if (originalFn) {
@@ -2699,27 +2700,27 @@
2699
2700
  */
2700
2701
  function Selector(selectors) {
2701
2702
  return function (target, key, descriptor) {
2703
+ descriptor || (descriptor = Object.getOwnPropertyDescriptor(target, key));
2704
+ var originalFn = descriptor === null || descriptor === void 0 ? void 0 : descriptor.value;
2702
2705
  // Caretaker note: we have still left the `typeof` condition in order to avoid
2703
2706
  // creating a breaking change for projects that still use the View Engine.
2704
2707
  if (typeof ngDevMode === 'undefined' || ngDevMode) {
2705
- var isNotMethod = !(descriptor && descriptor.value !== null);
2706
- if (isNotMethod) {
2708
+ if (originalFn && typeof originalFn !== 'function') {
2707
2709
  throwSelectorDecoratorError();
2708
2710
  }
2709
2711
  }
2710
- var originalFn = descriptor.value;
2711
2712
  var memoizedFn = createSelector(selectors, originalFn, {
2712
2713
  containerClass: target,
2713
2714
  selectorName: key.toString(),
2714
2715
  getSelectorOptions: function () {
2715
2716
  return {};
2716
- }
2717
+ },
2717
2718
  });
2718
2719
  var newDescriptor = {
2719
2720
  configurable: true,
2720
2721
  get: function () {
2721
2722
  return memoizedFn;
2722
- }
2723
+ },
2723
2724
  };
2724
2725
  // Add hidden property to descriptor
2725
2726
  newDescriptor['originalFn'] = originalFn;
@@ -2766,6 +2767,88 @@
2766
2767
  type: i0.NgModule
2767
2768
  }] });
2768
2769
 
2770
+ function ensureValidSelector(selector, context) {
2771
+ if (context === void 0) { context = {}; }
2772
+ var noun = context.noun || 'selector';
2773
+ var prefix = context.prefix ? context.prefix + ': ' : '';
2774
+ ensureValueProvided(selector, { noun: noun, prefix: context.prefix });
2775
+ var metadata = getSelectorMetadata$1(selector) || getStoreMetadata$1(selector);
2776
+ if (!metadata) {
2777
+ throw new Error(prefix + "The value provided as the " + noun + " is not a valid selector.");
2778
+ }
2779
+ }
2780
+ function ensureValueProvided(value, context) {
2781
+ if (context === void 0) { context = {}; }
2782
+ var noun = context.noun || 'value';
2783
+ var prefix = context.prefix ? context.prefix + ': ' : '';
2784
+ if (!value) {
2785
+ throw new Error(prefix + "A " + noun + " must be provided.");
2786
+ }
2787
+ }
2788
+
2789
+ function createModelSelector(selectorMap) {
2790
+ var selectorKeys = Object.keys(selectorMap);
2791
+ var selectors = Object.values(selectorMap);
2792
+ ensureValidSelectorMap({
2793
+ prefix: '[createModelSelector]',
2794
+ selectorMap: selectorMap,
2795
+ selectorKeys: selectorKeys,
2796
+ selectors: selectors,
2797
+ });
2798
+ return createSelector(selectors, function () {
2799
+ var args = [];
2800
+ for (var _i = 0; _i < arguments.length; _i++) {
2801
+ args[_i] = arguments[_i];
2802
+ }
2803
+ return selectorKeys.reduce(function (obj, key, index) {
2804
+ obj[key] = args[index];
2805
+ return obj;
2806
+ }, {});
2807
+ });
2808
+ }
2809
+ function ensureValidSelectorMap(_a) {
2810
+ var prefix = _a.prefix, selectorMap = _a.selectorMap, selectorKeys = _a.selectorKeys, selectors = _a.selectors;
2811
+ ensureValueProvided(selectorMap, { prefix: prefix, noun: 'selector map' });
2812
+ ensureValueProvided(typeof selectorMap === 'object', { prefix: prefix, noun: 'valid selector map' });
2813
+ ensureValueProvided(selectorKeys.length, { prefix: prefix, noun: 'non-empty selector map' });
2814
+ selectors.forEach(function (selector, index) { return ensureValidSelector(selector, {
2815
+ prefix: prefix,
2816
+ noun: "selector for the '" + selectorKeys[index] + "' property",
2817
+ }); });
2818
+ }
2819
+
2820
+ function createPickSelector(selector, keys) {
2821
+ ensureValidSelector(selector, { prefix: '[createPickSelector]' });
2822
+ var validKeys = keys.filter(Boolean);
2823
+ var selectors = validKeys.map(function (key) { return createSelector([selector], function (s) { return s[key]; }); });
2824
+ return createSelector(__spreadArray([], __read(selectors)), function () {
2825
+ var props = [];
2826
+ for (var _i = 0; _i < arguments.length; _i++) {
2827
+ props[_i] = arguments[_i];
2828
+ }
2829
+ return validKeys.reduce(function (acc, key, index) {
2830
+ acc[key] = props[index];
2831
+ return acc;
2832
+ }, {});
2833
+ });
2834
+ }
2835
+
2836
+ function createPropertySelectors(parentSelector) {
2837
+ ensureValidSelector(parentSelector, {
2838
+ prefix: '[createPropertySelectors]',
2839
+ noun: 'parent selector',
2840
+ });
2841
+ var cache = {};
2842
+ return new Proxy({}, {
2843
+ get: function (_target, prop) {
2844
+ var selector = cache[prop] ||
2845
+ createSelector([parentSelector], function (s) { return s === null || s === void 0 ? void 0 : s[prop]; });
2846
+ cache[prop] = selector;
2847
+ return selector;
2848
+ },
2849
+ });
2850
+ }
2851
+
2769
2852
  /**
2770
2853
  * The public api for consumers of @ngxs/store
2771
2854
  */
@@ -2792,6 +2875,9 @@
2792
2875
  exports.Store = Store;
2793
2876
  exports.UpdateState = UpdateState;
2794
2877
  exports.actionMatcher = actionMatcher;
2878
+ exports.createModelSelector = createModelSelector;
2879
+ exports.createPickSelector = createPickSelector;
2880
+ exports.createPropertySelectors = createPropertySelectors;
2795
2881
  exports.createSelector = createSelector;
2796
2882
  exports.ensureSelectorMetadata = ensureSelectorMetadata;
2797
2883
  exports.ensureStoreMetadata = ensureStoreMetadata;