node-opcua-address-space 2.186.17 → 2.187.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 (80) hide show
  1. package/api/address_space_public.ts +16 -0
  2. package/api/helpers/resolve_opaque_on_address_space.ts +13 -1
  3. package/api/index.ts +14 -3
  4. package/api/loader/store_record_applier.ts +267 -0
  5. package/api/session_context.ts +116 -27
  6. package/dist/api/address_space_public.d.ts +14 -0
  7. package/dist/api/address_space_public.d.ts.map +1 -1
  8. package/dist/api/address_space_public.js +3 -0
  9. package/dist/api/address_space_public.js.map +1 -1
  10. package/dist/api/helpers/resolve_opaque_on_address_space.d.ts +6 -0
  11. package/dist/api/helpers/resolve_opaque_on_address_space.d.ts.map +1 -1
  12. package/dist/api/helpers/resolve_opaque_on_address_space.js +12 -1
  13. package/dist/api/helpers/resolve_opaque_on_address_space.js.map +1 -1
  14. package/dist/api/index.d.ts +4 -3
  15. package/dist/api/index.d.ts.map +1 -1
  16. package/dist/api/index.js +4 -3
  17. package/dist/api/index.js.map +1 -1
  18. package/dist/api/loader/store_record_applier.d.ts +49 -0
  19. package/dist/api/loader/store_record_applier.d.ts.map +1 -0
  20. package/dist/api/loader/store_record_applier.js +235 -0
  21. package/dist/api/loader/store_record_applier.js.map +1 -0
  22. package/dist/api/session_context.d.ts +10 -0
  23. package/dist/api/session_context.d.ts.map +1 -1
  24. package/dist/api/session_context.js +100 -27
  25. package/dist/api/session_context.js.map +1 -1
  26. package/dist/impl/address_space.d.ts +2 -0
  27. package/dist/impl/address_space.d.ts.map +1 -1
  28. package/dist/impl/address_space.js +12 -2
  29. package/dist/impl/address_space.js.map +1 -1
  30. package/dist/impl/base_node_impl.d.ts +12 -0
  31. package/dist/impl/base_node_impl.d.ts.map +1 -1
  32. package/dist/impl/base_node_impl.js +35 -29
  33. package/dist/impl/base_node_impl.js.map +1 -1
  34. package/dist/impl/base_node_private.d.ts +5 -5
  35. package/dist/impl/base_node_private.d.ts.map +1 -1
  36. package/dist/impl/base_node_private.js +11 -5
  37. package/dist/impl/base_node_private.js.map +1 -1
  38. package/dist/impl/extension_object_array_node.d.ts +4 -2
  39. package/dist/impl/extension_object_array_node.d.ts.map +1 -1
  40. package/dist/impl/extension_object_array_node.js +5 -2
  41. package/dist/impl/extension_object_array_node.js.map +1 -1
  42. package/dist/impl/historical_access/address_space_historical_data_node.d.ts +26 -2
  43. package/dist/impl/historical_access/address_space_historical_data_node.d.ts.map +1 -1
  44. package/dist/impl/historical_access/address_space_historical_data_node.js +39 -0
  45. package/dist/impl/historical_access/address_space_historical_data_node.js.map +1 -1
  46. package/dist/impl/namespace_impl.d.ts.map +1 -1
  47. package/dist/impl/namespace_impl.js +3 -1
  48. package/dist/impl/namespace_impl.js.map +1 -1
  49. package/dist/impl/nodeset_tools/construct_namespace_dependency.d.ts.map +1 -1
  50. package/dist/impl/nodeset_tools/construct_namespace_dependency.js +28 -0
  51. package/dist/impl/nodeset_tools/construct_namespace_dependency.js.map +1 -1
  52. package/dist/impl/reference_impl.d.ts +2 -1
  53. package/dist/impl/reference_impl.d.ts.map +1 -1
  54. package/dist/impl/reference_impl.js +6 -5
  55. package/dist/impl/reference_impl.js.map +1 -1
  56. package/dist/impl/reference_index.d.ts +22 -0
  57. package/dist/impl/reference_index.d.ts.map +1 -0
  58. package/dist/impl/reference_index.js +104 -0
  59. package/dist/impl/reference_index.js.map +1 -0
  60. package/dist/impl/ua_variable_impl.d.ts +8 -0
  61. package/dist/impl/ua_variable_impl.d.ts.map +1 -1
  62. package/dist/impl/ua_variable_impl.js +121 -84
  63. package/dist/impl/ua_variable_impl.js.map +1 -1
  64. package/dist/tsconfig_base.tsbuildinfo +1 -1
  65. package/distNodeJS/generate_address_space.d.ts +6 -1
  66. package/distNodeJS/generate_address_space.d.ts.map +1 -1
  67. package/distNodeJS/generate_address_space.js +33 -1
  68. package/distNodeJS/generate_address_space.js.map +1 -1
  69. package/impl/address_space.ts +16 -2
  70. package/impl/base_node_impl.ts +52 -30
  71. package/impl/base_node_private.ts +16 -10
  72. package/impl/extension_object_array_node.ts +12 -3
  73. package/impl/historical_access/address_space_historical_data_node.ts +64 -1
  74. package/impl/namespace_impl.ts +3 -1
  75. package/impl/nodeset_tools/construct_namespace_dependency.ts +23 -1
  76. package/impl/reference_impl.ts +6 -5
  77. package/impl/reference_index.ts +116 -0
  78. package/impl/ua_variable_impl.ts +161 -94
  79. package/package.json +34 -33
  80. package/source_nodejs/generate_address_space.ts +46 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "node-opcua-address-space",
3
3
  "type": "module",
4
- "version": "2.186.17",
4
+ "version": "2.187.0",
5
5
  "description": "pure nodejs OPCUA SDK - module address-space",
6
6
  "main": "./dist/api/index.js",
7
7
  "types": "./dist/api/index.d.ts",
@@ -23,48 +23,49 @@
23
23
  "@types/semver": "7.8.0",
24
24
  "chalk": "6.0.1",
25
25
  "dequeue": "^1.0.5",
26
- "node-opcua-address-space-base": "2.186.17",
26
+ "node-opcua-address-space-base": "2.187.0",
27
+ "node-opcua-address-space-store": "2.187.0",
27
28
  "node-opcua-assert": "2.186.7",
28
- "node-opcua-basic-types": "2.186.7",
29
- "node-opcua-binary-stream": "2.186.7",
30
- "node-opcua-client-dynamic-extension-object": "2.186.17",
29
+ "node-opcua-basic-types": "2.187.0",
30
+ "node-opcua-binary-stream": "2.187.0",
31
+ "node-opcua-client-dynamic-extension-object": "2.187.0",
31
32
  "node-opcua-constants": "2.185.0",
32
- "node-opcua-crypto": "6.1.4",
33
- "node-opcua-data-access": "2.186.10",
34
- "node-opcua-data-model": "2.186.10",
35
- "node-opcua-data-value": "2.186.10",
36
- "node-opcua-date-time": "2.186.7",
33
+ "node-opcua-crypto": "6.2.0",
34
+ "node-opcua-data-access": "2.187.0",
35
+ "node-opcua-data-model": "2.187.0",
36
+ "node-opcua-data-value": "2.187.0",
37
+ "node-opcua-date-time": "2.187.0",
37
38
  "node-opcua-debug": "2.186.7",
38
- "node-opcua-enum": "2.186.7",
39
- "node-opcua-extension-object": "2.186.7",
40
- "node-opcua-factory": "2.186.7",
41
- "node-opcua-nodeid": "2.186.7",
42
- "node-opcua-nodeset-ua": "2.186.17",
43
- "node-opcua-numeric-range": "2.186.7",
39
+ "node-opcua-enum": "2.187.0",
40
+ "node-opcua-extension-object": "2.187.0",
41
+ "node-opcua-factory": "2.187.0",
42
+ "node-opcua-nodeid": "2.187.0",
43
+ "node-opcua-nodeset-ua": "2.187.0",
44
+ "node-opcua-numeric-range": "2.187.0",
44
45
  "node-opcua-object-registry": "2.186.7",
45
- "node-opcua-pseudo-session": "2.186.17",
46
- "node-opcua-service-browse": "2.186.10",
47
- "node-opcua-service-call": "2.186.10",
48
- "node-opcua-service-history": "2.186.10",
49
- "node-opcua-service-translate-browse-path": "2.186.16",
50
- "node-opcua-service-write": "2.186.10",
51
- "node-opcua-status-code": "2.186.7",
52
- "node-opcua-types": "2.186.10",
53
- "node-opcua-utils": "2.186.7",
54
- "node-opcua-variant": "2.186.10",
55
- "node-opcua-xml2json": "2.186.7",
46
+ "node-opcua-pseudo-session": "2.187.0",
47
+ "node-opcua-service-browse": "2.187.0",
48
+ "node-opcua-service-call": "2.187.0",
49
+ "node-opcua-service-history": "2.187.0",
50
+ "node-opcua-service-translate-browse-path": "2.187.0",
51
+ "node-opcua-service-write": "2.187.0",
52
+ "node-opcua-status-code": "2.187.0",
53
+ "node-opcua-types": "2.187.0",
54
+ "node-opcua-utils": "2.187.0",
55
+ "node-opcua-variant": "2.187.0",
56
+ "node-opcua-xml2json": "2.187.0",
56
57
  "semver": "^7.8.5",
57
58
  "thenify-ex": "4.4.0",
58
59
  "xml-writer": "^1.7.0"
59
60
  },
60
61
  "devDependencies": {
61
62
  "humanize": "0.0.9",
62
- "node-opcua-benchmarker": "2.186.7",
63
+ "node-opcua-benchmarker": "2.187.0",
63
64
  "node-opcua-leak-detector": "2.186.7",
64
- "node-opcua-nodesets": "2.185.0",
65
- "node-opcua-packet-analyzer": "2.186.7",
66
- "node-opcua-schemas": "2.186.10",
67
- "node-opcua-service-filter": "2.186.17",
65
+ "node-opcua-nodesets": "2.187.0",
66
+ "node-opcua-packet-analyzer": "2.187.0",
67
+ "node-opcua-schemas": "2.187.0",
68
+ "node-opcua-service-filter": "2.187.0",
68
69
  "node-opcua-test-fixtures": "2.184.0",
69
70
  "node-opcua-test-helpers": "2.184.0"
70
71
  },
@@ -83,7 +84,7 @@
83
84
  "internet of things"
84
85
  ],
85
86
  "homepage": "http://node-opcua.github.io/",
86
- "gitHead": "bdb3848c06d19056a99dfc06ef73771a0666472f",
87
+ "gitHead": "3397e8ca2017b8592a50912b34c747f3da617763",
87
88
  "files": [
88
89
  "dist",
89
90
  "distHelpers",
@@ -5,17 +5,23 @@ import zlib, { gunzip, gzip as gzipCb } from "node:zlib";
5
5
  import type { IAddressSpace } from "node-opcua-address-space-base";
6
6
  import { checkDebugFlag, make_debugLog, make_errorLog } from "node-opcua-debug";
7
7
  import {
8
+ type CompactAddressSpace,
9
+ compactRecordConsumer,
8
10
  generateAddressSpaceRaw,
9
11
  type NamedNodesetSource,
12
+ NODESET2_XML_FORMAT,
10
13
  type NodeSetLoaderOptions,
11
14
  type NodesetSource,
12
15
  type NodesetToImageOptions,
13
16
  nodesetImageProblem,
14
17
  nodesetToImage as nodesetToImageRaw,
18
+ openNodesetSource,
15
19
  readNodesetImageInfo,
20
+ type StoreRecordApplierOptions,
16
21
  setImageDeflater,
17
22
  setImageInflater,
18
- sha256Hex
23
+ sha256Hex,
24
+ xmlNodesetRecords
19
25
  } from "../dist/api/index.js";
20
26
  import { FileNodesetImageStore } from "./nodeset_image_file_store.js";
21
27
 
@@ -227,3 +233,42 @@ export async function nodesetFileToImage(source: NodesetSource | string, options
227
233
  typeof source === "string" && !source.trimStart().startsWith("<") ? nodesetSourceFromFileWhole(source) : source;
228
234
  return nodesetToImageRaw(resolved, { addressSpaceVersion: addressSpacePackageVersion(), ...options });
229
235
  }
236
+
237
+ /**
238
+ * the NodeSet2 XML files loaded into a compact address space, in the order given, each
239
+ * streamed in chunks: no node object is created, the records go straight into the columns
240
+ */
241
+ export async function generateCompactAddressSpace(
242
+ addressSpace: CompactAddressSpace,
243
+ documents: string | NodesetSource | Array<string | NodesetSource>,
244
+ options: StoreRecordApplierOptions = {}
245
+ ): Promise<void> {
246
+ const list = Array.isArray(documents) ? documents : [documents];
247
+ const consumer = compactRecordConsumer(addressSpace, options);
248
+ for (const [index, document] of list.entries()) {
249
+ const source = typeof document === "string" ? nodesetSourceFromFile(document) : document;
250
+ const reader = openNodesetSource(source, index);
251
+ if ((await reader.probe()) !== NODESET2_XML_FORMAT) {
252
+ throw new Error(
253
+ `generateCompactAddressSpace: ${reader.name} is not a NodeSet2 XML document (images are not loaded into a compact space yet)`
254
+ );
255
+ }
256
+ for await (const record of xmlNodesetRecords(textChunks(reader.chunks()))) {
257
+ consumer.apply(record);
258
+ }
259
+ }
260
+ const { unresolved } = consumer.finish();
261
+ if (unresolved > 0) {
262
+ debugLog(`generateCompactAddressSpace: ${unresolved} references point at nodes no document declares`);
263
+ }
264
+ }
265
+
266
+ /** the chunks of a source as text, whatever the stream yields */
267
+ async function* textChunks(chunks: AsyncIterable<string | Uint8Array>): AsyncGenerator<string> {
268
+ const decoder = new TextDecoder();
269
+ for await (const chunk of chunks) {
270
+ yield typeof chunk === "string" ? chunk : decoder.decode(chunk, { stream: true });
271
+ }
272
+ const tail = decoder.decode();
273
+ if (tail) yield tail;
274
+ }