Skip to content

Commit

Permalink
Merge f623a91 into 5c8d457
Browse files Browse the repository at this point in the history
  • Loading branch information
erossignon committed Sep 20, 2022
2 parents 5c8d457 + f623a91 commit 1661f5d
Show file tree
Hide file tree
Showing 34 changed files with 2,318 additions and 211 deletions.
6 changes: 5 additions & 1 deletion packages/node-opcua-address-space-base/source/namespace.ts
Expand Up @@ -256,7 +256,9 @@ export declare interface INamespace {
namespaceUri: string;
addressSpace: IAddressSpace;
index: number;


$emulateVersion103?: boolean;

constructNodeId(options: ConstructNodeIdOptions): NodeId;

// -------------------------------------------------------------------------
Expand Down Expand Up @@ -297,6 +299,8 @@ export declare interface INamespace {
addFolder(parentFolder: NodeIdLike | UAObject, options: any): UAObject;

createNode(options: CreateNodeOptions): BaseNode;

/** @private */
internalCreateNode(options: CreateNodeOptions): BaseNode;

// -------------------------------------------------------------------------
Expand Down
Expand Up @@ -11,6 +11,19 @@ import {
} from "node-opcua-address-space-base";
import { DataValue } from "node-opcua-data-value";


let counter = 0;

function make_key() {
// return crypto.randomBytes(32);
counter += 1;
return Buffer.from(counter.toString(), "utf-8");
}

interface Data {
maxElements: number;
values: ReferenceDescription[] | DataValue[];
}
/**
* from https://reference.opcfoundation.org/v104/Core/docs/Part4/7.6/
*
Expand Down Expand Up @@ -70,18 +83,6 @@ import { DataValue } from "node-opcua-data-value";
* release all ContinuationPoints passed in the request. If the ContinuationPoint for an operation is missing or
* invalid then the StatusCode for the operation shall be Bad_ContinuationPointInvalid.
*/
let counter = 0;

function make_key() {
// return crypto.randomBytes(32);
counter += 1;
return Buffer.from(counter.toString(), "utf-8");
}

interface Data {
maxElements: number;
values: ReferenceDescription[] | DataValue[];
}
export class ContinuationPointManager implements IContinuationPointManager {
private _map: Map<string, Data>;

Expand Down
@@ -1,14 +1,46 @@
import { IAddressSpace, INamespace } from "node-opcua-address-space-base";
import { ExtraDataTypeManager, populateDataTypeManager } from "node-opcua-client-dynamic-extension-object";
import { IAddressSpace, INamespace, UADataType } from "node-opcua-address-space-base";
import {
convertStructureTypeSchemaToStructureDefinition,
ExtraDataTypeManager,
populateDataTypeManager
} from "node-opcua-client-dynamic-extension-object";
import { make_debugLog } from "node-opcua-debug";
import { DataTypeFactory, getStandardDataTypeFactory } from "node-opcua-factory";
import { CallbackT } from "node-opcua-status-code";
import { StructureField } from "node-opcua-types";
import { AddressSpacePrivate } from "../../src/address_space_private";
import { PseudoSession } from "../pseudo_session";


const debugLog = make_debugLog(__filename);

interface UADataTypePriv extends UADataType {
$partialDefinition?: StructureField[];
}

function fixDefinition103(addressSpace: IAddressSpace, namespaceArray: string[], dataTypeManager: ExtraDataTypeManager) {
// fix datatype _getDefinition();
for (let namespaceIndex = 1; namespaceIndex < namespaceArray.length; namespaceIndex++) {
const df = dataTypeManager.getDataTypeFactory(namespaceIndex);
for (const s of df.getStructureIterator()) {
const dataType = addressSpace.findDataType(s.schema.dataTypeNodeId) as UADataTypePriv;
if (!s.constructor) {
continue;
}
if (!dataType) {
continue;
}
if (dataType.$partialDefinition && dataType.$partialDefinition.length) {
continue;
}
// debugLog(" Explorartion", dataType.browseName.toString());
if (!dataType.$partialDefinition || (dataType.$partialDefinition.length === 0 && s.schema.fields!.length > 0)) {
const sd = convertStructureTypeSchemaToStructureDefinition(s.schema);
dataType.$partialDefinition = sd.fields || undefined;
}
}
}
}

export async function ensureDatatypeExtracted(addressSpace: IAddressSpace): Promise<ExtraDataTypeManager> {
const addressSpacePriv: any = addressSpace as AddressSpacePrivate;
if (!addressSpacePriv.$$extraDataTypeManager) {
Expand All @@ -28,6 +60,9 @@ export async function ensureDatatypeExtracted(addressSpace: IAddressSpace): Prom
// now extract structure and enumeration from old form if
const session = new PseudoSession(addressSpace);
await populateDataTypeManager(session, dataTypeManager, true);

// turn old <=103 structure to have valid DataTypeDefinition
fixDefinition103(addressSpace, namespaceArray, dataTypeManager);
}
return addressSpacePriv.$$extraDataTypeManager;
}
Expand Down
Expand Up @@ -3,7 +3,7 @@ import { CallbackT } from "node-opcua-status-code";
import { IAddressSpace } from "node-opcua-address-space-base";

import { adjustNamespaceArray } from "../../src/nodeset_tools/adjust_namespace_array";
import { NodeSetLoader } from "./load_nodeset2";
import { NodeSetLoader, NodeSetLoaderOptions } from "./load_nodeset2";

const doDebug = checkDebugFlag(__filename);
const debugLog = make_debugLog(__filename);
Expand All @@ -17,9 +17,10 @@ const errorLog = make_errorLog(__filename);
export async function generateAddressSpaceRaw(
addressSpace: IAddressSpace,
xmlFiles: string | string[],
xmlLoader: (nodeset2xmlUri: string) => Promise<string>
xmlLoader: (nodeset2xmlUri: string) => Promise<string>,
options: NodeSetLoaderOptions
): Promise<void> {
const nodesetLoader = new NodeSetLoader(addressSpace);
const nodesetLoader = new NodeSetLoader(addressSpace, options);

if (!Array.isArray(xmlFiles)) {
xmlFiles = [xmlFiles];
Expand Down

0 comments on commit 1661f5d

Please sign in to comment.