@winccoa-tools-pack/npm-winccoa-ctrl-code-style 0.1.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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +122 -0
  3. package/dist/cjs/cli.js +204 -0
  4. package/dist/cjs/cli.js.map +1 -0
  5. package/dist/cjs/index.js +29 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/paths.js +50 -0
  8. package/dist/cjs/paths.js.map +1 -0
  9. package/dist/cjs/register.js +154 -0
  10. package/dist/cjs/register.js.map +1 -0
  11. package/dist/cjs/style-check.js +110 -0
  12. package/dist/cjs/style-check.js.map +1 -0
  13. package/dist/cjs/types.js +3 -0
  14. package/dist/cjs/types.js.map +1 -0
  15. package/dist/cli.d.ts +15 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/esm/cli.js +204 -0
  18. package/dist/esm/cli.js.map +1 -0
  19. package/dist/esm/index.js +29 -0
  20. package/dist/esm/index.js.map +1 -0
  21. package/dist/esm/paths.js +50 -0
  22. package/dist/esm/paths.js.map +1 -0
  23. package/dist/esm/register.js +154 -0
  24. package/dist/esm/register.js.map +1 -0
  25. package/dist/esm/style-check.js +110 -0
  26. package/dist/esm/style-check.js.map +1 -0
  27. package/dist/esm/types.js +3 -0
  28. package/dist/esm/types.js.map +1 -0
  29. package/dist/index.d.ts +13 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/paths.d.ts +16 -0
  32. package/dist/paths.d.ts.map +1 -0
  33. package/dist/register.d.ts +49 -0
  34. package/dist/register.d.ts.map +1 -0
  35. package/dist/style-check.d.ts +31 -0
  36. package/dist/style-check.d.ts.map +1 -0
  37. package/dist/types.d.ts +71 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/package.json +68 -0
  40. package/scripts/approve-open-pr-workflows.sh +85 -0
  41. package/scripts/check-changelog-version.mjs +37 -0
  42. package/scripts/fix-esm-imports.mjs +115 -0
  43. package/scripts/generate-changelog.mjs +190 -0
  44. package/scripts/register-stylecheck-projects.ps1 +92 -0
  45. package/scripts/register-stylecheck-projects.sh +193 -0
  46. package/scripts/run-node-tests.ts +74 -0
  47. package/scripts/wait-for-winccoa.sh +26 -0
  48. package/winccoa/StyleCheck/scripts/astyle.ctl +142 -0
@@ -0,0 +1,110 @@
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.ASTYLE_SCRIPT = void 0;
7
+ exports.buildCtrlArgs = buildCtrlArgs;
8
+ exports.runStyleCheck = runStyleCheck;
9
+ exports.checkStyle = checkStyle;
10
+ exports.formatStyle = formatStyle;
11
+ const node_fs_1 = __importDefault(require("node:fs"));
12
+ const node_path_1 = __importDefault(require("node:path"));
13
+ const CtrlComponent_1 = require("@winccoa-tools-pack/npm-winccoa-core/types/components/implementations/CtrlComponent");
14
+ const paths_1 = require("./paths");
15
+ const register_1 = require("./register");
16
+ const DEFAULT_TIMEOUT = 120000;
17
+ /** Script name relative to StyleCheck scripts/ (OA proj_path resolution). */
18
+ exports.ASTYLE_SCRIPT = 'astyle.ctl';
19
+ /**
20
+ * Build WCCOActrl argv for astyle.ctl against the worker project config.
21
+ *
22
+ * WCCOActrl -config <worker>/config/config -n -log +stderr astyle.ctl <source> [TRUE]
23
+ *
24
+ * Script is always the bare name `astyle.ctl` (resolved via StyleCheck on
25
+ * proj_path). Worker project is runnable; logs stay on the worker.
26
+ */
27
+ function buildCtrlArgs(options) {
28
+ const args = [
29
+ '-config',
30
+ options.configPath,
31
+ '-n',
32
+ '-log',
33
+ '+stderr',
34
+ options.scriptName ?? exports.ASTYLE_SCRIPT,
35
+ options.sourcePath,
36
+ ];
37
+ if (options.applyChanges) {
38
+ args.push('TRUE');
39
+ }
40
+ return args;
41
+ }
42
+ /**
43
+ * Run CTL style check or format via worker project + StyleCheck sub-project.
44
+ */
45
+ async function runStyleCheck(options) {
46
+ const version = (0, register_1.resolveWinCCOAVersion)(options.version);
47
+ const projectPath = node_path_1.default.resolve(options.projectPath);
48
+ const sourcePath = node_path_1.default.resolve(options.sourcePath ?? projectPath);
49
+ const applyChanges = options.applyChanges === true;
50
+ const styleCheckPath = node_path_1.default.resolve(options.styleCheckProjectPath ?? (0, paths_1.getDefaultStyleCheckProjectPath)());
51
+ // Existence check only — CTRL receives bare script name, not this path.
52
+ const bundledScriptPath = (0, paths_1.getAstyleScriptPath)(styleCheckPath);
53
+ const timeout = options.timeout ?? DEFAULT_TIMEOUT;
54
+ const registerProject = options.registerProject !== false;
55
+ if (!node_fs_1.default.existsSync(projectPath)) {
56
+ throw new Error(`projectPath does not exist: ${projectPath}`);
57
+ }
58
+ if (!node_fs_1.default.existsSync(sourcePath)) {
59
+ throw new Error(`sourcePath does not exist: ${sourcePath}`);
60
+ }
61
+ if (!node_fs_1.default.existsSync(bundledScriptPath)) {
62
+ throw new Error(`astyle.ctl not found: ${bundledScriptPath}`);
63
+ }
64
+ let configPath = node_path_1.default.join(projectPath, 'config', 'config');
65
+ if (registerProject) {
66
+ const registered = await (0, register_1.registerWorkerProjectWithStyleCheck)({
67
+ projectPath,
68
+ version,
69
+ langs: options.langs,
70
+ styleCheckProjectPath: styleCheckPath,
71
+ forceRewriteConfig: true,
72
+ });
73
+ configPath = registered.configPath;
74
+ }
75
+ if (!node_fs_1.default.existsSync(configPath)) {
76
+ throw new Error(`Worker project config not found: ${configPath}. Register first ` +
77
+ `(registerProject or scripts/register-stylecheck-projects.sh).`);
78
+ }
79
+ const ctrl = new CtrlComponent_1.CtrlComponent();
80
+ ctrl.setVersion(version);
81
+ const args = buildCtrlArgs({
82
+ configPath,
83
+ sourcePath,
84
+ applyChanges,
85
+ });
86
+ const exitCode = await ctrl.start(args, { timeout });
87
+ return {
88
+ success: exitCode === 0,
89
+ exitCode,
90
+ stdout: ctrl.stdOut ?? '',
91
+ stderr: ctrl.stdErr ?? '',
92
+ projectPath,
93
+ sourcePath,
94
+ configPath,
95
+ applyChanges,
96
+ };
97
+ }
98
+ /**
99
+ * Dry-run style check (no file changes).
100
+ */
101
+ async function checkStyle(options) {
102
+ return runStyleCheck({ ...options, applyChanges: false });
103
+ }
104
+ /**
105
+ * Format CTL sources in place.
106
+ */
107
+ async function formatStyle(options) {
108
+ return runStyleCheck({ ...options, applyChanges: true });
109
+ }
110
+ //# sourceMappingURL=style-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-check.js","sourceRoot":"","sources":["../../src/style-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ export interface ParsedCliArgs {
3
+ command: 'check' | 'format' | 'register';
4
+ projectPath: string;
5
+ sourcePath?: string;
6
+ version?: string;
7
+ langs?: string[];
8
+ styleCheckProjectPath?: string;
9
+ registerProject: boolean;
10
+ timeout?: number;
11
+ }
12
+ export declare function printUsage(): void;
13
+ export declare function parseArgs(argv: string[]): ParsedCliArgs | null;
14
+ export declare function main(argv?: string[]): Promise<number>;
15
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAUA,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,IAAI,IAAI,CAwCjC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,GAAG,IAAI,CAoF9D;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuEzE"}
@@ -0,0 +1,204 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.printUsage = printUsage;
5
+ exports.parseArgs = parseArgs;
6
+ exports.main = main;
7
+ const style_check_1 = require("./style-check");
8
+ const register_1 = require("./register");
9
+ const EXIT_OK = 0;
10
+ const EXIT_USAGE = 1;
11
+ const EXIT_FAILED = 2;
12
+ function printUsage() {
13
+ const bin = 'winccoa-ctrl-style';
14
+ process.stderr.write([
15
+ '',
16
+ 'Usage: ' + bin + ' <command> <projectPath> [options]',
17
+ '',
18
+ 'Commands:',
19
+ ' check <projectPath> Dry-run: fail if CTL files need formatting',
20
+ ' format <projectPath> Format CTL files in place via astyle',
21
+ ' register <projectPath> Register StyleCheck + worker project only',
22
+ '',
23
+ 'Options:',
24
+ ' -v, --version <ver> WinCC OA version (e.g. 3.21)',
25
+ ' -s, --source <path> CTL tree to scan (default: projectPath)',
26
+ ' --langs <csv> Worker project langs (default: en_US.utf8)',
27
+ ' --style-check-path <path> StyleCheck sub-project (default: package winccoa/StyleCheck)',
28
+ ' --no-register Skip registration (use existing worker config)',
29
+ ' -t, --timeout <ms> WCCOActrl timeout in ms (default: 120000)',
30
+ ' -h, --help Show this help',
31
+ '',
32
+ 'Examples:',
33
+ ' ' + bin + ' register ./src/Squirt -v 3.21',
34
+ ' ' + bin + ' check ./src/Squirt -v 3.21',
35
+ ' ' + bin + ' format ./src/Squirt -v 3.21 -s ./src/Squirt/scripts',
36
+ '',
37
+ 'Flow:',
38
+ ' 1. Register bundled StyleCheck as non-runnable',
39
+ ' 2. Register worker project as runnable with StyleCheck as sub-project',
40
+ ' 3. WCCOActrl -config <worker>/config/config -n -log +stderr astyle.ctl ...',
41
+ '',
42
+ ' astyle.config is resolved via getPath (worker, StyleCheck, then OA install).',
43
+ ' Put a custom astyle.config under the worker project config/ if needed.',
44
+ ' Logs and artifacts stay on the worker project, not StyleCheck.',
45
+ '',
46
+ 'Local helper script:',
47
+ ' ./scripts/register-stylecheck-projects.sh --project-path ./src/Squirt -v 3.21',
48
+ '',
49
+ ].join('\n'));
50
+ }
51
+ function parseArgs(argv) {
52
+ const args = argv.slice(2);
53
+ if (args.length === 0 || args.includes('-h') || args.includes('--help')) {
54
+ return null;
55
+ }
56
+ const commandRaw = args[0];
57
+ if (commandRaw !== 'check' && commandRaw !== 'format' && commandRaw !== 'register') {
58
+ process.stderr.write('Error: Unknown command "' +
59
+ commandRaw +
60
+ '". Expected "check", "format", or "register".\n');
61
+ return null;
62
+ }
63
+ const projectPath = args[1];
64
+ if (!projectPath || projectPath.startsWith('-')) {
65
+ process.stderr.write('Error: Missing projectPath.\n');
66
+ return null;
67
+ }
68
+ let version;
69
+ let sourcePath;
70
+ let langs;
71
+ let styleCheckProjectPath;
72
+ let registerProject = true;
73
+ let timeout;
74
+ let i = 2;
75
+ while (i < args.length) {
76
+ const flag = args[i];
77
+ switch (flag) {
78
+ case '-v':
79
+ case '--version':
80
+ version = args[++i] ?? '';
81
+ break;
82
+ case '-s':
83
+ case '--source':
84
+ sourcePath = args[++i] ?? '';
85
+ break;
86
+ case '--langs': {
87
+ const raw = args[++i] ?? '';
88
+ langs = raw
89
+ .split(/[ ,]+/)
90
+ .map((s) => s.trim())
91
+ .filter(Boolean);
92
+ break;
93
+ }
94
+ case '--style-check-path':
95
+ styleCheckProjectPath = args[++i] ?? '';
96
+ break;
97
+ case '--no-register':
98
+ registerProject = false;
99
+ break;
100
+ case '-t':
101
+ case '--timeout': {
102
+ const raw = args[++i] ?? '';
103
+ const parsed = Number(raw);
104
+ if (Number.isNaN(parsed) || parsed <= 0) {
105
+ process.stderr.write('Error: Invalid timeout value "' + raw + '".\n');
106
+ return null;
107
+ }
108
+ timeout = parsed;
109
+ break;
110
+ }
111
+ default:
112
+ process.stderr.write('Error: Unknown option "' + flag + '".\n');
113
+ return null;
114
+ }
115
+ i++;
116
+ }
117
+ return {
118
+ command: commandRaw,
119
+ projectPath,
120
+ sourcePath: sourcePath || undefined,
121
+ version: version || undefined,
122
+ langs,
123
+ styleCheckProjectPath: styleCheckProjectPath || undefined,
124
+ registerProject,
125
+ timeout,
126
+ };
127
+ }
128
+ async function main(argv = process.argv) {
129
+ const parsed = parseArgs(argv);
130
+ if (!parsed) {
131
+ printUsage();
132
+ return EXIT_USAGE;
133
+ }
134
+ try {
135
+ if (parsed.command === 'register') {
136
+ process.stderr.write('Registering StyleCheck + worker project ' + parsed.projectPath + '\n');
137
+ const result = await (0, register_1.registerWorkerProjectWithStyleCheck)({
138
+ projectPath: parsed.projectPath,
139
+ version: parsed.version ?? '',
140
+ langs: parsed.langs,
141
+ styleCheckProjectPath: parsed.styleCheckProjectPath,
142
+ forceRewriteConfig: true,
143
+ });
144
+ process.stderr.write('Registered worker config: ' + result.configPath + '\n');
145
+ process.stderr.write('StyleCheck sub-project: ' + result.styleCheckPath + '\n');
146
+ return EXIT_OK;
147
+ }
148
+ const options = {
149
+ projectPath: parsed.projectPath,
150
+ version: parsed.version ?? '',
151
+ sourcePath: parsed.sourcePath,
152
+ applyChanges: parsed.command === 'format',
153
+ langs: parsed.langs,
154
+ styleCheckProjectPath: parsed.styleCheckProjectPath,
155
+ registerProject: parsed.registerProject,
156
+ timeout: parsed.timeout,
157
+ };
158
+ process.stderr.write((parsed.command === 'format' ? 'Formatting' : 'Checking') +
159
+ ' CTL style for project ' +
160
+ parsed.projectPath +
161
+ '\n');
162
+ const result = parsed.command === 'format' ? await (0, style_check_1.formatStyle)(options) : await (0, style_check_1.checkStyle)(options);
163
+ if (result.stdout) {
164
+ process.stdout.write(result.stdout);
165
+ if (!result.stdout.endsWith('\n')) {
166
+ process.stdout.write('\n');
167
+ }
168
+ }
169
+ if (result.stderr) {
170
+ process.stderr.write(result.stderr);
171
+ if (!result.stderr.endsWith('\n')) {
172
+ process.stderr.write('\n');
173
+ }
174
+ }
175
+ if (result.success) {
176
+ process.stderr.write('Style operation completed successfully.\n');
177
+ return EXIT_OK;
178
+ }
179
+ process.stderr.write('Style operation failed with exit code ' + result.exitCode + '.\n');
180
+ return EXIT_FAILED;
181
+ }
182
+ catch (err) {
183
+ const message = err instanceof Error ? err.message : String(err);
184
+ process.stderr.write('Error: ' + message + '\n');
185
+ return EXIT_FAILED;
186
+ }
187
+ }
188
+ const isDirectRun = !!process.argv[1] &&
189
+ (process.argv[1].endsWith('cli.js') ||
190
+ process.argv[1].endsWith('cli.ts') ||
191
+ process.argv[1].endsWith('cli.cjs') ||
192
+ process.argv[1].endsWith('cli.mjs'));
193
+ if (isDirectRun) {
194
+ main()
195
+ .then((code) => {
196
+ process.exit(code);
197
+ })
198
+ .catch((err) => {
199
+ const message = err instanceof Error ? err.message : String(err);
200
+ process.stderr.write('Error: ' + message + '\n');
201
+ process.exit(EXIT_FAILED);
202
+ });
203
+ }
204
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * @winccoa-tools-pack/npm-winccoa-ctrl-code-style
4
+ *
5
+ * Check and format WinCC OA CTL sources via WCCOActrl + astyle.ctl.
6
+ * Worker project is runnable; StyleCheck is a non-runnable sub-project.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.main = exports.printUsage = exports.parseArgs = exports.spawnRegisterProjectCli = exports.resolveWinCCOAVersion = exports.registerWorkerProjectWithStyleCheck = exports.registerStyleCheckSubProject = exports.getAstyleScriptPath = exports.getDefaultStyleCheckProjectPath = exports.getPackageRoot = exports.ASTYLE_SCRIPT = exports.buildCtrlArgs = exports.formatStyle = exports.checkStyle = exports.runStyleCheck = void 0;
10
+ var style_check_1 = require("./style-check");
11
+ Object.defineProperty(exports, "runStyleCheck", { enumerable: true, get: function () { return style_check_1.runStyleCheck; } });
12
+ Object.defineProperty(exports, "checkStyle", { enumerable: true, get: function () { return style_check_1.checkStyle; } });
13
+ Object.defineProperty(exports, "formatStyle", { enumerable: true, get: function () { return style_check_1.formatStyle; } });
14
+ Object.defineProperty(exports, "buildCtrlArgs", { enumerable: true, get: function () { return style_check_1.buildCtrlArgs; } });
15
+ Object.defineProperty(exports, "ASTYLE_SCRIPT", { enumerable: true, get: function () { return style_check_1.ASTYLE_SCRIPT; } });
16
+ var paths_1 = require("./paths");
17
+ Object.defineProperty(exports, "getPackageRoot", { enumerable: true, get: function () { return paths_1.getPackageRoot; } });
18
+ Object.defineProperty(exports, "getDefaultStyleCheckProjectPath", { enumerable: true, get: function () { return paths_1.getDefaultStyleCheckProjectPath; } });
19
+ Object.defineProperty(exports, "getAstyleScriptPath", { enumerable: true, get: function () { return paths_1.getAstyleScriptPath; } });
20
+ var register_1 = require("./register");
21
+ Object.defineProperty(exports, "registerStyleCheckSubProject", { enumerable: true, get: function () { return register_1.registerStyleCheckSubProject; } });
22
+ Object.defineProperty(exports, "registerWorkerProjectWithStyleCheck", { enumerable: true, get: function () { return register_1.registerWorkerProjectWithStyleCheck; } });
23
+ Object.defineProperty(exports, "resolveWinCCOAVersion", { enumerable: true, get: function () { return register_1.resolveWinCCOAVersion; } });
24
+ Object.defineProperty(exports, "spawnRegisterProjectCli", { enumerable: true, get: function () { return register_1.spawnRegisterProjectCli; } });
25
+ var cli_1 = require("./cli");
26
+ Object.defineProperty(exports, "parseArgs", { enumerable: true, get: function () { return cli_1.parseArgs; } });
27
+ Object.defineProperty(exports, "printUsage", { enumerable: true, get: function () { return cli_1.printUsage; } });
28
+ Object.defineProperty(exports, "main", { enumerable: true, get: function () { return cli_1.main; } });
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,6CAMuB;AALnB,4GAAA,aAAa,OAAA;AACb,yGAAA,UAAU,OAAA;AACV,0GAAA,WAAW,OAAA;AACX,4GAAA,aAAa,OAAA;AACb,4GAAA,aAAa,OAAA;AAEjB,iCAA+F;AAAtF,uGAAA,cAAc,OAAA;AAAE,wHAAA,+BAA+B,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AAC7E,uCAKoB;AAJhB,wHAAA,4BAA4B,OAAA;AAC5B,+HAAA,mCAAmC,OAAA;AACnC,iHAAA,qBAAqB,OAAA;AACrB,mHAAA,uBAAuB,OAAA;AAE3B,6BAAoD;AAA3C,gGAAA,SAAS,OAAA;AAAE,iGAAA,UAAU,OAAA;AAAE,2FAAA,IAAI,OAAA"}
@@ -0,0 +1,50 @@
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.getPackageRoot = getPackageRoot;
7
+ exports.getDefaultStyleCheckProjectPath = getDefaultStyleCheckProjectPath;
8
+ exports.getAstyleScriptPath = getAstyleScriptPath;
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ /**
12
+ * Resolve the package root that contains `winccoa/StyleCheck`.
13
+ * Works from source (`src/`) and built layouts (`dist/cjs`, `dist/esm`).
14
+ */
15
+ function getPackageRoot(startDir) {
16
+ let dir = node_path_1.default.resolve(startDir ?? __dirname);
17
+ for (let i = 0; i < 8; i++) {
18
+ const candidate = node_path_1.default.join(dir, 'winccoa', 'StyleCheck');
19
+ const pkgJson = node_path_1.default.join(dir, 'package.json');
20
+ if (node_fs_1.default.existsSync(candidate) && node_fs_1.default.existsSync(pkgJson)) {
21
+ return dir;
22
+ }
23
+ if (node_fs_1.default.existsSync(candidate)) {
24
+ return dir;
25
+ }
26
+ const parent = node_path_1.default.dirname(dir);
27
+ if (parent === dir) {
28
+ break;
29
+ }
30
+ dir = parent;
31
+ }
32
+ // Last resort: two levels up from dist/{cjs|esm} or one from src
33
+ return node_path_1.default.resolve(__dirname, '..', '..');
34
+ }
35
+ /**
36
+ * Absolute path to the bundled StyleCheck WinCC OA subproject.
37
+ */
38
+ function getDefaultStyleCheckProjectPath() {
39
+ return node_path_1.default.join(getPackageRoot(), 'winccoa', 'StyleCheck');
40
+ }
41
+ /**
42
+ * Absolute path to astyle.ctl inside the StyleCheck project.
43
+ * Used to verify the bundled script exists. WCCOActrl must receive the bare
44
+ * name `astyle.ctl` (relative to scripts/), not this full path.
45
+ */
46
+ function getAstyleScriptPath(projectPath) {
47
+ const root = projectPath ?? getDefaultStyleCheckProjectPath();
48
+ return node_path_1.default.join(root, 'scripts', 'astyle.ctl');
49
+ }
50
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/paths.ts"],"names":[],"mappings":";;;;;AAOA,wCAqBC;AAKD,0EAEC;AAOD,kDAGC;AA7CD,sDAAyB;AACzB,0DAA6B;AAE7B;;;GAGG;AACH,SAAgB,cAAc,CAAC,QAAiB;IAC5C,IAAI,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC/C,IAAI,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,OAAO,GAAG,CAAC;QACf,CAAC;QACD,IAAI,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,mBAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM;QACV,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACjB,CAAC;IAED,iEAAiE;IACjE,OAAO,mBAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAgB,+BAA+B;IAC3C,OAAO,mBAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,WAAoB;IACpD,MAAM,IAAI,GAAG,WAAW,IAAI,+BAA+B,EAAE,CAAC;IAC9D,OAAO,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,154 @@
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.resolveWinCCOAVersion = resolveWinCCOAVersion;
7
+ exports.registerStyleCheckSubProject = registerStyleCheckSubProject;
8
+ exports.registerWorkerProjectWithStyleCheck = registerWorkerProjectWithStyleCheck;
9
+ exports.spawnRegisterProjectCli = spawnRegisterProjectCli;
10
+ const node_fs_1 = __importDefault(require("node:fs"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const node_child_process_1 = require("node:child_process");
13
+ const npm_winccoa_core_1 = require("@winccoa-tools-pack/npm-winccoa-core");
14
+ const paths_1 = require("./paths");
15
+ const DEFAULT_LANGS = ['en_US.utf8'];
16
+ /**
17
+ * Resolve a WinCC OA version: explicit, or the single installed version.
18
+ */
19
+ function resolveWinCCOAVersion(explicit) {
20
+ if (explicit) {
21
+ return explicit;
22
+ }
23
+ const installed = (0, npm_winccoa_core_1.getAvailableWinCCOAVersions)();
24
+ if (installed.length === 1) {
25
+ return installed[0];
26
+ }
27
+ if (installed.length === 0) {
28
+ throw new Error('WinCC OA version is required (--version); no installation detected on this host');
29
+ }
30
+ throw new Error(`WinCC OA version is required (--version); multiple installations found: ${installed.join(', ')}`);
31
+ }
32
+ function toUnix(p) {
33
+ return p.replace(/\\/g, '/');
34
+ }
35
+ function ensureStyleCheckLayout(styleCheckPath) {
36
+ const abs = node_path_1.default.resolve(styleCheckPath);
37
+ if (!node_fs_1.default.existsSync(abs)) {
38
+ throw new Error(`StyleCheck project path does not exist: ${abs}`);
39
+ }
40
+ // Non-runnable sub-project: only scripts (astyle.ctl). No config/ or log/.
41
+ // Worker project owns config and logs via WCCOActrl -config.
42
+ node_fs_1.default.mkdirSync(node_path_1.default.join(abs, 'scripts'), { recursive: true });
43
+ return abs;
44
+ }
45
+ /**
46
+ * Register StyleCheck as a non-runnable WinCC OA project.
47
+ */
48
+ async function registerStyleCheckSubProject(styleCheckPath, version) {
49
+ const abs = ensureStyleCheckLayout(styleCheckPath);
50
+ const project = new npm_winccoa_core_1.ProjEnvProject();
51
+ project.setDir(abs);
52
+ project.setVersion(version);
53
+ project.setRunnable(false);
54
+ project.setName('StyleCheck');
55
+ const rc = await project.registerProj();
56
+ if (rc !== 0) {
57
+ throw new Error(`Failed to register StyleCheck as non-runnable (rc=${rc}): ${abs}`);
58
+ }
59
+ return abs;
60
+ }
61
+ /**
62
+ * Write / refresh worker project config with StyleCheck as sub-project, then
63
+ * register the worker as runnable.
64
+ *
65
+ * Config shape (matches npm-winccoa-register-project --sub-project):
66
+ * [general]
67
+ * pvss_path = "..."
68
+ * proj_path = "<StyleCheck>"
69
+ * proj_path = "<worker>"
70
+ * proj_version = "..."
71
+ * langs = "..."
72
+ */
73
+ async function registerWorkerProjectWithStyleCheck(options) {
74
+ const version = resolveWinCCOAVersion(options.version);
75
+ const projectPath = node_path_1.default.resolve(options.projectPath);
76
+ const styleCheckPath = node_path_1.default.resolve(options.styleCheckProjectPath ?? (0, paths_1.getDefaultStyleCheckProjectPath)());
77
+ const langs = options.langs?.length ? options.langs : DEFAULT_LANGS;
78
+ const forceRewrite = options.forceRewriteConfig !== false;
79
+ if (!node_fs_1.default.existsSync(projectPath)) {
80
+ throw new Error(`Worker project path does not exist: ${projectPath}`);
81
+ }
82
+ const registeredStyleCheck = await registerStyleCheckSubProject(styleCheckPath, version);
83
+ const oaPath = (0, npm_winccoa_core_1.getWinCCOAInstallationPathByVersion)(version);
84
+ if (!oaPath) {
85
+ throw new Error(`Could not resolve WinCC OA installation path for version ${version}`);
86
+ }
87
+ const configDir = node_path_1.default.join(projectPath, 'config');
88
+ const configPath = node_path_1.default.join(configDir, 'config');
89
+ node_fs_1.default.mkdirSync(configDir, { recursive: true });
90
+ node_fs_1.default.mkdirSync(node_path_1.default.join(projectPath, 'log'), { recursive: true });
91
+ const needsWrite = forceRewrite || !node_fs_1.default.existsSync(configPath);
92
+ if (needsWrite) {
93
+ const content = [
94
+ '[general]',
95
+ `pvss_path = "${toUnix(oaPath)}"`,
96
+ `proj_path = "${toUnix(registeredStyleCheck)}"`,
97
+ `proj_path = "${toUnix(projectPath)}"`,
98
+ `proj_version = "${version}"`,
99
+ `langs = "${langs.join(' ')}"`,
100
+ '',
101
+ ].join('\n');
102
+ node_fs_1.default.writeFileSync(configPath, content, 'utf8');
103
+ }
104
+ else {
105
+ const existing = node_fs_1.default.readFileSync(configPath, 'utf8');
106
+ const styleMarker = toUnix(registeredStyleCheck);
107
+ if (!existing.includes(styleMarker)) {
108
+ throw new Error(`Worker config exists but does not reference StyleCheck (${styleMarker}). ` +
109
+ `Re-run with forceRewriteConfig or use scripts/register-stylecheck-projects.sh`);
110
+ }
111
+ }
112
+ const worker = new npm_winccoa_core_1.ProjEnvProject();
113
+ worker.setDir(projectPath);
114
+ worker.setVersion(version);
115
+ worker.setRunnable(true);
116
+ worker.setLanguages(langs);
117
+ const rc = await worker.registerProj();
118
+ if (rc !== 0) {
119
+ throw new Error(`Failed to register worker project (rc=${rc}): ${projectPath}`);
120
+ }
121
+ return {
122
+ styleCheckPath: registeredStyleCheck,
123
+ projectPath,
124
+ configPath,
125
+ };
126
+ }
127
+ /**
128
+ * Spawn npm-winccoa-register-project CLI (for shells / debugging).
129
+ * Prefer registerWorkerProjectWithStyleCheck() in-process for reliability
130
+ * (register-project skips config rewrite when config already exists).
131
+ */
132
+ function spawnRegisterProjectCli(args) {
133
+ const candidates = [
134
+ node_path_1.default.resolve(process.cwd(), 'node_modules', '@winccoa-tools-pack', 'npm-winccoa-register-project', 'dist', 'cjs', 'cli.js'),
135
+ // monorepo sibling checkout
136
+ node_path_1.default.resolve(__dirname, '..', '..', '..', 'npm-winccoa-register-project', 'dist', 'cjs', 'cli.js'),
137
+ ];
138
+ const cliPath = candidates.find((p) => node_fs_1.default.existsSync(p));
139
+ if (!cliPath) {
140
+ // fall back to npx package name
141
+ const result = (0, node_child_process_1.spawnSync)(process.platform === 'win32' ? 'npx.cmd' : 'npx', ['@winccoa-tools-pack/npm-winccoa-register-project', ...args], { stdio: 'inherit', shell: true });
142
+ if (result.status !== 0) {
143
+ throw new Error(`npm-winccoa-register-project failed with exit ${result.status ?? 'null'}`);
144
+ }
145
+ return;
146
+ }
147
+ const result = (0, node_child_process_1.spawnSync)(process.execPath, [cliPath, ...args], {
148
+ stdio: 'inherit',
149
+ });
150
+ if (result.status !== 0) {
151
+ throw new Error(`npm-winccoa-register-project failed with exit ${result.status ?? 'null'}`);
152
+ }
153
+ }
154
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"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"}