@zwave-js/nvmedit 13.2.0 → 13.4.0

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 (235) hide show
  1. package/build/cli.js +5 -5
  2. package/build/cli.js.map +1 -1
  3. package/build/convert.d.ts +15 -14
  4. package/build/convert.d.ts.map +1 -1
  5. package/build/convert.js +647 -389
  6. package/build/convert.js.map +1 -1
  7. package/build/index.d.ts +12 -4
  8. package/build/index.d.ts.map +1 -1
  9. package/build/index.js +20 -2
  10. package/build/index.js.map +1 -1
  11. package/build/index_safe.d.ts +7 -4
  12. package/build/index_safe.d.ts.map +1 -1
  13. package/build/index_safe.js +4 -2
  14. package/build/index_safe.js.map +1 -1
  15. package/build/lib/NVM3.d.ts +53 -0
  16. package/build/lib/NVM3.d.ts.map +1 -0
  17. package/build/lib/NVM3.js +650 -0
  18. package/build/lib/NVM3.js.map +1 -0
  19. package/build/lib/NVM500.d.ts +46 -0
  20. package/build/lib/NVM500.d.ts.map +1 -0
  21. package/build/lib/NVM500.js +413 -0
  22. package/build/lib/NVM500.js.map +1 -0
  23. package/build/lib/common/definitions.d.ts +138 -0
  24. package/build/lib/common/definitions.d.ts.map +1 -0
  25. package/build/lib/common/definitions.js +11 -0
  26. package/build/lib/common/definitions.js.map +1 -0
  27. package/build/lib/common/routeCache.d.ts +18 -0
  28. package/build/lib/common/routeCache.d.ts.map +1 -0
  29. package/build/lib/common/routeCache.js +56 -0
  30. package/build/lib/common/routeCache.js.map +1 -0
  31. package/build/lib/common/sucUpdateEntry.d.ts +10 -0
  32. package/build/lib/common/sucUpdateEntry.d.ts.map +1 -0
  33. package/build/lib/common/sucUpdateEntry.js +35 -0
  34. package/build/lib/common/sucUpdateEntry.js.map +1 -0
  35. package/build/lib/common/utils.d.ts +9 -0
  36. package/build/lib/common/utils.d.ts.map +1 -0
  37. package/build/lib/common/utils.js +52 -0
  38. package/build/lib/common/utils.js.map +1 -0
  39. package/build/lib/io/BufferedNVMReader.d.ts +21 -0
  40. package/build/lib/io/BufferedNVMReader.d.ts.map +1 -0
  41. package/build/lib/io/BufferedNVMReader.js +79 -0
  42. package/build/lib/io/BufferedNVMReader.js.map +1 -0
  43. package/build/lib/io/NVMFileIO.d.ts +24 -0
  44. package/build/lib/io/NVMFileIO.d.ts.map +1 -0
  45. package/build/lib/io/NVMFileIO.js +86 -0
  46. package/build/lib/io/NVMFileIO.js.map +1 -0
  47. package/build/lib/io/NVMMemoryIO.d.ts +20 -0
  48. package/build/lib/io/NVMMemoryIO.d.ts.map +1 -0
  49. package/build/lib/io/NVMMemoryIO.js +48 -0
  50. package/build/lib/io/NVMMemoryIO.js.map +1 -0
  51. package/build/lib/nvm3/adapter.d.ts +33 -0
  52. package/build/lib/nvm3/adapter.d.ts.map +1 -0
  53. package/build/lib/nvm3/adapter.js +903 -0
  54. package/build/lib/nvm3/adapter.js.map +1 -0
  55. package/build/lib/nvm3/consts.d.ts.map +1 -0
  56. package/build/lib/nvm3/consts.js.map +1 -0
  57. package/build/{files → lib/nvm3/files}/ApplicationCCsFile.d.ts +5 -3
  58. package/build/lib/nvm3/files/ApplicationCCsFile.d.ts.map +1 -0
  59. package/build/{files → lib/nvm3/files}/ApplicationCCsFile.js +4 -3
  60. package/build/lib/nvm3/files/ApplicationCCsFile.js.map +1 -0
  61. package/build/{files → lib/nvm3/files}/ApplicationDataFile.d.ts +4 -4
  62. package/build/lib/nvm3/files/ApplicationDataFile.d.ts.map +1 -0
  63. package/build/{files → lib/nvm3/files}/ApplicationDataFile.js +7 -6
  64. package/build/lib/nvm3/files/ApplicationDataFile.js.map +1 -0
  65. package/build/{files → lib/nvm3/files}/ApplicationNameFile.d.ts +5 -3
  66. package/build/lib/nvm3/files/ApplicationNameFile.d.ts.map +1 -0
  67. package/build/{files → lib/nvm3/files}/ApplicationNameFile.js +4 -3
  68. package/build/lib/nvm3/files/ApplicationNameFile.js.map +1 -0
  69. package/build/{files → lib/nvm3/files}/ApplicationRFConfigFile.d.ts +5 -3
  70. package/build/lib/nvm3/files/ApplicationRFConfigFile.d.ts.map +1 -0
  71. package/build/{files → lib/nvm3/files}/ApplicationRFConfigFile.js +4 -3
  72. package/build/lib/nvm3/files/ApplicationRFConfigFile.js.map +1 -0
  73. package/build/{files → lib/nvm3/files}/ApplicationTypeFile.d.ts +5 -3
  74. package/build/lib/nvm3/files/ApplicationTypeFile.d.ts.map +1 -0
  75. package/build/{files → lib/nvm3/files}/ApplicationTypeFile.js +4 -3
  76. package/build/lib/nvm3/files/ApplicationTypeFile.js.map +1 -0
  77. package/build/{files → lib/nvm3/files}/ControllerInfoFile.d.ts +5 -3
  78. package/build/lib/nvm3/files/ControllerInfoFile.d.ts.map +1 -0
  79. package/build/{files → lib/nvm3/files}/ControllerInfoFile.js +4 -3
  80. package/build/lib/nvm3/files/ControllerInfoFile.js.map +1 -0
  81. package/build/{files → lib/nvm3/files}/NVMFile.d.ts +18 -7
  82. package/build/lib/nvm3/files/NVMFile.d.ts.map +1 -0
  83. package/build/{files → lib/nvm3/files}/NVMFile.js +44 -30
  84. package/build/lib/nvm3/files/NVMFile.js.map +1 -0
  85. package/build/{files → lib/nvm3/files}/NodeInfoFiles.d.ts +10 -4
  86. package/build/lib/nvm3/files/NodeInfoFiles.d.ts.map +1 -0
  87. package/build/{files → lib/nvm3/files}/NodeInfoFiles.js +6 -3
  88. package/build/lib/nvm3/files/NodeInfoFiles.js.map +1 -0
  89. package/build/{files → lib/nvm3/files}/ProtocolNodeMaskFiles.d.ts +22 -15
  90. package/build/lib/nvm3/files/ProtocolNodeMaskFiles.d.ts.map +1 -0
  91. package/build/{files → lib/nvm3/files}/ProtocolNodeMaskFiles.js +50 -30
  92. package/build/lib/nvm3/files/ProtocolNodeMaskFiles.js.map +1 -0
  93. package/build/{files → lib/nvm3/files}/RouteCacheFiles.d.ts +8 -17
  94. package/build/lib/nvm3/files/RouteCacheFiles.d.ts.map +1 -0
  95. package/build/{files → lib/nvm3/files}/RouteCacheFiles.js +16 -64
  96. package/build/lib/nvm3/files/RouteCacheFiles.js.map +1 -0
  97. package/build/{files → lib/nvm3/files}/SUCUpdateEntriesFile.d.ts +10 -13
  98. package/build/lib/nvm3/files/SUCUpdateEntriesFile.d.ts.map +1 -0
  99. package/build/{files → lib/nvm3/files}/SUCUpdateEntriesFile.js +15 -42
  100. package/build/lib/nvm3/files/SUCUpdateEntriesFile.js.map +1 -0
  101. package/build/{files → lib/nvm3/files}/VersionFiles.d.ts +7 -5
  102. package/build/lib/nvm3/files/VersionFiles.d.ts.map +1 -0
  103. package/build/{files → lib/nvm3/files}/VersionFiles.js +10 -7
  104. package/build/lib/nvm3/files/VersionFiles.js.map +1 -0
  105. package/build/{files → lib/nvm3/files}/index.d.ts +1 -0
  106. package/build/lib/nvm3/files/index.d.ts.map +1 -0
  107. package/build/{files → lib/nvm3/files}/index.js +1 -0
  108. package/build/lib/nvm3/files/index.js.map +1 -0
  109. package/build/lib/nvm3/object.d.ts +29 -0
  110. package/build/lib/nvm3/object.d.ts.map +1 -0
  111. package/build/lib/nvm3/object.js +118 -0
  112. package/build/lib/nvm3/object.js.map +1 -0
  113. package/build/{nvm3 → lib/nvm3}/page.d.ts +1 -5
  114. package/build/lib/nvm3/page.d.ts.map +1 -0
  115. package/build/lib/nvm3/page.js +37 -0
  116. package/build/lib/nvm3/page.js.map +1 -0
  117. package/build/{nvm3 → lib/nvm3}/utils.d.ts +2 -4
  118. package/build/lib/nvm3/utils.d.ts.map +1 -0
  119. package/build/lib/nvm3/utils.js +143 -0
  120. package/build/lib/nvm3/utils.js.map +1 -0
  121. package/build/lib/nvm500/EntryParsers.d.ts.map +1 -0
  122. package/build/lib/nvm500/EntryParsers.js.map +1 -0
  123. package/build/lib/nvm500/adapter.d.ts +22 -0
  124. package/build/lib/nvm500/adapter.d.ts.map +1 -0
  125. package/build/lib/nvm500/adapter.js +371 -0
  126. package/build/lib/nvm500/adapter.js.map +1 -0
  127. package/build/lib/nvm500/impls/Bridge_6_6x.d.ts +3 -0
  128. package/build/lib/nvm500/impls/Bridge_6_6x.d.ts.map +1 -0
  129. package/build/{nvm500/parsers → lib/nvm500/impls}/Bridge_6_6x.js +1 -1
  130. package/build/lib/nvm500/impls/Bridge_6_6x.js.map +1 -0
  131. package/build/lib/nvm500/impls/Bridge_6_7x.d.ts +3 -0
  132. package/build/lib/nvm500/impls/Bridge_6_7x.d.ts.map +1 -0
  133. package/build/{nvm500/parsers → lib/nvm500/impls}/Bridge_6_7x.js +1 -1
  134. package/build/lib/nvm500/impls/Bridge_6_7x.js.map +1 -0
  135. package/build/lib/nvm500/impls/Bridge_6_8x.d.ts +3 -0
  136. package/build/lib/nvm500/impls/Bridge_6_8x.d.ts.map +1 -0
  137. package/build/{nvm500/parsers → lib/nvm500/impls}/Bridge_6_8x.js +1 -1
  138. package/build/lib/nvm500/impls/Bridge_6_8x.js.map +1 -0
  139. package/build/lib/nvm500/impls/Static_6_6x.d.ts +3 -0
  140. package/build/lib/nvm500/impls/Static_6_6x.d.ts.map +1 -0
  141. package/build/{nvm500/parsers → lib/nvm500/impls}/Static_6_6x.js +1 -1
  142. package/build/lib/nvm500/impls/Static_6_6x.js.map +1 -0
  143. package/build/lib/nvm500/impls/Static_6_7x.d.ts +3 -0
  144. package/build/lib/nvm500/impls/Static_6_7x.d.ts.map +1 -0
  145. package/build/{nvm500/parsers → lib/nvm500/impls}/Static_6_7x.js +1 -1
  146. package/build/lib/nvm500/impls/Static_6_7x.js.map +1 -0
  147. package/build/lib/nvm500/impls/Static_6_8x.d.ts +3 -0
  148. package/build/lib/nvm500/impls/Static_6_8x.d.ts.map +1 -0
  149. package/build/{nvm500/parsers → lib/nvm500/impls}/Static_6_8x.js +1 -1
  150. package/build/lib/nvm500/impls/Static_6_8x.js.map +1 -0
  151. package/build/lib/nvm500/impls/index.d.ts +2 -0
  152. package/build/lib/nvm500/impls/index.d.ts.map +1 -0
  153. package/build/lib/nvm500/impls/index.js +18 -0
  154. package/build/lib/nvm500/impls/index.js.map +1 -0
  155. package/build/{nvm500 → lib/nvm500}/shared.d.ts +19 -2
  156. package/build/lib/nvm500/shared.d.ts.map +1 -0
  157. package/build/{nvm500 → lib/nvm500}/shared.js +19 -1
  158. package/build/lib/nvm500/shared.js.map +1 -0
  159. package/build/nvm500/NVMParser.d.ts +5 -36
  160. package/build/nvm500/NVMParser.d.ts.map +1 -1
  161. package/build/nvm500/NVMParser.js +0 -524
  162. package/build/nvm500/NVMParser.js.map +1 -1
  163. package/package.json +2 -2
  164. package/build/files/ApplicationCCsFile.d.ts.map +0 -1
  165. package/build/files/ApplicationCCsFile.js.map +0 -1
  166. package/build/files/ApplicationDataFile.d.ts.map +0 -1
  167. package/build/files/ApplicationDataFile.js.map +0 -1
  168. package/build/files/ApplicationNameFile.d.ts.map +0 -1
  169. package/build/files/ApplicationNameFile.js.map +0 -1
  170. package/build/files/ApplicationRFConfigFile.d.ts.map +0 -1
  171. package/build/files/ApplicationRFConfigFile.js.map +0 -1
  172. package/build/files/ApplicationTypeFile.d.ts.map +0 -1
  173. package/build/files/ApplicationTypeFile.js.map +0 -1
  174. package/build/files/ControllerInfoFile.d.ts.map +0 -1
  175. package/build/files/ControllerInfoFile.js.map +0 -1
  176. package/build/files/NVMFile.d.ts.map +0 -1
  177. package/build/files/NVMFile.js.map +0 -1
  178. package/build/files/NodeInfoFiles.d.ts.map +0 -1
  179. package/build/files/NodeInfoFiles.js.map +0 -1
  180. package/build/files/ProtocolNodeMaskFiles.d.ts.map +0 -1
  181. package/build/files/ProtocolNodeMaskFiles.js.map +0 -1
  182. package/build/files/RouteCacheFiles.d.ts.map +0 -1
  183. package/build/files/RouteCacheFiles.js.map +0 -1
  184. package/build/files/SUCUpdateEntriesFile.d.ts.map +0 -1
  185. package/build/files/SUCUpdateEntriesFile.js.map +0 -1
  186. package/build/files/VersionFiles.d.ts.map +0 -1
  187. package/build/files/VersionFiles.js.map +0 -1
  188. package/build/files/index.d.ts.map +0 -1
  189. package/build/files/index.js.map +0 -1
  190. package/build/nvm3/consts.d.ts.map +0 -1
  191. package/build/nvm3/consts.js.map +0 -1
  192. package/build/nvm3/nvm.d.ts +0 -31
  193. package/build/nvm3/nvm.d.ts.map +0 -1
  194. package/build/nvm3/nvm.js +0 -184
  195. package/build/nvm3/nvm.js.map +0 -1
  196. package/build/nvm3/object.d.ts +0 -25
  197. package/build/nvm3/object.d.ts.map +0 -1
  198. package/build/nvm3/object.js +0 -197
  199. package/build/nvm3/object.js.map +0 -1
  200. package/build/nvm3/page.d.ts.map +0 -1
  201. package/build/nvm3/page.js +0 -129
  202. package/build/nvm3/page.js.map +0 -1
  203. package/build/nvm3/utils.d.ts.map +0 -1
  204. package/build/nvm3/utils.js +0 -103
  205. package/build/nvm3/utils.js.map +0 -1
  206. package/build/nvm500/EntryParsers.d.ts.map +0 -1
  207. package/build/nvm500/EntryParsers.js.map +0 -1
  208. package/build/nvm500/parsers/Bridge_6_6x.d.ts +0 -3
  209. package/build/nvm500/parsers/Bridge_6_6x.d.ts.map +0 -1
  210. package/build/nvm500/parsers/Bridge_6_6x.js.map +0 -1
  211. package/build/nvm500/parsers/Bridge_6_7x.d.ts +0 -3
  212. package/build/nvm500/parsers/Bridge_6_7x.d.ts.map +0 -1
  213. package/build/nvm500/parsers/Bridge_6_7x.js.map +0 -1
  214. package/build/nvm500/parsers/Bridge_6_8x.d.ts +0 -3
  215. package/build/nvm500/parsers/Bridge_6_8x.d.ts.map +0 -1
  216. package/build/nvm500/parsers/Bridge_6_8x.js.map +0 -1
  217. package/build/nvm500/parsers/Static_6_6x.d.ts +0 -3
  218. package/build/nvm500/parsers/Static_6_6x.d.ts.map +0 -1
  219. package/build/nvm500/parsers/Static_6_6x.js.map +0 -1
  220. package/build/nvm500/parsers/Static_6_7x.d.ts +0 -3
  221. package/build/nvm500/parsers/Static_6_7x.d.ts.map +0 -1
  222. package/build/nvm500/parsers/Static_6_7x.js.map +0 -1
  223. package/build/nvm500/parsers/Static_6_8x.d.ts +0 -3
  224. package/build/nvm500/parsers/Static_6_8x.d.ts.map +0 -1
  225. package/build/nvm500/parsers/Static_6_8x.js.map +0 -1
  226. package/build/nvm500/shared.d.ts.map +0 -1
  227. package/build/nvm500/shared.js.map +0 -1
  228. package/build/shared.d.ts +0 -2
  229. package/build/shared.d.ts.map +0 -1
  230. package/build/shared.js +0 -3
  231. package/build/shared.js.map +0 -1
  232. /package/build/{nvm3 → lib/nvm3}/consts.d.ts +0 -0
  233. /package/build/{nvm3 → lib/nvm3}/consts.js +0 -0
  234. /package/build/{nvm500 → lib/nvm500}/EntryParsers.d.ts +0 -0
  235. /package/build/{nvm500 → lib/nvm500}/EntryParsers.js +0 -0
@@ -0,0 +1,138 @@
1
+ import { type CommandClasses } from "@zwave-js/core";
2
+ import { type Expand } from "@zwave-js/shared";
3
+ import { type ApplicationCCsFile, type ApplicationRFConfigFile, type ApplicationTypeFile, type ControllerInfoFile, type LRNodeInfo, type NodeInfo } from "../nvm3/files";
4
+ import { type Route } from "./routeCache";
5
+ import { type SUCUpdateEntry } from "./sucUpdateEntry";
6
+ export declare enum NVMAccess {
7
+ None = 0,
8
+ Read = 1,
9
+ Write = 2,
10
+ ReadWrite = 3
11
+ }
12
+ /** Provides an abstraction to access the contents of an NVM at the binary level */
13
+ export interface NVMIO {
14
+ /**
15
+ * Opens the NVM for reading and/or writing.
16
+ * Since different NVM implementations may or may not allow reading and writing at the same time,
17
+ * the returned value indicates which access patterns are actually allowed.
18
+ */
19
+ open(access: NVMAccess.Read | NVMAccess.Write): Promise<NVMAccess>;
20
+ /** Returns the size of the NVM, after it has been opened */
21
+ get size(): number;
22
+ /** Returns which access is currently allowed for this NVM implementation */
23
+ get accessMode(): NVMAccess;
24
+ /**
25
+ * Determines the size of the data chunks that can be used for writing.
26
+ * Requires the NVM to be readable.
27
+ */
28
+ determineChunkSize(): Promise<number>;
29
+ /**
30
+ * Reads a chunk of data with the given length from the NVM.
31
+ * If the length is longer than the chunk size, or the end of the NVM is reached,
32
+ * the returned buffer will be shorter than the requested length.
33
+ */
34
+ read(offset: number, length: number): Promise<{
35
+ buffer: Buffer;
36
+ endOfFile: boolean;
37
+ }>;
38
+ /**
39
+ * Writes a chunk of data with the given length from the NVM.
40
+ * The returned value indicates how many bytes were actually written.
41
+ */
42
+ write(offset: number, data: Buffer): Promise<{
43
+ bytesWritten: number;
44
+ endOfFile: boolean;
45
+ }>;
46
+ /** Closes the NVM */
47
+ close(): Promise<void>;
48
+ }
49
+ /** A specific NVM implementation */
50
+ export interface NVM<ID, Data> {
51
+ /** Checks if a property exists in the NVM */
52
+ has(property: ID): Promise<boolean>;
53
+ /** Reads a property from the NVM */
54
+ get(property: ID): Promise<Data | undefined>;
55
+ /** Writes a property to the NVM */
56
+ set(property: ID, value: Data): Promise<void>;
57
+ /** Deletes the property from the NVM */
58
+ delete(property: ID): Promise<void>;
59
+ }
60
+ /**
61
+ * Provides an application-level abstraction over an NVM implementation
62
+ */
63
+ export interface NVMAdapter {
64
+ /** Reads a property from the NVM */
65
+ get<T extends NVMProperty, R extends boolean = boolean>(property: T, required?: R): Promise<R extends true ? NVMPropertyToDataType<T> : (NVMPropertyToDataType<T> | undefined)>;
66
+ /**
67
+ * Changes a property to be written to the NVM later
68
+ */
69
+ set<T extends NVMProperty>(property: T, value: NVMPropertyToDataType<T>): Promise<void>;
70
+ /**
71
+ * Marks a property for deletion from the NVM. In some implementations,
72
+ * deleting one property may delete multiple properties that are stored together.
73
+ */
74
+ delete(property: NVMProperty): Promise<void>;
75
+ /** Returns whether there are pending changes that weren't written to the NVM yet */
76
+ hasPendingChanges(): boolean;
77
+ /** Writes all pending changes to the NVM */
78
+ commit(): Promise<void>;
79
+ }
80
+ export type ControllerNVMPropertyTypes = Expand<{
81
+ protocolVersion: string;
82
+ protocolFileFormat: number;
83
+ applicationVersion: string;
84
+ applicationData: Buffer;
85
+ preferredRepeaters?: number[];
86
+ sucUpdateEntries: SUCUpdateEntry[];
87
+ appRouteLock: number[];
88
+ routeSlaveSUC: number[];
89
+ sucPendingUpdate: number[];
90
+ pendingDiscovery: number[];
91
+ virtualNodeIds: number[];
92
+ nodeIds: number[];
93
+ } & Partial<{
94
+ applicationFileFormat: number;
95
+ applicationName: string;
96
+ lrNodeIds: number[];
97
+ }> & Partial<{
98
+ learnedHomeId: Buffer;
99
+ commandClasses: CommandClasses[];
100
+ systemState: number;
101
+ watchdogStarted: number;
102
+ powerLevelNormal: number[];
103
+ powerLevelLow: number[];
104
+ powerMode: number;
105
+ powerModeExtintEnable: number;
106
+ powerModeWutTimeout: number;
107
+ }> & Pick<ControllerInfoFile, "homeId" | "nodeId" | "lastNodeId" | "staticControllerNodeId" | "sucLastIndex" | "controllerConfiguration" | "sucAwarenessPushNeeded" | "maxNodeId" | "reservedId" | "systemState" | "lastNodeIdLR" | "maxNodeIdLR" | "reservedIdLR" | "primaryLongRangeChannelId" | "dcdcConfig"> & Partial<Pick<ApplicationCCsFile, "includedInsecurely" | "includedSecurelyInsecureCCs" | "includedSecurelySecureCCs">> & Partial<Pick<ApplicationRFConfigFile, "rfRegion" | "txPower" | "measured0dBm" | "enablePTI" | "maxTXPower" | "nodeIdType">> & Partial<Pick<ApplicationTypeFile, "isListening" | "optionalFunctionality" | "genericDeviceClass" | "specificDeviceClass">>>;
108
+ export interface NodeNVMPropertyTypes {
109
+ info: NodeInfo;
110
+ routes: {
111
+ lwr?: Route;
112
+ nlwr?: Route;
113
+ };
114
+ }
115
+ export interface LRNodeNVMPropertyTypes {
116
+ info: LRNodeInfo;
117
+ }
118
+ export type ControllerNVMProperty = {
119
+ domain: "controller";
120
+ type: keyof ControllerNVMPropertyTypes;
121
+ nodeId?: undefined;
122
+ };
123
+ export type ControllerNVMPropertyToDataType<P extends ControllerNVMProperty> = ControllerNVMPropertyTypes[P["type"]];
124
+ export type NodeNVMProperty = {
125
+ domain: "node";
126
+ type: keyof NodeNVMPropertyTypes;
127
+ nodeId: number;
128
+ };
129
+ export type NodeNVMPropertyToDataType<P extends NodeNVMProperty> = P["type"] extends keyof NodeNVMPropertyTypes ? NodeNVMPropertyTypes[P["type"]] : never;
130
+ export type LRNodeNVMProperty = {
131
+ domain: "lrnode";
132
+ type: keyof LRNodeNVMPropertyTypes;
133
+ nodeId: number;
134
+ };
135
+ export type LRNodeNVMPropertyToDataType<P extends LRNodeNVMProperty> = P["type"] extends keyof LRNodeNVMPropertyTypes ? LRNodeNVMPropertyTypes[P["type"]] : never;
136
+ export type NVMProperty = ControllerNVMProperty | NodeNVMProperty | LRNodeNVMProperty;
137
+ export type NVMPropertyToDataType<P extends NVMProperty> = P extends ControllerNVMProperty ? ControllerNVMPropertyToDataType<P> : P extends NodeNVMProperty ? NodeNVMPropertyToDataType<P> : P extends LRNodeNVMProperty ? LRNodeNVMPropertyToDataType<P> : never;
138
+ //# sourceMappingURL=definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../../src/lib/common/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,oBAAY,SAAS;IACpB,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,SAAS,IAAA;CACT;AAED,mFAAmF;AACnF,MAAM,WAAW,KAAK;IACrB;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnE,4DAA4D;IAC5D,IAAI,IAAI,IAAI,MAAM,CAAC;IACnB,4EAA4E;IAC5E,IAAI,UAAU,IAAI,SAAS,CAAC;IAE5B;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtC;;;;OAIG;IACH,IAAI,CACH,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEnD;;;OAGG;IACH,KAAK,CACJ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEzD,qBAAqB;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,oCAAoC;AACpC,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,IAAI;IAC5B,6CAA6C;IAC7C,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpC,oCAAoC;IACpC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IAE7C,mCAAmC;IACnC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,wCAAwC;IACxC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,oCAAoC;IACpC,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EACrD,QAAQ,EAAE,CAAC,EACX,QAAQ,CAAC,EAAE,CAAC,GACV,OAAO,CACT,CAAC,SAAS,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAC,GACtC,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CACzC,CAAC;IAEF;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,WAAW,EACxB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,oFAAoF;IACpF,iBAAiB,IAAI,OAAO,CAAC;IAE7B,4CAA4C;IAC5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAC5C;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB,GAEC,OAAO,CAAC;IACT,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,GAEA,OAAO,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;CAC5B,CAAC,GACA,IAAI,CACL,kBAAkB,EAChB,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,wBAAwB,GACxB,cAAc,GACd,yBAAyB,GACzB,wBAAwB,GACxB,WAAW,GACX,YAAY,GACZ,aAAa,GACb,cAAc,GACd,aAAa,GACb,cAAc,GACd,2BAA2B,GAC3B,YAAY,CACd,GAEC,OAAO,CACR,IAAI,CACH,kBAAkB,EAChB,oBAAoB,GACpB,6BAA6B,GAC7B,2BAA2B,CAC7B,CACD,GAEC,OAAO,CACR,IAAI,CACH,uBAAuB,EACrB,UAAU,GACV,SAAS,GACT,cAAc,GACd,WAAW,GACX,YAAY,GACZ,YAAY,CACd,CACD,GAEC,OAAO,CACR,IAAI,CACH,mBAAmB,EACjB,aAAa,GACb,uBAAuB,GACvB,oBAAoB,GACpB,qBAAqB,CACvB,CACD,CACD,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,KAAK,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,0BAA0B,CAAC;IACvC,MAAM,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,CAAC,CAAC,SAAS,qBAAqB,IAC1E,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,oBAAoB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,eAAe,IAC9D,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,oBAAoB,GACzC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAC/B,KAAK,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,EAAE,MAAM,sBAAsB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,iBAAiB,IAClE,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,sBAAsB,GAC3C,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GACjC,KAAK,CAAC;AAEV,MAAM,MAAM,WAAW,GACpB,qBAAqB,GACrB,eAAe,GACf,iBAAiB,CAAC;AAErB,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAC3D,qBAAqB,GAAG,+BAA+B,CAAC,CAAC,CAAC,GACxD,CAAC,SAAS,eAAe,GAAG,yBAAyB,CAAC,CAAC,CAAC,GACxD,CAAC,SAAS,iBAAiB,GAAG,2BAA2B,CAAC,CAAC,CAAC,GAC5D,KAAK,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NVMAccess = void 0;
4
+ var NVMAccess;
5
+ (function (NVMAccess) {
6
+ NVMAccess[NVMAccess["None"] = 0] = "None";
7
+ NVMAccess[NVMAccess["Read"] = 1] = "Read";
8
+ NVMAccess[NVMAccess["Write"] = 2] = "Write";
9
+ NVMAccess[NVMAccess["ReadWrite"] = 3] = "ReadWrite";
10
+ })(NVMAccess || (exports.NVMAccess = NVMAccess = {}));
11
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/lib/common/definitions.ts"],"names":[],"mappings":";;;AAaA,IAAY,SAKX;AALD,WAAY,SAAS;IACpB,yCAAI,CAAA;IACJ,yCAAI,CAAA;IACJ,2CAAK,CAAA;IACL,mDAAS,CAAA;AACV,CAAC,EALW,SAAS,yBAAT,SAAS,QAKpB"}
@@ -0,0 +1,18 @@
1
+ import { type FLiRS, RouteProtocolDataRate } from "@zwave-js/core/safe";
2
+ export declare const ROUTECACHE_SIZE: number;
3
+ export declare const EMPTY_ROUTECACHE_FILL = 255;
4
+ export declare const emptyRouteCache: Buffer;
5
+ export interface Route {
6
+ beaming: FLiRS;
7
+ protocolRate: RouteProtocolDataRate;
8
+ repeaterNodeIDs?: number[];
9
+ }
10
+ export interface RouteCache {
11
+ nodeId: number;
12
+ lwr: Route;
13
+ nlwr: Route;
14
+ }
15
+ export declare function parseRoute(buffer: Buffer, offset: number): Route;
16
+ export declare function encodeRoute(route: Route | undefined): Buffer;
17
+ export declare function getEmptyRoute(): Route;
18
+ //# sourceMappingURL=routeCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeCache.d.ts","sourceRoot":"","sources":["../../../src/lib/common/routeCache.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,KAAK,EAEV,qBAAqB,EAErB,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,eAAe,QAAiB,CAAC;AAC9C,eAAO,MAAM,qBAAqB,MAAO,CAAC;AAC1C,eAAO,MAAM,eAAe,QAG3B,CAAC;AAOF,MAAM,WAAW,KAAK;IACrB,OAAO,EAAE,KAAK,CAAC;IACf,YAAY,EAAE,qBAAqB,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,KAAK,CAAC;IACX,IAAI,EAAE,KAAK,CAAC;CACZ;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAWhE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAqB5D;AAED,wBAAgB,aAAa,IAAI,KAAK,CAMrC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emptyRouteCache = exports.EMPTY_ROUTECACHE_FILL = exports.ROUTECACHE_SIZE = void 0;
4
+ exports.parseRoute = parseRoute;
5
+ exports.encodeRoute = encodeRoute;
6
+ exports.getEmptyRoute = getEmptyRoute;
7
+ const safe_1 = require("@zwave-js/core/safe");
8
+ const ROUTE_SIZE = safe_1.MAX_REPEATERS + 1;
9
+ exports.ROUTECACHE_SIZE = 2 * ROUTE_SIZE;
10
+ exports.EMPTY_ROUTECACHE_FILL = 0xff;
11
+ exports.emptyRouteCache = Buffer.alloc(exports.ROUTECACHE_SIZE, exports.EMPTY_ROUTECACHE_FILL);
12
+ var Beaming;
13
+ (function (Beaming) {
14
+ Beaming[Beaming["1000ms"] = 64] = "1000ms";
15
+ Beaming[Beaming["250ms"] = 32] = "250ms";
16
+ })(Beaming || (Beaming = {}));
17
+ function parseRoute(buffer, offset) {
18
+ const routeConf = buffer[offset + safe_1.MAX_REPEATERS];
19
+ const ret = {
20
+ beaming: (Beaming[routeConf & 0x60] ?? false),
21
+ protocolRate: routeConf & safe_1.protocolDataRateMask,
22
+ repeaterNodeIDs: [
23
+ ...buffer.subarray(offset, offset + safe_1.MAX_REPEATERS),
24
+ ].filter((id) => id !== 0),
25
+ };
26
+ if (ret.repeaterNodeIDs[0] === 0xfe)
27
+ delete ret.repeaterNodeIDs;
28
+ return ret;
29
+ }
30
+ function encodeRoute(route) {
31
+ const ret = Buffer.alloc(ROUTE_SIZE, 0);
32
+ if (route) {
33
+ if (route.repeaterNodeIDs) {
34
+ for (let i = 0; i < safe_1.MAX_REPEATERS && i < route.repeaterNodeIDs.length; i++) {
35
+ ret[i] = route.repeaterNodeIDs[i];
36
+ }
37
+ }
38
+ else {
39
+ ret[0] = 0xfe;
40
+ }
41
+ let routeConf = 0;
42
+ if (route.beaming)
43
+ routeConf |= Beaming[route.beaming] ?? 0;
44
+ routeConf |= route.protocolRate & safe_1.protocolDataRateMask;
45
+ ret[ROUTE_SIZE - 1] = routeConf;
46
+ }
47
+ return ret;
48
+ }
49
+ function getEmptyRoute() {
50
+ return {
51
+ beaming: false,
52
+ protocolRate: safe_1.RouteProtocolDataRate.ZWave_40k,
53
+ repeaterNodeIDs: undefined,
54
+ };
55
+ }
56
+ //# sourceMappingURL=routeCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeCache.js","sourceRoot":"","sources":["../../../src/lib/common/routeCache.ts"],"names":[],"mappings":";;;AAgCA,gCAWC;AAED,kCAqBC;AAED,sCAMC;AA1ED,8CAK6B;AAE7B,MAAM,UAAU,GAAG,oBAAa,GAAG,CAAC,CAAC;AACxB,QAAA,eAAe,GAAG,CAAC,GAAG,UAAU,CAAC;AACjC,QAAA,qBAAqB,GAAG,IAAI,CAAC;AAC7B,QAAA,eAAe,GAAG,MAAM,CAAC,KAAK,CAC1C,uBAAe,EACf,6BAAqB,CACrB,CAAC;AAEF,IAAK,OAGJ;AAHD,WAAK,OAAO;IACX,0CAAe,CAAA;IACf,wCAAc,CAAA;AACf,CAAC,EAHI,OAAO,KAAP,OAAO,QAGX;AAcD,SAAgB,UAAU,CAAC,MAAc,EAAE,MAAc;IACxD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,oBAAa,CAAC,CAAC;IACjD,MAAM,GAAG,GAAU;QAClB,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,CAAU;QACtD,YAAY,EAAE,SAAS,GAAG,2BAAoB;QAC9C,eAAe,EAAE;YAChB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAa,CAAC;SAClD,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;KAC1B,CAAC;IACF,IAAI,GAAG,CAAC,eAAgB,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC,eAAe,CAAC;IACjE,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAgB,WAAW,CAAC,KAAwB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,EAAE,CAAC;QACX,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC3B,KACC,IAAI,CAAC,GAAG,CAAC,EACT,CAAC,GAAG,oBAAa,IAAI,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,EACrD,CAAC,EAAE,EACF,CAAC;gBACF,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACf,CAAC;QACD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,CAAC,OAAO;YAAE,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,SAAS,IAAI,KAAK,CAAC,YAAY,GAAG,2BAAoB,CAAC;QACvD,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IACjC,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAgB,aAAa;IAC5B,OAAO;QACN,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,4BAAqB,CAAC,SAAS;QAC7C,eAAe,EAAE,SAAS;KAC1B,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type CommandClasses } from "@zwave-js/core/safe";
2
+ export interface SUCUpdateEntry {
3
+ nodeId: number;
4
+ changeType: number;
5
+ supportedCCs: CommandClasses[];
6
+ controlledCCs: CommandClasses[];
7
+ }
8
+ export declare function parseSUCUpdateEntry(buffer: Buffer, offset: number): SUCUpdateEntry | undefined;
9
+ export declare function encodeSUCUpdateEntry(entry: SUCUpdateEntry | undefined): Buffer;
10
+ //# sourceMappingURL=sucUpdateEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sucUpdateEntry.d.ts","sourceRoot":"","sources":["../../../src/lib/common/sucUpdateEntry.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,cAAc,EAKnB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,aAAa,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,cAAc,GAAG,SAAS,CAgB5B;AAED,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,cAAc,GAAG,SAAS,GAC/B,MAAM,CAeR"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseSUCUpdateEntry = parseSUCUpdateEntry;
4
+ exports.encodeSUCUpdateEntry = encodeSUCUpdateEntry;
5
+ const safe_1 = require("@zwave-js/core/safe");
6
+ const consts_1 = require("../../consts");
7
+ function parseSUCUpdateEntry(buffer, offset) {
8
+ const slice = buffer.subarray(offset, offset + consts_1.SUC_UPDATE_ENTRY_SIZE);
9
+ if (slice.every((b) => b === 0x00 || b === 0xff)) {
10
+ return;
11
+ }
12
+ const nodeId = slice[0];
13
+ const changeType = slice[1];
14
+ const { supportedCCs, controlledCCs } = (0, safe_1.parseCCList)(slice.subarray(2, consts_1.SUC_UPDATE_ENTRY_SIZE));
15
+ return {
16
+ nodeId,
17
+ changeType,
18
+ supportedCCs: supportedCCs.filter((cc) => cc > 0),
19
+ controlledCCs: controlledCCs.filter((cc) => cc > 0),
20
+ };
21
+ }
22
+ function encodeSUCUpdateEntry(entry) {
23
+ const ret = Buffer.alloc(consts_1.SUC_UPDATE_ENTRY_SIZE, 0);
24
+ if (entry) {
25
+ ret[0] = entry.nodeId;
26
+ ret[1] = entry.changeType;
27
+ const ccList = (0, safe_1.encodeCCList)(entry.supportedCCs, entry.controlledCCs);
28
+ if (ccList.length > consts_1.SUC_UPDATE_NODEPARM_MAX) {
29
+ throw new safe_1.ZWaveError("Cannot encode SUC update entry, too many CCs", safe_1.ZWaveErrorCodes.Argument_Invalid);
30
+ }
31
+ ccList.copy(ret, 2);
32
+ }
33
+ return ret;
34
+ }
35
+ //# sourceMappingURL=sucUpdateEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sucUpdateEntry.js","sourceRoot":"","sources":["../../../src/lib/common/sucUpdateEntry.ts"],"names":[],"mappings":";;AAgBA,kDAmBC;AAED,oDAiBC;AAtDD,8CAM6B;AAC7B,yCAA8E;AAS9E,SAAgB,mBAAmB,CAClC,MAAc,EACd,MAAc;IAEd,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,8BAAqB,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO;IACR,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAA,kBAAW,EAClD,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,8BAAqB,CAAC,CACxC,CAAC;IACF,OAAO;QACN,MAAM;QACN,UAAU;QACV,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;KACnD,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CACnC,KAAiC;IAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,8BAAqB,EAAE,CAAC,CAAC,CAAC;IACnD,IAAI,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACtB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,MAAM,GAAG,gCAAuB,EAAE,CAAC;YAC7C,MAAM,IAAI,iBAAU,CACnB,8CAA8C,EAC9C,sBAAe,CAAC,gBAAgB,CAChC,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { NVMIO } from "./definitions";
2
+ export declare function nvmReadUInt32LE(io: NVMIO, position: number): Promise<number>;
3
+ export declare function nvmReadUInt16LE(io: NVMIO, position: number): Promise<number>;
4
+ export declare function nvmReadUInt32BE(io: NVMIO, position: number): Promise<number>;
5
+ export declare function nvmReadUInt16BE(io: NVMIO, position: number): Promise<number>;
6
+ export declare function nvmReadUInt8(io: NVMIO, position: number): Promise<number>;
7
+ export declare function nvmWriteBuffer(io: NVMIO, position: number, buffer: Buffer): Promise<void>;
8
+ export declare function nvmReadBuffer(io: NVMIO, position: number, length: number): Promise<Buffer>;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,wBAAsB,eAAe,CACpC,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,eAAe,CACpC,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,eAAe,CACpC,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,eAAe,CACpC,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,YAAY,CACjC,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,cAAc,CACnC,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,aAAa,CAClC,EAAE,EAAE,KAAK,EACT,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAcjB"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nvmReadUInt32LE = nvmReadUInt32LE;
4
+ exports.nvmReadUInt16LE = nvmReadUInt16LE;
5
+ exports.nvmReadUInt32BE = nvmReadUInt32BE;
6
+ exports.nvmReadUInt16BE = nvmReadUInt16BE;
7
+ exports.nvmReadUInt8 = nvmReadUInt8;
8
+ exports.nvmWriteBuffer = nvmWriteBuffer;
9
+ exports.nvmReadBuffer = nvmReadBuffer;
10
+ async function nvmReadUInt32LE(io, position) {
11
+ const { buffer } = await io.read(position, 4);
12
+ return buffer.readUInt32LE(0);
13
+ }
14
+ async function nvmReadUInt16LE(io, position) {
15
+ const { buffer } = await io.read(position, 2);
16
+ return buffer.readUInt16LE(0);
17
+ }
18
+ async function nvmReadUInt32BE(io, position) {
19
+ const { buffer } = await io.read(position, 4);
20
+ return buffer.readUInt32BE(0);
21
+ }
22
+ async function nvmReadUInt16BE(io, position) {
23
+ const { buffer } = await io.read(position, 2);
24
+ return buffer.readUInt16BE(0);
25
+ }
26
+ async function nvmReadUInt8(io, position) {
27
+ const { buffer } = await io.read(position, 1);
28
+ return buffer.readUInt8(0);
29
+ }
30
+ async function nvmWriteBuffer(io, position, buffer) {
31
+ const chunkSize = await io.determineChunkSize();
32
+ let offset = 0;
33
+ while (offset < buffer.length) {
34
+ const chunk = buffer.subarray(offset, offset + chunkSize);
35
+ const { bytesWritten } = await io.write(position + offset, chunk);
36
+ offset += bytesWritten;
37
+ }
38
+ }
39
+ async function nvmReadBuffer(io, position, length) {
40
+ const ret = Buffer.allocUnsafe(length);
41
+ const chunkSize = await io.determineChunkSize();
42
+ let offset = 0;
43
+ while (offset < length) {
44
+ const { buffer, endOfFile } = await io.read(position + offset, Math.min(chunkSize, length - offset));
45
+ buffer.copy(ret, offset);
46
+ offset += buffer.length;
47
+ if (endOfFile)
48
+ break;
49
+ }
50
+ return ret.subarray(0, offset);
51
+ }
52
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/common/utils.ts"],"names":[],"mappings":";;AAEA,0CAMC;AAED,0CAMC;AAED,0CAMC;AAED,0CAMC;AAED,oCAMC;AAED,wCAYC;AAED,sCAkBC;AAxEM,KAAK,UAAU,eAAe,CACpC,EAAS,EACT,QAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,eAAe,CACpC,EAAS,EACT,QAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,eAAe,CACpC,EAAS,EACT,QAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,eAAe,CACpC,EAAS,EACT,QAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,YAAY,CACjC,EAAS,EACT,QAAgB;IAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAEM,KAAK,UAAU,cAAc,CACnC,EAAS,EACT,QAAgB,EAChB,MAAc;IAEd,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC;IAChD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;QAC1D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;QAClE,MAAM,IAAI,YAAY,CAAC;IACxB,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,aAAa,CAClC,EAAS,EACT,QAAgB,EAChB,MAAc;IAEd,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC;IAChD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAC1C,QAAQ,GAAG,MAAM,EACjB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,CACpC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QACxB,IAAI,SAAS;YAAE,MAAM;IACtB,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type NVMAccess, type NVMIO } from "../common/definitions";
2
+ export declare class BufferedNVMReader implements NVMIO {
3
+ constructor(inner: NVMIO);
4
+ private _inner;
5
+ private _buffer;
6
+ open(access: NVMAccess.Read | NVMAccess.Write): Promise<NVMAccess>;
7
+ get size(): number;
8
+ get accessMode(): NVMAccess;
9
+ determineChunkSize(): Promise<number>;
10
+ private readBuffered;
11
+ read(offset: number, length: number): Promise<{
12
+ buffer: Buffer;
13
+ endOfFile: boolean;
14
+ }>;
15
+ write(offset: number, data: Buffer): Promise<{
16
+ bytesWritten: number;
17
+ endOfFile: boolean;
18
+ }>;
19
+ close(): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=BufferedNVMReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BufferedNVMReader.d.ts","sourceRoot":"","sources":["../../../src/lib/io/BufferedNVMReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAOnE,qBAAa,iBAAkB,YAAW,KAAK;gBAC3B,KAAK,EAAE,KAAK;IAI/B,OAAO,CAAC,MAAM,CAAQ;IAItB,OAAO,CAAC,OAAO,CAAuB;IAEtC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAGlE,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,UAAU,IAAI,SAAS,CAE1B;IACD,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;YAIvB,YAAY;IAkBpB,IAAI,CACT,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IA+B5C,KAAK,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAqBxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtB"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BufferedNVMReader = void 0;
4
+ class BufferedNVMReader {
5
+ constructor(inner) {
6
+ this._inner = inner;
7
+ }
8
+ _inner;
9
+ // Already-read chunks. There are a few rules to follow:
10
+ // - Offsets MUST be multiples of the chunk size
11
+ // - The size of each chunk must be exactly the chunk size
12
+ _buffer = [];
13
+ open(access) {
14
+ return this._inner.open(access);
15
+ }
16
+ get size() {
17
+ return this._inner.size;
18
+ }
19
+ get accessMode() {
20
+ return this._inner.accessMode;
21
+ }
22
+ determineChunkSize() {
23
+ return this._inner.determineChunkSize();
24
+ }
25
+ async readBuffered(alignedOffset, chunkSize) {
26
+ let buffered = this._buffer.find((chunk) => chunk.offset === alignedOffset);
27
+ if (!buffered) {
28
+ const { buffer: data } = await this._inner.read(alignedOffset, chunkSize);
29
+ buffered = { data, offset: alignedOffset };
30
+ this._buffer.push(buffered);
31
+ }
32
+ return buffered.data;
33
+ }
34
+ async read(offset, length) {
35
+ // Limit the read size to the chunk size. This ensures we have to deal with maximum 2 chunks or read requests
36
+ const chunkSize = await this.determineChunkSize();
37
+ length = Math.min(length, chunkSize);
38
+ // Figure out at which offsets to read
39
+ const firstChunkStart = offset - offset % chunkSize;
40
+ const secondChunkStart = (offset + length)
41
+ - (offset + length) % chunkSize;
42
+ // Read one or two chunks, depending on how many are needed
43
+ const chunks = [];
44
+ chunks.push(await this.readBuffered(firstChunkStart, chunkSize));
45
+ if (secondChunkStart > firstChunkStart) {
46
+ chunks.push(await this.readBuffered(secondChunkStart, chunkSize));
47
+ }
48
+ const alignedBuffer = Buffer.concat(chunks);
49
+ // Then slice out the section we need
50
+ const endOfFile = offset + length >= this.size;
51
+ const buffer = alignedBuffer.subarray(offset - firstChunkStart, offset - firstChunkStart + length);
52
+ return {
53
+ buffer,
54
+ endOfFile,
55
+ };
56
+ }
57
+ async write(offset, data) {
58
+ const ret = await this._inner.write(offset, data);
59
+ // Invalidate cached chunks
60
+ const chunkSize = await this.determineChunkSize();
61
+ // Figure out at which offsets to read
62
+ const firstChunkStart = offset - offset % chunkSize;
63
+ const lastChunkStart = (offset + ret.bytesWritten)
64
+ - (offset + ret.bytesWritten) % chunkSize;
65
+ // TODO: We should update existing chunks where possible
66
+ for (let i = firstChunkStart; i <= lastChunkStart; i += chunkSize) {
67
+ const index = this._buffer.findIndex((chunk) => chunk.offset === i);
68
+ if (index !== -1) {
69
+ this._buffer.splice(index, 1);
70
+ }
71
+ }
72
+ return ret;
73
+ }
74
+ close() {
75
+ return this._inner.close();
76
+ }
77
+ }
78
+ exports.BufferedNVMReader = BufferedNVMReader;
79
+ //# sourceMappingURL=BufferedNVMReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BufferedNVMReader.js","sourceRoot":"","sources":["../../../src/lib/io/BufferedNVMReader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { NVMAccess, type NVMIO } from "../common/definitions";
2
+ /** An implementation of NVMIO for the filesystem */
3
+ export declare class NVMFileIO implements NVMIO {
4
+ constructor(path: string);
5
+ private _path;
6
+ private _handle;
7
+ private _chunkSize;
8
+ open(access: NVMAccess): Promise<NVMAccess>;
9
+ private _size;
10
+ get size(): number;
11
+ private _accessMode;
12
+ get accessMode(): NVMAccess;
13
+ determineChunkSize(): Promise<number>;
14
+ read(offset: number, length: number): Promise<{
15
+ buffer: Buffer;
16
+ endOfFile: boolean;
17
+ }>;
18
+ write(offset: number, data: Buffer): Promise<{
19
+ bytesWritten: number;
20
+ endOfFile: boolean;
21
+ }>;
22
+ close(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=NVMFileIO.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NVMFileIO.d.ts","sourceRoot":"","sources":["../../../src/lib/io/NVMFileIO.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9D,oDAAoD;AACpD,qBAAa,SAAU,YAAW,KAAK;gBACnB,IAAI,EAAE,MAAM;IAK/B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAa;IAEzB,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAsBjD,OAAO,CAAC,KAAK,CAAqB;IAClC,IAAI,IAAI,IAAI,MAAM,CAQjB;IAED,OAAO,CAAC,WAAW,CAAY;IAC/B,IAAI,UAAU,IAAI,SAAS,CAE1B;IAED,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,IAAI,CACT,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAmB5C,KAAK,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAuBlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM5B"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NVMFileIO = void 0;
7
+ const core_1 = require("@zwave-js/core");
8
+ const promises_1 = __importDefault(require("node:fs/promises"));
9
+ const definitions_1 = require("../common/definitions");
10
+ /** An implementation of NVMIO for the filesystem */
11
+ class NVMFileIO {
12
+ constructor(path) {
13
+ this._path = path;
14
+ this._accessMode = definitions_1.NVMAccess.None;
15
+ }
16
+ _path;
17
+ _handle;
18
+ _chunkSize = 16 * 1024; // We could read more, but 16 KB chunks are more than enough for reading NVM contents
19
+ async open(access) {
20
+ let flags;
21
+ switch (access) {
22
+ case definitions_1.NVMAccess.Read:
23
+ flags = "r";
24
+ break;
25
+ case definitions_1.NVMAccess.Write:
26
+ case definitions_1.NVMAccess.ReadWrite:
27
+ // Read/Write, don't create, don't truncate
28
+ flags = "r+";
29
+ access = definitions_1.NVMAccess.ReadWrite;
30
+ break;
31
+ default:
32
+ throw new Error("Invalid access mode");
33
+ }
34
+ this._handle = await promises_1.default.open(this._path, flags);
35
+ this._size = (await this._handle.stat()).size;
36
+ this._accessMode = access;
37
+ return access;
38
+ }
39
+ _size;
40
+ get size() {
41
+ if (this._size == undefined) {
42
+ throw new core_1.ZWaveError("The NVM file is not open", core_1.ZWaveErrorCodes.NVM_NotOpen);
43
+ }
44
+ return this._size;
45
+ }
46
+ _accessMode;
47
+ get accessMode() {
48
+ return this._accessMode;
49
+ }
50
+ determineChunkSize() {
51
+ return Promise.resolve(this._chunkSize);
52
+ }
53
+ async read(offset, length) {
54
+ if (this._handle == undefined) {
55
+ throw new core_1.ZWaveError("The NVM file is not open", core_1.ZWaveErrorCodes.NVM_NotOpen);
56
+ }
57
+ const readResult = await this._handle.read({
58
+ buffer: Buffer.alloc(length),
59
+ position: offset,
60
+ });
61
+ const endOfFile = offset + readResult.bytesRead >= this.size;
62
+ return {
63
+ buffer: readResult.buffer.subarray(0, readResult.bytesRead),
64
+ endOfFile,
65
+ };
66
+ }
67
+ async write(offset, data) {
68
+ if (this._handle == undefined) {
69
+ throw new core_1.ZWaveError("The NVM file is not open", core_1.ZWaveErrorCodes.NVM_NotOpen);
70
+ }
71
+ if (offset + data.length > this.size) {
72
+ throw new core_1.ZWaveError("Write would exceed the NVM size", core_1.ZWaveErrorCodes.NVM_NoSpace);
73
+ }
74
+ const writeResult = await this._handle.write(data, 0, data.length, offset);
75
+ const endOfFile = offset + writeResult.bytesWritten >= this.size;
76
+ return { bytesWritten: writeResult.bytesWritten, endOfFile };
77
+ }
78
+ async close() {
79
+ await this._handle?.close();
80
+ this._handle = undefined;
81
+ this._accessMode = definitions_1.NVMAccess.None;
82
+ this._size = undefined;
83
+ }
84
+ }
85
+ exports.NVMFileIO = NVMFileIO;
86
+ //# sourceMappingURL=NVMFileIO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NVMFileIO.js","sourceRoot":"","sources":["../../../src/lib/io/NVMFileIO.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { NVMAccess, type NVMIO } from "../common/definitions";
2
+ /** An im-memory implementation of NVMIO */
3
+ export declare class NVMMemoryIO implements NVMIO {
4
+ constructor(buffer: Buffer);
5
+ private _buffer;
6
+ open(_access: NVMAccess.Read | NVMAccess.Write): Promise<NVMAccess>;
7
+ get size(): number;
8
+ get accessMode(): NVMAccess;
9
+ determineChunkSize(): Promise<number>;
10
+ read(offset: number, length: number): Promise<{
11
+ buffer: Buffer;
12
+ endOfFile: boolean;
13
+ }>;
14
+ write(offset: number, data: Buffer): Promise<{
15
+ bytesWritten: number;
16
+ endOfFile: boolean;
17
+ }>;
18
+ close(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=NVMMemoryIO.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NVMMemoryIO.d.ts","sourceRoot":"","sources":["../../../src/lib/io/NVMMemoryIO.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9D,2CAA2C;AAC3C,qBAAa,WAAY,YAAW,KAAK;gBACrB,MAAM,EAAE,MAAM;IAIjC,OAAO,CAAC,OAAO,CAAS;IAExB,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAKnE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,UAAU,IAAI,SAAS,CAE1B;IAED,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKrC,IAAI,CACH,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAOlD,KAAK,CACJ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAexD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAItB"}