Skip to content

Commit c32d2c2

Browse files
fix: 6 bugs in PlcProgram.Browse parse, clean deps, lint fixes, add GPR publish
1 parent fad1ecb commit c32d2c2

6 files changed

Lines changed: 83 additions & 59 deletions

File tree

.github/workflows/ci-cd-implementation.yml

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ jobs:
1919

2020
steps:
2121
- name: Checkout code
22-
uses: actions/checkout@v3
22+
uses: actions/checkout@v4
2323

2424
- name: Set up Node.js
25-
uses: actions/setup-node@v3
25+
uses: actions/setup-node@v4
2626
with:
2727
node-version: '22'
2828
registry-url: 'https://registry.npmjs.org/'
@@ -45,9 +45,40 @@ jobs:
4545
env:
4646
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
4747
run: npm publish --access public
48-
48+
49+
publish-gpr:
50+
runs-on: ubuntu-latest
51+
needs: build
52+
if: startsWith(github.ref, 'refs/tags/v')
53+
permissions:
54+
packages: write
55+
contents: read
56+
57+
steps:
58+
- name: Checkout code
59+
uses: actions/checkout@v4
60+
61+
- name: Set up Node.js for GitHub Packages
62+
uses: actions/setup-node@v4
63+
with:
64+
node-version: '22'
65+
registry-url: 'https://npm.pkg.github.com/'
66+
scope: '@siemens'
67+
68+
- name: Install dependencies
69+
run: npm ci
70+
71+
- name: Build
72+
run: npm run build
73+
74+
- name: Publish to GitHub Packages
75+
env:
76+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
77+
run: npm publish --access public
78+
4979
release:
5080
runs-on: ubuntu-latest
81+
needs: [build, publish-gpr]
5182
if: startsWith(github.ref, 'refs/tags/v')
5283
steps:
5384
- name: Create GitHub release

package.json

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,18 @@
11
{
22
"dependencies": {
3-
"@eslint/config-array": "^0.19.0",
4-
"assert": "^2.0.0",
53
"axios": "^1.13.1",
6-
"browserify-zlib": "^0.2.0",
7-
"buffer": "^6.0.3",
8-
"crypto-browserify": "^3.12.0",
9-
"glob": "^10.0.0",
10-
"global": "^4.4.0",
11-
"https-browserify": "^1.0.0",
124
"moment": "^2.30.1",
13-
"os-browserify": "^0.3.0",
14-
"path-browserify": "^1.0.1",
15-
"pino": "^8.21.0",
16-
"stream-browserify": "^3.0.0",
17-
"stream-http": "^3.2.0",
18-
"url": "^0.11.0",
19-
"util": "^0.12.5"
5+
"pino": "^8.21.0"
206
},
217
"name": "@siemens/simatic-s7-webserver-api",
22-
"version": "1.1.2",
8+
"version": "1.1.3",
239
"publishConfig": {
2410
"access": "public"
2511
},
12+
"repository": {
13+
"type": "git",
14+
"url": "https://github.com/siemens/typescript-simatic-s7-webserver-api.git"
15+
},
2616
"main": "dist/index.js",
2717
"types": "dist/index.d.ts",
2818
"author": "Siemens",

src/api.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -576,7 +576,7 @@ export class ApiGetSessionInfo extends request.JsonrpcBaseRequest {
576576
responseR.error = response.error;
577577
responseR.id = response.id;
578578
responseR.result = undefined;
579-
return responseR; // ← Return response with error, not null
579+
return responseR; // ← Return response with error, not null
580580
}
581581

582582
// Handle missing result
@@ -590,7 +590,6 @@ export class ApiGetSessionInfo extends request.JsonrpcBaseRequest {
590590

591591
let container: SessionInfo = new SessionInfo();
592592
let Var: SessionInfo | null = null;
593-
594593
const responseProcess = new ApiGetSessionInfoResponse();
595594
responseProcess.result = response.result;
596595

src/plcprogram.ts

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export class PlcProgramBrowseVariable {
1616
area ?: string;
1717
datatype : string = '';
1818
max_length ?: number;
19-
array_dimensions ?: PlcProgramBrowseArrayData;
19+
array_dimensions ?: PlcProgramBrowseArrayData[];
2020
block_number ?: number;
2121
block_type ?: string;
2222

@@ -31,8 +31,9 @@ export class PlcProgramBrowse extends request.JsonrpcBaseRequest {
3131
} else {
3232
if (type !== undefined) {
3333
params = { mode, type };
34+
} else {
35+
params = { mode };
3436
}
35-
params = { mode };
3637
}
3738

3839
// reading the examples that if there is Var there is no type.
@@ -62,20 +63,26 @@ export class PlcProgramBrowse extends request.JsonrpcBaseRequest {
6263
Vars = new PlcProgramBrowseVariable();
6364
if (Vars !== null) {
6465
Vars.name = value.name || '';
65-
Vars.address = value.address || undefined;
66-
Vars.read_only = Boolean(value.read_only) || undefined;
67-
Vars.has_children = Boolean(value.db_number) || undefined;
66+
Vars.address = value.address !== undefined ? String(value.address) : undefined;
67+
Vars.read_only = value.read_only !== undefined ? Boolean(value.read_only) : undefined;
68+
Vars.has_children = value.has_children !== undefined ? Boolean(value.has_children) : undefined;
69+
Vars.db_number = value.db_number !== undefined ? Number(value.db_number) : undefined;
6870
Vars.area = value.area || undefined;
6971
Vars.datatype = value.datatype || '';
70-
Vars.max_length = Number(value.max_length) || undefined;
71-
72-
if (value === 'array_dimensions') {
73-
Vars.array_dimensions = new PlcProgramBrowseArrayData();
74-
Vars.array_dimensions.start_index = Number(value.array_dimensions.start_index) || 0;
75-
Vars.array_dimensions.count = Number(value.array_dimensions.count) || 0;
76-
72+
Vars.max_length = value.max_length !== undefined ? Number(value.max_length) : undefined;
73+
74+
if (value.array_dimensions) {
75+
const rawDims = Array.isArray(value.array_dimensions)
76+
? value.array_dimensions
77+
: [value.array_dimensions];
78+
Vars.array_dimensions = rawDims.map((dim: any) => {
79+
const entry = new PlcProgramBrowseArrayData();
80+
entry.start_index = Number(dim.start_index) || 0;
81+
entry.count = Number(dim.count) || 0;
82+
return entry;
83+
});
7784
}
78-
Vars.block_number = Number(value.block_number) || 0;
85+
Vars.block_number = value.block_number !== undefined ? Number(value.block_number) : undefined;
7986
Vars.block_type = value.block_type || undefined;
8087
container.push(Vars);
8188
}

src/webApp.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -615,16 +615,15 @@ export class WebAppBrowseResourcesResponse extends response.JsonrpcBaseResponse
615615
}
616616
}
617617

618-
619618
export class WebAppSetVersion extends request.JsonrpcBaseRequest {
620-
constructor(config: request.RequestConfig, token: string, name: string, version: string){
619+
constructor (config: request.RequestConfig, token: string, name: string, version: string) {
621620
super(config.address, config.protocol, config.verifyTls, undefined, undefined, token);
622621

623622
this.method = 'WebApp.SetVersion';
624623
this.params = { name, version };
625624
}
626625

627-
public parse(response: response.JsonrpcBaseResponse): WebAppSetVersionResponse | null {
626+
public parse (response: response.JsonrpcBaseResponse): WebAppSetVersionResponse | null {
628627
const logger = pino.pino();
629628
logger.level = 'debug';
630629
// transport: {
@@ -654,4 +653,4 @@ export class WebAppSetVersionResponse extends response.JsonrpcBaseResponse {
654653
constructor () {
655654
super('WebAppSetVersion');
656655
}
657-
}
656+
}

src/webserver.ts

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,14 @@ export class WebServerReadDefaultPageResponse extends response.JsonrpcBaseRespon
8585
}
8686
}
8787

88-
8988
export class WebServerReadResponseHeaders extends request.JsonrpcBaseRequest {
90-
constructor(config: request.RequestConfig, token: string){
89+
constructor (config: request.RequestConfig, token: string) {
9190
super(config.address, config.protocol, config.verifyTls, undefined, undefined, token);
9291

93-
this.method = 'WebServer.ReadResponseHeaders'
92+
this.method = 'WebServer.ReadResponseHeaders';
9493
}
9594

96-
public parse(response: response.JsonrpcBaseResponse): WebServerReadResponseHeadersResponse | null {
95+
public parse (response: response.JsonrpcBaseResponse): WebServerReadResponseHeadersResponse | null {
9796
const logger = pino.pino();
9897
logger.level = 'debug';
9998

@@ -143,41 +142,40 @@ export class WebServerReadResponseHeaders extends request.JsonrpcBaseRequest {
143142
}
144143
}
145144

146-
export class WebServerReadResponseHeadersResponse extends response.JsonrpcBaseResponse {
147-
result?: HeadersResponse;
145+
class WebServer_ReadResponseHeaders_Configured_Response {
146+
pattern : string = '';
147+
header : string = '';
148+
}
148149

149-
constructor() {
150-
super('WebServerReadResponseHeaders');
151-
}
150+
class WebServer_ReadResponseHeaders_Allowed_Response {
151+
pattern : string = '';
152+
key : string = '';
152153
}
153154

154155
export class HeadersResponse {
155156
configured_headers : WebServer_ReadResponseHeaders_Configured_Response[] = [];
156157
allowed_headers: WebServer_ReadResponseHeaders_Allowed_Response[] = [];
157-
158158
}
159159

160-
class WebServer_ReadResponseHeaders_Configured_Response {
161-
pattern : string = '';
162-
header : string = '';
163-
}
160+
export class WebServerReadResponseHeadersResponse extends response.JsonrpcBaseResponse {
161+
result?: HeadersResponse;
164162

165-
class WebServer_ReadResponseHeaders_Allowed_Response {
166-
pattern : string = '';
167-
key : string = '';
163+
constructor () {
164+
super('WebServerReadResponseHeaders');
165+
}
168166
}
169167

170168
export class WebServerChangeResponseHeaders extends request.JsonrpcBaseRequest {
171-
constructor(config: request.RequestConfig, token: string, pattern : string, header : string){
169+
constructor (config: request.RequestConfig, token: string, pattern: string, header: string) {
172170
super(config.address, config.protocol, config.verifyTls, undefined, undefined, token);
173171

174172
this.method = 'WebServer.ChangeResponseHeaders';
175-
this.params = {
173+
this.params = {
176174
headers: [{ pattern, header }]
177175
};
178176
}
179177

180-
public parse(response: response.JsonrpcBaseResponse): WebServerChangeResponseHeadersResponse | null {
178+
public parse (response: response.JsonrpcBaseResponse): WebServerChangeResponseHeadersResponse | null {
181179
const logger = pino.pino();
182180
logger.level = 'debug';
183181
// transport: {
@@ -207,4 +205,4 @@ export class WebServerChangeResponseHeadersResponse extends response.JsonrpcBase
207205
constructor () {
208206
super('WebServerChangeResponseHeaders');
209207
}
210-
}
208+
}

0 commit comments

Comments
 (0)