@duet3d/objectmodel 3.7.0-alpha.5 → 3.7.0-alpha.7

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 (214) hide show
  1. package/dist/ObjectModel.js +24 -21
  2. package/dist/boards/directDisplay/DirectDisplayScreen.js +4 -1
  3. package/dist/boards/directDisplay/DirectDisplayScreenBase.js +4 -1
  4. package/dist/boards/directDisplay/DirectDisplayScreenST7567.js +4 -1
  5. package/dist/boards/directDisplay/index.js +5 -2
  6. package/dist/boards/index.js +6 -3
  7. package/dist/deprecations.json +18 -0
  8. package/dist/directories/index.js +4 -1
  9. package/dist/enums.json +281 -0
  10. package/dist/fans/index.js +4 -1
  11. package/dist/heat/Heater.js +7 -4
  12. package/dist/heat/HeaterModel.js +4 -1
  13. package/dist/heat/HeaterMonitor.js +4 -1
  14. package/dist/heat/index.js +6 -3
  15. package/dist/index.js +4 -1
  16. package/dist/inputs/InputChannel.js +5 -2
  17. package/dist/job/Build.js +5 -2
  18. package/dist/job/GCodeFileInfo.js +7 -4
  19. package/dist/job/index.js +7 -4
  20. package/dist/ledStrips/index.js +4 -1
  21. package/dist/limits/index.js +4 -1
  22. package/dist/messages/index.js +4 -1
  23. package/dist/move/Axis.js +7 -4
  24. package/dist/move/DriverId.js +4 -1
  25. package/dist/move/Extruder.d.ts +1 -1
  26. package/dist/move/Extruder.js +7 -4
  27. package/dist/move/InputShaping.js +4 -1
  28. package/dist/move/Microstepping.js +4 -1
  29. package/dist/move/MotionSystem.js +6 -3
  30. package/dist/move/MoveCalibration.js +4 -1
  31. package/dist/move/MoveCompensation.js +4 -1
  32. package/dist/move/index.js +12 -9
  33. package/dist/move/kinematics/DeltaKinematics.js +5 -2
  34. package/dist/move/kinematics/HangprinterKinematics.js +34 -1
  35. package/dist/move/kinematics/KinematicsBase.js +4 -1
  36. package/dist/move/kinematics/PolarKinematics.js +34 -1
  37. package/dist/move/kinematics/index.js +31 -6
  38. package/dist/network/NetworkInterface.d.ts +1 -1
  39. package/dist/network/NetworkInterface.js +6 -3
  40. package/dist/network/index.js +6 -3
  41. package/dist/plugins/PluginManifest.js +5 -2
  42. package/dist/plugins/index.js +4 -1
  43. package/dist/sbc/CPU.js +4 -1
  44. package/dist/sbc/Memory.js +4 -1
  45. package/dist/sbc/dsf/HttpEndpoint.js +4 -1
  46. package/dist/sbc/dsf/UserSession.js +4 -1
  47. package/dist/sbc/dsf/index.js +7 -4
  48. package/dist/sbc/index.js +7 -4
  49. package/dist/sensors/AnalogSensor.js +4 -1
  50. package/dist/sensors/Endstop.js +4 -1
  51. package/dist/sensors/FilamentMonitors/FilamentMonitorBase.js +4 -1
  52. package/dist/sensors/FilamentMonitors/LaserFilamentMonitor.js +4 -1
  53. package/dist/sensors/FilamentMonitors/PulsedFilamentMonitor.js +38 -2
  54. package/dist/sensors/FilamentMonitors/RotatingMagnetFilamentMonitor.js +4 -1
  55. package/dist/sensors/FilamentMonitors/index.js +29 -4
  56. package/dist/sensors/Probe.js +4 -1
  57. package/dist/sensors/index.js +9 -6
  58. package/dist/spindles/index.js +4 -1
  59. package/dist/src/ModelCollection.d.ts +36 -0
  60. package/dist/src/ModelCollection.js +108 -0
  61. package/dist/src/ModelDictionary.d.ts +44 -0
  62. package/dist/src/ModelDictionary.js +109 -0
  63. package/dist/src/ModelObject.d.ts +55 -0
  64. package/dist/src/ModelObject.js +237 -0
  65. package/dist/src/ModelSet.d.ts +11 -0
  66. package/dist/src/ModelSet.js +15 -0
  67. package/dist/src/ObjectModel.d.ts +47 -0
  68. package/dist/src/ObjectModel.js +57 -0
  69. package/dist/src/boards/Driver.d.ts +18 -0
  70. package/dist/src/boards/Driver.js +37 -0
  71. package/dist/src/boards/directDisplay/DirectDisplayScreen.d.ts +6 -0
  72. package/dist/src/boards/directDisplay/DirectDisplayScreen.js +21 -0
  73. package/dist/src/boards/directDisplay/DirectDisplayScreenBase.d.ts +11 -0
  74. package/dist/src/boards/directDisplay/DirectDisplayScreenBase.js +19 -0
  75. package/dist/src/boards/directDisplay/DirectDisplayScreenST7567.d.ts +9 -0
  76. package/dist/src/boards/directDisplay/DirectDisplayScreenST7567.js +26 -0
  77. package/dist/src/boards/directDisplay/index.d.ts +20 -0
  78. package/dist/src/boards/directDisplay/index.js +59 -0
  79. package/dist/src/boards/index.d.ts +59 -0
  80. package/dist/src/boards/index.js +103 -0
  81. package/dist/src/directories/index.d.ts +11 -0
  82. package/dist/src/directories/index.js +21 -0
  83. package/dist/src/fans/index.d.ts +19 -0
  84. package/dist/src/fans/index.js +33 -0
  85. package/dist/src/heat/Heater.d.ts +30 -0
  86. package/dist/src/heat/Heater.js +41 -0
  87. package/dist/src/heat/HeaterModel.d.ts +21 -0
  88. package/dist/src/heat/HeaterModel.js +35 -0
  89. package/dist/src/heat/HeaterMonitor.d.ts +19 -0
  90. package/dist/src/heat/HeaterMonitor.js +31 -0
  91. package/dist/src/heat/index.d.ts +22 -0
  92. package/dist/src/heat/index.js +46 -0
  93. package/dist/src/index.d.ts +26 -0
  94. package/dist/src/index.js +57 -0
  95. package/dist/src/inputs/CodeChannel.d.ts +18 -0
  96. package/dist/src/inputs/CodeChannel.js +22 -0
  97. package/dist/src/inputs/Compatibility.d.ts +10 -0
  98. package/dist/src/inputs/Compatibility.js +14 -0
  99. package/dist/src/inputs/InputChannel.d.ts +32 -0
  100. package/dist/src/inputs/InputChannel.js +44 -0
  101. package/dist/src/inputs/index.d.ts +3 -0
  102. package/dist/src/inputs/index.js +19 -0
  103. package/dist/src/job/Build.d.ts +15 -0
  104. package/dist/src/job/Build.js +29 -0
  105. package/dist/src/job/GCodeFileInfo.d.ts +19 -0
  106. package/dist/src/job/GCodeFileInfo.js +29 -0
  107. package/dist/src/job/ThumbnailInfo.d.ts +15 -0
  108. package/dist/src/job/ThumbnailInfo.js +23 -0
  109. package/dist/src/job/index.d.ts +45 -0
  110. package/dist/src/job/index.js +78 -0
  111. package/dist/src/ledStrips/index.d.ts +13 -0
  112. package/dist/src/ledStrips/index.js +24 -0
  113. package/dist/src/limits/index.d.ts +32 -0
  114. package/dist/src/limits/index.js +42 -0
  115. package/dist/src/messages/index.d.ts +13 -0
  116. package/dist/src/messages/index.js +30 -0
  117. package/dist/src/move/Axis.d.ts +71 -0
  118. package/dist/src/move/Axis.js +82 -0
  119. package/dist/src/move/DriverId.d.ts +10 -0
  120. package/dist/src/move/DriverId.js +52 -0
  121. package/dist/src/move/Extruder.d.ts +39 -0
  122. package/dist/src/move/Extruder.js +57 -0
  123. package/dist/src/move/InputShaping.d.ts +19 -0
  124. package/dist/src/move/InputShaping.js +30 -0
  125. package/dist/src/move/KeepoutZone.d.ts +10 -0
  126. package/dist/src/move/KeepoutZone.js +21 -0
  127. package/dist/src/move/Microstepping.d.ts +6 -0
  128. package/dist/src/move/Microstepping.js +16 -0
  129. package/dist/src/move/MotionSystem.d.ts +20 -0
  130. package/dist/src/move/MotionSystem.js +30 -0
  131. package/dist/src/move/MoveCalibration.d.ts +11 -0
  132. package/dist/src/move/MoveCalibration.js +25 -0
  133. package/dist/src/move/MoveCompensation.d.ts +30 -0
  134. package/dist/src/move/MoveCompensation.js +50 -0
  135. package/dist/src/move/index.d.ts +80 -0
  136. package/dist/src/move/index.js +120 -0
  137. package/dist/src/move/kinematics/CoreKinematics.d.ts +9 -0
  138. package/dist/src/move/kinematics/CoreKinematics.js +31 -0
  139. package/dist/src/move/kinematics/DeltaKinematics.d.ts +20 -0
  140. package/dist/src/move/kinematics/DeltaKinematics.js +43 -0
  141. package/dist/src/move/kinematics/HangprinterKinematics.d.ts +9 -0
  142. package/dist/src/move/kinematics/HangprinterKinematics.js +61 -0
  143. package/dist/src/move/kinematics/KinematicsBase.d.ts +37 -0
  144. package/dist/src/move/kinematics/KinematicsBase.js +59 -0
  145. package/dist/src/move/kinematics/PolarKinematics.d.ts +12 -0
  146. package/dist/src/move/kinematics/PolarKinematics.js +59 -0
  147. package/dist/src/move/kinematics/ScaraKinematics.d.ts +14 -0
  148. package/dist/src/move/kinematics/ScaraKinematics.js +29 -0
  149. package/dist/src/move/kinematics/index.d.ts +14 -0
  150. package/dist/src/move/kinematics/index.js +98 -0
  151. package/dist/src/network/NetworkInterface.d.ts +46 -0
  152. package/dist/src/network/NetworkInterface.js +59 -0
  153. package/dist/src/network/index.d.ts +14 -0
  154. package/dist/src/network/index.js +38 -0
  155. package/dist/src/plugins/PluginManifest.d.ts +67 -0
  156. package/dist/src/plugins/PluginManifest.js +128 -0
  157. package/dist/src/plugins/index.d.ts +9 -0
  158. package/dist/src/plugins/index.js +33 -0
  159. package/dist/src/sbc/CPU.d.ts +8 -0
  160. package/dist/src/sbc/CPU.js +18 -0
  161. package/dist/src/sbc/Memory.d.ts +6 -0
  162. package/dist/src/sbc/Memory.js +16 -0
  163. package/dist/src/sbc/dsf/HttpEndpoint.d.ts +19 -0
  164. package/dist/src/sbc/dsf/HttpEndpoint.js +30 -0
  165. package/dist/src/sbc/dsf/UserSession.d.ts +18 -0
  166. package/dist/src/sbc/dsf/UserSession.js +30 -0
  167. package/dist/src/sbc/dsf/index.d.ts +15 -0
  168. package/dist/src/sbc/dsf/index.js +39 -0
  169. package/dist/src/sbc/index.d.ts +19 -0
  170. package/dist/src/sbc/index.js +43 -0
  171. package/dist/src/sensors/AnalogSensor.d.ts +59 -0
  172. package/dist/src/sensors/AnalogSensor.js +71 -0
  173. package/dist/src/sensors/Endstop.d.ts +15 -0
  174. package/dist/src/sensors/Endstop.js +26 -0
  175. package/dist/src/sensors/FilamentMonitors/Duet3DFilamentMonitor.d.ts +11 -0
  176. package/dist/src/sensors/FilamentMonitors/Duet3DFilamentMonitor.js +17 -0
  177. package/dist/src/sensors/FilamentMonitors/FilamentMonitorBase.d.ts +33 -0
  178. package/dist/src/sensors/FilamentMonitors/FilamentMonitorBase.js +45 -0
  179. package/dist/src/sensors/FilamentMonitors/LaserFilamentMonitor.d.ts +22 -0
  180. package/dist/src/sensors/FilamentMonitors/LaserFilamentMonitor.js +50 -0
  181. package/dist/src/sensors/FilamentMonitors/PulsedFilamentMonitor.d.ts +22 -0
  182. package/dist/src/sensors/FilamentMonitors/PulsedFilamentMonitor.js +82 -0
  183. package/dist/src/sensors/FilamentMonitors/RotatingMagnetFilamentMonitor.d.ts +22 -0
  184. package/dist/src/sensors/FilamentMonitors/RotatingMagnetFilamentMonitor.js +50 -0
  185. package/dist/src/sensors/FilamentMonitors/index.d.ts +12 -0
  186. package/dist/src/sensors/FilamentMonitors/index.js +77 -0
  187. package/dist/src/sensors/Probe.d.ts +51 -0
  188. package/dist/src/sensors/Probe.js +66 -0
  189. package/dist/src/sensors/index.d.ts +21 -0
  190. package/dist/src/sensors/index.js +49 -0
  191. package/dist/src/spindles/index.d.ts +25 -0
  192. package/dist/src/spindles/index.js +37 -0
  193. package/dist/src/state/MachineStatus.d.ts +17 -0
  194. package/dist/src/state/MachineStatus.js +21 -0
  195. package/dist/src/state/MessageBox.d.ts +26 -0
  196. package/dist/src/state/MessageBox.js +42 -0
  197. package/dist/src/state/RestorePoint.d.ts +11 -0
  198. package/dist/src/state/RestorePoint.js +21 -0
  199. package/dist/src/state/index.d.ts +69 -0
  200. package/dist/src/state/index.js +109 -0
  201. package/dist/src/tools/ToolRetraction.d.ts +9 -0
  202. package/dist/src/tools/ToolRetraction.js +19 -0
  203. package/dist/src/tools/index.d.ts +32 -0
  204. package/dist/src/tools/index.js +43 -0
  205. package/dist/src/volumes/index.d.ts +11 -0
  206. package/dist/src/volumes/index.js +21 -0
  207. package/dist/state/MessageBox.js +4 -1
  208. package/dist/state/RestorePoint.js +4 -1
  209. package/dist/state/index.js +7 -4
  210. package/dist/tools/ToolRetraction.js +4 -1
  211. package/dist/tools/index.d.ts +1 -1
  212. package/dist/tools/index.js +6 -3
  213. package/dist/volumes/index.js +4 -1
  214. package/package.json +5 -3
@@ -10,16 +10,41 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
13
35
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
37
  };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
16
41
  Object.defineProperty(exports, "__esModule", { value: true });
17
42
  exports.FilamentMonitor = void 0;
18
43
  exports.getFilamentMonitor = getFilamentMonitor;
19
- const FilamentMonitorBase_1 = require("./FilamentMonitorBase");
20
- const LaserFilamentMonitor_1 = require("./LaserFilamentMonitor");
21
- const PulsedFilamentMonitor_1 = require("./PulsedFilamentMonitor");
22
- const RotatingMagnetFilamentMonitor_1 = require("./RotatingMagnetFilamentMonitor");
44
+ const FilamentMonitorBase_1 = __importStar(require("./FilamentMonitorBase"));
45
+ const LaserFilamentMonitor_1 = __importDefault(require("./LaserFilamentMonitor"));
46
+ const PulsedFilamentMonitor_1 = __importDefault(require("./PulsedFilamentMonitor"));
47
+ const RotatingMagnetFilamentMonitor_1 = __importDefault(require("./RotatingMagnetFilamentMonitor"));
23
48
  class FilamentMonitor extends FilamentMonitorBase_1.default {
24
49
  update(jsonElement) {
25
50
  if (jsonElement === null) {
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Probe = exports.ProbeTouchMode = exports.ProbeType = void 0;
4
- const ModelObject_1 = require("../ModelObject");
7
+ const ModelObject_1 = __importDefault(require("../ModelObject"));
5
8
  var ProbeType;
6
9
  (function (ProbeType) {
7
10
  ProbeType[ProbeType["none"] = 0] = "none";
@@ -13,14 +13,17 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
13
13
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
16
19
  Object.defineProperty(exports, "__esModule", { value: true });
17
20
  exports.Sensors = exports.GpInputPort = void 0;
18
- const ModelObject_1 = require("../ModelObject");
19
- const ModelCollection_1 = require("../ModelCollection");
20
- const AnalogSensor_1 = require("./AnalogSensor");
21
- const Endstop_1 = require("./Endstop");
22
- const FilamentMonitors_1 = require("./FilamentMonitors");
23
- const Probe_1 = require("./Probe");
21
+ const ModelObject_1 = __importDefault(require("../ModelObject"));
22
+ const ModelCollection_1 = __importDefault(require("../ModelCollection"));
23
+ const AnalogSensor_1 = __importDefault(require("./AnalogSensor"));
24
+ const Endstop_1 = __importDefault(require("./Endstop"));
25
+ const FilamentMonitors_1 = __importDefault(require("./FilamentMonitors"));
26
+ const Probe_1 = __importDefault(require("./Probe"));
24
27
  class GpInputPort extends ModelObject_1.default {
25
28
  constructor() {
26
29
  super(...arguments);
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Spindle = exports.SpindleType = exports.SpindleState = void 0;
4
- const ModelObject_1 = require("../ModelObject");
7
+ const ModelObject_1 = __importDefault(require("../ModelObject"));
5
8
  var SpindleState;
6
9
  (function (SpindleState) {
7
10
  SpindleState["unconfigured"] = "unconfigured";
@@ -0,0 +1,36 @@
1
+ import { IModelObject } from "./ModelObject";
2
+ /**
3
+ * Class for storing model object items in an array
4
+ */
5
+ export declare class ModelCollection<T extends IModelObject | null> extends Array<T> implements IModelObject {
6
+ /**
7
+ * Constructor of this class
8
+ * @param itemConstructor Item constructor type that items must derive from
9
+ */
10
+ constructor(itemConstructor: {
11
+ new (): T;
12
+ });
13
+ /**
14
+ * Overridden push method to perform better type checks
15
+ * @param items Items to add
16
+ */
17
+ push(...items: T[]): number;
18
+ /**
19
+ * Update this instance from the given data
20
+ * @param jsonElement JSON data to upgrade this instance from
21
+ * @returns Updated instance
22
+ */
23
+ update(jsonElement: any): IModelObject | null;
24
+ }
25
+ export default ModelCollection;
26
+ /**
27
+ * Initialize a model collection from the given data
28
+ * @param itemType Item type to create
29
+ * @param data Data to assign
30
+ * @returns Initialized model collection
31
+ */
32
+ export declare function initCollection<T extends IModelObject>(itemType: {
33
+ new (): T;
34
+ }, data: Array<{
35
+ [Property in keyof T]?: T[Property];
36
+ }>): ModelCollection<T>;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelCollection = void 0;
4
+ exports.initCollection = initCollection;
5
+ const ModelObject_1 = require("./ModelObject");
6
+ const index_1 = require("./index");
7
+ /**
8
+ * Class for storing model object items in an array
9
+ */
10
+ class ModelCollection extends Array {
11
+ /**
12
+ * Constructor of this class
13
+ * @param itemConstructor Item constructor type that items must derive from
14
+ */
15
+ constructor(itemConstructor) {
16
+ super();
17
+ Object.setPrototypeOf(this, ModelCollection.prototype);
18
+ Object.defineProperty(this, "$itemConstructor", { enumerable: false, value: itemConstructor });
19
+ }
20
+ // Unfortunately it isn't possible to override index operators in JS/TS
21
+ /**
22
+ * Overridden push method to perform better type checks
23
+ * @param items Items to add
24
+ */
25
+ push(...items) {
26
+ const that = this;
27
+ for (const item of items) {
28
+ if (item === null || item instanceof that.$itemConstructor) {
29
+ super.push(item);
30
+ }
31
+ else {
32
+ const newItem = new that.$itemConstructor();
33
+ super.push(newItem.update(item));
34
+ }
35
+ }
36
+ return this.length;
37
+ }
38
+ /**
39
+ * Update this instance from the given data
40
+ * @param jsonElement JSON data to upgrade this instance from
41
+ * @returns Updated instance
42
+ */
43
+ update(jsonElement) {
44
+ if (jsonElement === null) {
45
+ return null;
46
+ }
47
+ if (!(jsonElement instanceof Array)) {
48
+ throw new Error(`Invalid JSON element type for model collection ${typeof jsonElement}`);
49
+ }
50
+ const that = this;
51
+ // Remove deleted items
52
+ this.splice(jsonElement.length);
53
+ // Update existing items
54
+ for (let i = 0; i < Math.min(jsonElement.length, this.length); i++) {
55
+ const currentItem = this[i];
56
+ if (currentItem === null) {
57
+ const newItem = jsonElement[i];
58
+ if (newItem instanceof that.$itemConstructor) {
59
+ (0, index_1.setArrayItem)(this, i, jsonElement[i]);
60
+ }
61
+ else {
62
+ const refItem = new that.$itemConstructor();
63
+ (0, index_1.setArrayItem)(this, i, refItem.update(newItem));
64
+ }
65
+ }
66
+ else if ((0, ModelObject_1.isModelObject)(currentItem)) {
67
+ const newItem = currentItem.update(jsonElement[i]);
68
+ if (currentItem !== newItem) {
69
+ (0, index_1.setArrayItem)(this, i, newItem);
70
+ }
71
+ }
72
+ else {
73
+ const newItem = jsonElement[i];
74
+ if (currentItem !== newItem) {
75
+ (0, index_1.setArrayItem)(this, i, newItem);
76
+ }
77
+ }
78
+ }
79
+ // Add new items
80
+ for (let i = this.length; i < jsonElement.length; i++) {
81
+ const itemToAdd = jsonElement[i];
82
+ if (itemToAdd === null) {
83
+ super.push(itemToAdd);
84
+ }
85
+ else {
86
+ const newItem = new that.$itemConstructor();
87
+ super.push(newItem.update(itemToAdd));
88
+ }
89
+ }
90
+ return this;
91
+ }
92
+ }
93
+ exports.ModelCollection = ModelCollection;
94
+ exports.default = ModelCollection;
95
+ /**
96
+ * Initialize a model collection from the given data
97
+ * @param itemType Item type to create
98
+ * @param data Data to assign
99
+ * @returns Initialized model collection
100
+ */
101
+ function initCollection(itemType, data) {
102
+ const result = new ModelCollection(itemType);
103
+ for (let presetItem of data) {
104
+ const item = new itemType();
105
+ result.push(item.update(presetItem));
106
+ }
107
+ return result;
108
+ }
@@ -0,0 +1,44 @@
1
+ import { IModelObject } from "./ModelObject";
2
+ /**
3
+ * Dictionary class to map object model data
4
+ */
5
+ export declare class ModelDictionary<T> extends Map<string, T | null> implements IModelObject {
6
+ /**
7
+ * Constructor of this class
8
+ * @param nullDeletesKeys Whether setting null to items effectively deletes them
9
+ * @param itemConstructor Item constructor type to use for type-checking
10
+ */
11
+ constructor(nullDeletesKeys: boolean, itemConstructor?: {
12
+ new (): T;
13
+ } | null);
14
+ /**
15
+ * Overridden set method to perform type-checks and update
16
+ * @param key Key to set
17
+ * @param value Value to set
18
+ */
19
+ set(key: string, value: T | null): this;
20
+ /**
21
+ * Update this instance from the given data
22
+ * @param jsonElement JSON data to upgrade this instance from
23
+ * @returns Updated instance
24
+ */
25
+ update(jsonElement: any): IModelObject | null;
26
+ /**
27
+ * Convert this object to JSON
28
+ * @returns JSON object
29
+ */
30
+ toJSON(): Record<string, T | null>;
31
+ }
32
+ export default ModelDictionary;
33
+ /**
34
+ * Initialize a model dictionary from the given data
35
+ * @param nullDeletesKeys Defines whether setting values to null deletes the corresponding key
36
+ * @param itemConstructor Item constructor
37
+ * @param data Data to assign
38
+ * @returns Initialized model dictionary
39
+ */
40
+ export declare function initDictionary<T>(nullDeletesKeys: boolean, itemConstructor: {
41
+ new (): T;
42
+ }, data: Record<string, {
43
+ [Property in keyof T]?: T[Property];
44
+ }>): ModelDictionary<T>;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelDictionary = void 0;
4
+ exports.initDictionary = initDictionary;
5
+ const ModelObject_1 = require("./ModelObject");
6
+ /**
7
+ * Dictionary class to map object model data
8
+ */
9
+ class ModelDictionary extends Map {
10
+ /**
11
+ * Constructor of this class
12
+ * @param nullDeletesKeys Whether setting null to items effectively deletes them
13
+ * @param itemConstructor Item constructor type to use for type-checking
14
+ */
15
+ constructor(nullDeletesKeys, itemConstructor = null) {
16
+ super();
17
+ Object.setPrototypeOf(this, ModelDictionary.prototype);
18
+ Object.defineProperty(this, "$nullDeletesKeys", { enumerable: false, value: nullDeletesKeys });
19
+ Object.defineProperty(this, "$itemConstructor", { enumerable: false, value: itemConstructor });
20
+ }
21
+ /**
22
+ * Overridden set method to perform type-checks and update
23
+ * @param key Key to set
24
+ * @param value Value to set
25
+ */
26
+ set(key, value) {
27
+ const that = this;
28
+ if (value === null) {
29
+ if (that.$nullDeletesKeys) {
30
+ this.delete(key);
31
+ return this;
32
+ }
33
+ return super.set(key, value);
34
+ }
35
+ const currentItem = this.get(key);
36
+ if (currentItem == null) {
37
+ if (that.$itemConstructor !== null && !(value instanceof that.$itemConstructor)) {
38
+ const newItem = new that.$itemConstructor();
39
+ if ((0, ModelObject_1.isModelObject)(newItem)) {
40
+ const updatedItem = newItem.update(value);
41
+ return super.set(key, updatedItem);
42
+ }
43
+ }
44
+ }
45
+ else if ((0, ModelObject_1.isModelObject)(currentItem)) {
46
+ const newItem = currentItem.update(value);
47
+ if (currentItem !== newItem) {
48
+ return super.set(key, value);
49
+ }
50
+ return this;
51
+ }
52
+ return super.set(key, value);
53
+ }
54
+ /**
55
+ * Update this instance from the given data
56
+ * @param jsonElement JSON data to upgrade this instance from
57
+ * @returns Updated instance
58
+ */
59
+ update(jsonElement) {
60
+ if (jsonElement === null) {
61
+ this.clear();
62
+ }
63
+ else if (jsonElement instanceof Map) {
64
+ for (const [key, value] of jsonElement.entries()) {
65
+ this.set(key, value);
66
+ }
67
+ }
68
+ else {
69
+ for (const [key, value] of Object.entries(jsonElement)) {
70
+ this.set(key, value);
71
+ }
72
+ }
73
+ return this;
74
+ }
75
+ /**
76
+ * Convert this object to JSON
77
+ * @returns JSON object
78
+ */
79
+ toJSON() {
80
+ const json = {};
81
+ for (const [key, value] of this) {
82
+ json[key] = value;
83
+ }
84
+ return json;
85
+ }
86
+ }
87
+ exports.ModelDictionary = ModelDictionary;
88
+ exports.default = ModelDictionary;
89
+ /**
90
+ * Initialize a model dictionary from the given data
91
+ * @param nullDeletesKeys Defines whether setting values to null deletes the corresponding key
92
+ * @param itemConstructor Item constructor
93
+ * @param data Data to assign
94
+ * @returns Initialized model dictionary
95
+ */
96
+ function initDictionary(nullDeletesKeys, itemConstructor, data) {
97
+ const result = new ModelDictionary(nullDeletesKeys, itemConstructor);
98
+ for (let key in data) {
99
+ const item = new itemConstructor();
100
+ if ((0, ModelObject_1.isModelObject)(item)) {
101
+ item.update(data[key]);
102
+ result.set(key, item);
103
+ }
104
+ else {
105
+ result.set(key, data[key]);
106
+ }
107
+ }
108
+ return result;
109
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Interface for updating model objects using JSON data
3
+ */
4
+ export interface IModelObject {
5
+ /**
6
+ * Update this instance from the given data
7
+ * @param jsonElement JSON data to upgrade this instance from
8
+ * @returns Updated instance (may not equal the original instance)
9
+ */
10
+ update(jsonElement: any): IModelObject | null;
11
+ }
12
+ /**
13
+ * Check whether a given value provides model update functionality
14
+ * @param value Value to check
15
+ */
16
+ export declare function isModelObject(value: any): value is IModelObject;
17
+ /**
18
+ * Base class for object model classes
19
+ */
20
+ export declare abstract class ModelObject implements IModelObject {
21
+ /**
22
+ * Update this instance from the given data
23
+ * @param jsonElement JSON data to upgrade this instance from
24
+ * @returns Updated instance (may not equal the original instance)
25
+ */
26
+ update(jsonElement: any): IModelObject | null;
27
+ /**
28
+ * Wrap a nullable model object property so that type checks can be performed
29
+ * @param key Property key of the derived class
30
+ * @param constructor Constructor for creating new elements
31
+ */
32
+ static wrapModelCollectionProperty<S extends IModelObject, K extends keyof S, T extends IModelObject | null>(self: S, key: K, itemConstructor: {
33
+ new (): T;
34
+ }): void;
35
+ /**
36
+ * Wrap a nullable model object property so that type checks can be performed
37
+ * @param key Property key of the derived class
38
+ * @param constructor Constructor for creating new elements
39
+ */
40
+ static wrapModelProperty<S extends IModelObject, K extends keyof S, T extends IModelObject>(self: S, key: K, constructor: {
41
+ new (): T;
42
+ }): void;
43
+ }
44
+ export default ModelObject;
45
+ /**
46
+ * Initialize a model object from the given data
47
+ * @param itemType Model type to create
48
+ * @param data Data to assign
49
+ * @returns Initialized model instance
50
+ */
51
+ export declare function initObject<T>(itemType: {
52
+ new (): T;
53
+ }, data: {
54
+ [Property in keyof T]?: T[Property];
55
+ }): T;