@uns-kit/core 2.0.22 → 2.0.24
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.
- package/LICENSE +21 -21
- package/README.md +130 -130
- package/dist/base-path.js.map +1 -1
- package/dist/config/app-config.d.ts +140 -140
- package/dist/config/project.config.extension.js.map +1 -1
- package/dist/config-file.js.map +1 -1
- package/dist/graphql/schema.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +3 -3
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +88 -80
- package/dist/logger.js.map +1 -1
- package/dist/tools/auth/auth-client.js.map +1 -1
- package/dist/tools/auth/index.js.map +1 -1
- package/dist/tools/auth/secure-store.js.map +1 -1
- package/dist/tools/base-path.js.map +1 -1
- package/dist/tools/file-utils.js.map +1 -1
- package/dist/tools/generate-config-schema.js.map +1 -1
- package/dist/tools/generate-uns-dictionary.js +7 -7
- package/dist/tools/generate-uns-dictionary.js.map +1 -1
- package/dist/tools/generate-uns-measurements.js +7 -7
- package/dist/tools/generate-uns-measurements.js.map +1 -1
- package/dist/tools/generate-uns-reference.js +9 -9
- package/dist/tools/generate-uns-reference.js.map +1 -1
- package/dist/tools/pull-request.js.map +1 -1
- package/dist/tools/refresh-uns.js +50 -50
- package/dist/tools/refresh-uns.js.map +1 -1
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/sync-uns-schema.js +14 -14
- package/dist/tools/sync-uns-schema.js.map +1 -1
- package/dist/uns/handover-manager-event-emitter.js.map +1 -1
- package/dist/uns/handover-manager.js.map +1 -1
- package/dist/uns/process-config.js.map +1 -1
- package/dist/uns/process-name-service.js.map +1 -1
- package/dist/uns/status-monitor.js.map +1 -1
- package/dist/uns/uns-asset.js.map +1 -1
- package/dist/uns/uns-attributes.d.ts +2 -2
- package/dist/uns/uns-attributes.js.map +1 -1
- package/dist/uns/uns-dictionary-registry.js.map +1 -1
- package/dist/uns/uns-dictionary.generated.js.map +1 -1
- package/dist/uns/uns-event-emitter.js.map +1 -1
- package/dist/uns/uns-interfaces.js.map +1 -1
- package/dist/uns/uns-measurements.generated.js.map +1 -1
- package/dist/uns/uns-measurements.js.map +1 -1
- package/dist/uns/uns-object.js.map +1 -1
- package/dist/uns/uns-packet.js.map +1 -1
- package/dist/uns/uns-path.js.map +1 -1
- package/dist/uns/uns-proxy-process.js.map +1 -1
- package/dist/uns/uns-proxy.js.map +1 -1
- package/dist/uns/uns-tags.js.map +1 -1
- package/dist/uns/uns-topic-matcher.js.map +1 -1
- package/dist/uns/uns-topics.js.map +1 -1
- package/dist/uns-config/config-schema.js.map +1 -1
- package/dist/uns-config/host-placeholders.js.map +1 -1
- package/dist/uns-config/schema-tolls.js.map +1 -1
- package/dist/uns-config/schema-tools.js.map +1 -1
- package/dist/uns-config/secret-placeholders.js.map +1 -1
- package/dist/uns-config/secret-resolver.js.map +1 -1
- package/dist/uns-config/uns-core-schema.d.ts +3271 -3271
- package/dist/uns-config/uns-core-schema.js +76 -76
- package/dist/uns-config/uns-core-schema.js.map +1 -1
- package/dist/uns-grpc/uns-gateway-cli.js.map +1 -1
- package/dist/uns-grpc/uns-gateway-server.js.map +1 -1
- package/dist/uns-grpc/uns-gateway.proto +104 -104
- package/dist/uns-mqtt/mqtt-interfaces.js.map +1 -1
- package/dist/uns-mqtt/mqtt-proxy.d.ts +7 -0
- package/dist/uns-mqtt/mqtt-proxy.d.ts.map +1 -1
- package/dist/uns-mqtt/mqtt-proxy.js +70 -25
- package/dist/uns-mqtt/mqtt-proxy.js.map +1 -1
- package/dist/uns-mqtt/mqtt-topic-builder.js.map +1 -1
- package/dist/uns-mqtt/mqtt-worker-init.js.map +1 -1
- package/dist/uns-mqtt/mqtt-worker.js.map +1 -1
- package/dist/uns-mqtt/throttled-queue.js.map +1 -1
- package/dist/uns-mqtt/uns-mqtt-proxy.js.map +1 -1
- package/dist/uns-mqtt/ws-proxy.js.map +1 -1
- package/package.json +1 -1
- package/dist/app-config.d.ts.map +0 -1
- package/dist/app-config.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-uns-dictionary.js","sourceRoot":"","sources":["../../src/tools/generate-uns-dictionary.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAuBzD,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qCAAqC,CAAC,CAAC;AAE1F,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,KAAK,GAAG,aAAa,CAAC;IAC1B,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;gEAGkD,aAAa;;;;CAI5E,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAsB;IAChE,MAAM,SAAS,GAAY;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,aAAa;QAClC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,cAAc;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;KACxB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,KAAkC,EAAE,IAAY,EAAsB,EAAE;IAClG,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,WAAW,CAAC;IAChF,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,SAAS,SAAS,CAAC,WAA+B,EAAE,MAAc;IAChE,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,WAAW;SAC3B,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;SACxB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC;SACpC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,GAAG,MAAM,QAAQ,UAAU,KAAK,MAAM,OAAO,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAyB,EAAE,IAAY;IACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5H,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1H,MAAM,gBAAgB,GAA6B,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,gBAAgB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAC9C,CAAC,SAAS,EAAuB,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAC1F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,OAAoC,EAAE,EAAE,CAC5D,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,GAAG,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,kBAAkB,GAAG,CAAC,OAAoC,EAAE,EAAE,CAClE,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC;SAChG,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhB,MAAM,eAAe,GAAG,0CAA0C,YAAY,CAAC,iBAAiB,CAAC,eAAe,CAAC;IACjH,MAAM,mBAAmB,GAAG,wGAAwG,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAEhL,MAAM,cAAc,GAAG,yCAAyC,YAAY,CAAC,gBAAgB,CAAC,eAAe,CAAC;IAC9G,MAAM,kBAAkB,GAAG,sGAAsG,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAE5K,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,SAAS;YAC5B,MAAM,KAAK,GAAG,KAAK;iBAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpC,OAAO,GAAG,GAAG,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC;YAC3C,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,MAAM,UAAU,SAAS,KAAK,QAAQ,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,4CAA4C,sBAAsB,EAAE,0FAA0F,CAAC;IAE7L,OAAO,6EAA6E,eAAe,OAAO,mBAAmB,wQAAwQ,cAAc,OAAO,kBAAkB,OAAO,qBAAqB,sYAAsY,CAAC;AACj1B,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAAyB,EAAE,QAAgB,EAAE,IAAY;IACxF,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IACvE,CAAC,CAAC,KAAK,CAAC;AAEV,IAAI,iBAAiB,EAAE,CAAC;IACtB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * Generate a TypeScript dictionary of object types and attributes (with descriptions)\r\n * from a JSON file. The output is meant for IntelliSense and metadata enrichment\r\n * (e.g., emitting descriptions alongside topics). No GraphQL calls are performed.\r\n *\r\n * JSON shape (example):\r\n * {\r\n * \"objectTypes\": {\r\n * \"energy-resource\": { \"description\": \"Energy carriers (electricity/steam/gas)\" },\r\n * \"custom-type\": { \"description\": \"Tenant-specific thing\" }\r\n * },\r\n * \"attributes\": {\r\n * \"cumulative-active-energy-delivered\": { \"description\": \"kWh total\" },\r\n * \"status\": { \"description\": \"Generic status\" }\r\n * }\r\n * }\r\n */\r\nimport { readFile } from \"node:fs/promises\";\r\nimport path from \"node:path\";\r\nimport { pathToFileURL } from \"node:url\";\r\nimport { writeTextFileIfChanged } from \"./file-utils.js\";\r\n\r\ntype DictionaryEntry = {\r\n description?: string | null;\r\n descriptions?: Record<string, string | null | undefined>;\r\n [key: string]: unknown;\r\n};\r\ntype ObjectTypeEntry = DictionaryEntry & {\r\n attributes?: string[] | null;\r\n};\r\ntype UnsDictionary = {\r\n schemaVersion?: unknown;\r\n objectTypes?: Record<string, ObjectTypeEntry>;\r\n attributes?: Record<string, DictionaryEntry>;\r\n [key: string]: unknown;\r\n};\r\n\r\ntype CliArgs = {\r\n input: string;\r\n output: string;\r\n lang: string;\r\n};\r\n\r\nconst DEFAULT_INPUT = \"uns-dictionary.json\";\r\nconst DEFAULT_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-dictionary.generated.ts\");\r\n\r\nasync function main(): Promise<void> {\r\n const args = parseArgs(process.argv.slice(2));\r\n await generateUnsDictionary(args);\r\n}\r\n\r\nfunction parseArgs(argv: string[]): CliArgs {\r\n let input = DEFAULT_INPUT;\r\n let output = DEFAULT_OUTPUT;\r\n let lang = \"sl\";\r\n\r\n for (let i = 0; i < argv.length; i++) {\r\n const arg = argv[i];\r\n if (arg === \"--input\" && argv[i + 1]) {\r\n input = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--output\" && argv[i + 1]) {\r\n output = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--lang\" && argv[i + 1]) {\r\n lang = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--help\" || arg === \"-h\") {\r\n printHelp();\r\n process.exit(0);\r\n }\r\n throw new Error(`Unknown argument: ${arg}`);\r\n }\r\n\r\n return { input, output, lang };\r\n}\r\n\r\nfunction printHelp(): void {\r\n console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-dictionary.ts [options]\r\n\r\nOptions:\r\n --input <file> Path to uns-dictionary.json (default: ${DEFAULT_INPUT})\r\n --output <file> Path to generated TS file (default: src/uns/uns-dictionary.generated.ts)\r\n --lang <code> Preferred description language code (default: \"sl\")\r\n --help, -h Show this help\r\n`);\r\n}\r\n\r\nasync function readDictionaryFromJson(filePath: string): Promise<UnsDictionary> {\r\n const absolute = path.resolve(process.cwd(), filePath);\r\n const raw = await readFile(absolute, \"utf8\");\r\n return JSON.parse(raw) as UnsDictionary;\r\n}\r\n\r\nexport async function generateUnsDictionary(args: Partial<CliArgs>): Promise<void> {\r\n const effective: CliArgs = {\r\n input: args.input ?? DEFAULT_INPUT,\r\n output: args.output ?? DEFAULT_OUTPUT,\r\n lang: args.lang ?? \"sl\",\r\n };\r\n\r\n const dictionary = await readDictionaryFromJson(effective.input);\r\n const changed = await writeDictionaryTs(dictionary, effective.output, effective.lang);\r\n console.log(`Generated dictionary -> ${effective.output}${changed ? \"\" : \" (unchanged)\"}`);\r\n}\r\n\r\nconst resolveDescription = (entry: DictionaryEntry | undefined, lang: string): string | undefined => {\r\n if (!entry) return undefined;\r\n const byLang = entry.descriptions?.[lang];\r\n if (byLang && byLang.length > 0) return byLang;\r\n if (entry.description && entry.description.length > 0) return entry.description;\r\n return undefined;\r\n};\r\n\r\nfunction renderDoc(description: string | undefined, indent: string): string {\r\n if (!description) return \"\";\r\n const normalized = description\r\n .replaceAll(\"*/\", \"*\\\\/\")\r\n .split(/\\r?\\n/)\r\n .map((line) => `${indent} * ${line}`)\r\n .join(\"\\n\");\r\n return `${indent}/**\\n${normalized}\\n${indent} */\\n`;\r\n}\r\n\r\nexport function renderDictionaryTs(dictionary: UnsDictionary, lang: string): string {\r\n const objectTypeEntries = Object.entries(dictionary.objectTypes ?? {}).sort(([left], [right]) => left.localeCompare(right));\r\n const attributeEntries = Object.entries(dictionary.attributes ?? {}).sort(([left], [right]) => left.localeCompare(right));\r\n const attributesByType: Record<string, string[]> = {};\r\n for (const [name, entry] of objectTypeEntries) {\r\n if (Array.isArray(entry.attributes) && entry.attributes.length > 0) {\r\n attributesByType[name] = entry.attributes.filter(\r\n (attribute): attribute is string => typeof attribute === \"string\" && attribute.length > 0,\r\n );\r\n }\r\n }\r\n\r\n const renderRecord = (entries: [string, DictionaryEntry][]) =>\r\n entries\r\n .map(([name, entry]) => {\r\n const desc = resolveDescription(entry, lang);\r\n const doc = renderDoc(desc, \" \");\r\n return `${doc} \"${name}\": \"${name}\",`;\r\n })\r\n .join(\"\\n\");\r\n\r\n const renderDescriptions = (entries: [string, DictionaryEntry][]) =>\r\n entries\r\n .map(([name, value]) => ` \"${name}\": ${JSON.stringify(resolveDescription(value, lang) ?? \"\")},`)\r\n .join(\"\\n\");\r\n\r\n const objectTypeConst = `export const GeneratedObjectTypes = {\\n${renderRecord(objectTypeEntries)}\\n} as const;`;\r\n const objectTypeDescConst = `export const GeneratedObjectTypeDescriptions: Record<keyof typeof GeneratedObjectTypes, string> = {\\n${renderDescriptions(objectTypeEntries)}\\n};`;\r\n\r\n const attributeConst = `export const GeneratedAttributes = {\\n${renderRecord(attributeEntries)}\\n} as const;`;\r\n const attributeDescConst = `export const GeneratedAttributeDescriptions: Record<keyof typeof GeneratedAttributes, string> = {\\n${renderDescriptions(attributeEntries)}\\n};`;\r\n\r\n const renderAttributesByType = () => {\r\n const blocks: string[] = [];\r\n for (const [objectType, attrs] of Object.entries(attributesByType)) {\r\n if (!attrs.length) continue;\r\n const lines = attrs\r\n .map((attr) => {\r\n const desc = resolveDescription(dictionary.attributes?.[attr], lang);\r\n const doc = renderDoc(desc, \" \");\r\n return `${doc} \"${attr}\": \"${attr}\",`;\r\n })\r\n .join(\"\\n\");\r\n blocks.push(` \"${objectType}\": {\\n${lines}\\n },`);\r\n }\r\n return blocks.join(\"\\n\");\r\n };\r\n\r\n const attributesByTypeConst = `const GeneratedAttributesByTypeBase = {\\n${renderAttributesByType()}\\n} as const;\\n\\nexport const GeneratedAttributesByType = GeneratedAttributesByTypeBase;`;\r\n\r\n return `/* Auto-generated by generate-uns-dictionary.ts. Do not edit by hand. */\\n${objectTypeConst}\\n\\n${objectTypeDescConst}\\n\\nexport type GeneratedObjectTypeName = keyof typeof GeneratedObjectTypes;\\n\\nexport function getGeneratedObjectTypeDescription(name: string): string | undefined {\\n return (GeneratedObjectTypeDescriptions as Record<string, string | undefined>)[name];\\n}\\n\\n${attributeConst}\\n\\n${attributeDescConst}\\n\\n${attributesByTypeConst}\\n\\nexport type GeneratedAttributeName = keyof typeof GeneratedAttributes;\\n\\nexport type GeneratedAttributesFor<T extends keyof typeof GeneratedAttributesByType> = keyof typeof GeneratedAttributesByType[T];\\n\\nexport function getGeneratedAttributeDescription(name: string): string | undefined {\\n return (GeneratedAttributeDescriptions as Record<string, string | undefined>)[name];\\n}\\n`;\r\n}\r\n\r\nasync function writeDictionaryTs(dictionary: UnsDictionary, filePath: string, lang: string): Promise<boolean> {\r\n const content = renderDictionaryTs(dictionary, lang);\r\n return writeTextFileIfChanged(filePath, content);\r\n}\r\n\r\nconst isDirectExecution = process.argv[1]\r\n ? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href\r\n : false;\r\n\r\nif (isDirectExecution) {\r\n main().catch((error) => {\r\n console.error(\"Failed to generate UNS dictionary:\", error);\r\n process.exitCode = 1;\r\n });\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"generate-uns-dictionary.js","sourceRoot":"","sources":["../../src/tools/generate-uns-dictionary.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Generate a TypeScript dictionary of object types and attributes (with descriptions)\n * from a JSON file. The output is meant for IntelliSense and metadata enrichment\n * (e.g., emitting descriptions alongside topics). No GraphQL calls are performed.\n *\n * JSON shape (example):\n * {\n * \"objectTypes\": {\n * \"energy-resource\": { \"description\": \"Energy carriers (electricity/steam/gas)\" },\n * \"custom-type\": { \"description\": \"Tenant-specific thing\" }\n * },\n * \"attributes\": {\n * \"cumulative-active-energy-delivered\": { \"description\": \"kWh total\" },\n * \"status\": { \"description\": \"Generic status\" }\n * }\n * }\n */\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { writeTextFileIfChanged } from \"./file-utils.js\";\n\ntype DictionaryEntry = {\n description?: string | null;\n descriptions?: Record<string, string | null | undefined>;\n [key: string]: unknown;\n};\ntype ObjectTypeEntry = DictionaryEntry & {\n attributes?: string[] | null;\n};\ntype UnsDictionary = {\n schemaVersion?: unknown;\n objectTypes?: Record<string, ObjectTypeEntry>;\n attributes?: Record<string, DictionaryEntry>;\n [key: string]: unknown;\n};\n\ntype CliArgs = {\n input: string;\n output: string;\n lang: string;\n};\n\nconst DEFAULT_INPUT = \"uns-dictionary.json\";\nconst DEFAULT_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-dictionary.generated.ts\");\n\nasync function main(): Promise<void> {\n const args = parseArgs(process.argv.slice(2));\n await generateUnsDictionary(args);\n}\n\nfunction parseArgs(argv: string[]): CliArgs {\n let input = DEFAULT_INPUT;\n let output = DEFAULT_OUTPUT;\n let lang = \"sl\";\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"--input\" && argv[i + 1]) {\n input = argv[++i];\n continue;\n }\n if (arg === \"--output\" && argv[i + 1]) {\n output = argv[++i];\n continue;\n }\n if (arg === \"--lang\" && argv[i + 1]) {\n lang = argv[++i];\n continue;\n }\n if (arg === \"--help\" || arg === \"-h\") {\n printHelp();\n process.exit(0);\n }\n throw new Error(`Unknown argument: ${arg}`);\n }\n\n return { input, output, lang };\n}\n\nfunction printHelp(): void {\n console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-dictionary.ts [options]\n\nOptions:\n --input <file> Path to uns-dictionary.json (default: ${DEFAULT_INPUT})\n --output <file> Path to generated TS file (default: src/uns/uns-dictionary.generated.ts)\n --lang <code> Preferred description language code (default: \"sl\")\n --help, -h Show this help\n`);\n}\n\nasync function readDictionaryFromJson(filePath: string): Promise<UnsDictionary> {\n const absolute = path.resolve(process.cwd(), filePath);\n const raw = await readFile(absolute, \"utf8\");\n return JSON.parse(raw) as UnsDictionary;\n}\n\nexport async function generateUnsDictionary(args: Partial<CliArgs>): Promise<void> {\n const effective: CliArgs = {\n input: args.input ?? DEFAULT_INPUT,\n output: args.output ?? DEFAULT_OUTPUT,\n lang: args.lang ?? \"sl\",\n };\n\n const dictionary = await readDictionaryFromJson(effective.input);\n const changed = await writeDictionaryTs(dictionary, effective.output, effective.lang);\n console.log(`Generated dictionary -> ${effective.output}${changed ? \"\" : \" (unchanged)\"}`);\n}\n\nconst resolveDescription = (entry: DictionaryEntry | undefined, lang: string): string | undefined => {\n if (!entry) return undefined;\n const byLang = entry.descriptions?.[lang];\n if (byLang && byLang.length > 0) return byLang;\n if (entry.description && entry.description.length > 0) return entry.description;\n return undefined;\n};\n\nfunction renderDoc(description: string | undefined, indent: string): string {\n if (!description) return \"\";\n const normalized = description\n .replaceAll(\"*/\", \"*\\\\/\")\n .split(/\\r?\\n/)\n .map((line) => `${indent} * ${line}`)\n .join(\"\\n\");\n return `${indent}/**\\n${normalized}\\n${indent} */\\n`;\n}\n\nexport function renderDictionaryTs(dictionary: UnsDictionary, lang: string): string {\n const objectTypeEntries = Object.entries(dictionary.objectTypes ?? {}).sort(([left], [right]) => left.localeCompare(right));\n const attributeEntries = Object.entries(dictionary.attributes ?? {}).sort(([left], [right]) => left.localeCompare(right));\n const attributesByType: Record<string, string[]> = {};\n for (const [name, entry] of objectTypeEntries) {\n if (Array.isArray(entry.attributes) && entry.attributes.length > 0) {\n attributesByType[name] = entry.attributes.filter(\n (attribute): attribute is string => typeof attribute === \"string\" && attribute.length > 0,\n );\n }\n }\n\n const renderRecord = (entries: [string, DictionaryEntry][]) =>\n entries\n .map(([name, entry]) => {\n const desc = resolveDescription(entry, lang);\n const doc = renderDoc(desc, \" \");\n return `${doc} \"${name}\": \"${name}\",`;\n })\n .join(\"\\n\");\n\n const renderDescriptions = (entries: [string, DictionaryEntry][]) =>\n entries\n .map(([name, value]) => ` \"${name}\": ${JSON.stringify(resolveDescription(value, lang) ?? \"\")},`)\n .join(\"\\n\");\n\n const objectTypeConst = `export const GeneratedObjectTypes = {\\n${renderRecord(objectTypeEntries)}\\n} as const;`;\n const objectTypeDescConst = `export const GeneratedObjectTypeDescriptions: Record<keyof typeof GeneratedObjectTypes, string> = {\\n${renderDescriptions(objectTypeEntries)}\\n};`;\n\n const attributeConst = `export const GeneratedAttributes = {\\n${renderRecord(attributeEntries)}\\n} as const;`;\n const attributeDescConst = `export const GeneratedAttributeDescriptions: Record<keyof typeof GeneratedAttributes, string> = {\\n${renderDescriptions(attributeEntries)}\\n};`;\n\n const renderAttributesByType = () => {\n const blocks: string[] = [];\n for (const [objectType, attrs] of Object.entries(attributesByType)) {\n if (!attrs.length) continue;\n const lines = attrs\n .map((attr) => {\n const desc = resolveDescription(dictionary.attributes?.[attr], lang);\n const doc = renderDoc(desc, \" \");\n return `${doc} \"${attr}\": \"${attr}\",`;\n })\n .join(\"\\n\");\n blocks.push(` \"${objectType}\": {\\n${lines}\\n },`);\n }\n return blocks.join(\"\\n\");\n };\n\n const attributesByTypeConst = `const GeneratedAttributesByTypeBase = {\\n${renderAttributesByType()}\\n} as const;\\n\\nexport const GeneratedAttributesByType = GeneratedAttributesByTypeBase;`;\n\n return `/* Auto-generated by generate-uns-dictionary.ts. Do not edit by hand. */\\n${objectTypeConst}\\n\\n${objectTypeDescConst}\\n\\nexport type GeneratedObjectTypeName = keyof typeof GeneratedObjectTypes;\\n\\nexport function getGeneratedObjectTypeDescription(name: string): string | undefined {\\n return (GeneratedObjectTypeDescriptions as Record<string, string | undefined>)[name];\\n}\\n\\n${attributeConst}\\n\\n${attributeDescConst}\\n\\n${attributesByTypeConst}\\n\\nexport type GeneratedAttributeName = keyof typeof GeneratedAttributes;\\n\\nexport type GeneratedAttributesFor<T extends keyof typeof GeneratedAttributesByType> = keyof typeof GeneratedAttributesByType[T];\\n\\nexport function getGeneratedAttributeDescription(name: string): string | undefined {\\n return (GeneratedAttributeDescriptions as Record<string, string | undefined>)[name];\\n}\\n`;\n}\n\nasync function writeDictionaryTs(dictionary: UnsDictionary, filePath: string, lang: string): Promise<boolean> {\n const content = renderDictionaryTs(dictionary, lang);\n return writeTextFileIfChanged(filePath, content);\n}\n\nconst isDirectExecution = process.argv[1]\n ? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href\n : false;\n\nif (isDirectExecution) {\n main().catch((error) => {\n console.error(\"Failed to generate UNS dictionary:\", error);\n process.exitCode = 1;\n });\n}\n"]}
|
|
@@ -53,13 +53,13 @@ function parseArgs(argv) {
|
|
|
53
53
|
return { input, output, lang };
|
|
54
54
|
}
|
|
55
55
|
function printHelp() {
|
|
56
|
-
console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-measurements.ts [options]
|
|
57
|
-
|
|
58
|
-
Options:
|
|
59
|
-
--input <file> Path to uns-measurements.json (default: ${DEFAULT_INPUT})
|
|
60
|
-
--output <file> Path to generated TS file (default: src/uns/uns-measurements.generated.ts)
|
|
61
|
-
--lang <code> Preferred description language (default: "sl")
|
|
62
|
-
--help, -h Show this help
|
|
56
|
+
console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-measurements.ts [options]
|
|
57
|
+
|
|
58
|
+
Options:
|
|
59
|
+
--input <file> Path to uns-measurements.json (default: ${DEFAULT_INPUT})
|
|
60
|
+
--output <file> Path to generated TS file (default: src/uns/uns-measurements.generated.ts)
|
|
61
|
+
--lang <code> Preferred description language (default: "sl")
|
|
62
|
+
--help, -h Show this help
|
|
63
63
|
`);
|
|
64
64
|
}
|
|
65
65
|
async function loadJson(filePath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-uns-measurements.js","sourceRoot":"","sources":["../../src/tools/generate-uns-measurements.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\r\n/**\r\n * Generate a TypeScript helper for measurements from a JSON file.\r\n *\r\n * JSON shape (example):\r\n * {\r\n * \"physical\": {\r\n * \"None\": { \"value\": \"\", \"description\": \"Brez enote\" },\r\n * \"Celsius\": { \"value\": \"°C\", \"description\": \"Stopinje Celzija\" }\r\n * },\r\n * \"dataSize\": {\r\n * \"Bit\": { \"value\": \"bit\", \"description\": \"Bit\" }\r\n * },\r\n * \"counter\": {\r\n * \"Kilo\": { \"value\": \"k\", \"description\": \"Kilo\" }\r\n * }\r\n * }\r\n */\r\nimport { readFile } from \"node:fs/promises\";\r\nimport path from \"node:path\";\r\nimport { pathToFileURL } from \"node:url\";\r\nimport { writeTextFileIfChanged } from \"./file-utils.js\";\r\n\r\ntype Entry = {\r\n value: string;\r\n description?: string | null;\r\n descriptions?: Record<string, string | null | undefined>;\r\n [key: string]: unknown;\r\n};\r\ntype MeasurementsJson = {\r\n schemaVersion?: unknown;\r\n physical?: Record<string, Entry>;\r\n dataSize?: Record<string, Entry>;\r\n counter?: Record<string, Entry>;\r\n [category: string]: unknown;\r\n};\r\n\r\nconst DEFAULT_INPUT = \"uns-measurements.json\";\r\nconst DEFAULT_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-measurements.generated.ts\");\r\n\r\nasync function main() {\r\n const { input, output, lang } = parseArgs(process.argv.slice(2));\r\n await generateUnsMeasurements({ input, output, lang });\r\n}\r\n\r\nfunction parseArgs(argv: string[]) {\r\n let input = DEFAULT_INPUT;\r\n let output = DEFAULT_OUTPUT;\r\n let lang = \"sl\";\r\n\r\n for (let i = 0; i < argv.length; i++) {\r\n const arg = argv[i];\r\n if (arg === \"--input\" && argv[i + 1]) {\r\n input = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--output\" && argv[i + 1]) {\r\n output = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--lang\" && argv[i + 1]) {\r\n lang = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--help\" || arg === \"-h\") {\r\n printHelp();\r\n process.exit(0);\r\n }\r\n throw new Error(`Unknown argument: ${arg}`);\r\n }\r\n\r\n return { input, output, lang };\r\n}\r\n\r\nfunction printHelp(): void {\r\n console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-measurements.ts [options]\r\n\r\nOptions:\r\n --input <file> Path to uns-measurements.json (default: ${DEFAULT_INPUT})\r\n --output <file> Path to generated TS file (default: src/uns/uns-measurements.generated.ts)\r\n --lang <code> Preferred description language (default: \"sl\")\r\n --help, -h Show this help\r\n`);\r\n}\r\n\r\nasync function loadJson(filePath: string): Promise<MeasurementsJson> {\r\n const abs = path.resolve(process.cwd(), filePath);\r\n const raw = await readFile(abs, \"utf8\");\r\n return JSON.parse(raw) as MeasurementsJson;\r\n}\r\n\r\nconst resolveDesc = (entry: Entry | undefined, lang: string): string | undefined => {\r\n if (!entry) return undefined;\r\n const byLang = entry.descriptions?.[lang];\r\n if (byLang && byLang.length > 0) return byLang;\r\n if (entry.description && entry.description.length > 0) return entry.description;\r\n return undefined;\r\n};\r\n\r\nfunction renderSection(name: string, entries: Record<string, Entry> | undefined, lang: string): string {\r\n if (!entries) return `export const ${name} = {} as const;`;\r\n const lines = Object.entries(entries)\r\n .sort(([left], [right]) => left.localeCompare(right))\r\n .map(([key, entry]) => {\r\n const desc = resolveDesc(entry, lang);\r\n const doc = renderDoc(desc, \" \");\r\n return `${doc} \"${key}\": \"${entry.value}\",`;\r\n })\r\n .join(\"\\n\");\r\n return `export const ${name} = {\\n${lines}\\n} as const;`;\r\n}\r\n\r\nfunction renderDoc(description: string | undefined, indent: string): string {\r\n if (!description) return \"\";\r\n const normalized = description\r\n .replaceAll(\"*/\", \"*\\\\/\")\r\n .split(/\\r?\\n/)\r\n .map((line) => `${indent} * ${line}`)\r\n .join(\"\\n\");\r\n return `${indent}/**\\n${normalized}\\n${indent} */\\n`;\r\n}\r\n\r\nexport function renderMeasurementsTs(json: MeasurementsJson, lang: string): string {\r\n const physical = renderSection(\"GeneratedPhysicalMeasurements\", json.physical, lang);\r\n const dataSize = renderSection(\"GeneratedDataSizeMeasurements\", json.dataSize, lang);\r\n const counter = renderSection(\"GeneratedCounterMeasurements\", json.counter, lang);\r\n\r\n return `/* Auto-generated by generate-uns-measurements.ts. Do not edit by hand. */\\n${physical}\\n\\n${dataSize}\\n\\n${counter}\\n\\nexport type GeneratedPhysicalMeasurement = typeof GeneratedPhysicalMeasurements[keyof typeof GeneratedPhysicalMeasurements];\\nexport type GeneratedDataSizeMeasurement = typeof GeneratedDataSizeMeasurements[keyof typeof GeneratedDataSizeMeasurements];\\nexport type GeneratedCounterMeasurement = typeof GeneratedCounterMeasurements[keyof typeof GeneratedCounterMeasurements];\\nexport type GeneratedMeasurementUnit = GeneratedPhysicalMeasurement | GeneratedDataSizeMeasurement | GeneratedCounterMeasurement | (string & {});\\n`;\r\n}\r\n\r\nexport async function generateUnsMeasurements(\r\n args: Partial<{ input: string; output: string; lang: string }>,\r\n): Promise<void> {\r\n const input = args.input ?? DEFAULT_INPUT;\r\n const output = args.output ?? DEFAULT_OUTPUT;\r\n const lang = args.lang ?? \"sl\";\r\n\r\n const json = await loadJson(input);\r\n const content = renderMeasurementsTs(json, lang);\r\n const changed = await writeTextFileIfChanged(output, content);\r\n console.log(`Generated measurements -> ${output}${changed ? \"\" : \" (unchanged)\"}`);\r\n}\r\n\r\nconst isDirectExecution = process.argv[1]\r\n ? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href\r\n : false;\r\n\r\nif (isDirectExecution) {\r\n main().catch((err) => {\r\n console.error(\"Failed to generate measurements:\", err);\r\n process.exitCode = 1;\r\n });\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"generate-uns-measurements.js","sourceRoot":"","sources":["../../src/tools/generate-uns-measurements.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Generate a TypeScript helper for measurements from a JSON file.\n *\n * JSON shape (example):\n * {\n * \"physical\": {\n * \"None\": { \"value\": \"\", \"description\": \"Brez enote\" },\n * \"Celsius\": { \"value\": \"°C\", \"description\": \"Stopinje Celzija\" }\n * },\n * \"dataSize\": {\n * \"Bit\": { \"value\": \"bit\", \"description\": \"Bit\" }\n * },\n * \"counter\": {\n * \"Kilo\": { \"value\": \"k\", \"description\": \"Kilo\" }\n * }\n * }\n */\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { writeTextFileIfChanged } from \"./file-utils.js\";\n\ntype Entry = {\n value: string;\n description?: string | null;\n descriptions?: Record<string, string | null | undefined>;\n [key: string]: unknown;\n};\ntype MeasurementsJson = {\n schemaVersion?: unknown;\n physical?: Record<string, Entry>;\n dataSize?: Record<string, Entry>;\n counter?: Record<string, Entry>;\n [category: string]: unknown;\n};\n\nconst DEFAULT_INPUT = \"uns-measurements.json\";\nconst DEFAULT_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-measurements.generated.ts\");\n\nasync function main() {\n const { input, output, lang } = parseArgs(process.argv.slice(2));\n await generateUnsMeasurements({ input, output, lang });\n}\n\nfunction parseArgs(argv: string[]) {\n let input = DEFAULT_INPUT;\n let output = DEFAULT_OUTPUT;\n let lang = \"sl\";\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"--input\" && argv[i + 1]) {\n input = argv[++i];\n continue;\n }\n if (arg === \"--output\" && argv[i + 1]) {\n output = argv[++i];\n continue;\n }\n if (arg === \"--lang\" && argv[i + 1]) {\n lang = argv[++i];\n continue;\n }\n if (arg === \"--help\" || arg === \"-h\") {\n printHelp();\n process.exit(0);\n }\n throw new Error(`Unknown argument: ${arg}`);\n }\n\n return { input, output, lang };\n}\n\nfunction printHelp(): void {\n console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-measurements.ts [options]\n\nOptions:\n --input <file> Path to uns-measurements.json (default: ${DEFAULT_INPUT})\n --output <file> Path to generated TS file (default: src/uns/uns-measurements.generated.ts)\n --lang <code> Preferred description language (default: \"sl\")\n --help, -h Show this help\n`);\n}\n\nasync function loadJson(filePath: string): Promise<MeasurementsJson> {\n const abs = path.resolve(process.cwd(), filePath);\n const raw = await readFile(abs, \"utf8\");\n return JSON.parse(raw) as MeasurementsJson;\n}\n\nconst resolveDesc = (entry: Entry | undefined, lang: string): string | undefined => {\n if (!entry) return undefined;\n const byLang = entry.descriptions?.[lang];\n if (byLang && byLang.length > 0) return byLang;\n if (entry.description && entry.description.length > 0) return entry.description;\n return undefined;\n};\n\nfunction renderSection(name: string, entries: Record<string, Entry> | undefined, lang: string): string {\n if (!entries) return `export const ${name} = {} as const;`;\n const lines = Object.entries(entries)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => {\n const desc = resolveDesc(entry, lang);\n const doc = renderDoc(desc, \" \");\n return `${doc} \"${key}\": \"${entry.value}\",`;\n })\n .join(\"\\n\");\n return `export const ${name} = {\\n${lines}\\n} as const;`;\n}\n\nfunction renderDoc(description: string | undefined, indent: string): string {\n if (!description) return \"\";\n const normalized = description\n .replaceAll(\"*/\", \"*\\\\/\")\n .split(/\\r?\\n/)\n .map((line) => `${indent} * ${line}`)\n .join(\"\\n\");\n return `${indent}/**\\n${normalized}\\n${indent} */\\n`;\n}\n\nexport function renderMeasurementsTs(json: MeasurementsJson, lang: string): string {\n const physical = renderSection(\"GeneratedPhysicalMeasurements\", json.physical, lang);\n const dataSize = renderSection(\"GeneratedDataSizeMeasurements\", json.dataSize, lang);\n const counter = renderSection(\"GeneratedCounterMeasurements\", json.counter, lang);\n\n return `/* Auto-generated by generate-uns-measurements.ts. Do not edit by hand. */\\n${physical}\\n\\n${dataSize}\\n\\n${counter}\\n\\nexport type GeneratedPhysicalMeasurement = typeof GeneratedPhysicalMeasurements[keyof typeof GeneratedPhysicalMeasurements];\\nexport type GeneratedDataSizeMeasurement = typeof GeneratedDataSizeMeasurements[keyof typeof GeneratedDataSizeMeasurements];\\nexport type GeneratedCounterMeasurement = typeof GeneratedCounterMeasurements[keyof typeof GeneratedCounterMeasurements];\\nexport type GeneratedMeasurementUnit = GeneratedPhysicalMeasurement | GeneratedDataSizeMeasurement | GeneratedCounterMeasurement | (string & {});\\n`;\n}\n\nexport async function generateUnsMeasurements(\n args: Partial<{ input: string; output: string; lang: string }>,\n): Promise<void> {\n const input = args.input ?? DEFAULT_INPUT;\n const output = args.output ?? DEFAULT_OUTPUT;\n const lang = args.lang ?? \"sl\";\n\n const json = await loadJson(input);\n const content = renderMeasurementsTs(json, lang);\n const changed = await writeTextFileIfChanged(output, content);\n console.log(`Generated measurements -> ${output}${changed ? \"\" : \" (unchanged)\"}`);\n}\n\nconst isDirectExecution = process.argv[1]\n ? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href\n : false;\n\nif (isDirectExecution) {\n main().catch((err) => {\n console.error(\"Failed to generate measurements:\", err);\n process.exitCode = 1;\n });\n}\n"]}
|
|
@@ -63,15 +63,15 @@ function parseArgs(argv) {
|
|
|
63
63
|
return { dictionary, dictionaryOutput, measurements, measurementsOutput, lang };
|
|
64
64
|
}
|
|
65
65
|
function printHelp() {
|
|
66
|
-
console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-reference.ts [options]
|
|
67
|
-
|
|
68
|
-
Options:
|
|
69
|
-
--dictionary <file> Path to uns-dictionary.json (default: ${DEFAULT_DICT_INPUT})
|
|
70
|
-
--dictionary-output <file> Path to generated dictionary TS (default: ${DEFAULT_DICT_OUTPUT})
|
|
71
|
-
--measurements <file> Path to uns-measurements.json (default: ${DEFAULT_MEAS_INPUT})
|
|
72
|
-
--measurements-output <file> Path to generated measurements TS (default: ${DEFAULT_MEAS_OUTPUT})
|
|
73
|
-
--lang <code> Preferred description language (default: "sl")
|
|
74
|
-
--help, -h Show this help
|
|
66
|
+
console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-reference.ts [options]
|
|
67
|
+
|
|
68
|
+
Options:
|
|
69
|
+
--dictionary <file> Path to uns-dictionary.json (default: ${DEFAULT_DICT_INPUT})
|
|
70
|
+
--dictionary-output <file> Path to generated dictionary TS (default: ${DEFAULT_DICT_OUTPUT})
|
|
71
|
+
--measurements <file> Path to uns-measurements.json (default: ${DEFAULT_MEAS_INPUT})
|
|
72
|
+
--measurements-output <file> Path to generated measurements TS (default: ${DEFAULT_MEAS_OUTPUT})
|
|
73
|
+
--lang <code> Preferred description language (default: "sl")
|
|
74
|
+
--help, -h Show this help
|
|
75
75
|
`);
|
|
76
76
|
}
|
|
77
77
|
const isDirectExecution = process.argv[1]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-uns-reference.js","sourceRoot":"","sources":["../../src/tools/generate-uns-reference.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\
|
|
1
|
+
{"version":3,"file":"generate-uns-reference.js","sourceRoot":"","sources":["../../src/tools/generate-uns-reference.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAUzE,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qCAAqC,CAAC,CAAC;AAC/F,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AACnD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uCAAuC,CAAC,CAAC;AAEjG,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,qBAAqB,CAAC;QAC1B,KAAK,EAAE,IAAI,CAAC,UAAU;QACtB,MAAM,EAAE,IAAI,CAAC,gBAAgB;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;IAEH,MAAM,uBAAuB,CAAC;QAC5B,KAAK,EAAE,IAAI,CAAC,YAAY;QACxB,MAAM,EAAE,IAAI,CAAC,kBAAkB;QAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACT,sCAAsC,IAAI,CAAC,gBAAgB,mBAAmB,IAAI,CAAC,kBAAkB,EAAE,CACxG,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,UAAU,GAAG,kBAAkB,CAAC;IACpC,IAAI,gBAAgB,GAAG,mBAAmB,CAAC;IAC3C,IAAI,YAAY,GAAG,kBAAkB,CAAC;IACtC,IAAI,kBAAkB,GAAG,mBAAmB,CAAC;IAC7C,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,cAAc,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1C,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,qBAAqB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjD,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,gBAAgB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5C,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,uBAAuB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;wEAG0D,kBAAkB;4EACd,mBAAmB;0EACrB,kBAAkB;8EACd,mBAAmB;;;CAGhG,CAAC,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IACvE,CAAC,CAAC,KAAK,CAAC;AAEV,IAAI,iBAAiB,EAAE,CAAC;IACtB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * Generate both UNS dictionary and measurements in one go.\n * This is a small wrapper over generate-uns-dictionary.ts and\n * generate-uns-measurements.ts to make project setup simpler.\n */\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { generateUnsDictionary } from \"./generate-uns-dictionary.js\";\nimport { generateUnsMeasurements } from \"./generate-uns-measurements.js\";\n\ntype CliArgs = {\n dictionary: string;\n dictionaryOutput: string;\n measurements: string;\n measurementsOutput: string;\n lang: string;\n};\n\nconst DEFAULT_DICT_INPUT = \"uns-dictionary.json\";\nconst DEFAULT_DICT_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-dictionary.generated.ts\");\nconst DEFAULT_MEAS_INPUT = \"uns-measurements.json\";\nconst DEFAULT_MEAS_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-measurements.generated.ts\");\n\nasync function main(): Promise<void> {\n const args = parseArgs(process.argv.slice(2));\n\n await generateUnsDictionary({\n input: args.dictionary,\n output: args.dictionaryOutput,\n lang: args.lang,\n });\n\n await generateUnsMeasurements({\n input: args.measurements,\n output: args.measurementsOutput,\n lang: args.lang,\n });\n\n console.log(\n `Generated reference -> dictionary: ${args.dictionaryOutput}, measurements: ${args.measurementsOutput}`,\n );\n}\n\nfunction parseArgs(argv: string[]): CliArgs {\n let dictionary = DEFAULT_DICT_INPUT;\n let dictionaryOutput = DEFAULT_DICT_OUTPUT;\n let measurements = DEFAULT_MEAS_INPUT;\n let measurementsOutput = DEFAULT_MEAS_OUTPUT;\n let lang = \"sl\";\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg === \"--dictionary\" && argv[i + 1]) {\n dictionary = argv[++i];\n continue;\n }\n if (arg === \"--dictionary-output\" && argv[i + 1]) {\n dictionaryOutput = argv[++i];\n continue;\n }\n if (arg === \"--measurements\" && argv[i + 1]) {\n measurements = argv[++i];\n continue;\n }\n if (arg === \"--measurements-output\" && argv[i + 1]) {\n measurementsOutput = argv[++i];\n continue;\n }\n if (arg === \"--lang\" && argv[i + 1]) {\n lang = argv[++i];\n continue;\n }\n if (arg === \"--help\" || arg === \"-h\") {\n printHelp();\n process.exit(0);\n }\n throw new Error(`Unknown argument: ${arg}`);\n }\n\n return { dictionary, dictionaryOutput, measurements, measurementsOutput, lang };\n}\n\nfunction printHelp(): void {\n console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-reference.ts [options]\n\nOptions:\n --dictionary <file> Path to uns-dictionary.json (default: ${DEFAULT_DICT_INPUT})\n --dictionary-output <file> Path to generated dictionary TS (default: ${DEFAULT_DICT_OUTPUT})\n --measurements <file> Path to uns-measurements.json (default: ${DEFAULT_MEAS_INPUT})\n --measurements-output <file> Path to generated measurements TS (default: ${DEFAULT_MEAS_OUTPUT})\n --lang <code> Preferred description language (default: \"sl\")\n --help, -h Show this help\n`);\n}\n\nconst isDirectExecution = process.argv[1]\n ? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href\n : false;\n\nif (isDirectExecution) {\n main().catch((err) => {\n console.error(\"Failed to generate UNS reference:\", err);\n process.exitCode = 1;\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull-request.js","sourceRoot":"","sources":["../../src/tools/pull-request.ts"],"names":[],"mappings":"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","sourcesContent":["import * as azdev from \"azure-devops-node-api\";\r\nimport * as ga from \"azure-devops-node-api/GitApi.js\";\r\nimport { GitPullRequest } from \"azure-devops-node-api/interfaces/GitInterfaces.js\";\r\nimport { GitRepository } from \"azure-devops-node-api/interfaces/TfvcInterfaces.js\";\r\nimport chalk from \"chalk\";\r\nimport { execSync } from \"child_process\";\r\nimport fs from \"fs\";\r\nimport { readFile } from \"fs/promises\";\r\nimport { Buffer } from \"node:buffer\";\r\nimport readline from \"node:readline\";\r\nimport * as path from \"path\";\r\nimport * as prettier from \"prettier\";\r\nimport { CleanOptions, SimpleGit, simpleGit } from \"simple-git\";\r\nimport util from \"util\";\r\n\r\nimport { ConfigFile } from \"../config-file.js\";\r\nimport { basePath } from \"../base-path.js\";\r\n\r\nprocess.env.GIT_TERMINAL_PROMPT = process.env.GIT_TERMINAL_PROMPT ?? \"0\";\r\nconst git: SimpleGit = simpleGit(\"./\").clean(CleanOptions.FORCE);\r\nconst packageJsonPath = path.join(basePath, \"package.json\");\r\n\r\nlet azureOrganization = \"\";\r\nlet azureProject = \"\";\r\ntry {\r\n const appConfig = ConfigFile.loadRawConfig();\r\n azureOrganization = appConfig.devops?.organization?.trim() || azureOrganization;\r\n azureProject = appConfig.devops?.project?.trim() || azureProject;\r\n} catch (error) {\r\n // Use default organization when config.json is missing\r\n}\r\n\r\nif (!azureOrganization) {\r\n throw new Error(\r\n \"Azure DevOps organization is not configured. Please set devops.organization in config.json (run `uns-kit configure-devops`).\",\r\n );\r\n}\r\n\r\nif (!azureProject) {\r\n throw new Error(\r\n \"Azure DevOps project is not configured. Please set devops.project in config.json (run `uns-kit configure-devops`).\",\r\n );\r\n}\r\n\r\nconst orgUrl = `https://${azureOrganization}@dev.azure.com/${azureOrganization}`;\r\nconst orgBaseUrl = `https://dev.azure.com/${azureOrganization}`;\r\nconst tokensUrl = `${orgBaseUrl}/_usersSettings/tokens`;\r\n\r\nconst packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\"));\r\nconst repoName: string = packageJson.name;\r\nconst version: string = packageJson.version;\r\n\r\nconst branches = await git.branchLocal();\r\nconst currentBranch = branches.current;\r\n\r\nconst gitStatus = await git.status();\r\n\r\nlet token: string = \"\";\r\nlet gitApi: ga.IGitApi | undefined;\r\nlet gitWithAuth: SimpleGit | undefined;\r\n\r\ntype CliArgs = {\r\n version?: string;\r\n title?: string;\r\n description?: string;\r\n help?: boolean;\r\n};\r\n\r\ntype Prompter = {\r\n question: (prompt: string) => Promise<string>;\r\n close: () => void;\r\n};\r\n\r\nfunction parseCliArgs(argv = process.argv.slice(2)): CliArgs {\r\n const { values } = util.parseArgs({\r\n args: argv,\r\n options: {\r\n version: { type: \"string\" },\r\n title: { type: \"string\" },\r\n description: { type: \"string\" },\r\n help: { type: \"boolean\" },\r\n },\r\n strict: false,\r\n allowPositionals: true,\r\n });\r\n\r\n const versionArg = typeof values.version === \"string\" ? values.version.trim() : \"\";\r\n const titleArg = typeof values.title === \"string\" ? values.title.trim() : \"\";\r\n const descriptionArg = typeof values.description === \"string\" ? values.description.trim() : \"\";\r\n\r\n return {\r\n version: versionArg || undefined,\r\n title: titleArg || undefined,\r\n description: descriptionArg || undefined,\r\n help: values.help === true,\r\n };\r\n}\r\n\r\nfunction formatUsage(): string {\r\n return [\r\n \"Usage: pull-request [--version <version>] [--title <title>] [--description <description>]\",\r\n \"\",\r\n \"Non-interactive mode (stdin is not a TTY):\",\r\n \" You must provide --version, --title, and --description (and set AZURE_PAT).\",\r\n \"\",\r\n \"Environment:\",\r\n \" AZURE_PAT Azure DevOps Personal Access Token (PAT)\",\r\n ].join(\"\\n\");\r\n}\r\n\r\nfunction createPrompter(): Prompter {\r\n const rl = readline.createInterface({\r\n input: process.stdin,\r\n output: process.stdout,\r\n });\r\n\r\n const question = util.promisify(rl.question).bind(rl) as unknown as (prompt: string) => Promise<string>;\r\n return { question, close: () => rl.close() };\r\n}\r\n\r\nconst cliArgs = parseCliArgs();\r\n\r\nif (cliArgs.help) {\r\n console.log(formatUsage());\r\n process.exit(0);\r\n}\r\n\r\nlet prompter: Prompter | undefined;\r\n\r\ntry {\r\n await main(cliArgs);\r\n} catch (error) {\r\n console.log(chalk.red.bold(`\\n${error}`));\r\n} finally {\r\n prompter?.close();\r\n}\r\n\r\nasync function main(cli: CliArgs) {\r\n const stdinIsTty = process.stdin.isTTY === true;\r\n const missingRequiredFlags = !cli.version || !cli.title || !cli.description;\r\n if (missingRequiredFlags && !stdinIsTty) {\r\n throw new Error(\r\n `Non-interactive mode detected (stdin is not a TTY). Provide --version, --title, and --description, or run interactively.\\n\\n${formatUsage()}`,\r\n );\r\n }\r\n\r\n if (!gitStatus.isClean()) {\r\n throw new Error(`Repository needs to be clean. Please commit or stash the changes.`);\r\n }\r\n\r\n const envPat = process.env.AZURE_PAT?.trim() || \"\";\r\n if (!envPat && !stdinIsTty) {\r\n throw new Error(\r\n `AZURE_PAT is not set and stdin is not a TTY, so an interactive prompt is not possible. Set AZURE_PAT or run interactively.`,\r\n );\r\n }\r\n\r\n while (!token) {\r\n if (envPat && envPat.length > 10) {\r\n token = envPat;\r\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\r\n const connection = new azdev.WebApi(orgUrl, authHandler);\r\n try {\r\n console.log(\"Using PAT from your AZURE_PAT environment\");\r\n await connection.connect();\r\n gitApi = await connection.getGitApi();\r\n } catch (error) {\r\n console.log(\"The provided PAT is invalid or expired. Please provide a valid PAT.\");\r\n token = \"\";\r\n }\r\n }\r\n if (!token) {\r\n prompter ??= createPrompter();\r\n token =\r\n (await prompter.question(\r\n `Please enter your PAT, you can create one at ` + chalk.green.bold(`[${tokensUrl}]: `),\r\n )) || \"\";\r\n token = token.trim();\r\n\r\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\r\n const connection = new azdev.WebApi(orgUrl, authHandler);\r\n try {\r\n await connection.connect();\r\n gitApi = await connection.getGitApi();\r\n } catch (error) {\r\n console.log(\"The provided PAT is invalid or expired. Please provide a valid PAT.\");\r\n token = \"\";\r\n }\r\n }\r\n }\r\n\r\n const authHeader = buildGitAuthorizationHeader(token);\r\n gitWithAuth = simpleGit({\r\n baseDir: \"./\",\r\n config: [`http.extraheader=${authHeader}`],\r\n }).clean(CleanOptions.FORCE);\r\n\r\n await assertNotDefaultBranch();\r\n\r\n const resolvedVersion = await getVersion(cli.version);\r\n const resolvedTitle = await getTitle(cli.title);\r\n const resolvedDescription = await getDescription(cli.description);\r\n\r\n await setVersion(resolvedVersion);\r\n await commitChanges(resolvedVersion);\r\n await pushChanges();\r\n await createPullRequest(resolvedVersion, resolvedTitle, resolvedDescription);\r\n}\r\n\r\nasync function getVersion(versionArg?: string): Promise<string> {\r\n const authenticatedGit = requireGitWithAuth();\r\n let versionExists = true;\r\n let newVersion = versionArg ?? \"\";\r\n while (versionExists) {\r\n if (!newVersion) {\r\n prompter ??= createPrompter();\r\n newVersion =\r\n (await prompter.question(\r\n `Every PR needs a unique version, please accept current version or enter a new one [${version}]: `,\r\n )) || version;\r\n newVersion = newVersion.trim() || version;\r\n }\r\n\r\n const remoteTags = await authenticatedGit.listRemote([\"--tags\"]);\r\n if (remoteTags.indexOf(`refs/tags/${newVersion}`) >= 0) {\r\n console.log(chalk.bold.red(`Version ${newVersion} already exists on the server`));\r\n if (versionArg && process.stdin.isTTY !== true) {\r\n throw new Error(\r\n `Version ${newVersion} already exists on the server. Provide a unique --version or run interactively.`,\r\n );\r\n }\r\n newVersion = \"\";\r\n } else {\r\n console.log(`Using version ${newVersion}`)\r\n versionExists = false;\r\n }\r\n }\r\n return newVersion;\r\n}\r\n\r\nasync function getTitle(titleArg?: string): Promise<string> {\r\n if (titleArg) {\r\n return titleArg;\r\n }\r\n if (process.stdin.isTTY !== true) {\r\n throw new Error(\r\n `Non-interactive mode detected (stdin is not a TTY). Provide --title, or run interactively.\\n\\n${formatUsage()}`,\r\n );\r\n }\r\n prompter ??= createPrompter();\r\n const title = (await prompter.question(`Title for the pull request: `)).trim();\r\n if (!title) {\r\n throw new Error(\"Pull request title can not be empty.\");\r\n }\r\n return title;\r\n}\r\n\r\nasync function getDescription(descriptionArg?: string): Promise<string> {\r\n if (descriptionArg) {\r\n return descriptionArg;\r\n }\r\n if (process.stdin.isTTY !== true) {\r\n throw new Error(\r\n `Non-interactive mode detected (stdin is not a TTY). Provide --description, or run interactively.\\n\\n${formatUsage()}`,\r\n );\r\n }\r\n prompter ??= createPrompter();\r\n const description = (await prompter.question(`Description for the pull request: `)).trim();\r\n if (!description) {\r\n throw new Error(\"Pull request description can not be empty.\");\r\n }\r\n return description;\r\n}\r\n\r\nasync function runMake() {\r\n execSync(\"npm run make\");\r\n}\r\n\r\nasync function commitChanges(newVersion: string) {\r\n process.stdout.write(`Commit changes to branch ${currentBranch} `);\r\n await git.add(\".\");\r\n await git.commit(`Set new production version: ${newVersion}`);\r\n console.log(chalk.green.bold(` ... OK`));\r\n}\r\n\r\nasync function pushChanges() {\r\n const authenticatedGit = requireGitWithAuth();\r\n process.stdout.write(`Push changes to remote branch ${currentBranch} `);\r\n await authenticatedGit.push(\"origin\", currentBranch);\r\n console.log(chalk.green.bold(` ... OK`));\r\n}\r\n\r\nasync function setVersion(newVersion: string) {\r\n packageJson.version = newVersion;\r\n const docString = await prettier.format(JSON.stringify(packageJson), {\r\n parser: \"json\",\r\n });\r\n fs.writeFileSync(\"package.json\", docString, \"utf8\");\r\n\r\n}\r\n\r\nasync function createPullRequest(tag: string, title: string, description: string) {\r\n process.stdout.write(`Create new pull request from ${currentBranch} to master `);\r\n if (!gitApi) {\r\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\r\n const connection = new azdev.WebApi(orgUrl, authHandler);\r\n gitApi = await connection.getGitApi();\r\n }\r\n\r\n const project: string = azureProject;\r\n const repos: GitRepository[] = await gitApi.getRepositories(project);\r\n const repoId = repos.filter((x) => x.name == repoName)[0].id;\r\n const gitPullRequestToCreate: GitPullRequest = {\r\n sourceRefName: `refs/heads/${currentBranch}`,\r\n targetRefName: \"refs/heads/master\",\r\n title,\r\n description,\r\n labels: [{active: true, name:tag}]\r\n };\r\n await gitApi.createPullRequest(gitPullRequestToCreate, repoId, project);\r\n console.log(chalk.green.bold(` ... OK`));\r\n console.log(`Pull request created at ` + chalk.green.bold(`[${orgBaseUrl}/${project}/_git/${repoName}/pullrequests]`));\r\n}\r\n\r\nasync function assertNotDefaultBranch(): Promise<void> {\r\n if (!gitApi) {\r\n return;\r\n }\r\n\r\n const project = azureProject.trim();\r\n if (!project) {\r\n return;\r\n }\r\n\r\n try {\r\n const repository = await gitApi.getRepository(repoName, project);\r\n const defaultBranch = normalizeBranchName(repository?.defaultBranch);\r\n\r\n if (defaultBranch && defaultBranch === currentBranch) {\r\n throw new Error(\r\n `You can not create a pull request from the default branch (${defaultBranch}). Please create a feature branch instead.`,\r\n );\r\n }\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n const message = error.message || \"\";\r\n const protectedBranchPrefix = \"You can not create a pull request from the default branch\";\r\n if (message.startsWith(protectedBranchPrefix)) {\r\n throw error;\r\n }\r\n if (message) {\r\n console.log(`Warning: Unable to verify default branch: ${message}`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction normalizeBranchName(refName: string | undefined): string | undefined {\r\n if (!refName) {\r\n return undefined;\r\n }\r\n\r\n const prefix = \"refs/heads/\";\r\n return refName.startsWith(prefix) ? refName.slice(prefix.length) : refName;\r\n}\r\n\r\nfunction buildGitAuthorizationHeader(personalAccessToken: string): string {\r\n const encoded = Buffer.from(`:${personalAccessToken}`).toString(\"base64\");\r\n return `Authorization: Basic ${encoded}`;\r\n}\r\n\r\nfunction requireGitWithAuth(): SimpleGit {\r\n if (!gitWithAuth) {\r\n throw new Error(\"Git authentication is not initialized.\");\r\n }\r\n return gitWithAuth;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"pull-request.js","sourceRoot":"","sources":["../../src/tools/pull-request.ts"],"names":[],"mappings":"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","sourcesContent":["import * as azdev from \"azure-devops-node-api\";\nimport * as ga from \"azure-devops-node-api/GitApi.js\";\nimport { GitPullRequest } from \"azure-devops-node-api/interfaces/GitInterfaces.js\";\nimport { GitRepository } from \"azure-devops-node-api/interfaces/TfvcInterfaces.js\";\nimport chalk from \"chalk\";\nimport { execSync } from \"child_process\";\nimport fs from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport { Buffer } from \"node:buffer\";\nimport readline from \"node:readline\";\nimport * as path from \"path\";\nimport * as prettier from \"prettier\";\nimport { CleanOptions, SimpleGit, simpleGit } from \"simple-git\";\nimport util from \"util\";\n\nimport { ConfigFile } from \"../config-file.js\";\nimport { basePath } from \"../base-path.js\";\n\nprocess.env.GIT_TERMINAL_PROMPT = process.env.GIT_TERMINAL_PROMPT ?? \"0\";\nconst git: SimpleGit = simpleGit(\"./\").clean(CleanOptions.FORCE);\nconst packageJsonPath = path.join(basePath, \"package.json\");\n\nlet azureOrganization = \"\";\nlet azureProject = \"\";\ntry {\n const appConfig = ConfigFile.loadRawConfig();\n azureOrganization = appConfig.devops?.organization?.trim() || azureOrganization;\n azureProject = appConfig.devops?.project?.trim() || azureProject;\n} catch (error) {\n // Use default organization when config.json is missing\n}\n\nif (!azureOrganization) {\n throw new Error(\n \"Azure DevOps organization is not configured. Please set devops.organization in config.json (run `uns-kit configure-devops`).\",\n );\n}\n\nif (!azureProject) {\n throw new Error(\n \"Azure DevOps project is not configured. Please set devops.project in config.json (run `uns-kit configure-devops`).\",\n );\n}\n\nconst orgUrl = `https://${azureOrganization}@dev.azure.com/${azureOrganization}`;\nconst orgBaseUrl = `https://dev.azure.com/${azureOrganization}`;\nconst tokensUrl = `${orgBaseUrl}/_usersSettings/tokens`;\n\nconst packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\"));\nconst repoName: string = packageJson.name;\nconst version: string = packageJson.version;\n\nconst branches = await git.branchLocal();\nconst currentBranch = branches.current;\n\nconst gitStatus = await git.status();\n\nlet token: string = \"\";\nlet gitApi: ga.IGitApi | undefined;\nlet gitWithAuth: SimpleGit | undefined;\n\ntype CliArgs = {\n version?: string;\n title?: string;\n description?: string;\n help?: boolean;\n};\n\ntype Prompter = {\n question: (prompt: string) => Promise<string>;\n close: () => void;\n};\n\nfunction parseCliArgs(argv = process.argv.slice(2)): CliArgs {\n const { values } = util.parseArgs({\n args: argv,\n options: {\n version: { type: \"string\" },\n title: { type: \"string\" },\n description: { type: \"string\" },\n help: { type: \"boolean\" },\n },\n strict: false,\n allowPositionals: true,\n });\n\n const versionArg = typeof values.version === \"string\" ? values.version.trim() : \"\";\n const titleArg = typeof values.title === \"string\" ? values.title.trim() : \"\";\n const descriptionArg = typeof values.description === \"string\" ? values.description.trim() : \"\";\n\n return {\n version: versionArg || undefined,\n title: titleArg || undefined,\n description: descriptionArg || undefined,\n help: values.help === true,\n };\n}\n\nfunction formatUsage(): string {\n return [\n \"Usage: pull-request [--version <version>] [--title <title>] [--description <description>]\",\n \"\",\n \"Non-interactive mode (stdin is not a TTY):\",\n \" You must provide --version, --title, and --description (and set AZURE_PAT).\",\n \"\",\n \"Environment:\",\n \" AZURE_PAT Azure DevOps Personal Access Token (PAT)\",\n ].join(\"\\n\");\n}\n\nfunction createPrompter(): Prompter {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const question = util.promisify(rl.question).bind(rl) as unknown as (prompt: string) => Promise<string>;\n return { question, close: () => rl.close() };\n}\n\nconst cliArgs = parseCliArgs();\n\nif (cliArgs.help) {\n console.log(formatUsage());\n process.exit(0);\n}\n\nlet prompter: Prompter | undefined;\n\ntry {\n await main(cliArgs);\n} catch (error) {\n console.log(chalk.red.bold(`\\n${error}`));\n} finally {\n prompter?.close();\n}\n\nasync function main(cli: CliArgs) {\n const stdinIsTty = process.stdin.isTTY === true;\n const missingRequiredFlags = !cli.version || !cli.title || !cli.description;\n if (missingRequiredFlags && !stdinIsTty) {\n throw new Error(\n `Non-interactive mode detected (stdin is not a TTY). Provide --version, --title, and --description, or run interactively.\\n\\n${formatUsage()}`,\n );\n }\n\n if (!gitStatus.isClean()) {\n throw new Error(`Repository needs to be clean. Please commit or stash the changes.`);\n }\n\n const envPat = process.env.AZURE_PAT?.trim() || \"\";\n if (!envPat && !stdinIsTty) {\n throw new Error(\n `AZURE_PAT is not set and stdin is not a TTY, so an interactive prompt is not possible. Set AZURE_PAT or run interactively.`,\n );\n }\n\n while (!token) {\n if (envPat && envPat.length > 10) {\n token = envPat;\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\n const connection = new azdev.WebApi(orgUrl, authHandler);\n try {\n console.log(\"Using PAT from your AZURE_PAT environment\");\n await connection.connect();\n gitApi = await connection.getGitApi();\n } catch (error) {\n console.log(\"The provided PAT is invalid or expired. Please provide a valid PAT.\");\n token = \"\";\n }\n }\n if (!token) {\n prompter ??= createPrompter();\n token =\n (await prompter.question(\n `Please enter your PAT, you can create one at ` + chalk.green.bold(`[${tokensUrl}]: `),\n )) || \"\";\n token = token.trim();\n\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\n const connection = new azdev.WebApi(orgUrl, authHandler);\n try {\n await connection.connect();\n gitApi = await connection.getGitApi();\n } catch (error) {\n console.log(\"The provided PAT is invalid or expired. Please provide a valid PAT.\");\n token = \"\";\n }\n }\n }\n\n const authHeader = buildGitAuthorizationHeader(token);\n gitWithAuth = simpleGit({\n baseDir: \"./\",\n config: [`http.extraheader=${authHeader}`],\n }).clean(CleanOptions.FORCE);\n\n await assertNotDefaultBranch();\n\n const resolvedVersion = await getVersion(cli.version);\n const resolvedTitle = await getTitle(cli.title);\n const resolvedDescription = await getDescription(cli.description);\n\n await setVersion(resolvedVersion);\n await commitChanges(resolvedVersion);\n await pushChanges();\n await createPullRequest(resolvedVersion, resolvedTitle, resolvedDescription);\n}\n\nasync function getVersion(versionArg?: string): Promise<string> {\n const authenticatedGit = requireGitWithAuth();\n let versionExists = true;\n let newVersion = versionArg ?? \"\";\n while (versionExists) {\n if (!newVersion) {\n prompter ??= createPrompter();\n newVersion =\n (await prompter.question(\n `Every PR needs a unique version, please accept current version or enter a new one [${version}]: `,\n )) || version;\n newVersion = newVersion.trim() || version;\n }\n\n const remoteTags = await authenticatedGit.listRemote([\"--tags\"]);\n if (remoteTags.indexOf(`refs/tags/${newVersion}`) >= 0) {\n console.log(chalk.bold.red(`Version ${newVersion} already exists on the server`));\n if (versionArg && process.stdin.isTTY !== true) {\n throw new Error(\n `Version ${newVersion} already exists on the server. Provide a unique --version or run interactively.`,\n );\n }\n newVersion = \"\";\n } else {\n console.log(`Using version ${newVersion}`)\n versionExists = false;\n }\n }\n return newVersion;\n}\n\nasync function getTitle(titleArg?: string): Promise<string> {\n if (titleArg) {\n return titleArg;\n }\n if (process.stdin.isTTY !== true) {\n throw new Error(\n `Non-interactive mode detected (stdin is not a TTY). Provide --title, or run interactively.\\n\\n${formatUsage()}`,\n );\n }\n prompter ??= createPrompter();\n const title = (await prompter.question(`Title for the pull request: `)).trim();\n if (!title) {\n throw new Error(\"Pull request title can not be empty.\");\n }\n return title;\n}\n\nasync function getDescription(descriptionArg?: string): Promise<string> {\n if (descriptionArg) {\n return descriptionArg;\n }\n if (process.stdin.isTTY !== true) {\n throw new Error(\n `Non-interactive mode detected (stdin is not a TTY). Provide --description, or run interactively.\\n\\n${formatUsage()}`,\n );\n }\n prompter ??= createPrompter();\n const description = (await prompter.question(`Description for the pull request: `)).trim();\n if (!description) {\n throw new Error(\"Pull request description can not be empty.\");\n }\n return description;\n}\n\nasync function runMake() {\n execSync(\"npm run make\");\n}\n\nasync function commitChanges(newVersion: string) {\n process.stdout.write(`Commit changes to branch ${currentBranch} `);\n await git.add(\".\");\n await git.commit(`Set new production version: ${newVersion}`);\n console.log(chalk.green.bold(` ... OK`));\n}\n\nasync function pushChanges() {\n const authenticatedGit = requireGitWithAuth();\n process.stdout.write(`Push changes to remote branch ${currentBranch} `);\n await authenticatedGit.push(\"origin\", currentBranch);\n console.log(chalk.green.bold(` ... OK`));\n}\n\nasync function setVersion(newVersion: string) {\n packageJson.version = newVersion;\n const docString = await prettier.format(JSON.stringify(packageJson), {\n parser: \"json\",\n });\n fs.writeFileSync(\"package.json\", docString, \"utf8\");\n\n}\n\nasync function createPullRequest(tag: string, title: string, description: string) {\n process.stdout.write(`Create new pull request from ${currentBranch} to master `);\n if (!gitApi) {\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\n const connection = new azdev.WebApi(orgUrl, authHandler);\n gitApi = await connection.getGitApi();\n }\n\n const project: string = azureProject;\n const repos: GitRepository[] = await gitApi.getRepositories(project);\n const repoId = repos.filter((x) => x.name == repoName)[0].id;\n const gitPullRequestToCreate: GitPullRequest = {\n sourceRefName: `refs/heads/${currentBranch}`,\n targetRefName: \"refs/heads/master\",\n title,\n description,\n labels: [{active: true, name:tag}]\n };\n await gitApi.createPullRequest(gitPullRequestToCreate, repoId, project);\n console.log(chalk.green.bold(` ... OK`));\n console.log(`Pull request created at ` + chalk.green.bold(`[${orgBaseUrl}/${project}/_git/${repoName}/pullrequests]`));\n}\n\nasync function assertNotDefaultBranch(): Promise<void> {\n if (!gitApi) {\n return;\n }\n\n const project = azureProject.trim();\n if (!project) {\n return;\n }\n\n try {\n const repository = await gitApi.getRepository(repoName, project);\n const defaultBranch = normalizeBranchName(repository?.defaultBranch);\n\n if (defaultBranch && defaultBranch === currentBranch) {\n throw new Error(\n `You can not create a pull request from the default branch (${defaultBranch}). Please create a feature branch instead.`,\n );\n }\n } catch (error) {\n if (error instanceof Error) {\n const message = error.message || \"\";\n const protectedBranchPrefix = \"You can not create a pull request from the default branch\";\n if (message.startsWith(protectedBranchPrefix)) {\n throw error;\n }\n if (message) {\n console.log(`Warning: Unable to verify default branch: ${message}`);\n }\n }\n }\n}\n\nfunction normalizeBranchName(refName: string | undefined): string | undefined {\n if (!refName) {\n return undefined;\n }\n\n const prefix = \"refs/heads/\";\n return refName.startsWith(prefix) ? refName.slice(prefix.length) : refName;\n}\n\nfunction buildGitAuthorizationHeader(personalAccessToken: string): string {\n const encoded = Buffer.from(`:${personalAccessToken}`).toString(\"base64\");\n return `Authorization: Basic ${encoded}`;\n}\n\nfunction requireGitWithAuth(): SimpleGit {\n if (!gitWithAuth) {\n throw new Error(\"Git authentication is not initialized.\");\n }\n return gitWithAuth;\n}\n"]}
|
|
@@ -53,38 +53,38 @@ async function requestWithAuth(document) {
|
|
|
53
53
|
}
|
|
54
54
|
// Fetch and generate UnsTopics
|
|
55
55
|
async function refreshUnsTopics() {
|
|
56
|
-
const document = gql `
|
|
57
|
-
query GetTreeStructure {
|
|
58
|
-
GetTreeStructure {
|
|
59
|
-
id
|
|
60
|
-
parent
|
|
61
|
-
unsNode
|
|
62
|
-
children {
|
|
63
|
-
id
|
|
64
|
-
parent
|
|
65
|
-
unsNode
|
|
66
|
-
children {
|
|
67
|
-
id
|
|
68
|
-
parent
|
|
69
|
-
unsNode
|
|
70
|
-
children {
|
|
71
|
-
id
|
|
72
|
-
parent
|
|
73
|
-
unsNode
|
|
74
|
-
children {
|
|
75
|
-
id
|
|
76
|
-
parent
|
|
77
|
-
unsNode
|
|
78
|
-
children {
|
|
79
|
-
id
|
|
80
|
-
parent
|
|
81
|
-
unsNode
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
56
|
+
const document = gql `
|
|
57
|
+
query GetTreeStructure {
|
|
58
|
+
GetTreeStructure {
|
|
59
|
+
id
|
|
60
|
+
parent
|
|
61
|
+
unsNode
|
|
62
|
+
children {
|
|
63
|
+
id
|
|
64
|
+
parent
|
|
65
|
+
unsNode
|
|
66
|
+
children {
|
|
67
|
+
id
|
|
68
|
+
parent
|
|
69
|
+
unsNode
|
|
70
|
+
children {
|
|
71
|
+
id
|
|
72
|
+
parent
|
|
73
|
+
unsNode
|
|
74
|
+
children {
|
|
75
|
+
id
|
|
76
|
+
parent
|
|
77
|
+
unsNode
|
|
78
|
+
children {
|
|
79
|
+
id
|
|
80
|
+
parent
|
|
81
|
+
unsNode
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
88
|
}`;
|
|
89
89
|
const query = await requestWithAuth(document);
|
|
90
90
|
const tree = query.GetTreeStructure;
|
|
@@ -95,9 +95,9 @@ async function refreshUnsTopics() {
|
|
|
95
95
|
}
|
|
96
96
|
// Fetch and generate UnsTags
|
|
97
97
|
async function refreshUnsTags() {
|
|
98
|
-
const document = gql `
|
|
99
|
-
query Query {
|
|
100
|
-
GetTags
|
|
98
|
+
const document = gql `
|
|
99
|
+
query Query {
|
|
100
|
+
GetTags
|
|
101
101
|
}`;
|
|
102
102
|
const query = await requestWithAuth(document);
|
|
103
103
|
const tags = query.GetTags;
|
|
@@ -147,15 +147,15 @@ function buildAssetEntries(assets) {
|
|
|
147
147
|
}
|
|
148
148
|
// Fetch and generate UnsAssets
|
|
149
149
|
async function refreshUnsAssets() {
|
|
150
|
-
const document = gql `
|
|
151
|
-
query GetAssets {
|
|
152
|
-
GetAssets {
|
|
153
|
-
path
|
|
154
|
-
description
|
|
155
|
-
asset
|
|
156
|
-
objectType
|
|
157
|
-
objectId
|
|
158
|
-
}
|
|
150
|
+
const document = gql `
|
|
151
|
+
query GetAssets {
|
|
152
|
+
GetAssets {
|
|
153
|
+
path
|
|
154
|
+
description
|
|
155
|
+
asset
|
|
156
|
+
objectType
|
|
157
|
+
objectId
|
|
158
|
+
}
|
|
159
159
|
}`;
|
|
160
160
|
const query = await requestWithAuth(document);
|
|
161
161
|
let assets = buildAssetEntries(Array.isArray(query.GetAssets) ? query.GetAssets : []);
|
|
@@ -169,12 +169,12 @@ async function refreshUnsAssets() {
|
|
|
169
169
|
return `${comment} "${entry.asset}": "${entry.asset}",`;
|
|
170
170
|
})
|
|
171
171
|
.join("\n");
|
|
172
|
-
const helpers = `
|
|
173
|
-
export function resolveGeneratedAsset(name: keyof typeof GeneratedAssets): (typeof GeneratedAssets)[keyof typeof GeneratedAssets];
|
|
174
|
-
export function resolveGeneratedAsset<T extends string>(name: T): (typeof GeneratedAssets)[keyof typeof GeneratedAssets] | T;
|
|
175
|
-
export function resolveGeneratedAsset(name: string): string {
|
|
176
|
-
return (GeneratedAssets as Record<string, string>)[name] ?? name;
|
|
177
|
-
}
|
|
172
|
+
const helpers = `
|
|
173
|
+
export function resolveGeneratedAsset(name: keyof typeof GeneratedAssets): (typeof GeneratedAssets)[keyof typeof GeneratedAssets];
|
|
174
|
+
export function resolveGeneratedAsset<T extends string>(name: T): (typeof GeneratedAssets)[keyof typeof GeneratedAssets] | T;
|
|
175
|
+
export function resolveGeneratedAsset(name: string): string {
|
|
176
|
+
return (GeneratedAssets as Record<string, string>)[name] ?? name;
|
|
177
|
+
}
|
|
178
178
|
`;
|
|
179
179
|
const vsebina = `${header}export const GeneratedAssets = {\n${entries}\n} as const;\nexport type GeneratedAssetName = typeof GeneratedAssets[keyof typeof GeneratedAssets];\n${helpers}`;
|
|
180
180
|
const outputPath = path.resolve(process.cwd(), "src/uns/uns-assets.ts");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh-uns.js","sourceRoot":"","sources":["../../src/tools/refresh-uns.ts"],"names":[],"mappings":"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","sourcesContent":["import { GraphQLClient, gql, ClientError } from \"graphql-request\";\r\nimport { TreeStructure, UnsAttributeSummary, UnsAssetSummary } from \"./schema.js\";\r\nimport * as path from \"path\";\r\nimport * as fs from 'fs';\r\nimport { mkdir } from \"fs/promises\";\r\nimport { ConfigFile } from \"../config-file.js\";\r\nimport { AuthClient } from \"./auth/index.js\";\r\n\r\n\r\nconst config = await ConfigFile.loadConfig();\r\n\r\n// Helper function to write content to a file\r\nasync function writeToFile(filePath: string, content: string) {\r\n return new Promise<void>((resolve, reject) => {\r\n fs.writeFile(filePath, content, (error: NodeJS.ErrnoException | null) => {\r\n if (error) {\r\n console.error('Error writing file:', error);\r\n return reject(error);\r\n }\r\n console.log(`${path.basename(filePath)} updated.`);\r\n resolve();\r\n });\r\n });\r\n}\r\n\r\n// Function to process tree structure recursively\r\nfunction generateUnsTopics(tree: TreeStructure[], currentPath: string): string {\r\n return tree\r\n .map(element => {\r\n const newPath = `${currentPath}${element.unsNode}/`;\r\n const childrenTopics = element.children?.length\r\n ? generateUnsTopics(element.children, newPath)\r\n : '';\r\n return `\"${newPath}\" |${childrenTopics}`;\r\n })\r\n .join('');\r\n}\r\n\r\n// Prepare GraphQL client with Authorization from auth library\r\nconst auth = await AuthClient.create();\r\nlet accessToken = await auth.getAccessToken();\r\nlet client = new GraphQLClient(config.uns.graphql, {\r\n headers: { Authorization: `Bearer ${accessToken}` },\r\n});\r\n\r\nasync function requestWithAuth<T>(document: any): Promise<T> {\r\n try {\r\n return await client.request<T>(document);\r\n } catch (err: any) {\r\n const isAuthErr = err instanceof ClientError && (err.response.status === 401 || err.response.status === 403);\r\n if (isAuthErr) {\r\n // Attempt to get a fresh token (will try refresh, then prompt)\r\n accessToken = await auth.getAccessToken();\r\n client.setHeader('Authorization', `Bearer ${accessToken}`);\r\n return await client.request<T>(document);\r\n }\r\n throw err;\r\n }\r\n}\r\n\r\n// Fetch and generate UnsTopics\r\nasync function refreshUnsTopics() {\r\n const document = gql`\r\n query GetTreeStructure {\r\n GetTreeStructure {\r\n id\r\n parent\r\n unsNode\r\n children {\r\n id\r\n parent\r\n unsNode\r\n children {\r\n id\r\n parent\r\n unsNode\r\n children {\r\n id\r\n parent\r\n unsNode\r\n children {\r\n id\r\n parent\r\n unsNode\r\n children {\r\n id\r\n parent\r\n unsNode\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n\r\n const query: any = await requestWithAuth(document);\r\n const tree: TreeStructure[] = query.GetTreeStructure;\r\n\r\n const vsebina = `export type UnsTopics = ${generateUnsTopics(tree, '')}\\n(string & {});`;\r\n const outputPath = path.resolve(process.cwd(), \"src/uns/uns-topics.ts\");\r\n await ensureDirectory(path.dirname(outputPath));\r\n await writeToFile(outputPath, vsebina);\r\n}\r\n\r\n// Fetch and generate UnsTags\r\nasync function refreshUnsTags() {\r\n const document = gql`\r\n query Query {\r\n GetTags\r\n }`;\r\n\r\n const query: any = await requestWithAuth(document);\r\n const tags: string[] = query.GetTags;\r\n\r\n const vsebina = `export type UnsTags = ${tags.map(tag => `\"${tag}\" |`).join('')}\\n(string & {});`;\r\n const outputPath = path.resolve(process.cwd(), \"src/uns/uns-tags.ts\");\r\n await ensureDirectory(path.dirname(outputPath));\r\n await writeToFile(outputPath, vsebina);\r\n}\r\n\r\nfunction normalizeAttributePath(pathValue: string | null | undefined): string {\r\n if (!pathValue) return \"\";\r\n return pathValue.replace(/\\/+$/, \"\");\r\n}\r\n\r\nfunction buildAttributeEntries(attributes: Array<UnsAttributeSummary | null | undefined>) {\r\n const deduped = new Map<string, {\r\n path: string;\r\n description: string | null;\r\n attributeType: string | null;\r\n dataGroup: string | null;\r\n objectType: string | null;\r\n objectId: string | null;\r\n }>();\r\n\r\n for (const attr of attributes) {\r\n if (!attr) continue;\r\n const path = normalizeAttributePath(typeof attr.path === \"string\" ? attr.path : null);\r\n if (!path) continue;\r\n deduped.set(path, {\r\n path,\r\n description: typeof attr.description === \"string\" ? attr.description : null,\r\n attributeType: typeof attr.attributeType === \"string\" ? attr.attributeType : null,\r\n dataGroup: typeof attr.dataGroup === \"string\" ? attr.dataGroup : null,\r\n objectType: typeof attr.objectType === \"string\" ? attr.objectType : null,\r\n objectId: typeof attr.objectId === \"string\" ? attr.objectId : null,\r\n });\r\n }\r\n\r\n return Array.from(deduped.values()).sort((a, b) => a.path.localeCompare(b.path));\r\n}\r\n\r\nfunction buildAssetEntries(assets: Array<UnsAssetSummary | null | undefined>) {\r\n const deduped = new Map<string, {\r\n asset: string;\r\n description: string | null;\r\n }>();\r\n\r\n for (const entry of assets) {\r\n if (!entry) continue;\r\n const assetName = typeof entry.asset === \"string\" ? entry.asset.trim() : \"\";\r\n if (!assetName) continue;\r\n const description = typeof entry.description === \"string\" ? entry.description : null;\r\n if (!deduped.has(assetName)) {\r\n deduped.set(assetName, { asset: assetName, description });\r\n }\r\n }\r\n\r\n return Array.from(deduped.values()).sort((a, b) => a.asset.localeCompare(b.asset));\r\n}\r\n\r\n// Fetch and generate UnsAssets\r\nasync function refreshUnsAssets() {\r\n const document = gql`\r\n query GetAssets {\r\n GetAssets {\r\n path\r\n description\r\n asset\r\n objectType\r\n objectId\r\n }\r\n }`;\r\n\r\n const query: any = await requestWithAuth(document);\r\n let assets = buildAssetEntries(Array.isArray(query.GetAssets) ? query.GetAssets : []);\r\n if (!assets.length) {\r\n assets = [{ asset: \"asset\", description: null }];\r\n }\r\n\r\n const header = `// Generated UNS asset list. Run \\`pnpm run refresh-uns\\` to update.\\n`;\r\n const entries = assets\r\n .map((entry) => {\r\n const comment = entry.description ? ` /** ${sanitizeComment(entry.description)} */\\n` : \"\";\r\n return `${comment} \"${entry.asset}\": \"${entry.asset}\",`;\r\n })\r\n .join(\"\\n\");\r\n\r\n const helpers = `\r\nexport function resolveGeneratedAsset(name: keyof typeof GeneratedAssets): (typeof GeneratedAssets)[keyof typeof GeneratedAssets];\r\nexport function resolveGeneratedAsset<T extends string>(name: T): (typeof GeneratedAssets)[keyof typeof GeneratedAssets] | T;\r\nexport function resolveGeneratedAsset(name: string): string {\r\n return (GeneratedAssets as Record<string, string>)[name] ?? name;\r\n}\r\n`;\r\n\r\n const vsebina = `${header}export const GeneratedAssets = {\\n${entries}\\n} as const;\\nexport type GeneratedAssetName = typeof GeneratedAssets[keyof typeof GeneratedAssets];\\n${helpers}`;\r\n const outputPath = path.resolve(process.cwd(), \"src/uns/uns-assets.ts\");\r\n await ensureDirectory(path.dirname(outputPath));\r\n await writeToFile(outputPath, vsebina);\r\n}\r\n\r\n// Execute the refresh processes\r\nasync function refresh() {\r\n await Promise.all([refreshUnsTopics(), refreshUnsTags(), refreshUnsAssets()]);\r\n}\r\n\r\nrefresh().catch(error => console.error('Error during refresh:', error));\r\n\r\nasync function ensureDirectory(dirPath: string): Promise<void> {\r\n await mkdir(dirPath, { recursive: true });\r\n}\r\n\r\nfunction sanitizeComment(text: string): string {\r\n return text.replace(/\\*\\//g, \"*\\\\/\");\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"refresh-uns.js","sourceRoot":"","sources":["../../src/tools/refresh-uns.ts"],"names":[],"mappings":"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","sourcesContent":["import { GraphQLClient, gql, ClientError } from \"graphql-request\";\nimport { TreeStructure, UnsAttributeSummary, UnsAssetSummary } from \"./schema.js\";\nimport * as path from \"path\";\nimport * as fs from 'fs';\nimport { mkdir } from \"fs/promises\";\nimport { ConfigFile } from \"../config-file.js\";\nimport { AuthClient } from \"./auth/index.js\";\n\n\nconst config = await ConfigFile.loadConfig();\n\n// Helper function to write content to a file\nasync function writeToFile(filePath: string, content: string) {\n return new Promise<void>((resolve, reject) => {\n fs.writeFile(filePath, content, (error: NodeJS.ErrnoException | null) => {\n if (error) {\n console.error('Error writing file:', error);\n return reject(error);\n }\n console.log(`${path.basename(filePath)} updated.`);\n resolve();\n });\n });\n}\n\n// Function to process tree structure recursively\nfunction generateUnsTopics(tree: TreeStructure[], currentPath: string): string {\n return tree\n .map(element => {\n const newPath = `${currentPath}${element.unsNode}/`;\n const childrenTopics = element.children?.length\n ? generateUnsTopics(element.children, newPath)\n : '';\n return `\"${newPath}\" |${childrenTopics}`;\n })\n .join('');\n}\n\n// Prepare GraphQL client with Authorization from auth library\nconst auth = await AuthClient.create();\nlet accessToken = await auth.getAccessToken();\nlet client = new GraphQLClient(config.uns.graphql, {\n headers: { Authorization: `Bearer ${accessToken}` },\n});\n\nasync function requestWithAuth<T>(document: any): Promise<T> {\n try {\n return await client.request<T>(document);\n } catch (err: any) {\n const isAuthErr = err instanceof ClientError && (err.response.status === 401 || err.response.status === 403);\n if (isAuthErr) {\n // Attempt to get a fresh token (will try refresh, then prompt)\n accessToken = await auth.getAccessToken();\n client.setHeader('Authorization', `Bearer ${accessToken}`);\n return await client.request<T>(document);\n }\n throw err;\n }\n}\n\n// Fetch and generate UnsTopics\nasync function refreshUnsTopics() {\n const document = gql`\n query GetTreeStructure {\n GetTreeStructure {\n id\n parent\n unsNode\n children {\n id\n parent\n unsNode\n children {\n id\n parent\n unsNode\n children {\n id\n parent\n unsNode\n children {\n id\n parent\n unsNode\n children {\n id\n parent\n unsNode\n }\n }\n }\n }\n }\n }\n }`;\n\n const query: any = await requestWithAuth(document);\n const tree: TreeStructure[] = query.GetTreeStructure;\n\n const vsebina = `export type UnsTopics = ${generateUnsTopics(tree, '')}\\n(string & {});`;\n const outputPath = path.resolve(process.cwd(), \"src/uns/uns-topics.ts\");\n await ensureDirectory(path.dirname(outputPath));\n await writeToFile(outputPath, vsebina);\n}\n\n// Fetch and generate UnsTags\nasync function refreshUnsTags() {\n const document = gql`\n query Query {\n GetTags\n }`;\n\n const query: any = await requestWithAuth(document);\n const tags: string[] = query.GetTags;\n\n const vsebina = `export type UnsTags = ${tags.map(tag => `\"${tag}\" |`).join('')}\\n(string & {});`;\n const outputPath = path.resolve(process.cwd(), \"src/uns/uns-tags.ts\");\n await ensureDirectory(path.dirname(outputPath));\n await writeToFile(outputPath, vsebina);\n}\n\nfunction normalizeAttributePath(pathValue: string | null | undefined): string {\n if (!pathValue) return \"\";\n return pathValue.replace(/\\/+$/, \"\");\n}\n\nfunction buildAttributeEntries(attributes: Array<UnsAttributeSummary | null | undefined>) {\n const deduped = new Map<string, {\n path: string;\n description: string | null;\n attributeType: string | null;\n dataGroup: string | null;\n objectType: string | null;\n objectId: string | null;\n }>();\n\n for (const attr of attributes) {\n if (!attr) continue;\n const path = normalizeAttributePath(typeof attr.path === \"string\" ? attr.path : null);\n if (!path) continue;\n deduped.set(path, {\n path,\n description: typeof attr.description === \"string\" ? attr.description : null,\n attributeType: typeof attr.attributeType === \"string\" ? attr.attributeType : null,\n dataGroup: typeof attr.dataGroup === \"string\" ? attr.dataGroup : null,\n objectType: typeof attr.objectType === \"string\" ? attr.objectType : null,\n objectId: typeof attr.objectId === \"string\" ? attr.objectId : null,\n });\n }\n\n return Array.from(deduped.values()).sort((a, b) => a.path.localeCompare(b.path));\n}\n\nfunction buildAssetEntries(assets: Array<UnsAssetSummary | null | undefined>) {\n const deduped = new Map<string, {\n asset: string;\n description: string | null;\n }>();\n\n for (const entry of assets) {\n if (!entry) continue;\n const assetName = typeof entry.asset === \"string\" ? entry.asset.trim() : \"\";\n if (!assetName) continue;\n const description = typeof entry.description === \"string\" ? entry.description : null;\n if (!deduped.has(assetName)) {\n deduped.set(assetName, { asset: assetName, description });\n }\n }\n\n return Array.from(deduped.values()).sort((a, b) => a.asset.localeCompare(b.asset));\n}\n\n// Fetch and generate UnsAssets\nasync function refreshUnsAssets() {\n const document = gql`\n query GetAssets {\n GetAssets {\n path\n description\n asset\n objectType\n objectId\n }\n }`;\n\n const query: any = await requestWithAuth(document);\n let assets = buildAssetEntries(Array.isArray(query.GetAssets) ? query.GetAssets : []);\n if (!assets.length) {\n assets = [{ asset: \"asset\", description: null }];\n }\n\n const header = `// Generated UNS asset list. Run \\`pnpm run refresh-uns\\` to update.\\n`;\n const entries = assets\n .map((entry) => {\n const comment = entry.description ? ` /** ${sanitizeComment(entry.description)} */\\n` : \"\";\n return `${comment} \"${entry.asset}\": \"${entry.asset}\",`;\n })\n .join(\"\\n\");\n\n const helpers = `\nexport function resolveGeneratedAsset(name: keyof typeof GeneratedAssets): (typeof GeneratedAssets)[keyof typeof GeneratedAssets];\nexport function resolveGeneratedAsset<T extends string>(name: T): (typeof GeneratedAssets)[keyof typeof GeneratedAssets] | T;\nexport function resolveGeneratedAsset(name: string): string {\n return (GeneratedAssets as Record<string, string>)[name] ?? name;\n}\n`;\n\n const vsebina = `${header}export const GeneratedAssets = {\\n${entries}\\n} as const;\\nexport type GeneratedAssetName = typeof GeneratedAssets[keyof typeof GeneratedAssets];\\n${helpers}`;\n const outputPath = path.resolve(process.cwd(), \"src/uns/uns-assets.ts\");\n await ensureDirectory(path.dirname(outputPath));\n await writeToFile(outputPath, vsebina);\n}\n\n// Execute the refresh processes\nasync function refresh() {\n await Promise.all([refreshUnsTopics(), refreshUnsTags(), refreshUnsAssets()]);\n}\n\nrefresh().catch(error => console.error('Error during refresh:', error));\n\nasync function ensureDirectory(dirPath: string): Promise<void> {\n await mkdir(dirPath, { recursive: true });\n}\n\nfunction sanitizeComment(text: string): string {\n return text.replace(/\\*\\//g, \"*\\\\/\");\n}\n"]}
|
package/dist/tools/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"","sourcesContent":["export type Maybe<T> = T | null;\
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"","sourcesContent":["export type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string; }\n String: { input: string; output: string; }\n Boolean: { input: boolean; output: boolean; }\n Int: { input: number; output: number; }\n Float: { input: number; output: number; }\n Date: { input: any; output: any; }\n};\n\nexport type ActivateMqttTranslation = {\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** MQTT Translator object. */\nexport type AddMqttTranslation = {\n description?: InputMaybe<Scalars['String']['input']>;\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n targetTag?: InputMaybe<Scalars['String']['input']>;\n targetTopic?: InputMaybe<Scalars['String']['input']>;\n uom?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type AddMqttTranslatorTopic = {\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type DeleteMqttTranslation = {\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type DeleteMqttTranslatorTopic = {\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type InitMqttTranslation = {\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type InsertUnsNode = {\n parent?: InputMaybe<Scalars['Int']['input']>;\n unsNode?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type ModifyMqttTranslation = {\n description?: InputMaybe<Scalars['String']['input']>;\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n targetTag?: InputMaybe<Scalars['String']['input']>;\n targetTopic?: InputMaybe<Scalars['String']['input']>;\n uom?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** MQTT Translator object. */\nexport type MqttTranslation = {\n __typename?: 'MqttTranslation';\n description?: Maybe<Scalars['String']['output']>;\n enabled?: Maybe<Scalars['Boolean']['output']>;\n sourceTag?: Maybe<Scalars['String']['output']>;\n sourceTopic?: Maybe<Scalars['String']['output']>;\n targetTag?: Maybe<Scalars['String']['output']>;\n targetTopic?: Maybe<Scalars['String']['output']>;\n uom?: Maybe<Scalars['String']['output']>;\n};\n\nexport type MqttTranslatorTopic = {\n __typename?: 'MqttTranslatorTopic';\n sourceTopic?: Maybe<Scalars['String']['output']>;\n};\n\nexport type Mutation = {\n __typename?: 'Mutation';\n ActivateMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n AddMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n /** Add MQTT topic to be translated. */\n AddMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\n AddUnsNode?: Maybe<Scalars['Boolean']['output']>;\n /** Add MQTT translation. */\n DeleteMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n DeleteMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\n DeleteRttNode?: Maybe<Scalars['Boolean']['output']>;\n DeleteUnsNode?: Maybe<Scalars['Boolean']['output']>;\n DeployRttNode?: Maybe<Scalars['Boolean']['output']>;\n /** Populate MQTT Translator table with sourceTag and sourceTopic. */\n InitMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n /** Update MQTT Translator table with defined targetTopic. */\n ModifyMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n ModifyUnsNode?: Maybe<Scalars['Boolean']['output']>;\n StartRttNode?: Maybe<Scalars['Boolean']['output']>;\n StopRttNode?: Maybe<Scalars['Boolean']['output']>;\n};\n\n\nexport type MutationActivateMqttTranslationArgs = {\n entry?: InputMaybe<ActivateMqttTranslation>;\n};\n\n\nexport type MutationAddMqttTranslationArgs = {\n entry?: InputMaybe<AddMqttTranslation>;\n};\n\n\nexport type MutationAddMqttTranslatorTopicArgs = {\n entry?: InputMaybe<AddMqttTranslatorTopic>;\n};\n\n\nexport type MutationAddUnsNodeArgs = {\n node?: InputMaybe<InsertUnsNode>;\n};\n\n\nexport type MutationDeleteMqttTranslationArgs = {\n entry?: InputMaybe<DeleteMqttTranslation>;\n};\n\n\nexport type MutationDeleteMqttTranslatorTopicArgs = {\n entry?: InputMaybe<DeleteMqttTranslatorTopic>;\n};\n\n\nexport type MutationDeleteRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationDeleteUnsNodeArgs = {\n id?: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeployRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n tag?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationInitMqttTranslationArgs = {\n entry?: InputMaybe<InitMqttTranslation>;\n};\n\n\nexport type MutationModifyMqttTranslationArgs = {\n entry?: InputMaybe<ModifyMqttTranslation>;\n};\n\n\nexport type MutationModifyUnsNodeArgs = {\n id?: InputMaybe<Scalars['Int']['input']>;\n node?: InputMaybe<UpdateUnsNode>;\n};\n\n\nexport type MutationStartRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationStopRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** name: uns-datahub */\nexport type Query = {\n __typename?: 'Query';\n GetAssets?: Maybe<Array<Maybe<UnsAssetSummary>>>;\n GetAttributes?: Maybe<Array<Maybe<UnsAttributeSummary>>>;\n GetTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n /** Get MQTT Translator translations. */\n GetMqttTranslations?: Maybe<Array<Maybe<MqttTranslation>>>;\n GetMqttTranslatorTopics?: Maybe<Array<Maybe<MqttTranslatorTopic>>>;\n GetRttNodes?: Maybe<Array<Maybe<RttNode>>>;\n GetTreeStructure?: Maybe<Array<Maybe<TreeStructure>>>;\n};\n\nexport type QueryGetAssetsArgs = {\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type QueryGetAttributesArgs = {\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type RttNode = {\n __typename?: 'RttNode';\n author?: Maybe<Scalars['String']['output']>;\n deployedVersions?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n description?: Maybe<Scalars['String']['output']>;\n lastLog?: Maybe<Scalars['String']['output']>;\n latestDeployedVersion?: Maybe<Scalars['String']['output']>;\n memory?: Maybe<Scalars['Int']['output']>;\n pid?: Maybe<Scalars['Int']['output']>;\n restarts?: Maybe<Scalars['Int']['output']>;\n rttNode?: Maybe<Scalars['String']['output']>;\n runningVersion?: Maybe<Scalars['String']['output']>;\n status?: Maybe<Scalars['String']['output']>;\n uptime?: Maybe<Scalars['Int']['output']>;\n version?: Maybe<Scalars['String']['output']>;\n};\n\nexport type TreeStructure = {\n __typename?: 'TreeStructure';\n children?: Maybe<Array<Maybe<TreeStructure>>>;\n id?: Maybe<Scalars['Int']['output']>;\n parent?: Maybe<Scalars['Int']['output']>;\n unsNode?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UnsAssetSummary = {\n __typename?: 'UnsAssetSummary';\n asset?: Maybe<Scalars['String']['output']>;\n description?: Maybe<Scalars['String']['output']>;\n objectId?: Maybe<Scalars['String']['output']>;\n objectType?: Maybe<Scalars['String']['output']>;\n path?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UnsAttributeSummary = {\n __typename?: 'UnsAttributeSummary';\n attributeType?: Maybe<Scalars['String']['output']>;\n dataGroup?: Maybe<Scalars['String']['output']>;\n description?: Maybe<Scalars['String']['output']>;\n objectId?: Maybe<Scalars['String']['output']>;\n objectType?: Maybe<Scalars['String']['output']>;\n path?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UnsNode = {\n __typename?: 'UnsNode';\n id?: Maybe<Scalars['Int']['output']>;\n parent?: Maybe<Scalars['Int']['output']>;\n unsNode?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UpdateUnsNode = {\n parent?: InputMaybe<Scalars['Int']['input']>;\n unsNode?: InputMaybe<Scalars['String']['input']>;\n};\n"]}
|