@iobroker/js-controller-adapter 6.0.10-alpha.0-20240804-d9be20474 → 6.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2014-2023 bluefox<dogafox@gmail.com>,
3
+ Copyright (c) 2014-2024 bluefox<dogafox@gmail.com>,
4
4
  Copyright (c) 2014 hobbyquaker
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
package/README.md CHANGED
@@ -3,4 +3,4 @@ The Library contains the Adapter class of ioBroker.
3
3
 
4
4
  ## License
5
5
  MIT
6
- Copyright 2018-2023 bluefox <dogafox@gmail.com>
6
+ Copyright 2018-2024 bluefox <dogafox@gmail.com>
@@ -173,7 +173,7 @@ export interface InternalFormatDateOptions {
173
173
  _format?: string;
174
174
  }
175
175
  export interface AliasDetails {
176
- source: AliasDetailsSource | null;
176
+ source?: AliasDetailsSource;
177
177
  targets: AliasTargetEntry[];
178
178
  }
179
179
  export interface AliasDetailsSource {
@@ -727,7 +727,19 @@ export declare class AdapterClass extends EventEmitter {
727
727
  getForeignStates(pattern: Pattern, callback: ioBroker.GetStatesCallback): void;
728
728
  getForeignStates(pattern: Pattern, options: unknown, callback: ioBroker.GetStatesCallback): void;
729
729
  private _getForeignStates;
730
+ /**
731
+ * Add subscription for given alias, if it is not a state it will be ignored
732
+ *
733
+ * @param aliasObj the alias object
734
+ * @param pattern pattern to subscribe for
735
+ */
730
736
  private _addAliasSubscribe;
737
+ /**
738
+ * Remove an alias subscribe
739
+ *
740
+ * @param sourceId id of the source object
741
+ * @param aliasObjOrIdx the alias target or the index of the targets array
742
+ */
731
743
  private _removeAliasSubscribe;
732
744
  subscribeForeignStates(pattern: Pattern, callback?: ioBroker.ErrorCallback): void;
733
745
  subscribeForeignStates(pattern: Pattern, options: unknown, callback?: ioBroker.ErrorCallback): void;
@@ -4923,85 +4923,63 @@ class AdapterClass extends import_node_events.EventEmitter {
4923
4923
  }
4924
4924
  }
4925
4925
  }
4926
- async _addAliasSubscribe(aliasObj, pattern, callback) {
4927
- if (aliasObj?.common?.alias?.id) {
4928
- if (aliasObj.type !== "state") {
4929
- this._logger.warn(
4930
- `${this.namespaceLog} Expected alias ${aliasObj._id} to be of type "state", got "${aliasObj.type}"`
4931
- );
4932
- return import_js_controller_common.tools.maybeCallbackWithError(
4933
- callback,
4934
- new Error(`Expected alias ${aliasObj._id} to be of type "state", got "${aliasObj.type}"`)
4935
- );
4936
- }
4937
- const sourceId = import_js_controller_common.tools.isObject(aliasObj.common.alias.id) ? aliasObj.common.alias.id.read : aliasObj.common.alias.id;
4938
- try {
4939
- this._utils.validateId(sourceId, true, null);
4940
- } catch (e) {
4941
- this._logger.warn(`${this.namespaceLog} Error validating alias id of ${aliasObj._id}: ${e.message}`);
4942
- return import_js_controller_common.tools.maybeCallbackWithError(callback, new Error(`Error validating alias id of ${aliasObj._id}: ${e.message}`));
4943
- }
4944
- let aliasDetails;
4945
- if (!this.aliases.has(sourceId)) {
4946
- aliasDetails = { source: null, targets: [] };
4947
- this.aliases.set(sourceId, aliasDetails);
4948
- } else {
4949
- aliasDetails = this.aliases.get(sourceId) || { source: null, targets: [] };
4950
- }
4951
- const targetEntry = {
4952
- alias: (0, import_deep_clone.default)(aliasObj.common.alias),
4953
- id: aliasObj._id,
4954
- pattern,
4955
- type: aliasObj.common.type,
4956
- max: aliasObj.common.max,
4957
- min: aliasObj.common.min,
4958
- unit: aliasObj.common.unit
4959
- };
4960
- aliasDetails.targets.push(targetEntry);
4961
- if (!aliasDetails.source) {
4962
- let sourceObj;
4963
- try {
4964
- await this.#states.subscribe(sourceId);
4965
- sourceObj = await this.#objects.getObject(sourceId, { user: import_constants.SYSTEM_ADMIN_USER });
4966
- } catch (e) {
4967
- return import_js_controller_common.tools.maybeCallbackWithError(callback, e);
4968
- }
4969
- if (sourceObj?.common) {
4970
- if (!this.aliases.has(sourceObj._id)) {
4971
- this._logger.error(`${this.namespaceLog} Alias subscription error. Please check your alias definitions: sourceId=${sourceId}, sourceObj=${JSON.stringify(sourceObj)}`);
4972
- } else {
4973
- aliasDetails.source = {
4974
- min: sourceObj.common.min,
4975
- max: sourceObj.common.max,
4976
- type: sourceObj.common.type,
4977
- unit: sourceObj.common.unit
4978
- };
4979
- }
4980
- }
4981
- return import_js_controller_common.tools.maybeCallback(callback);
4982
- } else {
4983
- return import_js_controller_common.tools.maybeCallback(callback);
4984
- }
4985
- } else if (aliasObj && aliasObj.type === "state") {
4926
+ async _addAliasSubscribe(aliasObj, pattern) {
4927
+ if (aliasObj.type !== "state") {
4928
+ return;
4929
+ }
4930
+ if (!aliasObj.common?.alias?.id) {
4986
4931
  this._logger.warn(`${this.namespaceLog} Alias ${aliasObj._id} has no target 5`);
4987
- return import_js_controller_common.tools.maybeCallbackWithError(callback, new Error(`Alias ${aliasObj._id} has no target`));
4932
+ throw new Error(`Alias ${aliasObj._id} has no target`);
4933
+ }
4934
+ const sourceId = import_js_controller_common.tools.isObject(aliasObj.common.alias.id) ? aliasObj.common.alias.id.read : aliasObj.common.alias.id;
4935
+ try {
4936
+ this._utils.validateId(sourceId, true, null);
4937
+ } catch (e) {
4938
+ throw new Error(`Error validating alias id of ${aliasObj._id}: ${e.message}`);
4939
+ }
4940
+ const targetEntry = {
4941
+ alias: (0, import_deep_clone.default)(aliasObj.common.alias),
4942
+ id: aliasObj._id,
4943
+ pattern,
4944
+ type: aliasObj.common.type,
4945
+ max: aliasObj.common.max,
4946
+ min: aliasObj.common.min,
4947
+ unit: aliasObj.common.unit
4948
+ };
4949
+ let aliasDetails;
4950
+ if (!this.aliases.has(sourceId)) {
4951
+ aliasDetails = { targets: [] };
4952
+ this.aliases.set(sourceId, aliasDetails);
4988
4953
  } else {
4989
- return import_js_controller_common.tools.maybeCallback(callback);
4954
+ aliasDetails = this.aliases.get(sourceId);
4955
+ }
4956
+ if (!aliasDetails.source) {
4957
+ await this.#states.subscribe(sourceId);
4958
+ const sourceObj = await this.#objects.getObject(sourceId, { user: import_constants.SYSTEM_ADMIN_USER });
4959
+ if (sourceObj?.common && this.aliases.has(sourceObj._id)) {
4960
+ aliasDetails.source = {
4961
+ min: sourceObj.common.min,
4962
+ max: sourceObj.common.max,
4963
+ type: sourceObj.common.type,
4964
+ unit: sourceObj.common.unit
4965
+ };
4966
+ }
4990
4967
  }
4968
+ aliasDetails.targets.push(targetEntry);
4991
4969
  }
4992
- async _removeAliasSubscribe(sourceId, aliasObj, callback) {
4970
+ async _removeAliasSubscribe(sourceId, aliasObjOrIdx) {
4993
4971
  if (!this.aliases.has(sourceId)) {
4994
- return import_js_controller_common.tools.maybeCallback(callback);
4972
+ return;
4995
4973
  }
4996
- const pos = typeof aliasObj === "number" ? aliasObj : this.aliases.get(sourceId).targets.indexOf(aliasObj);
4974
+ const alias = this.aliases.get(sourceId);
4975
+ const pos = typeof aliasObjOrIdx === "number" ? aliasObjOrIdx : alias.targets.indexOf(aliasObjOrIdx);
4997
4976
  if (pos !== -1) {
4998
- this.aliases.get(sourceId).targets.splice(pos, 1);
4999
- if (!this.aliases.get(sourceId).targets.length) {
4977
+ alias.targets.splice(pos, 1);
4978
+ if (!alias.targets.length) {
5000
4979
  this.aliases.delete(sourceId);
5001
4980
  await this.#states.unsubscribe(sourceId);
5002
4981
  }
5003
4982
  }
5004
- return import_js_controller_common.tools.maybeCallback(callback);
5005
4983
  }
5006
4984
  subscribeForeignStates(pattern, options, callback) {
5007
4985
  pattern = pattern || "*";
@@ -5076,7 +5054,7 @@ class AdapterClass extends import_node_events.EventEmitter {
5076
5054
  const aliasObjs = await this._getObjectsByArray(aliasesIds, options);
5077
5055
  for (const aliasObj of aliasObjs) {
5078
5056
  if (aliasObj) {
5079
- promises.push(new Promise((resolve) => this._addAliasSubscribe(aliasObj, aliasObj._id, resolve)));
5057
+ promises.push(this._addAliasSubscribe(aliasObj, aliasObj._id));
5080
5058
  }
5081
5059
  }
5082
5060
  }
@@ -5106,7 +5084,7 @@ class AdapterClass extends import_node_events.EventEmitter {
5106
5084
  for (const id of Object.keys(objs)) {
5107
5085
  if (id.startsWith(import_constants.ALIAS_STARTS_WITH)) {
5108
5086
  const aliasObj = objs[id];
5109
- promises.push(new Promise((resolve) => this._addAliasSubscribe(aliasObj, pattern, resolve)));
5087
+ promises.push(this._addAliasSubscribe(aliasObj, pattern));
5110
5088
  }
5111
5089
  }
5112
5090
  try {
@@ -5136,9 +5114,10 @@ class AdapterClass extends import_node_events.EventEmitter {
5136
5114
  this.#objects.subscribe(`${import_constants.ALIAS_STARTS_WITH}*`);
5137
5115
  }
5138
5116
  try {
5139
- const aliasObj = await this.#objects.getObjectAsync(pattern, options);
5117
+ const aliasObj = await this.#objects.getObject(pattern, options);
5140
5118
  if (aliasObj) {
5141
- await this._addAliasSubscribe(aliasObj, pattern, callback);
5119
+ await this._addAliasSubscribe(aliasObj, pattern);
5120
+ return import_js_controller_common.tools.maybeCallback(callback);
5142
5121
  } else {
5143
5122
  return import_js_controller_common.tools.maybeCallback(callback);
5144
5123
  }
@@ -5993,13 +5972,12 @@ class AdapterClass extends import_node_events.EventEmitter {
5993
5972
  if (obj?.common?.alias?.id) {
5994
5973
  const newSourceId = typeof obj.common.alias.id.read === "string" ? obj.common.alias.id.read : obj.common.alias.id;
5995
5974
  if (newSourceId !== sourceId) {
5996
- this._removeAliasSubscribe(sourceId, targetAlias, async () => {
5997
- try {
5998
- await this._addAliasSubscribe(obj, targetAlias.pattern);
5999
- } catch (e) {
6000
- this._logger.error(`${this.namespaceLog} Could not add alias subscription: ${e.message}`);
6001
- }
6002
- });
5975
+ await this._removeAliasSubscribe(sourceId, targetAlias);
5976
+ try {
5977
+ await this._addAliasSubscribe(obj, targetAlias.pattern);
5978
+ } catch (e) {
5979
+ this._logger.error(`${this.namespaceLog} Could not add alias subscription: ${e.message}`);
5980
+ }
6003
5981
  } else {
6004
5982
  targetAlias.min = obj.common.min;
6005
5983
  targetAlias.max = obj.common.max;
@@ -6007,11 +5985,11 @@ class AdapterClass extends import_node_events.EventEmitter {
6007
5985
  targetAlias.alias = (0, import_deep_clone.default)(obj.common.alias);
6008
5986
  }
6009
5987
  } else {
6010
- this._removeAliasSubscribe(sourceId, targetAlias);
5988
+ await this._removeAliasSubscribe(sourceId, targetAlias);
6011
5989
  }
6012
5990
  }
6013
5991
  }
6014
- if (isNewAlias) {
5992
+ if (isNewAlias && obj) {
6015
5993
  for (const aliasPattern of this.aliasPatterns) {
6016
5994
  const testPattern = aliasPattern.slice(-1) === "*" ? new RegExp(import_js_controller_common.tools.pattern2RegEx(aliasPattern)) : aliasPattern;
6017
5995
  if (typeof testPattern === "string" && aliasPattern === id || testPattern instanceof RegExp && testPattern.test(id)) {