@kosdev-code/kos-ui-sdk 3.0.21 → 3.0.23

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.
Files changed (54) hide show
  1. package/core/core/kosCore.d.ts +1 -0
  2. package/core/core/kosCore.d.ts.map +1 -1
  3. package/core/core/kosModel.d.ts +11 -0
  4. package/core/core/kosModel.d.ts.map +1 -1
  5. package/core/core/kosModelManager.d.ts +8 -0
  6. package/core/core/kosModelManager.d.ts.map +1 -1
  7. package/core/core/lifecycle/constants.d.ts +1 -1
  8. package/core/core/lifecycle/constants.d.ts.map +1 -1
  9. package/core/core/model/kos-subscription-manager.d.ts +1 -0
  10. package/core/core/model/kos-subscription-manager.d.ts.map +1 -1
  11. package/core/core/registration/index.d.ts +1 -1
  12. package/core/core/registration/index.d.ts.map +1 -1
  13. package/core/core/registration/model-registration.d.ts +11 -0
  14. package/core/core/registration/model-registration.d.ts.map +1 -1
  15. package/core/index.d.ts +1 -1
  16. package/core/index.d.ts.map +1 -1
  17. package/core/util/kos-model-utils.d.ts +13 -0
  18. package/core/util/kos-model-utils.d.ts.map +1 -1
  19. package/{index-DUoSahlA.cjs → index-CRb8ucfF.cjs} +115 -48
  20. package/index-CRb8ucfF.cjs.map +1 -0
  21. package/{index-BUwbSjst.js → index-YzHb2lnB.js} +116 -49
  22. package/index-YzHb2lnB.js.map +1 -0
  23. package/index.cjs +113 -26
  24. package/index.cjs.map +1 -1
  25. package/index.js +114 -27
  26. package/index.js.map +1 -1
  27. package/models/decorators/kos-config-bean-prop.d.ts +5 -0
  28. package/models/decorators/kos-config-bean-prop.d.ts.map +1 -1
  29. package/models/decorators/kos-config-bean.d.ts +7 -1
  30. package/models/decorators/kos-config-bean.d.ts.map +1 -1
  31. package/models/models/config-bean/config-bean-model.d.ts +9 -0
  32. package/models/models/config-bean/config-bean-model.d.ts.map +1 -1
  33. package/models/models/config-bean/config-bean-types.d.ts +2 -0
  34. package/models/models/config-bean/config-bean-types.d.ts.map +1 -1
  35. package/models/models/config-bean-prop/config-bean-prop-model.d.ts +3 -0
  36. package/models/models/config-bean-prop/config-bean-prop-model.d.ts.map +1 -1
  37. package/models/models/config-bean-prop/types/index.d.ts +10 -0
  38. package/models/models/region-info/region-info-model.d.ts +12 -1
  39. package/models/models/region-info/region-info-model.d.ts.map +1 -1
  40. package/models/models/region-info/services/region-info-services.d.ts +2 -2
  41. package/models/models/region-info/services/region-info-services.d.ts.map +1 -1
  42. package/models/models/region-info/types/index.d.ts +7 -0
  43. package/models/models/region-info/types/index.d.ts.map +1 -1
  44. package/models/services/config-bean/index.d.ts +2 -2
  45. package/models/services/config-bean/index.d.ts.map +1 -1
  46. package/package.json +2 -2
  47. package/testing/index.d.ts +51 -9
  48. package/testing/index.d.ts.map +1 -1
  49. package/testing.cjs +57 -3
  50. package/testing.cjs.map +1 -1
  51. package/testing.js +57 -3
  52. package/testing.js.map +1 -1
  53. package/index-BUwbSjst.js.map +0 -1
  54. package/index-DUoSahlA.cjs.map +0 -1
@@ -30,6 +30,11 @@ interface KosConfigParams {
30
30
  optionsExpander?: OptionsExpander;
31
31
  lazy?: boolean;
32
32
  serviceBasePath?: string;
33
+ /**
34
+ * Connection the property's bean is routed to. Accepts a prop key so a host
35
+ * model can bind it per device; the property and bean ids include it.
36
+ */
37
+ destinationAddress?: string;
33
38
  converter?: {
34
39
  measure?: string;
35
40
  from?: UnitConverter | string;
@@ -1 +1 @@
1
- {"version":3,"file":"kos-config-bean-prop.d.ts","sourceRoot":"","sources":["../../../../../packages/kos-ui-sdk/src/models/decorators/kos-config-bean-prop.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,eAAe,GACvB,qBAAqB,GACrB,yBAAyB,GACzB,sBAAsB,GACtB,mBAAmB,CAAC;AACxB,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EACN,IAAI,CAAC,mBAAmB,GACxB,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;QAC9B,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,IAuB/C,QAAQ,EAAE,GAAG,GAAG,EAAE,MAAM,WAAW,KAAG,GAAG,CAmBlD"}
1
+ {"version":3,"file":"kos-config-bean-prop.d.ts","sourceRoot":"","sources":["../../../../../packages/kos-ui-sdk/src/models/decorators/kos-config-bean-prop.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,eAAe,GACvB,qBAAqB,GACrB,yBAAyB,GACzB,sBAAsB,GACtB,mBAAmB,CAAC;AACxB,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EACN,IAAI,CAAC,mBAAmB,GACxB,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;QAC9B,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,IAwB/C,QAAQ,EAAE,GAAG,GAAG,EAAE,MAAM,WAAW,KAAG,GAAG,CAsBlD"}
@@ -2,7 +2,13 @@ interface KosConfigParams {
2
2
  path: string;
3
3
  lazy?: boolean;
4
4
  serviceBasePath?: string;
5
+ /**
6
+ * Connection the bean's requests and topic subscription are routed to.
7
+ * Accepts a prop key so a host model can bind it per device.
8
+ * When set, the bean's model id includes it so beans never collide across devices.
9
+ */
10
+ destinationAddress?: string;
5
11
  }
6
- export declare const kosConfigBean: ({ path, lazy, serviceBasePath }: KosConfigParams) => (target: {} | any, name: PropertyKey) => any;
12
+ export declare const kosConfigBean: ({ path, lazy, serviceBasePath, destinationAddress }: KosConfigParams) => (target: {} | any, name: PropertyKey) => any;
7
13
  export {};
8
14
  //# sourceMappingURL=kos-config-bean.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kos-config-bean.d.ts","sourceRoot":"","sources":["../../../../../packages/kos-ui-sdk/src/models/decorators/kos-config-bean.ts"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,aAAa,GACvB,iCAAiC,eAAe,MAChD,QAAQ,EAAE,GAAG,GAAG,EAAE,MAAM,WAAW,KAAG,GAatC,CAAC"}
1
+ {"version":3,"file":"kos-config-bean.d.ts","sourceRoot":"","sources":["../../../../../packages/kos-ui-sdk/src/models/decorators/kos-config-bean.ts"],"names":[],"mappings":"AAKA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,GACvB,qDAAqD,eAAe,MACpE,QAAQ,EAAE,GAAG,GAAG,EAAE,MAAM,WAAW,KAAG,GActC,CAAC"}
@@ -57,6 +57,13 @@ import { ConfigPropertyTypes } from '../types';
57
57
  */
58
58
  export type IConfigBeanModel<T extends {} = any> = PublicModelInterface<ConfigBeanModelImpl<T>>;
59
59
  export declare const CONFIG_BEAN_MODEL_TYPE = "config-bean-model";
60
+ /**
61
+ * Model id of the bean for a config path; the destination is part of the id
62
+ * so the same path on two devices never shares one bean.
63
+ * @ignore
64
+ * @internal
65
+ */
66
+ export declare function configBeanModelId(path: string, destinationAddress?: string): string;
60
67
  /**
61
68
  * @ignore
62
69
  * @internal
@@ -78,6 +85,8 @@ declare class ConfigBeanModelImpl<T extends {} = any> implements IKosDataModel {
78
85
  prevProps: KosData<Record<ConfigBeanKeys<T>, ConfigPropertyTypes>>;
79
86
  /** Optional custom base path for configuration service endpoints */
80
87
  serviceBasePath?: string;
88
+ /** Connection the bean's requests and topic subscription are routed to */
89
+ destinationAddress?: string;
81
90
  /**
82
91
  * @category Constructor
83
92
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config-bean-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/config-bean/config-bean-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EACP,oBAAoB,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAKL,2BAA2B,EAG5B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAGL,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAO/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,oBAAoB,CACrE,mBAAmB,CAAC,CAAC,CAAC,CACvB,CAAC;AAYF,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAoB1D;;;GAGG;AACH,cACM,mBAAmB,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,CAAE,YAAW,aAAa;IACpE,yDAAyD;IACzD,OAAO,CAAC,iBAAiB,CAAiC;IAE1D,0DAA0D;IAC1D,OAAO,CAAC,cAAc,CAA8B;IAEpD,oEAAoE;IACpE,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE/D,oFAAoF;IACpF,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEnE,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;OAQG;gBACS,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB;IAqB7D;;;;;;;;;;;OAWG;IACH,IAAI,MAAM,wCAET;IAED;;OAEG;IACG,KAAK;IAIX;;;;;;;OAOG;IACG,IAAI;IAgBV;;;;OAIG;IACH,IAAI,UAAU,aAEb;IAED;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM;IAahC;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB;IAIvE;;;;;;;;;;OAUG;IACG,gBAAgB;IAOtB;;;;;;;OAOG;IAKH,uBAAuB,CAAC,UAAU,EAAE,wBAAwB;CAG7D;AAED,eAAO,MAAM,UAAU,6EAMrB,CAAC"}
1
+ {"version":3,"file":"config-bean-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/config-bean/config-bean-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EACP,oBAAoB,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAKL,2BAA2B,EAG5B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,cAAc,EACd,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAGL,KAAK,wBAAwB,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAO/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,oBAAoB,CACrE,mBAAmB,CAAC,CAAC,CAAC,CACvB,CAAC;AAYF,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAM1D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAIR;AAiBD;;;GAGG;AACH,cACM,mBAAmB,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,CAAE,YAAW,aAAa;IACpE,yDAAyD;IACzD,OAAO,CAAC,iBAAiB,CAAiC;IAE1D,0DAA0D;IAC1D,OAAO,CAAC,cAAc,CAA8B;IAEpD,oEAAoE;IACpE,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE/D,oFAAoF;IACpF,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEnE,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;OAQG;gBACS,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB;IAsB7D;;;;;;;;;;;OAWG;IACH,IAAI,MAAM,wCAET;IAED;;OAEG;IACG,KAAK;IAIX;;;;;;;OAOG;IACG,IAAI;IAoBV;;;;OAIG;IACH,IAAI,UAAU,aAEb;IAED;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM;IAahC;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB;IAIvE;;;;;;;;;;OAUG;IACG,gBAAgB;IAYtB;;;;;;;OAOG;IAOH,uBAAuB,CAAC,UAAU,EAAE,wBAAwB;CAG7D;AAED,eAAO,MAAM,UAAU,6EAMrB,CAAC"}
@@ -57,6 +57,8 @@ export interface IConfigBeanModelOptionsActions {
57
57
  export interface IConfigBeanModelOptions extends Partial<IConfigBeanModelOptionsActions> {
58
58
  serviceBasePath?: string;
59
59
  path: string;
60
+ /** Connection the bean's requests and topic subscription are routed to. */
61
+ destinationAddress?: string;
60
62
  }
61
63
  export type ConfigBeanKeys<T> = keyof T;
62
64
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config-bean-types.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/config-bean/config-bean-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,CACjB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,iBAAiB,KACrB,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAEtD;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,CACd,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,uBACf,SAAQ,OAAO,CAAC,8BAA8B,CAAC;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACxC;;;;;GAKG"}
1
+ {"version":3,"file":"config-bean-types.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/config-bean/config-bean-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,CACjB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,iBAAiB,KACrB,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAEtD;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,CACd,EAAE,EAAE,MAAM,KACP,OAAO,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,uBACf,SAAQ,OAAO,CAAC,8BAA8B,CAAC;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AACxC;;;;;GAKG"}
@@ -16,6 +16,9 @@ declare class KosConfigPropertyImpl implements KosConfigProperty {
16
16
  formatter?: FormatOptions;
17
17
  optionsExpander?: OptionsExpander;
18
18
  serviceBasePath?: string;
19
+ destinationAddress?: string;
20
+ readonly configBeanId: string;
21
+ readonly regionInfoId: string;
19
22
  regionInfo: RegionInfoModel;
20
23
  bean: IConfigBeanModel;
21
24
  constructor(modelId: string, options: ConfigBeanPropOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"config-bean-prop-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/config-bean-prop/config-bean-prop-model.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAS3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAKpD,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAC;AAmDjB;;;GAGG;AACH,cACM,qBAAsB,YAAW,iBAAiB;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,UAAU,EAAG,eAAe,CAAC;IAG7B,IAAI,EAAG,gBAAgB,CAAC;gBAEZ,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB;IAY3D;;;;;;;QAOI;IACJ,2BAA2B,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM;IAgBf;;;;;;;;;QASI;IACJ,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAW5D;;;;OAIG;IACH,IAAI,UAAU,iEAOb;IAED;;;;OAIG;IACH,IAAI,YAAY,WAMf;IAED;;;;;;;;;;;;;OAaG;IACH,IAAI,OAAO,kBAwBV;IAED,WAAW,CACT,SAAS,CAAC,EAAE,aAAa,EACzB,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM;;;;;IAazB,iBAAiB;;;;;;;;IAajB;;;;;;;;;OASG;IACH,IAAI,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAEnC;IAED;;;;;;;;;OASG;IACH,IAAI,KAAK,IAdQ,mBAAmB,CAgBnC;IAED;;;;OAIG;IACH,IAAI,QAAQ,YAEX;IAED;;;;OAIG;IACH,IAAI,gBAAgB,YA8BnB;IAED;;;;;;;;;;;OAWG;IACH,IAAI,aAAa,OAEhB;IAED,QAAQ,CAAC,OAAO,EAAE,OAAO;IAczB;;OAEG;IACG,QAAQ;IAId;;;;;;;;;;OAUG;IACH,IAAI,YAAY,WA2Bf;IAED;;;;;;;;;;OAUG;IACH,IAAI,IAAI,uBAWP;IAED;;;;OAIG;IACH,IAAI,cAAc,uEAMjB;IAED,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,cAAc;IAgBtB,mBAAmB,CAAC,SAAS,CAAC,EAAE,mBAAmB;IAuDnD,OAAO,CAAC,YAAY;IA6DpB;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,KAAK,EAAE,mBAAmB;CAgBhD;AAED,QAAA,MAAM,YAAY;;;;;;;;8BA3kBX,+BACJ,EAAG,iBAAgB;CAqlBrB,CAAC;AACF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"config-bean-prop-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/config-bean-prop/config-bean-prop-model.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAS3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAKpD,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAC;AAuDjB;;;GAGG;AACH,cACM,qBAAsB,YAAW,iBAAiB;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAM9B,UAAU,EAAG,eAAe,CAAC;IAW7B,IAAI,EAAG,gBAAgB,CAAC;gBAEZ,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB;IAe3D;;;;;;;QAOI;IACJ,2BAA2B,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM;IAgBf;;;;;;;;;QASI;IACJ,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAW5D;;;;OAIG;IACH,IAAI,UAAU,iEAOb;IAED;;;;OAIG;IACH,IAAI,YAAY,WAMf;IAED;;;;;;;;;;;;;OAaG;IACH,IAAI,OAAO,kBAwBV;IAED,WAAW,CACT,SAAS,CAAC,EAAE,aAAa,EACzB,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM;;;;;IAazB,iBAAiB;;;;;;;;IAajB;;;;;;;;;OASG;IACH,IAAI,KAAK,CAAC,KAAK,EAAE,mBAAmB,EAEnC;IAED;;;;;;;;;OASG;IACH,IAAI,KAAK,IAdQ,mBAAmB,CAgBnC;IAED;;;;OAIG;IACH,IAAI,QAAQ,YAEX;IAED;;;;OAIG;IACH,IAAI,gBAAgB,YA8BnB;IAED;;;;;;;;;;;OAWG;IACH,IAAI,aAAa,OAEhB;IAED,QAAQ,CAAC,OAAO,EAAE,OAAO;IAczB;;OAEG;IACG,QAAQ;IAId;;;;;;;;;;OAUG;IACH,IAAI,YAAY,WA2Bf;IAED;;;;;;;;;;OAUG;IACH,IAAI,IAAI,uBAWP;IAED;;;;OAIG;IACH,IAAI,cAAc,uEAMjB;IAED,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,cAAc;IAgBtB,mBAAmB,CAAC,SAAS,CAAC,EAAE,mBAAmB;IAuDnD,OAAO,CAAC,YAAY;IA6DpB;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,KAAK,EAAE,mBAAmB;CAgBhD;AAED,QAAA,MAAM,YAAY;;;;;;;;8BA1mBM,+BACvB,EAED,iBAAiB;CAknBhB,CAAC;AACF,eAAe,YAAY,CAAC"}
@@ -286,6 +286,16 @@ export interface ConfigBeanPropOptions {
286
286
  * @default undefined (uses default KOS configuration service path)
287
287
  */
288
288
  readonly serviceBasePath?: string;
289
+
290
+ /**
291
+ * Connection the property's bean is routed to.
292
+ *
293
+ * Set it when one window binds the same config path on several devices;
294
+ * the property and bean model ids include it so devices never share a bean.
295
+ *
296
+ * @default undefined (the transport's default connection)
297
+ */
298
+ readonly destinationAddress?: string;
289
299
  }
290
300
 
291
301
  /**
@@ -9,6 +9,13 @@ interface RegionSettingsService {
9
9
  timeZone: string;
10
10
  }
11
11
  type RegionSettingsConfigBean = IConfigBeanModel<RegionSettingsService>;
12
+ /**
13
+ * Model id of the region info for a destination; the default instance keeps
14
+ * the type as its id, so existing lookups by type are unchanged.
15
+ * @ignore
16
+ * @internal
17
+ */
18
+ export declare function regionInfoModelId(destinationAddress?: string): string;
12
19
  /**
13
20
  * @ignore
14
21
  * @internal
@@ -19,6 +26,10 @@ export declare class RegionInfoModelImpl<AdditionalData extends BaseRegionRespon
19
26
  private measureMap;
20
27
  private defaultMeasureMap;
21
28
  serviceBasePath: string;
29
+ /** Connection the region services and beans are routed to */
30
+ destinationAddress?: string;
31
+ readonly regionSettingsBeanId: string;
32
+ readonly regionBeanId: string;
22
33
  private regionMap;
23
34
  private timeFormats;
24
35
  private dateFormats;
@@ -27,7 +38,7 @@ export declare class RegionInfoModelImpl<AdditionalData extends BaseRegionRespon
27
38
  private region;
28
39
  private regions;
29
40
  private timeZoneMap;
30
- constructor(modelId: string);
41
+ constructor(modelId: string, options?: RegionInfoOptions);
31
42
  get availableRegions(): string[];
32
43
  get defaultUnitSystem(): string;
33
44
  get unitSystemId(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"region-info-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/region-info/region-info-model.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EACL,kBAAkB,EAIlB,eAAe,EAEhB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EAGjB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,SAAS,EAEV,MAAM,SAAS,CAAC;AAOjB,UAAU,qBAAqB;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,KAAK,wBAAwB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;AAoBxE;;;GAGG;AACH,qBACa,mBAAmB,CAC9B,cAAc,SAAS,kBAAkB,GAAG,kBAAkB,CAC9D,YAAW,eAAe;IAE1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,eAAe,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,SAAS,CAAkD;IACnE,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,WAAW,CAAoC;IAEvD,YAAY,EAAG,wBAAwB,CAAC;IAGxC,OAAO,CAAC,MAAM,CAAoB;IAElC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAAgC;gBAEvC,OAAO,EAAE,MAAM;IAgB3B,IAAI,gBAAgB,aAEnB;IACD,IAAI,iBAAiB,WAEpB;IAED,IAAI,YAAY,WAEf;IAED,IAAI,YAAY,WASf;IAED,IAAI,kBAAkB,WAKrB;IAED,IAAI,kBAAkB,YAKrB;IAED,IAAI,YAAY,WASf;IAED,IAAI,kBAAkB,WAKrB;IAED,IAAI,iBAAiB,WAMpB;IAED,IAAI,eAAe,WAElB;IAED,IAAI,gBAAgB,WAEnB;IAED,IAAI,SAAS,aAEZ;IAED,IAAI,YAAY,aAKf;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,cAAc,oCAEjB;IAED,IAAI,kBAAkB,WAErB;IAED,IAAI,iBAAiB,wBAQpB;IAED,IAAI,iBAAiB,wBAQpB;IAED,IAAI,iBAAiB,wBAOpB;IAED,qBAAqB,CAAC,YAAY,EAAE,MAAM;IAW1C,qBAAqB,CAAC,YAAY,EAAE,MAAM;IAW1C,qBAAqB,CAAC,YAAY,EAAE,MAAM;IAW1C,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM;IAe5B,cAAc,CAAC,KAAK,EAAE,MAAM;IAa5B;;OAEG;IACH,2BAA2B,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM;IAqChB;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAyB5D;;OAEG;IAEH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;IAoBnE;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAazD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU;IAqDvD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuD3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,QAAA,MAAM,YAAY;;;;;;;;;CASjB,CAAC;AACF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"region-info-model.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/models/region-info/region-info-model.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,6 @@ export type RegionsResponse<AdditionalData extends BaseRegionResponse = BaseRegi
43
43
  * @internal
44
44
  * Retrieves the initial Region Info data.
45
45
  */
46
- export declare const getRegionInfo: (baseServicePath: string) => Promise<import('../../../../core').KosServiceResponse<RegionInfoResponse> | undefined>;
47
- export declare const getRegions: (baseServicePath: string) => Promise<import('../../../../core').KosServiceResponse<RegionsResponse<BaseRegionResponse>[]> | undefined>;
46
+ export declare const getRegionInfo: (baseServicePath: string, destinationAddress?: string) => Promise<import('../../../../core').KosServiceResponse<RegionInfoResponse> | undefined>;
47
+ export declare const getRegions: (baseServicePath: string, destinationAddress?: string) => Promise<import('../../../../core').KosServiceResponse<RegionsResponse<BaseRegionResponse>[]> | undefined>;
48
48
  //# sourceMappingURL=region-info-services.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"region-info-services.d.ts","sourceRoot":"","sources":["../../../../../../../packages/kos-ui-sdk/src/models/models/region-info/services/region-info-services.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AACD,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd;AACD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AACD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AACD,MAAM,MAAM,eAAe,CACzB,cAAc,SAAS,kBAAkB,GAAG,kBAAkB,IAC5D,kBAAkB,GAAG;KACtB,GAAG,IAAI,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;CACnD,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAU,iBAAiB,MAAM,2FAS1D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,iBAAiB,MAAM,8GASvD,CAAC"}
1
+ {"version":3,"file":"region-info-services.d.ts","sourceRoot":"","sources":["../../../../../../../packages/kos-ui-sdk/src/models/models/region-info/services/region-info-services.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AACD,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd;AACD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AACD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AACD,MAAM,MAAM,eAAe,CACzB,cAAc,SAAS,kBAAkB,GAAG,kBAAkB,IAC5D,kBAAkB,GAAG;KACtB,GAAG,IAAI,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;CACnD,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,iBAAiB,MAAM,EACvB,2BAAuB,2FAWxB,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,2BAAuB,8GAWxB,CAAC"}
@@ -89,6 +89,13 @@ export type DefaultMeasureMap = Record<string, SystemDefaultMap>;
89
89
  * @category Region Info
90
90
  */
91
91
  export interface RegionInfoOptions {
92
+ /**
93
+ * Connection the region services and settings beans are routed to.
94
+ *
95
+ * Set it when one window shows several devices; the instance is then keyed
96
+ * by device and the default, unrouted instance is left untouched.
97
+ */
98
+ readonly destinationAddress?: string;
92
99
  }
93
100
  interface BaseOptions {
94
101
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/kos-ui-sdk/src/models/models/region-info/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/kos-ui-sdk/src/models/models/region-info/types/index.ts"],"names":[],"mappings":"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"}
@@ -132,12 +132,12 @@ export interface ConfigBeanUpdateResponse {
132
132
  * @param id - the id of the ConfigBean to be modified
133
133
  * @returns an empty response with status 200.
134
134
  */
135
- export declare const modifyConfigBean: (id: string, model: ConfigBeanRequest, path?: string) => Promise<import('../../../core').KosServiceResponse<any> | undefined>;
135
+ export declare const modifyConfigBean: (id: string, model: ConfigBeanRequest, path?: string, destinationAddress?: string) => Promise<import('../../../core').KosServiceResponse<any> | undefined>;
136
136
  /**
137
137
  * Modifies an ConfigBean from the server based on the id.
138
138
  *
139
139
  * @param id - the id of the ConfigBean to be modified
140
140
  * @returns an empty response with status 200.
141
141
  */
142
- export declare const getConfigBean: (id: string, path?: string) => Promise<import('../../../core').KosServiceResponse<ConfigBeanResponse> | undefined>;
142
+ export declare const getConfigBean: (id: string, path?: string, destinationAddress?: string) => Promise<import('../../../core').KosServiceResponse<ConfigBeanResponse> | undefined>;
143
143
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/services/config-bean/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/kos-ui-sdk/src/models/services/config-bean/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AASnD;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,yBAAyB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE;QACJ,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;KACpC,CAAC;IACF,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,GAAI,SAAS,GAAG,KAAG,MAAM,IAAI,aACF,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AACrE,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE;QACX,CAAC,CAAC,EAAE,MAAM,GAAG;YACX,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE;QACX,CAAC,CAAC,EAAE,MAAM,GAAG;YACX,IAAI,EAAE,MAAM,EAAE,CAAC;SAChB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,EAAE;QACX,CAAC,CAAC,EAAE,MAAM,GAAG;YACX,KAAK,EAAE,MAAM,CAAC;YACd,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,yBAAyB,CAAC;IAChC,WAAW,EAAE;QACX,CAAC,CAAC,EAAE,MAAM,GAAG;YACX,KAAK,EAAE,MAAM,CAAC;YACd,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;CACH;AACD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,iBAAiB,GACjB,oBAAoB,GACpB,WAAW,GACX,uBAAuB,GACvB,qBAAqB,GACrB,2BAA2B,GAC3B,8BAA8B,CAAC;AAEnC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AACxD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE;QACN,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;KAC9B,CAAC;CACH;AAOD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AACD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,IAAI,MAAM,EACV,OAAO,iBAAiB,EACxB,aAAwB,EACxB,2BAAuB,yEASxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,IAAI,MAAM,EACV,aAAwB,EACxB,2BAAuB,wFAQxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosdev-code/kos-ui-sdk",
3
- "version": "3.0.21",
3
+ "version": "3.0.23",
4
4
  "type": "module",
5
5
  "main": "./index.cjs",
6
6
  "module": "./index.js",
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "kos": {
61
61
  "build": {
62
- "gitHash": "a5481c29ff5f1e4f0c89ed967aea9b0f0b9ee171"
62
+ "gitHash": "78a2bbd25c176cfbcb4add6ee11dd660941657c2"
63
63
  }
64
64
  }
65
65
  }
@@ -1,20 +1,62 @@
1
- import { IKosCoreManager, IKosRegistry } from '../core';
1
+ import { BaseKosModelRegistrationBean, IKosCoreManager, IKosModelRegistration, IKosRegistry, KosCompanionModelType, KosModelRegistrationType, Preloaded } from '../core';
2
2
  export interface BootKosCoreOptions {
3
3
  /** Connection alias, when the model under test cares about one. */
4
4
  alias?: string;
5
5
  }
6
6
  /**
7
- * Boot KosCore on the standalone mock transport and resolve once it is ready.
7
+ * A model's registration bean the value `@kosModel` generates beside the
8
+ * model, and the one an application passes to `KosModelRegistry...model()`.
8
9
  *
9
- * Idempotent per module instance: the first call boots, later calls return the
10
- * same core. KosCore and the model manager are process-global, so a test file
11
- * gets one core and one set of singletons — which is the isolation boundary,
12
- * and the reason a differently-configured singleton needs its own file.
10
+ * The bean itself, not its `registration` property: handing over the property
11
+ * registers nothing, and the model only fails later, on the first build.
12
+ */
13
+ export type KosTestRegistration = BaseKosModelRegistrationBean<any, any> | KosModelRegistrationType<any, any>;
14
+ /**
15
+ * The registration chain an application uses, terminated by `boot()`.
16
+ *
17
+ * Every call is deferred until `boot()`, so ordering within the chain does not
18
+ * matter and `alias()` may come after the models it applies to.
19
+ */
20
+ export interface KosCoreBootBuilder {
21
+ /** Register a model under test, optionally preloading it. */
22
+ model: (registration: KosTestRegistration, preload?: boolean) => KosCoreBootBuilder;
23
+ /** Preload a model type, or a specific instance of one, at boot. */
24
+ preload: (model: Preloaded) => KosCoreBootBuilder;
25
+ /** Attach a companion model type to a parent type. */
26
+ companion: (parentType: string, companion: KosCompanionModelType<any>) => KosCoreBootBuilder;
27
+ /** Register a hand-written registration record against a type. */
28
+ legacy: (type: string, registration: IKosModelRegistration) => KosCoreBootBuilder;
29
+ /** Connection alias, when the model under test cares about one. */
30
+ alias: (alias: string) => KosCoreBootBuilder;
31
+ /** Boot KosCore with everything registered on this chain. */
32
+ boot: () => Promise<IKosCoreManager>;
33
+ }
34
+ /**
35
+ * Open a registration chain, then `boot()` it.
36
+ *
37
+ * Idempotent per module instance: the first `boot()` boots, later ones return
38
+ * the same core. KosCore and the model manager are process-global, so a test
39
+ * file gets one core and one set of singletons — which is the isolation
40
+ * boundary, and the reason a differently-configured singleton needs its own
41
+ * file.
42
+ *
43
+ * Register any routes the models need BEFORE calling `boot()`, so nothing races
44
+ * the boot requests.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * await bootKosCore().model(AssetManager).model(AssetEntry).boot();
49
+ * ```
50
+ */
51
+ export declare function bootKosCore(): KosCoreBootBuilder;
52
+ /**
53
+ * Boot KosCore from an assembled registry.
13
54
  *
14
- * Register any routes the models need BEFORE calling this, so nothing races the
15
- * boot requests.
55
+ * Kept for callers that already hold an `IKosRegistry`. A test registering its
56
+ * own models should use the no-argument chain instead, which takes the
57
+ * registration beans directly.
16
58
  *
17
- * @param registration Models under test, e.g. `{ models: {...Board.registration}, preloadModels: [] }`.
59
+ * @param registration Models under test, e.g. `{ models: {...}, preloadModels: [] }`.
18
60
  */
19
61
  export declare function bootKosCore(registration: IKosRegistry, options?: BootKosCoreOptions): Promise<IKosCoreManager>;
20
62
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/kos-ui-sdk/src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK7D,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CACzB,SAAS,EAAE,MAAM,OAAO,EACxB,KAAK,EAAE,MAAM,EACb,SAAS,SAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAQf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/kos-ui-sdk/src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,EACV,4BAA4B,EAC5B,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,SAAS,EACV,MAAM,SAAS,CAAC;AAMjB,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAC3B,4BAA4B,CAAC,GAAG,EAAE,GAAG,CAAC,GACtC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,KAAK,EAAE,CACL,YAAY,EAAE,mBAAmB,EACjC,OAAO,CAAC,EAAE,OAAO,KACd,kBAAkB,CAAC;IACxB,oEAAoE;IACpE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,kBAAkB,CAAC;IAClD,sDAAsD;IACtD,SAAS,EAAE,CACT,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,qBAAqB,CAAC,GAAG,CAAC,KAClC,kBAAkB,CAAC;IACxB,kEAAkE;IAClE,MAAM,EAAE,CACN,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,qBAAqB,KAChC,kBAAkB,CAAC;IACxB,mEAAmE;IACnE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,kBAAkB,CAAC;IAC7C,6DAA6D;IAC7D,IAAI,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CACtC;AA4ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,IAAI,kBAAkB,CAAC;AAClD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAAC;AAQ5B;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CACzB,SAAS,EAAE,MAAM,OAAO,EACxB,KAAK,EAAE,MAAM,EACb,SAAS,SAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAQf"}
package/testing.cjs CHANGED
@@ -1,17 +1,71 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("mobx");
4
- const service = require("./index-DUoSahlA.cjs");
4
+ const service = require("./index-CRb8ucfF.cjs");
5
5
  require("loglevel");
6
6
  let booted;
7
- function bootKosCore(registration, options = {}) {
7
+ let prepared = false;
8
+ function prepareTransport(alias) {
9
+ if (prepared) {
10
+ return;
11
+ }
12
+ prepared = true;
13
+ service.KosMock.configure({ standalone: true });
14
+ service.KosCore.getInstance({ connectionAlias: alias });
15
+ }
16
+ function bootCore(registration, options) {
8
17
  if (!booted) {
9
- service.KosMock.configure({ standalone: true });
18
+ prepareTransport(options.alias);
10
19
  const core = service.KosCore.create(registration, false, options.alias);
11
20
  booted = core.whenReady().then(() => core);
12
21
  }
13
22
  return booted;
14
23
  }
24
+ function buildBootBuilder() {
25
+ const registrations = [];
26
+ const preloadModels = [];
27
+ let alias;
28
+ const builder = {
29
+ model: (registration, preload) => {
30
+ registrations.push(
31
+ () => service.RegistrationManager.model.register(builder)(registration, preload)
32
+ );
33
+ return builder;
34
+ },
35
+ preload: (model) => {
36
+ preloadModels.push(model);
37
+ return builder;
38
+ },
39
+ companion: (parentType, companion) => {
40
+ registrations.push(
41
+ () => service.RegistrationManager.companion.register(builder)(parentType, companion)
42
+ );
43
+ return builder;
44
+ },
45
+ legacy: (type, registration) => {
46
+ registrations.push(
47
+ () => service.RegistrationManager.model.registerLegacyModel(builder)(
48
+ type,
49
+ registration
50
+ )
51
+ );
52
+ return builder;
53
+ },
54
+ alias: (value) => {
55
+ alias = value;
56
+ return builder;
57
+ },
58
+ boot: () => {
59
+ prepareTransport(alias);
60
+ registrations.splice(0).forEach((register) => register());
61
+ return bootCore({ models: {}, preloadModels }, { alias });
62
+ }
63
+ };
64
+ return builder;
65
+ }
66
+ function bootKosCore(registration, options = {}) {
67
+ return registration ? bootCore(registration, options) : buildBootBuilder();
68
+ }
15
69
  async function until(predicate, label, timeoutMs = 2e3) {
16
70
  const deadline = Date.now() + timeoutMs;
17
71
  while (!predicate()) {
package/testing.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"testing.cjs","sources":["../../../packages/kos-ui-sdk/src/testing/index.ts"],"sourcesContent":["/**\n * Test support for KOS models — boot the framework in a unit test, with no\n * device, no WebSocket server and no browser.\n *\n * KOS models cannot be built in isolation: they need a live KosCore, and\n * KosCore opens a WebSocket the moment it is created. `bootKosCore` boots it on\n * KosMock's standalone loopback transport instead, which authorizes itself so\n * `whenReady()` resolves with no device and no `KOS_ALLOW_ANONYMOUS` build flag.\n *\n * Backend traffic is mocked the same way an app would mock it — `KosMock.get`,\n * `KosMock.post`, fixtures, config injection — so a test exercises the real\n * request path rather than a stubbed service function.\n *\n * ```ts\n * import { bootKosCore, until } from \"@kosdev-code/kos-ui-sdk/testing\";\n * import { KosMock } from \"@kosdev-code/kos-ui-sdk\";\n *\n * beforeAll(async () => {\n * KosMock.get(\"/api/board/:id\", { data: { id: \"b1\", state: \"READY\" } });\n * await bootKosCore({ models: { ...Board.registration }, preloadModels: [] });\n * });\n *\n * it(\"loads the board\", async () => {\n * const board = Board.factory(\"b1\")({});\n * await whenReady(board);\n * expect(board.state).toBe(\"READY\");\n * });\n * ```\n *\n * ## Two things that bite\n *\n * **Singleton models take one configuration per test file.** A second\n * `factory(options)` call returns the FIRST instance and discards the new\n * options in silence, so assertions written against them pass for the wrong\n * reason. A case needing different options belongs in its own file, which the\n * test runner gives its own module state.\n *\n * **The standalone socket authorizes by publishing Studio's\n * `/studioServer/auth/LOGGED_IN` on every open.** A device never sends that, so\n * a test shaped around disconnect/reconnect here is exercising Studio's\n * sequence, not a device's. It makes no difference to tests that never\n * reconnect.\n */\nimport type { IKosCoreManager, IKosRegistry } from \"../core\";\nimport { KosCore, KosMock } from \"../core\";\n\nlet booted: Promise<IKosCoreManager> | undefined;\n\nexport interface BootKosCoreOptions {\n /** Connection alias, when the model under test cares about one. */\n alias?: string;\n}\n\n/**\n * Boot KosCore on the standalone mock transport and resolve once it is ready.\n *\n * Idempotent per module instance: the first call boots, later calls return the\n * same core. KosCore and the model manager are process-global, so a test file\n * gets one core and one set of singletons — which is the isolation boundary,\n * and the reason a differently-configured singleton needs its own file.\n *\n * Register any routes the models need BEFORE calling this, so nothing races the\n * boot requests.\n *\n * @param registration Models under test, e.g. `{ models: {...Board.registration}, preloadModels: [] }`.\n */\nexport function bootKosCore(\n registration: IKosRegistry,\n options: BootKosCoreOptions = {}\n): Promise<IKosCoreManager> {\n if (!booted) {\n // Must precede KosCore.create: TransportFactory picks the transport once.\n KosMock.configure({ standalone: true });\n const core = KosCore.create(registration, false, options.alias);\n booted = core.whenReady().then(() => core);\n }\n return booted;\n}\n\n/**\n * Wait until `predicate` holds, then resolve — or reject naming what never\n * happened.\n *\n * Model reactions are asynchronous, so a test that changes an input and asserts\n * immediately reads the old value. Polling for the OUTCOME beats sleeping for an\n * arbitrary interval: it is faster when the reaction is quick, and it fails with\n * a usable message instead of a bare assertion diff when the reaction never\n * fires at all.\n *\n * @param label What is being waited for, quoted back in the timeout message.\n */\nexport async function until(\n predicate: () => boolean,\n label: string,\n timeoutMs = 2000\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (!predicate()) {\n if (Date.now() > deadline) {\n throw new Error(`timed out waiting for ${label}`);\n }\n await new Promise((resolve) => setTimeout(resolve, 5));\n }\n}\n"],"names":["KosMock","KosCore"],"mappings":";;;;;AA8CA,IAAI;AAoBG,SAAS,YACd,cACA,UAA8B,IACJ;AAC1B,MAAI,CAAC,QAAQ;AAEXA,YAAAA,QAAQ,UAAU,EAAE,YAAY,KAAA,CAAM;AACtC,UAAM,OAAOC,QAAAA,QAAQ,OAAO,cAAc,OAAO,QAAQ,KAAK;AAC9D,aAAS,KAAK,UAAA,EAAY,KAAK,MAAM,IAAI;AAAA,EAC3C;AACA,SAAO;AACT;AAcA,eAAsB,MACpB,WACA,OACA,YAAY,KACG;AACf,QAAM,WAAW,KAAK,IAAA,IAAQ;AAC9B,SAAO,CAAC,aAAa;AACnB,QAAI,KAAK,IAAA,IAAQ,UAAU;AACzB,YAAM,IAAI,MAAM,yBAAyB,KAAK,EAAE;AAAA,IAClD;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AAAA,EACvD;AACF;;;"}
1
+ {"version":3,"file":"testing.cjs","sources":["../../../packages/kos-ui-sdk/src/testing/index.ts"],"sourcesContent":["/**\n * Test support for KOS models — boot the framework in a unit test, with no\n * device, no WebSocket server and no browser.\n *\n * KOS models cannot be built in isolation: they need a live KosCore, and\n * KosCore opens a WebSocket the moment it is created. `bootKosCore` boots it on\n * KosMock's standalone loopback transport instead, which authorizes itself so\n * `whenReady()` resolves with no device and no `KOS_ALLOW_ANONYMOUS` build flag.\n *\n * Models register the way an application registers them. `bootKosCore()` with\n * no arguments returns a builder carrying the same chain an app's\n * `KosModelRegistry` gives — `.model()`, `.preload()`, `.companion()`,\n * `.legacy()` — so a test hands over the registration bean itself rather than\n * assembling a registry by hand.\n *\n * Backend traffic is mocked the same way an app would mock it — `KosMock.get`,\n * `KosMock.post`, fixtures, config injection — so a test exercises the real\n * request path rather than a stubbed service function.\n *\n * ```ts\n * import { bootKosCore, until } from \"@kosdev-code/kos-ui-sdk/testing\";\n * import { KosMock } from \"@kosdev-code/kos-ui-sdk\";\n * import { Board } from \"./models/board\";\n *\n * beforeAll(async () => {\n * KosMock.get(\"/api/board/:id\", { data: { id: \"b1\", state: \"READY\" } });\n * await bootKosCore().model(Board).boot();\n * });\n *\n * it(\"loads the board\", async () => {\n * const board = Board.instance(\"b1\").options({}).build();\n * await whenReady(board);\n * expect(board.state).toBe(\"READY\");\n * });\n * ```\n *\n * ## Two things that bite\n *\n * **Singleton models take one configuration per test file.** A second\n * `options(...)` call returns the FIRST instance and discards the new options in\n * silence, so assertions written against them pass for the wrong reason. A case\n * needing different options belongs in its own file, which the test runner\n * gives its own module state.\n *\n * **The standalone socket authorizes by publishing Studio's\n * `/studioServer/auth/LOGGED_IN` on every open.** A device never sends that, so\n * a test shaped around disconnect/reconnect here is exercising Studio's\n * sequence, not a device's. It makes no difference to tests that never\n * reconnect.\n */\nimport type {\n BaseKosModelRegistrationBean,\n IKosCoreManager,\n IKosModelRegistration,\n IKosRegistry,\n KosCompanionModelType,\n KosModelRegistrationType,\n Preloaded,\n} from \"../core\";\nimport { KosCore, KosMock, RegistrationManager } from \"../core\";\n\nlet booted: Promise<IKosCoreManager> | undefined;\nlet prepared = false;\n\nexport interface BootKosCoreOptions {\n /** Connection alias, when the model under test cares about one. */\n alias?: string;\n}\n\n/**\n * A model's registration bean — the value `@kosModel` generates beside the\n * model, and the one an application passes to `KosModelRegistry...model()`.\n *\n * The bean itself, not its `registration` property: handing over the property\n * registers nothing, and the model only fails later, on the first build.\n */\nexport type KosTestRegistration =\n | BaseKosModelRegistrationBean<any, any>\n | KosModelRegistrationType<any, any>;\n\n/**\n * The registration chain an application uses, terminated by `boot()`.\n *\n * Every call is deferred until `boot()`, so ordering within the chain does not\n * matter and `alias()` may come after the models it applies to.\n */\nexport interface KosCoreBootBuilder {\n /** Register a model under test, optionally preloading it. */\n model: (\n registration: KosTestRegistration,\n preload?: boolean\n ) => KosCoreBootBuilder;\n /** Preload a model type, or a specific instance of one, at boot. */\n preload: (model: Preloaded) => KosCoreBootBuilder;\n /** Attach a companion model type to a parent type. */\n companion: (\n parentType: string,\n companion: KosCompanionModelType<any>\n ) => KosCoreBootBuilder;\n /** Register a hand-written registration record against a type. */\n legacy: (\n type: string,\n registration: IKosModelRegistration\n ) => KosCoreBootBuilder;\n /** Connection alias, when the model under test cares about one. */\n alias: (alias: string) => KosCoreBootBuilder;\n /** Boot KosCore with everything registered on this chain. */\n boot: () => Promise<IKosCoreManager>;\n}\n\n/**\n * Put the mock transport and the connection alias in place before anything\n * constructs KosCore.\n *\n * KosCore picks its transport and reads its alias in the constructor, and\n * registering a model reaches `KosCore.getInstance()` — so registration cannot\n * come first.\n */\nfunction prepareTransport(alias?: string): void {\n if (prepared) {\n return;\n }\n prepared = true;\n KosMock.configure({ standalone: true });\n KosCore.getInstance({ connectionAlias: alias });\n}\n\nfunction bootCore(\n registration: IKosRegistry,\n options: BootKosCoreOptions\n): Promise<IKosCoreManager> {\n if (!booted) {\n prepareTransport(options.alias);\n const core = KosCore.create(registration, false, options.alias);\n booted = core.whenReady().then(() => core);\n }\n return booted;\n}\n\nfunction buildBootBuilder(): KosCoreBootBuilder {\n const registrations: (() => void)[] = [];\n const preloadModels: Preloaded[] = [];\n let alias: string | undefined;\n\n const builder: KosCoreBootBuilder = {\n model: (registration, preload) => {\n registrations.push(() =>\n RegistrationManager.model.register(builder)(registration, preload)\n );\n return builder;\n },\n preload: (model) => {\n preloadModels.push(model);\n return builder;\n },\n companion: (parentType, companion) => {\n registrations.push(() =>\n RegistrationManager.companion.register(builder)(parentType, companion)\n );\n return builder;\n },\n legacy: (type, registration) => {\n registrations.push(() =>\n RegistrationManager.model.registerLegacyModel(builder)(\n type,\n registration\n )\n );\n return builder;\n },\n alias: (value) => {\n alias = value;\n return builder;\n },\n boot: () => {\n prepareTransport(alias);\n registrations.splice(0).forEach((register) => register());\n return bootCore({ models: {}, preloadModels }, { alias });\n },\n };\n\n return builder;\n}\n\n/**\n * Open a registration chain, then `boot()` it.\n *\n * Idempotent per module instance: the first `boot()` boots, later ones return\n * the same core. KosCore and the model manager are process-global, so a test\n * file gets one core and one set of singletons — which is the isolation\n * boundary, and the reason a differently-configured singleton needs its own\n * file.\n *\n * Register any routes the models need BEFORE calling `boot()`, so nothing races\n * the boot requests.\n *\n * @example\n * ```ts\n * await bootKosCore().model(AssetManager).model(AssetEntry).boot();\n * ```\n */\nexport function bootKosCore(): KosCoreBootBuilder;\n/**\n * Boot KosCore from an assembled registry.\n *\n * Kept for callers that already hold an `IKosRegistry`. A test registering its\n * own models should use the no-argument chain instead, which takes the\n * registration beans directly.\n *\n * @param registration Models under test, e.g. `{ models: {...}, preloadModels: [] }`.\n */\nexport function bootKosCore(\n registration: IKosRegistry,\n options?: BootKosCoreOptions\n): Promise<IKosCoreManager>;\nexport function bootKosCore(\n registration?: IKosRegistry,\n options: BootKosCoreOptions = {}\n): KosCoreBootBuilder | Promise<IKosCoreManager> {\n return registration ? bootCore(registration, options) : buildBootBuilder();\n}\n\n/**\n * Wait until `predicate` holds, then resolve — or reject naming what never\n * happened.\n *\n * Model reactions are asynchronous, so a test that changes an input and asserts\n * immediately reads the old value. Polling for the OUTCOME beats sleeping for an\n * arbitrary interval: it is faster when the reaction is quick, and it fails with\n * a usable message instead of a bare assertion diff when the reaction never\n * fires at all.\n *\n * @param label What is being waited for, quoted back in the timeout message.\n */\nexport async function until(\n predicate: () => boolean,\n label: string,\n timeoutMs = 2000\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (!predicate()) {\n if (Date.now() > deadline) {\n throw new Error(`timed out waiting for ${label}`);\n }\n await new Promise((resolve) => setTimeout(resolve, 5));\n }\n}\n"],"names":["KosMock","KosCore","RegistrationManager"],"mappings":";;;;;AA6DA,IAAI;AACJ,IAAI,WAAW;AAwDf,SAAS,iBAAiB,OAAsB;AAC9C,MAAI,UAAU;AACZ;AAAA,EACF;AACA,aAAW;AACXA,UAAAA,QAAQ,UAAU,EAAE,YAAY,KAAA,CAAM;AACtCC,UAAAA,QAAQ,YAAY,EAAE,iBAAiB,MAAA,CAAO;AAChD;AAEA,SAAS,SACP,cACA,SAC0B;AAC1B,MAAI,CAAC,QAAQ;AACX,qBAAiB,QAAQ,KAAK;AAC9B,UAAM,OAAOA,QAAAA,QAAQ,OAAO,cAAc,OAAO,QAAQ,KAAK;AAC9D,aAAS,KAAK,UAAA,EAAY,KAAK,MAAM,IAAI;AAAA,EAC3C;AACA,SAAO;AACT;AAEA,SAAS,mBAAuC;AAC9C,QAAM,gBAAgC,CAAA;AACtC,QAAM,gBAA6B,CAAA;AACnC,MAAI;AAEJ,QAAM,UAA8B;AAAA,IAClC,OAAO,CAAC,cAAc,YAAY;AAChC,oBAAc;AAAA,QAAK,MACjBC,QAAAA,oBAAoB,MAAM,SAAS,OAAO,EAAE,cAAc,OAAO;AAAA,MAAA;AAEnE,aAAO;AAAA,IACT;AAAA,IACA,SAAS,CAAC,UAAU;AAClB,oBAAc,KAAK,KAAK;AACxB,aAAO;AAAA,IACT;AAAA,IACA,WAAW,CAAC,YAAY,cAAc;AACpC,oBAAc;AAAA,QAAK,MACjBA,QAAAA,oBAAoB,UAAU,SAAS,OAAO,EAAE,YAAY,SAAS;AAAA,MAAA;AAEvE,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,CAAC,MAAM,iBAAiB;AAC9B,oBAAc;AAAA,QAAK,MACjBA,4BAAoB,MAAM,oBAAoB,OAAO;AAAA,UACnD;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAEF,aAAO;AAAA,IACT;AAAA,IACA,OAAO,CAAC,UAAU;AAChB,cAAQ;AACR,aAAO;AAAA,IACT;AAAA,IACA,MAAM,MAAM;AACV,uBAAiB,KAAK;AACtB,oBAAc,OAAO,CAAC,EAAE,QAAQ,CAAC,aAAa,UAAU;AACxD,aAAO,SAAS,EAAE,QAAQ,CAAA,GAAI,cAAA,GAAiB,EAAE,OAAO;AAAA,IAC1D;AAAA,EAAA;AAGF,SAAO;AACT;AAiCO,SAAS,YACd,cACA,UAA8B,IACiB;AAC/C,SAAO,eAAe,SAAS,cAAc,OAAO,IAAI,iBAAA;AAC1D;AAcA,eAAsB,MACpB,WACA,OACA,YAAY,KACG;AACf,QAAM,WAAW,KAAK,IAAA,IAAQ;AAC9B,SAAO,CAAC,aAAa;AACnB,QAAI,KAAK,IAAA,IAAQ,UAAU;AACzB,YAAM,IAAI,MAAM,yBAAyB,KAAK,EAAE;AAAA,IAClD;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AAAA,EACvD;AACF;;;"}
package/testing.js CHANGED
@@ -1,15 +1,69 @@
1
1
  import "mobx";
2
- import { b0 as KosMock, l as KosCore } from "./index-BUwbSjst.js";
2
+ import { l as KosCore, b0 as KosMock, al as RegistrationManager } from "./index-YzHb2lnB.js";
3
3
  import "loglevel";
4
4
  let booted;
5
- function bootKosCore(registration, options = {}) {
5
+ let prepared = false;
6
+ function prepareTransport(alias) {
7
+ if (prepared) {
8
+ return;
9
+ }
10
+ prepared = true;
11
+ KosMock.configure({ standalone: true });
12
+ KosCore.getInstance({ connectionAlias: alias });
13
+ }
14
+ function bootCore(registration, options) {
6
15
  if (!booted) {
7
- KosMock.configure({ standalone: true });
16
+ prepareTransport(options.alias);
8
17
  const core = KosCore.create(registration, false, options.alias);
9
18
  booted = core.whenReady().then(() => core);
10
19
  }
11
20
  return booted;
12
21
  }
22
+ function buildBootBuilder() {
23
+ const registrations = [];
24
+ const preloadModels = [];
25
+ let alias;
26
+ const builder = {
27
+ model: (registration, preload) => {
28
+ registrations.push(
29
+ () => RegistrationManager.model.register(builder)(registration, preload)
30
+ );
31
+ return builder;
32
+ },
33
+ preload: (model) => {
34
+ preloadModels.push(model);
35
+ return builder;
36
+ },
37
+ companion: (parentType, companion) => {
38
+ registrations.push(
39
+ () => RegistrationManager.companion.register(builder)(parentType, companion)
40
+ );
41
+ return builder;
42
+ },
43
+ legacy: (type, registration) => {
44
+ registrations.push(
45
+ () => RegistrationManager.model.registerLegacyModel(builder)(
46
+ type,
47
+ registration
48
+ )
49
+ );
50
+ return builder;
51
+ },
52
+ alias: (value) => {
53
+ alias = value;
54
+ return builder;
55
+ },
56
+ boot: () => {
57
+ prepareTransport(alias);
58
+ registrations.splice(0).forEach((register) => register());
59
+ return bootCore({ models: {}, preloadModels }, { alias });
60
+ }
61
+ };
62
+ return builder;
63
+ }
64
+ function bootKosCore(registration, options = {}) {
65
+ return registration ? bootCore(registration, options) : buildBootBuilder();
66
+ }
13
67
  async function until(predicate, label, timeoutMs = 2e3) {
14
68
  const deadline = Date.now() + timeoutMs;
15
69
  while (!predicate()) {
package/testing.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sources":["../../../packages/kos-ui-sdk/src/testing/index.ts"],"sourcesContent":["/**\n * Test support for KOS models — boot the framework in a unit test, with no\n * device, no WebSocket server and no browser.\n *\n * KOS models cannot be built in isolation: they need a live KosCore, and\n * KosCore opens a WebSocket the moment it is created. `bootKosCore` boots it on\n * KosMock's standalone loopback transport instead, which authorizes itself so\n * `whenReady()` resolves with no device and no `KOS_ALLOW_ANONYMOUS` build flag.\n *\n * Backend traffic is mocked the same way an app would mock it — `KosMock.get`,\n * `KosMock.post`, fixtures, config injection — so a test exercises the real\n * request path rather than a stubbed service function.\n *\n * ```ts\n * import { bootKosCore, until } from \"@kosdev-code/kos-ui-sdk/testing\";\n * import { KosMock } from \"@kosdev-code/kos-ui-sdk\";\n *\n * beforeAll(async () => {\n * KosMock.get(\"/api/board/:id\", { data: { id: \"b1\", state: \"READY\" } });\n * await bootKosCore({ models: { ...Board.registration }, preloadModels: [] });\n * });\n *\n * it(\"loads the board\", async () => {\n * const board = Board.factory(\"b1\")({});\n * await whenReady(board);\n * expect(board.state).toBe(\"READY\");\n * });\n * ```\n *\n * ## Two things that bite\n *\n * **Singleton models take one configuration per test file.** A second\n * `factory(options)` call returns the FIRST instance and discards the new\n * options in silence, so assertions written against them pass for the wrong\n * reason. A case needing different options belongs in its own file, which the\n * test runner gives its own module state.\n *\n * **The standalone socket authorizes by publishing Studio's\n * `/studioServer/auth/LOGGED_IN` on every open.** A device never sends that, so\n * a test shaped around disconnect/reconnect here is exercising Studio's\n * sequence, not a device's. It makes no difference to tests that never\n * reconnect.\n */\nimport type { IKosCoreManager, IKosRegistry } from \"../core\";\nimport { KosCore, KosMock } from \"../core\";\n\nlet booted: Promise<IKosCoreManager> | undefined;\n\nexport interface BootKosCoreOptions {\n /** Connection alias, when the model under test cares about one. */\n alias?: string;\n}\n\n/**\n * Boot KosCore on the standalone mock transport and resolve once it is ready.\n *\n * Idempotent per module instance: the first call boots, later calls return the\n * same core. KosCore and the model manager are process-global, so a test file\n * gets one core and one set of singletons — which is the isolation boundary,\n * and the reason a differently-configured singleton needs its own file.\n *\n * Register any routes the models need BEFORE calling this, so nothing races the\n * boot requests.\n *\n * @param registration Models under test, e.g. `{ models: {...Board.registration}, preloadModels: [] }`.\n */\nexport function bootKosCore(\n registration: IKosRegistry,\n options: BootKosCoreOptions = {}\n): Promise<IKosCoreManager> {\n if (!booted) {\n // Must precede KosCore.create: TransportFactory picks the transport once.\n KosMock.configure({ standalone: true });\n const core = KosCore.create(registration, false, options.alias);\n booted = core.whenReady().then(() => core);\n }\n return booted;\n}\n\n/**\n * Wait until `predicate` holds, then resolve — or reject naming what never\n * happened.\n *\n * Model reactions are asynchronous, so a test that changes an input and asserts\n * immediately reads the old value. Polling for the OUTCOME beats sleeping for an\n * arbitrary interval: it is faster when the reaction is quick, and it fails with\n * a usable message instead of a bare assertion diff when the reaction never\n * fires at all.\n *\n * @param label What is being waited for, quoted back in the timeout message.\n */\nexport async function until(\n predicate: () => boolean,\n label: string,\n timeoutMs = 2000\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (!predicate()) {\n if (Date.now() > deadline) {\n throw new Error(`timed out waiting for ${label}`);\n }\n await new Promise((resolve) => setTimeout(resolve, 5));\n }\n}\n"],"names":[],"mappings":";;;AA8CA,IAAI;AAoBG,SAAS,YACd,cACA,UAA8B,IACJ;AAC1B,MAAI,CAAC,QAAQ;AAEX,YAAQ,UAAU,EAAE,YAAY,KAAA,CAAM;AACtC,UAAM,OAAO,QAAQ,OAAO,cAAc,OAAO,QAAQ,KAAK;AAC9D,aAAS,KAAK,UAAA,EAAY,KAAK,MAAM,IAAI;AAAA,EAC3C;AACA,SAAO;AACT;AAcA,eAAsB,MACpB,WACA,OACA,YAAY,KACG;AACf,QAAM,WAAW,KAAK,IAAA,IAAQ;AAC9B,SAAO,CAAC,aAAa;AACnB,QAAI,KAAK,IAAA,IAAQ,UAAU;AACzB,YAAM,IAAI,MAAM,yBAAyB,KAAK,EAAE;AAAA,IAClD;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AAAA,EACvD;AACF;"}
1
+ {"version":3,"file":"testing.js","sources":["../../../packages/kos-ui-sdk/src/testing/index.ts"],"sourcesContent":["/**\n * Test support for KOS models — boot the framework in a unit test, with no\n * device, no WebSocket server and no browser.\n *\n * KOS models cannot be built in isolation: they need a live KosCore, and\n * KosCore opens a WebSocket the moment it is created. `bootKosCore` boots it on\n * KosMock's standalone loopback transport instead, which authorizes itself so\n * `whenReady()` resolves with no device and no `KOS_ALLOW_ANONYMOUS` build flag.\n *\n * Models register the way an application registers them. `bootKosCore()` with\n * no arguments returns a builder carrying the same chain an app's\n * `KosModelRegistry` gives — `.model()`, `.preload()`, `.companion()`,\n * `.legacy()` — so a test hands over the registration bean itself rather than\n * assembling a registry by hand.\n *\n * Backend traffic is mocked the same way an app would mock it — `KosMock.get`,\n * `KosMock.post`, fixtures, config injection — so a test exercises the real\n * request path rather than a stubbed service function.\n *\n * ```ts\n * import { bootKosCore, until } from \"@kosdev-code/kos-ui-sdk/testing\";\n * import { KosMock } from \"@kosdev-code/kos-ui-sdk\";\n * import { Board } from \"./models/board\";\n *\n * beforeAll(async () => {\n * KosMock.get(\"/api/board/:id\", { data: { id: \"b1\", state: \"READY\" } });\n * await bootKosCore().model(Board).boot();\n * });\n *\n * it(\"loads the board\", async () => {\n * const board = Board.instance(\"b1\").options({}).build();\n * await whenReady(board);\n * expect(board.state).toBe(\"READY\");\n * });\n * ```\n *\n * ## Two things that bite\n *\n * **Singleton models take one configuration per test file.** A second\n * `options(...)` call returns the FIRST instance and discards the new options in\n * silence, so assertions written against them pass for the wrong reason. A case\n * needing different options belongs in its own file, which the test runner\n * gives its own module state.\n *\n * **The standalone socket authorizes by publishing Studio's\n * `/studioServer/auth/LOGGED_IN` on every open.** A device never sends that, so\n * a test shaped around disconnect/reconnect here is exercising Studio's\n * sequence, not a device's. It makes no difference to tests that never\n * reconnect.\n */\nimport type {\n BaseKosModelRegistrationBean,\n IKosCoreManager,\n IKosModelRegistration,\n IKosRegistry,\n KosCompanionModelType,\n KosModelRegistrationType,\n Preloaded,\n} from \"../core\";\nimport { KosCore, KosMock, RegistrationManager } from \"../core\";\n\nlet booted: Promise<IKosCoreManager> | undefined;\nlet prepared = false;\n\nexport interface BootKosCoreOptions {\n /** Connection alias, when the model under test cares about one. */\n alias?: string;\n}\n\n/**\n * A model's registration bean — the value `@kosModel` generates beside the\n * model, and the one an application passes to `KosModelRegistry...model()`.\n *\n * The bean itself, not its `registration` property: handing over the property\n * registers nothing, and the model only fails later, on the first build.\n */\nexport type KosTestRegistration =\n | BaseKosModelRegistrationBean<any, any>\n | KosModelRegistrationType<any, any>;\n\n/**\n * The registration chain an application uses, terminated by `boot()`.\n *\n * Every call is deferred until `boot()`, so ordering within the chain does not\n * matter and `alias()` may come after the models it applies to.\n */\nexport interface KosCoreBootBuilder {\n /** Register a model under test, optionally preloading it. */\n model: (\n registration: KosTestRegistration,\n preload?: boolean\n ) => KosCoreBootBuilder;\n /** Preload a model type, or a specific instance of one, at boot. */\n preload: (model: Preloaded) => KosCoreBootBuilder;\n /** Attach a companion model type to a parent type. */\n companion: (\n parentType: string,\n companion: KosCompanionModelType<any>\n ) => KosCoreBootBuilder;\n /** Register a hand-written registration record against a type. */\n legacy: (\n type: string,\n registration: IKosModelRegistration\n ) => KosCoreBootBuilder;\n /** Connection alias, when the model under test cares about one. */\n alias: (alias: string) => KosCoreBootBuilder;\n /** Boot KosCore with everything registered on this chain. */\n boot: () => Promise<IKosCoreManager>;\n}\n\n/**\n * Put the mock transport and the connection alias in place before anything\n * constructs KosCore.\n *\n * KosCore picks its transport and reads its alias in the constructor, and\n * registering a model reaches `KosCore.getInstance()` — so registration cannot\n * come first.\n */\nfunction prepareTransport(alias?: string): void {\n if (prepared) {\n return;\n }\n prepared = true;\n KosMock.configure({ standalone: true });\n KosCore.getInstance({ connectionAlias: alias });\n}\n\nfunction bootCore(\n registration: IKosRegistry,\n options: BootKosCoreOptions\n): Promise<IKosCoreManager> {\n if (!booted) {\n prepareTransport(options.alias);\n const core = KosCore.create(registration, false, options.alias);\n booted = core.whenReady().then(() => core);\n }\n return booted;\n}\n\nfunction buildBootBuilder(): KosCoreBootBuilder {\n const registrations: (() => void)[] = [];\n const preloadModels: Preloaded[] = [];\n let alias: string | undefined;\n\n const builder: KosCoreBootBuilder = {\n model: (registration, preload) => {\n registrations.push(() =>\n RegistrationManager.model.register(builder)(registration, preload)\n );\n return builder;\n },\n preload: (model) => {\n preloadModels.push(model);\n return builder;\n },\n companion: (parentType, companion) => {\n registrations.push(() =>\n RegistrationManager.companion.register(builder)(parentType, companion)\n );\n return builder;\n },\n legacy: (type, registration) => {\n registrations.push(() =>\n RegistrationManager.model.registerLegacyModel(builder)(\n type,\n registration\n )\n );\n return builder;\n },\n alias: (value) => {\n alias = value;\n return builder;\n },\n boot: () => {\n prepareTransport(alias);\n registrations.splice(0).forEach((register) => register());\n return bootCore({ models: {}, preloadModels }, { alias });\n },\n };\n\n return builder;\n}\n\n/**\n * Open a registration chain, then `boot()` it.\n *\n * Idempotent per module instance: the first `boot()` boots, later ones return\n * the same core. KosCore and the model manager are process-global, so a test\n * file gets one core and one set of singletons — which is the isolation\n * boundary, and the reason a differently-configured singleton needs its own\n * file.\n *\n * Register any routes the models need BEFORE calling `boot()`, so nothing races\n * the boot requests.\n *\n * @example\n * ```ts\n * await bootKosCore().model(AssetManager).model(AssetEntry).boot();\n * ```\n */\nexport function bootKosCore(): KosCoreBootBuilder;\n/**\n * Boot KosCore from an assembled registry.\n *\n * Kept for callers that already hold an `IKosRegistry`. A test registering its\n * own models should use the no-argument chain instead, which takes the\n * registration beans directly.\n *\n * @param registration Models under test, e.g. `{ models: {...}, preloadModels: [] }`.\n */\nexport function bootKosCore(\n registration: IKosRegistry,\n options?: BootKosCoreOptions\n): Promise<IKosCoreManager>;\nexport function bootKosCore(\n registration?: IKosRegistry,\n options: BootKosCoreOptions = {}\n): KosCoreBootBuilder | Promise<IKosCoreManager> {\n return registration ? bootCore(registration, options) : buildBootBuilder();\n}\n\n/**\n * Wait until `predicate` holds, then resolve — or reject naming what never\n * happened.\n *\n * Model reactions are asynchronous, so a test that changes an input and asserts\n * immediately reads the old value. Polling for the OUTCOME beats sleeping for an\n * arbitrary interval: it is faster when the reaction is quick, and it fails with\n * a usable message instead of a bare assertion diff when the reaction never\n * fires at all.\n *\n * @param label What is being waited for, quoted back in the timeout message.\n */\nexport async function until(\n predicate: () => boolean,\n label: string,\n timeoutMs = 2000\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (!predicate()) {\n if (Date.now() > deadline) {\n throw new Error(`timed out waiting for ${label}`);\n }\n await new Promise((resolve) => setTimeout(resolve, 5));\n }\n}\n"],"names":[],"mappings":";;;AA6DA,IAAI;AACJ,IAAI,WAAW;AAwDf,SAAS,iBAAiB,OAAsB;AAC9C,MAAI,UAAU;AACZ;AAAA,EACF;AACA,aAAW;AACX,UAAQ,UAAU,EAAE,YAAY,KAAA,CAAM;AACtC,UAAQ,YAAY,EAAE,iBAAiB,MAAA,CAAO;AAChD;AAEA,SAAS,SACP,cACA,SAC0B;AAC1B,MAAI,CAAC,QAAQ;AACX,qBAAiB,QAAQ,KAAK;AAC9B,UAAM,OAAO,QAAQ,OAAO,cAAc,OAAO,QAAQ,KAAK;AAC9D,aAAS,KAAK,UAAA,EAAY,KAAK,MAAM,IAAI;AAAA,EAC3C;AACA,SAAO;AACT;AAEA,SAAS,mBAAuC;AAC9C,QAAM,gBAAgC,CAAA;AACtC,QAAM,gBAA6B,CAAA;AACnC,MAAI;AAEJ,QAAM,UAA8B;AAAA,IAClC,OAAO,CAAC,cAAc,YAAY;AAChC,oBAAc;AAAA,QAAK,MACjB,oBAAoB,MAAM,SAAS,OAAO,EAAE,cAAc,OAAO;AAAA,MAAA;AAEnE,aAAO;AAAA,IACT;AAAA,IACA,SAAS,CAAC,UAAU;AAClB,oBAAc,KAAK,KAAK;AACxB,aAAO;AAAA,IACT;AAAA,IACA,WAAW,CAAC,YAAY,cAAc;AACpC,oBAAc;AAAA,QAAK,MACjB,oBAAoB,UAAU,SAAS,OAAO,EAAE,YAAY,SAAS;AAAA,MAAA;AAEvE,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,CAAC,MAAM,iBAAiB;AAC9B,oBAAc;AAAA,QAAK,MACjB,oBAAoB,MAAM,oBAAoB,OAAO;AAAA,UACnD;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAEF,aAAO;AAAA,IACT;AAAA,IACA,OAAO,CAAC,UAAU;AAChB,cAAQ;AACR,aAAO;AAAA,IACT;AAAA,IACA,MAAM,MAAM;AACV,uBAAiB,KAAK;AACtB,oBAAc,OAAO,CAAC,EAAE,QAAQ,CAAC,aAAa,UAAU;AACxD,aAAO,SAAS,EAAE,QAAQ,CAAA,GAAI,cAAA,GAAiB,EAAE,OAAO;AAAA,IAC1D;AAAA,EAAA;AAGF,SAAO;AACT;AAiCO,SAAS,YACd,cACA,UAA8B,IACiB;AAC/C,SAAO,eAAe,SAAS,cAAc,OAAO,IAAI,iBAAA;AAC1D;AAcA,eAAsB,MACpB,WACA,OACA,YAAY,KACG;AACf,QAAM,WAAW,KAAK,IAAA,IAAQ;AAC9B,SAAO,CAAC,aAAa;AACnB,QAAI,KAAK,IAAA,IAAQ,UAAU;AACzB,YAAM,IAAI,MAAM,yBAAyB,KAAK,EAAE;AAAA,IAClD;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AAAA,EACvD;AACF;"}