@uns-kit/cli 2.0.20 → 2.0.22

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 (59) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +175 -175
  3. package/package.json +6 -6
  4. package/templates/api/src/examples/api-example.ts +91 -91
  5. package/templates/azure-pipelines.yml +21 -21
  6. package/templates/codegen/codegen.ts +15 -15
  7. package/templates/codegen/src/uns/uns-tags.ts +1 -1
  8. package/templates/codegen/src/uns/uns-topics.ts +1 -1
  9. package/templates/config-files/config-docker.json +26 -26
  10. package/templates/config-files/config-localhost.json +26 -26
  11. package/templates/cron/AGENTS.md +23 -23
  12. package/templates/cron/src/examples/cron-example.ts +71 -69
  13. package/templates/default/.prettierignore +1 -1
  14. package/templates/default/.prettierrc +7 -7
  15. package/templates/default/AGENTS.md +23 -23
  16. package/templates/default/README.md +41 -41
  17. package/templates/default/config.json +27 -27
  18. package/templates/default/eslint.config.js +30 -30
  19. package/templates/default/gitignore +51 -51
  20. package/templates/default/package.json +46 -46
  21. package/templates/default/src/config/project.config.extension.example +23 -23
  22. package/templates/default/src/config/project.config.extension.ts +6 -6
  23. package/templates/default/src/examples/data-example.ts +86 -84
  24. package/templates/default/src/examples/load-test-data.ts +110 -108
  25. package/templates/default/src/examples/table-example.ts +97 -95
  26. package/templates/default/src/examples/table-window-load-test.ts +446 -444
  27. package/templates/default/src/examples/uns-gateway-cli.ts +10 -7
  28. package/templates/default/src/index.ts +15 -15
  29. package/templates/default/src/uns/uns-assets.ts +12 -12
  30. package/templates/default/src/uns/uns-dictionary.generated.ts +758 -758
  31. package/templates/default/src/uns/uns-measurements.generated.ts +366 -366
  32. package/templates/default/src/uns/uns-tags.ts +2 -2
  33. package/templates/default/src/uns/uns-topics.ts +2 -2
  34. package/templates/default/tsconfig.json +29 -29
  35. package/templates/python/app/README.md +8 -8
  36. package/templates/python/examples/README.md +134 -134
  37. package/templates/python/examples/api_handler.py +28 -28
  38. package/templates/python/examples/data_publish.py +11 -11
  39. package/templates/python/examples/data_subscribe.py +8 -8
  40. package/templates/python/examples/data_transformer.py +17 -17
  41. package/templates/python/examples/table_transformer.py +15 -15
  42. package/templates/python/gateway/cli.py +75 -75
  43. package/templates/python/gateway/client.py +155 -155
  44. package/templates/python/gateway/manager.py +97 -97
  45. package/templates/python/gen/__init__.py +1 -0
  46. package/templates/python/gen/uns_gateway_pb2.py +70 -0
  47. package/templates/python/gen/uns_gateway_pb2_grpc.py +312 -0
  48. package/templates/python/gitignore +47 -47
  49. package/templates/python/proto/uns-gateway.proto +102 -102
  50. package/templates/python/pyproject.toml +4 -4
  51. package/templates/python/runtime.json +4 -4
  52. package/templates/python/scripts/setup.sh +87 -87
  53. package/templates/temporal/src/examples/temporal-example.ts +37 -35
  54. package/templates/uns-dictionary/uns-dictionary.json +650 -650
  55. package/templates/uns-measurements/uns-measurements.json +360 -360
  56. package/templates/vscode/.vscode/launch.json +164 -164
  57. package/templates/vscode/.vscode/settings.json +9 -9
  58. package/templates/vscode/.vscode/tasks.json +27 -27
  59. package/templates/vscode/uns-kit.code-workspace +13 -13
@@ -1,51 +1,51 @@
1
- # Dependencies
2
- node_modules/
3
- .pnpm-store/
4
- .pnpm/
5
- .pnp.cjs
6
- .pnp.loader.mjs
7
-
8
- # Build outputs
9
- build/
10
- dist/
11
- tmp/
12
- temp/
13
- *.tsbuildinfo
14
-
15
- # Logs & diagnostics
16
- logs/
17
- *.log
18
- npm-debug.log*
19
- yarn-debug.log*
20
- pnpm-debug.log*
21
- lerna-debug.log*
22
-
23
- # Test & coverage artifacts
24
- coverage/
25
- .nyc_output/
26
- .vitest/
27
-
28
- # Runtime queues & sandboxes
29
- publisherQueue/
30
- sandbox-*
31
- tmp-rtt
32
- .tmp-rtt
33
-
34
- # Environment & secrets
35
- .env
36
- .env.*
37
- !.env.example
38
- !.env.sample
39
-
40
- # UNS configuration overrides
41
- config*.json
42
-
43
- # Editor files & OS cruft
44
- .idea/
45
- .DS_Store
46
- Thumbs.db
47
- *.swp
48
- *.swo
49
-
50
- # Package managers
51
- package-lock.json
1
+ # Dependencies
2
+ node_modules/
3
+ .pnpm-store/
4
+ .pnpm/
5
+ .pnp.cjs
6
+ .pnp.loader.mjs
7
+
8
+ # Build outputs
9
+ build/
10
+ dist/
11
+ tmp/
12
+ temp/
13
+ *.tsbuildinfo
14
+
15
+ # Logs & diagnostics
16
+ logs/
17
+ *.log
18
+ npm-debug.log*
19
+ yarn-debug.log*
20
+ pnpm-debug.log*
21
+ lerna-debug.log*
22
+
23
+ # Test & coverage artifacts
24
+ coverage/
25
+ .nyc_output/
26
+ .vitest/
27
+
28
+ # Runtime queues & sandboxes
29
+ publisherQueue/
30
+ sandbox-*
31
+ tmp-rtt
32
+ .tmp-rtt
33
+
34
+ # Environment & secrets
35
+ .env
36
+ .env.*
37
+ !.env.example
38
+ !.env.sample
39
+
40
+ # UNS configuration overrides
41
+ config*.json
42
+
43
+ # Editor files & OS cruft
44
+ .idea/
45
+ .DS_Store
46
+ Thumbs.db
47
+ *.swp
48
+ *.swo
49
+
50
+ # Package managers
51
+ package-lock.json
@@ -1,46 +1,46 @@
1
- {
2
- "name": "__APP_NAME__",
3
- "version": "0.0.0",
4
- "private": true,
5
- "description": "UNS application generated by @uns-kit/cli",
6
- "type": "module",
7
- "engines": {
8
- "node": ">=22"
9
- },
10
- "files": [
11
- "dist"
12
- ],
13
- "exports": {
14
- ".": {
15
- "types": "./dist/index.d.ts",
16
- "default": "./dist/index.js"
17
- }
18
- },
19
- "scripts": {
20
- "clean": "rimraf dist tsconfig.tsbuildinfo",
21
- "typecheck": "tsc --noEmit",
22
- "build": "pnpm run clean && tsc -p tsconfig.json",
23
- "dev": "tsx watch src/index.ts",
24
- "start": "node dist/index.js",
25
- "lint": "eslint src --ext .ts",
26
- "lint:fix": "eslint src --ext .ts --fix",
27
- "format": "prettier --write .",
28
- "format:check": "prettier --check .",
29
- "generate-config-schema": "node ./node_modules/@uns-kit/core/dist/tools/generate-config-schema.js",
30
- "generate-codegen": "graphql-code-generator --require dotenv/config --config codegen.ts",
31
- "generate-uns-metadata": "node ./node_modules/@uns-kit/core/dist/tools/refresh-uns.js",
32
- "generate-uns-measurements": "node ./node_modules/@uns-kit/core/dist/tools/generate-uns-measurements.js --input uns-measurements.json --output src/uns/uns-measurements.generated.ts"
33
- },
34
- "dependencies": {
35
- "@uns-kit/core": "__UNS_KIT_CORE_VERSION__",
36
- "zod": "^3.23.8"
37
- },
38
- "devDependencies": {
39
- "@types/node": "^22.19.1",
40
- "eslint": "^9.39.2",
41
- "prettier": "^3.8.0",
42
- "rimraf": "^6.1.2",
43
- "tsx": "^4.20.6",
44
- "typescript": "^5.9.3"
45
- }
46
- }
1
+ {
2
+ "name": "__APP_NAME__",
3
+ "version": "0.0.0",
4
+ "private": true,
5
+ "description": "UNS application generated by @uns-kit/cli",
6
+ "type": "module",
7
+ "engines": {
8
+ "node": ">=22"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ }
18
+ },
19
+ "scripts": {
20
+ "clean": "rimraf dist tsconfig.tsbuildinfo",
21
+ "typecheck": "tsc --noEmit",
22
+ "build": "pnpm run clean && tsc -p tsconfig.json",
23
+ "dev": "tsx watch src/index.ts",
24
+ "start": "node dist/index.js",
25
+ "lint": "eslint src --ext .ts",
26
+ "lint:fix": "eslint src --ext .ts --fix",
27
+ "format": "prettier --write .",
28
+ "format:check": "prettier --check .",
29
+ "generate-config-schema": "node ./node_modules/@uns-kit/core/dist/tools/generate-config-schema.js",
30
+ "generate-codegen": "graphql-code-generator --require dotenv/config --config codegen.ts",
31
+ "generate-uns-metadata": "node ./node_modules/@uns-kit/core/dist/tools/refresh-uns.js",
32
+ "generate-uns-measurements": "node ./node_modules/@uns-kit/core/dist/tools/generate-uns-measurements.js --input uns-measurements.json --output src/uns/uns-measurements.generated.ts"
33
+ },
34
+ "dependencies": {
35
+ "@uns-kit/core": "__UNS_KIT_CORE_VERSION__",
36
+ "zod": "^3.23.8"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^22.19.1",
40
+ "eslint": "^9.39.2",
41
+ "prettier": "^3.8.0",
42
+ "rimraf": "^6.1.2",
43
+ "tsx": "^4.20.6",
44
+ "typescript": "^5.9.3"
45
+ }
46
+ }
@@ -1,23 +1,23 @@
1
- import { z } from "zod";
2
- import { secretValueSchema } from "@uns-kit/core/uns-config/secret-placeholders.js";
3
- import { hostValueSchema } from "@uns-kit/core/uns-config/host-placeholders.js";
4
-
5
- // Extend this schema with project-specific configuration sections.
6
- export const projectExtrasSchema = z.object({
7
- pg: z.object({
8
- user: z.string().min(1, "pg.user is required"),
9
- host: hostValueSchema,
10
- port: z.number().int().positive().default(5432),
11
- ssl: z.boolean().default(false),
12
- database: z.string().min(1, "pg.database is required"),
13
- isPoolConnection: z.boolean().default(false),
14
- password: secretValueSchema.optional(),
15
- }),
16
-
17
- caddy: z.object({
18
- adminUrl: z.string().url(),
19
- proxyHost: z.string().url(),
20
- }),
21
- });
22
-
23
- export type ProjectExtras = z.infer<typeof projectExtrasSchema>;
1
+ import { z } from "zod";
2
+ import { secretValueSchema } from "@uns-kit/core/uns-config/secret-placeholders.js";
3
+ import { hostValueSchema } from "@uns-kit/core/uns-config/host-placeholders.js";
4
+
5
+ // Extend this schema with project-specific configuration sections.
6
+ export const projectExtrasSchema = z.object({
7
+ pg: z.object({
8
+ user: z.string().min(1, "pg.user is required"),
9
+ host: hostValueSchema,
10
+ port: z.number().int().positive().default(5432),
11
+ ssl: z.boolean().default(false),
12
+ database: z.string().min(1, "pg.database is required"),
13
+ isPoolConnection: z.boolean().default(false),
14
+ password: secretValueSchema.optional(),
15
+ }),
16
+
17
+ caddy: z.object({
18
+ adminUrl: z.string().url(),
19
+ proxyHost: z.string().url(),
20
+ }),
21
+ });
22
+
23
+ export type ProjectExtras = z.infer<typeof projectExtrasSchema>;
@@ -1,6 +1,6 @@
1
- import { z } from "zod";
2
-
3
- // Extend this schema with project-specific configuration sections.
4
- export const projectExtrasSchema = z.object({});
5
-
6
- export type ProjectExtras = z.infer<typeof projectExtrasSchema>;
1
+ import { z } from "zod";
2
+
3
+ // Extend this schema with project-specific configuration sections.
4
+ export const projectExtrasSchema = z.object({});
5
+
6
+ export type ProjectExtras = z.infer<typeof projectExtrasSchema>;
@@ -1,84 +1,86 @@
1
- /**
2
- * Change this file according to your specifications and rename it to index.ts
3
- */
4
- import { UnsProxyProcess, ConfigFile, logger } from "@uns-kit/core";
5
- import { registerAttributeDescriptions, registerObjectTypeDescriptions } from "@uns-kit/core/uns/uns-dictionary-registry.js";
6
- import { GeneratedPhysicalMeasurements } from "../uns/uns-measurements.generated.js";
7
- import { UnsTopics } from "@uns-kit/core/uns/uns-topics.js";
8
- import {
9
- GeneratedObjectTypes,
10
- GeneratedAttributes,
11
- GeneratedAttributesByType,
12
- GeneratedObjectTypeDescriptions,
13
- } from "../uns/uns-dictionary.generated.js";
14
- import { GeneratedAssets, resolveGeneratedAsset } from "../uns/uns-assets.js";
15
- import type { ISO8601 } from "@uns-kit/core/uns/uns-interfaces.js";
16
-
17
- /**
18
- * Load the configuration from a file.
19
- * On the server, this file is provided by the `uns-datahub-controller`.
20
- * In the development environment, you are responsible for creating and maintaining this file and its contents.
21
- */
22
- const config = await ConfigFile.loadConfig();
23
- registerObjectTypeDescriptions(GeneratedObjectTypeDescriptions);
24
-
25
- /**
26
- * Connect to input and output brokers
27
- */
28
- const unsProxyProcess = new UnsProxyProcess(config.infra.host!, {processName: config.uns.processName!});
29
- const mqttInput = await unsProxyProcess.createUnsMqttProxy((config.input?.host)!, "templateUnsRttInput", config.uns.instanceMode!, config.uns.handover!, {
30
- mqttSubToTopics: ["raw/#"],
31
- });
32
- const mqttOutput = await unsProxyProcess.createUnsMqttProxy((config.output?.host)!, "templateUnsRttOutput", config.uns.instanceMode!, config.uns.handover!, { publishThrottlingDelay: 1000});
33
-
34
-
35
- /**
36
- * Event listener for input events.
37
- * Transform an input message and publish it with publishMqttMessage function.
38
- */
39
- mqttInput.event.on("input", async (event) => {
40
- try {
41
- if (event.topic === "raw/data") {
42
- const values = event.message.split(",");
43
- const [countRaw, timestampRaw, sensorRaw] = values;
44
- if (!countRaw || !timestampRaw || !sensorRaw) {
45
- logger.warn(`Skipping malformed raw/data payload: ${event.message}`);
46
- return;
47
- }
48
- const numberValue = Number.parseFloat(countRaw);
49
- const eventDate = new Date(Number.parseInt(timestampRaw, 10));
50
- const sensorValue = Number.parseFloat(sensorRaw);
51
- const time: ISO8601 = eventDate.toISOString() as ISO8601;
52
- const intervalStart: ISO8601 = new Date(eventDate.getTime() - 1000).toISOString() as ISO8601;
53
- const intervalEnd: ISO8601 = eventDate.toISOString() as ISO8601;
54
-
55
- const dataGroup = "sensor";
56
-
57
- const topic: UnsTopics = "enterprise/site/area/line/";
58
- const asset = resolveGeneratedAsset("asset");
59
- const assetDescription = ""; // customize manually
60
-
61
- mqttOutput.publishMqttMessage({
62
- topic,
63
- asset,
64
- assetDescription,
65
- objectType: GeneratedObjectTypes["energy-resource"],
66
- objectId: "main",
67
- attributes: [
68
- {
69
- attribute: GeneratedAttributesByType["energy-resource"]["current"],
70
- data: { dataGroup, time, value: numberValue, uom: GeneratedPhysicalMeasurements.Ampere, intervalStart, intervalEnd },
71
- },
72
- {
73
- attribute: GeneratedAttributes["voltage"],
74
- data: { dataGroup, time, value: sensorValue, uom: GeneratedPhysicalMeasurements.Volt, intervalStart, intervalEnd },
75
- },
76
- ],
77
- });
78
- }
79
- } catch (error) {
80
- const reason = error instanceof Error ? error : new Error(String(error));
81
- logger.error(`Error publishing message to MQTT: ${reason.message}`);
82
- throw reason;
83
- }
84
- });
1
+ /**
2
+ * Change this file according to your specifications and rename it to index.ts
3
+ */
4
+ import { UnsProxyProcess, ConfigFile, getLogger } from "@uns-kit/core";
5
+ import { registerAttributeDescriptions, registerObjectTypeDescriptions } from "@uns-kit/core/uns/uns-dictionary-registry.js";
6
+ import { GeneratedPhysicalMeasurements } from "../uns/uns-measurements.generated.js";
7
+ import { UnsTopics } from "@uns-kit/core/uns/uns-topics.js";
8
+ import {
9
+ GeneratedObjectTypes,
10
+ GeneratedAttributes,
11
+ GeneratedAttributesByType,
12
+ GeneratedObjectTypeDescriptions,
13
+ } from "../uns/uns-dictionary.generated.js";
14
+ import { GeneratedAssets, resolveGeneratedAsset } from "../uns/uns-assets.js";
15
+ import type { ISO8601 } from "@uns-kit/core/uns/uns-interfaces.js";
16
+
17
+ const logger = getLogger(import.meta.url);
18
+
19
+ /**
20
+ * Load the configuration from a file.
21
+ * On the server, this file is provided by the `uns-datahub-controller`.
22
+ * In the development environment, you are responsible for creating and maintaining this file and its contents.
23
+ */
24
+ const config = await ConfigFile.loadConfig();
25
+ registerObjectTypeDescriptions(GeneratedObjectTypeDescriptions);
26
+
27
+ /**
28
+ * Connect to input and output brokers
29
+ */
30
+ const unsProxyProcess = new UnsProxyProcess(config.infra.host!, {processName: config.uns.processName!});
31
+ const mqttInput = await unsProxyProcess.createUnsMqttProxy((config.input?.host)!, "templateUnsRttInput", config.uns.instanceMode!, config.uns.handover!, {
32
+ mqttSubToTopics: ["raw/#"],
33
+ });
34
+ const mqttOutput = await unsProxyProcess.createUnsMqttProxy((config.output?.host)!, "templateUnsRttOutput", config.uns.instanceMode!, config.uns.handover!, { publishThrottlingDelay: 1000});
35
+
36
+
37
+ /**
38
+ * Event listener for input events.
39
+ * Transform an input message and publish it with publishMqttMessage function.
40
+ */
41
+ mqttInput.event.on("input", async (event) => {
42
+ try {
43
+ if (event.topic === "raw/data") {
44
+ const values = event.message.split(",");
45
+ const [countRaw, timestampRaw, sensorRaw] = values;
46
+ if (!countRaw || !timestampRaw || !sensorRaw) {
47
+ logger.warn(`Skipping malformed raw/data payload: ${event.message}`);
48
+ return;
49
+ }
50
+ const numberValue = Number.parseFloat(countRaw);
51
+ const eventDate = new Date(Number.parseInt(timestampRaw, 10));
52
+ const sensorValue = Number.parseFloat(sensorRaw);
53
+ const time: ISO8601 = eventDate.toISOString() as ISO8601;
54
+ const intervalStart: ISO8601 = new Date(eventDate.getTime() - 1000).toISOString() as ISO8601;
55
+ const intervalEnd: ISO8601 = eventDate.toISOString() as ISO8601;
56
+
57
+ const dataGroup = "sensor";
58
+
59
+ const topic: UnsTopics = "enterprise/site/area/line/";
60
+ const asset = resolveGeneratedAsset("asset");
61
+ const assetDescription = ""; // customize manually
62
+
63
+ mqttOutput.publishMqttMessage({
64
+ topic,
65
+ asset,
66
+ assetDescription,
67
+ objectType: GeneratedObjectTypes["energy-resource"],
68
+ objectId: "main",
69
+ attributes: [
70
+ {
71
+ attribute: GeneratedAttributesByType["energy-resource"]["current"],
72
+ data: { dataGroup, time, value: numberValue, uom: GeneratedPhysicalMeasurements.Ampere, intervalStart, intervalEnd },
73
+ },
74
+ {
75
+ attribute: GeneratedAttributes["voltage"],
76
+ data: { dataGroup, time, value: sensorValue, uom: GeneratedPhysicalMeasurements.Volt, intervalStart, intervalEnd },
77
+ },
78
+ ],
79
+ });
80
+ }
81
+ } catch (error) {
82
+ const reason = error instanceof Error ? error : new Error(String(error));
83
+ logger.error(`Error publishing message to MQTT: ${reason.message}`);
84
+ throw reason;
85
+ }
86
+ });