stacktape 3.0.4 → 3.0.6

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/index.js CHANGED
@@ -2636,14 +2636,53 @@ var getPropertiesSymbol = Symbol.for("stacktape:getProperties");
2636
2636
  var getOverridesSymbol = Symbol.for("stacktape:getOverrides");
2637
2637
  var getTransformsSymbol = Symbol.for("stacktape:getTransforms");
2638
2638
  var setResourceNameSymbol = Symbol.for("stacktape:setResourceName");
2639
- var ResourceParamReference = class {
2639
+ var resourceParamRefSymbol = Symbol.for("stacktape:isResourceParamRef");
2640
+ var baseTypePropertiesSymbol = Symbol.for("stacktape:isBaseTypeProperties");
2641
+ var isBaseResource = /* @__PURE__ */ __name((value) => value !== null && typeof value === "object" && setResourceNameSymbol in value, "isBaseResource");
2642
+ var isBaseTypeProperties = /* @__PURE__ */ __name((value) => value !== null && typeof value === "object" && baseTypePropertiesSymbol in value, "isBaseTypeProperties");
2643
+ var isResourceParamReference = /* @__PURE__ */ __name((value) => value !== null && typeof value === "object" && resourceParamRefSymbol in value, "isResourceParamReference");
2644
+ var deferredNameSymbol = Symbol.for("stacktape:isDeferredResourceName");
2645
+ var isDeferredResourceName = /* @__PURE__ */ __name((value) => value !== null && typeof value === "object" && deferredNameSymbol in value, "isDeferredResourceName");
2646
+ var _a;
2647
+ _a = deferredNameSymbol;
2648
+ var DeferredResourceName = class {
2649
+ constructor(resource) {
2650
+ this[_a] = true;
2651
+ this.__resource = resource;
2652
+ }
2640
2653
  static {
2641
- __name(this, "ResourceParamReference");
2654
+ __name(this, "DeferredResourceName");
2655
+ }
2656
+ resolve() {
2657
+ const name = this.__resource._resourceName;
2658
+ if (name === void 0) {
2659
+ throw new Error(
2660
+ "Resource name not set. Make sure to add the resource to the resources object in your config. The resource name is automatically derived from the object key."
2661
+ );
2662
+ }
2663
+ return name;
2664
+ }
2665
+ toString() {
2666
+ return this.resolve();
2667
+ }
2668
+ toJSON() {
2669
+ return this.resolve();
2670
+ }
2671
+ valueOf() {
2672
+ return this.resolve();
2642
2673
  }
2674
+ };
2675
+ var _a2;
2676
+ _a2 = resourceParamRefSymbol;
2677
+ var ResourceParamReference = class {
2643
2678
  constructor(resource, param) {
2679
+ this[_a2] = true;
2644
2680
  this.__resource = resource;
2645
2681
  this.__param = param;
2646
2682
  }
2683
+ static {
2684
+ __name(this, "ResourceParamReference");
2685
+ }
2647
2686
  toString() {
2648
2687
  return `$ResourceParam('${this.__resource.resourceName}', '${this.__param}')`;
2649
2688
  }
@@ -2655,14 +2694,17 @@ var ResourceParamReference = class {
2655
2694
  return this.toString();
2656
2695
  }
2657
2696
  };
2697
+ var _a3;
2698
+ _a3 = baseTypePropertiesSymbol;
2658
2699
  var BaseTypeProperties = class {
2659
- static {
2660
- __name(this, "BaseTypeProperties");
2661
- }
2662
2700
  constructor(type, properties) {
2701
+ this[_a3] = true;
2663
2702
  this.type = type;
2664
2703
  this.properties = properties;
2665
2704
  }
2705
+ static {
2706
+ __name(this, "BaseTypeProperties");
2707
+ }
2666
2708
  };
2667
2709
  var BaseResource = class {
2668
2710
  static {
@@ -2704,11 +2746,10 @@ var BaseResource = class {
2704
2746
  }
2705
2747
  }
2706
2748
  // Public getter for resource name (used for referencing resources)
2749
+ // Returns a deferred reference when name isn't set yet, which resolves during transformation
2707
2750
  get resourceName() {
2708
2751
  if (this._resourceName === void 0) {
2709
- throw new Error(
2710
- "Resource name not set. Make sure to add the resource to the resources object in your config. The resource name is automatically derived from the object key."
2711
- );
2752
+ return new DeferredResourceName(this);
2712
2753
  }
2713
2754
  return this._resourceName;
2714
2755
  }
@@ -2835,7 +2876,7 @@ var transformConfigWithResources = /* @__PURE__ */ __name((config) => {
2835
2876
  if (config.resources && typeof config.resources === "object") {
2836
2877
  for (const key in config.resources) {
2837
2878
  const resource = config.resources[key];
2838
- if (resource instanceof BaseResource) {
2879
+ if (isBaseResource(resource)) {
2839
2880
  resource[setResourceNameSymbol](key);
2840
2881
  }
2841
2882
  }
@@ -2868,7 +2909,7 @@ var transformResourceDefinitions = /* @__PURE__ */ __name((resources) => {
2868
2909
  const result = {};
2869
2910
  for (const key in resources) {
2870
2911
  const resource = resources[key];
2871
- if (resource instanceof BaseResource) {
2912
+ if (isBaseResource(resource)) {
2872
2913
  const type = resource[getTypeSymbol]();
2873
2914
  const properties = resource[getPropertiesSymbol]();
2874
2915
  const overrides = resource[getOverridesSymbol]();
@@ -2892,7 +2933,7 @@ var transformScriptDefinitions = /* @__PURE__ */ __name((scripts) => {
2892
2933
  const result = {};
2893
2934
  for (const key in scripts) {
2894
2935
  const script = scripts[key];
2895
- if (script instanceof BaseTypeProperties) {
2936
+ if (isBaseTypeProperties(script)) {
2896
2937
  result[key] = {
2897
2938
  type: script.type,
2898
2939
  properties: transformValue(script.properties)
@@ -2907,13 +2948,16 @@ var transformValue = /* @__PURE__ */ __name((value) => {
2907
2948
  if (value === null || value === void 0) {
2908
2949
  return value;
2909
2950
  }
2910
- if (value instanceof ResourceParamReference) {
2951
+ if (isDeferredResourceName(value)) {
2952
+ return value.resolve();
2953
+ }
2954
+ if (isResourceParamReference(value)) {
2911
2955
  return value.toString();
2912
2956
  }
2913
- if (value instanceof BaseResource) {
2957
+ if (isBaseResource(value)) {
2914
2958
  return value.resourceName;
2915
2959
  }
2916
- if (value instanceof BaseTypeProperties) {
2960
+ if (isBaseTypeProperties(value)) {
2917
2961
  return {
2918
2962
  type: value.type,
2919
2963
  properties: transformValue(value.properties)
@@ -2921,7 +2965,7 @@ var transformValue = /* @__PURE__ */ __name((value) => {
2921
2965
  }
2922
2966
  if (Array.isArray(value)) {
2923
2967
  return value.map((item) => {
2924
- if (item instanceof BaseResource) {
2968
+ if (isBaseResource(item)) {
2925
2969
  return item.resourceName;
2926
2970
  }
2927
2971
  return transformValue(item);