@uns-kit/core 2.0.40 → 2.0.42
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/README.md +38 -15
- package/dist/base-path.js.map +1 -1
- 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 +9 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- 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/datahub/datahub-client.js.map +1 -1
- package/dist/tools/file-utils.d.ts +2 -2
- package/dist/tools/file-utils.js +24 -24
- 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.d.ts +23 -23
- package/dist/tools/generate-uns-dictionary.js +147 -147
- package/dist/tools/generate-uns-dictionary.js.map +1 -1
- package/dist/tools/generate-uns-measurements.d.ts +21 -21
- package/dist/tools/generate-uns-measurements.js +119 -119
- package/dist/tools/generate-uns-measurements.js.map +1 -1
- package/dist/tools/generate-uns-reference.d.ts +2 -2
- package/dist/tools/generate-uns-reference.js +76 -76
- 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.map +1 -1
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/sync-uns-schema.d.ts +2 -2
- package/dist/tools/sync-uns-schema.js +472 -472
- 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/service-metadata.d.ts +53 -0
- package/dist/uns/service-metadata.d.ts.map +1 -0
- package/dist/uns/service-metadata.js +56 -0
- package/dist/uns/service-metadata.js.map +1 -0
- package/dist/uns/status-monitor.js.map +1 -1
- package/dist/uns/uns-asset.d.ts +1 -1
- package/dist/uns/uns-asset.js +1 -1
- package/dist/uns/uns-asset.js.map +1 -1
- package/dist/uns/uns-attributes.d.ts +6 -6
- package/dist/uns/uns-attributes.js +9 -9
- package/dist/uns/uns-attributes.js.map +1 -1
- package/dist/uns/uns-dictionary-registry.d.ts +4 -4
- package/dist/uns/uns-dictionary-registry.js +20 -20
- package/dist/uns/uns-dictionary-registry.js.map +1 -1
- package/dist/uns/uns-dictionary.generated.d.ts +663 -663
- package/dist/uns/uns-dictionary.generated.js +745 -745
- 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.d.ts +365 -365
- package/dist/uns/uns-interfaces.js.map +1 -1
- package/dist/uns/uns-measurements.generated.d.ts +362 -362
- package/dist/uns/uns-measurements.generated.js +359 -359
- package/dist/uns/uns-measurements.generated.js.map +1 -1
- package/dist/uns/uns-measurements.js.map +1 -1
- package/dist/uns/uns-object.d.ts +20 -20
- package/dist/uns/uns-object.js +9 -9
- package/dist/uns/uns-object.js.map +1 -1
- package/dist/uns/uns-packet.js +263 -263
- package/dist/uns/uns-packet.js.map +1 -1
- package/dist/uns/uns-path.d.ts +2 -2
- package/dist/uns/uns-path.js +10 -10
- package/dist/uns/uns-path.js.map +1 -1
- package/dist/uns/uns-proxy-process.d.ts +11 -0
- package/dist/uns/uns-proxy-process.d.ts.map +1 -1
- package/dist/uns/uns-proxy-process.js +224 -203
- package/dist/uns/uns-proxy-process.js.map +1 -1
- package/dist/uns/uns-proxy.d.ts +51 -51
- package/dist/uns/uns-proxy.js +190 -190
- 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 +3276 -3276
- 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-mqtt/mqtt-interfaces.js.map +1 -1
- package/dist/uns-mqtt/mqtt-proxy.js.map +1 -1
- package/dist/uns-mqtt/mqtt-topic-builder.d.ts +6 -0
- package/dist/uns-mqtt/mqtt-topic-builder.d.ts.map +1 -1
- package/dist/uns-mqtt/mqtt-topic-builder.js +8 -0
- 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 +477 -477
- 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
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Generate a TypeScript helper for measurements from a JSON file.
|
|
4
|
-
*
|
|
5
|
-
* JSON shape (example):
|
|
6
|
-
* {
|
|
7
|
-
* "physical": {
|
|
8
|
-
* "None": { "value": "", "description": "Brez enote" },
|
|
9
|
-
* "Celsius": { "value": "°C", "description": "Stopinje Celzija" }
|
|
10
|
-
* },
|
|
11
|
-
* "dataSize": {
|
|
12
|
-
* "Bit": { "value": "bit", "description": "Bit" }
|
|
13
|
-
* },
|
|
14
|
-
* "counter": {
|
|
15
|
-
* "Kilo": { "value": "k", "description": "Kilo" }
|
|
16
|
-
* }
|
|
17
|
-
* }
|
|
18
|
-
*/
|
|
19
|
-
import { readFile } from "node:fs/promises";
|
|
20
|
-
import path from "node:path";
|
|
21
|
-
import { pathToFileURL } from "node:url";
|
|
22
|
-
import { writeTextFileIfChanged } from "./file-utils.js";
|
|
23
|
-
const DEFAULT_INPUT = "uns-measurements.json";
|
|
24
|
-
const DEFAULT_OUTPUT = path.resolve(process.cwd(), "src/uns/uns-measurements.generated.ts");
|
|
25
|
-
async function main() {
|
|
26
|
-
const { input, output, lang } = parseArgs(process.argv.slice(2));
|
|
27
|
-
await generateUnsMeasurements({ input, output, lang });
|
|
28
|
-
}
|
|
29
|
-
function parseArgs(argv) {
|
|
30
|
-
let input = DEFAULT_INPUT;
|
|
31
|
-
let output = DEFAULT_OUTPUT;
|
|
32
|
-
let lang = "sl";
|
|
33
|
-
for (let i = 0; i < argv.length; i++) {
|
|
34
|
-
const arg = argv[i];
|
|
35
|
-
if (arg === "--input" && argv[i + 1]) {
|
|
36
|
-
input = argv[++i];
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
if (arg === "--output" && argv[i + 1]) {
|
|
40
|
-
output = argv[++i];
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
if (arg === "--lang" && argv[i + 1]) {
|
|
44
|
-
lang = argv[++i];
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
if (arg === "--help" || arg === "-h") {
|
|
48
|
-
printHelp();
|
|
49
|
-
process.exit(0);
|
|
50
|
-
}
|
|
51
|
-
throw new Error(`Unknown argument: ${arg}`);
|
|
52
|
-
}
|
|
53
|
-
return { input, output, lang };
|
|
54
|
-
}
|
|
55
|
-
function printHelp() {
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generate a TypeScript helper for measurements from a JSON file.
|
|
4
|
+
*
|
|
5
|
+
* JSON shape (example):
|
|
6
|
+
* {
|
|
7
|
+
* "physical": {
|
|
8
|
+
* "None": { "value": "", "description": "Brez enote" },
|
|
9
|
+
* "Celsius": { "value": "°C", "description": "Stopinje Celzija" }
|
|
10
|
+
* },
|
|
11
|
+
* "dataSize": {
|
|
12
|
+
* "Bit": { "value": "bit", "description": "Bit" }
|
|
13
|
+
* },
|
|
14
|
+
* "counter": {
|
|
15
|
+
* "Kilo": { "value": "k", "description": "Kilo" }
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
*/
|
|
19
|
+
import { readFile } from "node:fs/promises";
|
|
20
|
+
import path from "node:path";
|
|
21
|
+
import { pathToFileURL } from "node:url";
|
|
22
|
+
import { writeTextFileIfChanged } from "./file-utils.js";
|
|
23
|
+
const DEFAULT_INPUT = "uns-measurements.json";
|
|
24
|
+
const DEFAULT_OUTPUT = path.resolve(process.cwd(), "src/uns/uns-measurements.generated.ts");
|
|
25
|
+
async function main() {
|
|
26
|
+
const { input, output, lang } = parseArgs(process.argv.slice(2));
|
|
27
|
+
await generateUnsMeasurements({ input, output, lang });
|
|
28
|
+
}
|
|
29
|
+
function parseArgs(argv) {
|
|
30
|
+
let input = DEFAULT_INPUT;
|
|
31
|
+
let output = DEFAULT_OUTPUT;
|
|
32
|
+
let lang = "sl";
|
|
33
|
+
for (let i = 0; i < argv.length; i++) {
|
|
34
|
+
const arg = argv[i];
|
|
35
|
+
if (arg === "--input" && argv[i + 1]) {
|
|
36
|
+
input = argv[++i];
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (arg === "--output" && argv[i + 1]) {
|
|
40
|
+
output = argv[++i];
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (arg === "--lang" && argv[i + 1]) {
|
|
44
|
+
lang = argv[++i];
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (arg === "--help" || arg === "-h") {
|
|
48
|
+
printHelp();
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
52
|
+
}
|
|
53
|
+
return { input, output, lang };
|
|
54
|
+
}
|
|
55
|
+
function printHelp() {
|
|
56
56
|
console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-measurements.ts [options]
|
|
57
57
|
|
|
58
58
|
Options:
|
|
@@ -60,68 +60,68 @@ Options:
|
|
|
60
60
|
--output <file> Path to generated TS file (default: src/uns/uns-measurements.generated.ts)
|
|
61
61
|
--lang <code> Preferred description language (default: "sl")
|
|
62
62
|
--help, -h Show this help
|
|
63
|
-
`);
|
|
64
|
-
}
|
|
65
|
-
async function loadJson(filePath) {
|
|
66
|
-
const abs = path.resolve(process.cwd(), filePath);
|
|
67
|
-
const raw = await readFile(abs, "utf8");
|
|
68
|
-
return JSON.parse(raw);
|
|
69
|
-
}
|
|
70
|
-
const resolveDesc = (entry, lang) => {
|
|
71
|
-
if (!entry)
|
|
72
|
-
return undefined;
|
|
73
|
-
const byLang = entry.descriptions?.[lang];
|
|
74
|
-
if (byLang && byLang.length > 0)
|
|
75
|
-
return byLang;
|
|
76
|
-
if (entry.description && entry.description.length > 0)
|
|
77
|
-
return entry.description;
|
|
78
|
-
return undefined;
|
|
79
|
-
};
|
|
80
|
-
function renderSection(name, entries, lang) {
|
|
81
|
-
if (!entries)
|
|
82
|
-
return `export const ${name} = {} as const;`;
|
|
83
|
-
const lines = Object.entries(entries)
|
|
84
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
85
|
-
.map(([key, entry]) => {
|
|
86
|
-
const desc = resolveDesc(entry, lang);
|
|
87
|
-
const doc = renderDoc(desc, " ");
|
|
88
|
-
return `${doc} "${key}": "${entry.value}",`;
|
|
89
|
-
})
|
|
90
|
-
.join("\n");
|
|
91
|
-
return `export const ${name} = {\n${lines}\n} as const;`;
|
|
92
|
-
}
|
|
93
|
-
function renderDoc(description, indent) {
|
|
94
|
-
if (!description)
|
|
95
|
-
return "";
|
|
96
|
-
const normalized = description
|
|
97
|
-
.replaceAll("*/", "*\\/")
|
|
98
|
-
.split(/\r?\n/)
|
|
99
|
-
.map((line) => `${indent} * ${line}`)
|
|
100
|
-
.join("\n");
|
|
101
|
-
return `${indent}/**\n${normalized}\n${indent} */\n`;
|
|
102
|
-
}
|
|
103
|
-
export function renderMeasurementsTs(json, lang) {
|
|
104
|
-
const physical = renderSection("GeneratedPhysicalMeasurements", json.physical, lang);
|
|
105
|
-
const dataSize = renderSection("GeneratedDataSizeMeasurements", json.dataSize, lang);
|
|
106
|
-
const counter = renderSection("GeneratedCounterMeasurements", json.counter, lang);
|
|
107
|
-
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`;
|
|
108
|
-
}
|
|
109
|
-
export async function generateUnsMeasurements(args) {
|
|
110
|
-
const input = args.input ?? DEFAULT_INPUT;
|
|
111
|
-
const output = args.output ?? DEFAULT_OUTPUT;
|
|
112
|
-
const lang = args.lang ?? "sl";
|
|
113
|
-
const json = await loadJson(input);
|
|
114
|
-
const content = renderMeasurementsTs(json, lang);
|
|
115
|
-
const changed = await writeTextFileIfChanged(output, content);
|
|
116
|
-
console.log(`Generated measurements -> ${output}${changed ? "" : " (unchanged)"}`);
|
|
117
|
-
}
|
|
118
|
-
const isDirectExecution = process.argv[1]
|
|
119
|
-
? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href
|
|
120
|
-
: false;
|
|
121
|
-
if (isDirectExecution) {
|
|
122
|
-
main().catch((err) => {
|
|
123
|
-
console.error("Failed to generate measurements:", err);
|
|
124
|
-
process.exitCode = 1;
|
|
125
|
-
});
|
|
126
|
-
}
|
|
63
|
+
`);
|
|
64
|
+
}
|
|
65
|
+
async function loadJson(filePath) {
|
|
66
|
+
const abs = path.resolve(process.cwd(), filePath);
|
|
67
|
+
const raw = await readFile(abs, "utf8");
|
|
68
|
+
return JSON.parse(raw);
|
|
69
|
+
}
|
|
70
|
+
const resolveDesc = (entry, lang) => {
|
|
71
|
+
if (!entry)
|
|
72
|
+
return undefined;
|
|
73
|
+
const byLang = entry.descriptions?.[lang];
|
|
74
|
+
if (byLang && byLang.length > 0)
|
|
75
|
+
return byLang;
|
|
76
|
+
if (entry.description && entry.description.length > 0)
|
|
77
|
+
return entry.description;
|
|
78
|
+
return undefined;
|
|
79
|
+
};
|
|
80
|
+
function renderSection(name, entries, lang) {
|
|
81
|
+
if (!entries)
|
|
82
|
+
return `export const ${name} = {} as const;`;
|
|
83
|
+
const lines = Object.entries(entries)
|
|
84
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
85
|
+
.map(([key, entry]) => {
|
|
86
|
+
const desc = resolveDesc(entry, lang);
|
|
87
|
+
const doc = renderDoc(desc, " ");
|
|
88
|
+
return `${doc} "${key}": "${entry.value}",`;
|
|
89
|
+
})
|
|
90
|
+
.join("\n");
|
|
91
|
+
return `export const ${name} = {\n${lines}\n} as const;`;
|
|
92
|
+
}
|
|
93
|
+
function renderDoc(description, indent) {
|
|
94
|
+
if (!description)
|
|
95
|
+
return "";
|
|
96
|
+
const normalized = description
|
|
97
|
+
.replaceAll("*/", "*\\/")
|
|
98
|
+
.split(/\r?\n/)
|
|
99
|
+
.map((line) => `${indent} * ${line}`)
|
|
100
|
+
.join("\n");
|
|
101
|
+
return `${indent}/**\n${normalized}\n${indent} */\n`;
|
|
102
|
+
}
|
|
103
|
+
export function renderMeasurementsTs(json, lang) {
|
|
104
|
+
const physical = renderSection("GeneratedPhysicalMeasurements", json.physical, lang);
|
|
105
|
+
const dataSize = renderSection("GeneratedDataSizeMeasurements", json.dataSize, lang);
|
|
106
|
+
const counter = renderSection("GeneratedCounterMeasurements", json.counter, lang);
|
|
107
|
+
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`;
|
|
108
|
+
}
|
|
109
|
+
export async function generateUnsMeasurements(args) {
|
|
110
|
+
const input = args.input ?? DEFAULT_INPUT;
|
|
111
|
+
const output = args.output ?? DEFAULT_OUTPUT;
|
|
112
|
+
const lang = args.lang ?? "sl";
|
|
113
|
+
const json = await loadJson(input);
|
|
114
|
+
const content = renderMeasurementsTs(json, lang);
|
|
115
|
+
const changed = await writeTextFileIfChanged(output, content);
|
|
116
|
+
console.log(`Generated measurements -> ${output}${changed ? "" : " (unchanged)"}`);
|
|
117
|
+
}
|
|
118
|
+
const isDirectExecution = process.argv[1]
|
|
119
|
+
? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href
|
|
120
|
+
: false;
|
|
121
|
+
if (isDirectExecution) {
|
|
122
|
+
main().catch((err) => {
|
|
123
|
+
console.error("Failed to generate measurements:", err);
|
|
124
|
+
process.exitCode = 1;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
127
|
//# sourceMappingURL=generate-uns-measurements.js.map
|
|
@@ -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\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"]}
|
|
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,3 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
export {};
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export {};
|
|
3
3
|
//# sourceMappingURL=generate-uns-reference.d.ts.map
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Generate both UNS dictionary and measurements in one go.
|
|
4
|
-
* This is a small wrapper over generate-uns-dictionary.ts and
|
|
5
|
-
* generate-uns-measurements.ts to make project setup simpler.
|
|
6
|
-
*/
|
|
7
|
-
import path from "node:path";
|
|
8
|
-
import { pathToFileURL } from "node:url";
|
|
9
|
-
import { generateUnsDictionary } from "./generate-uns-dictionary.js";
|
|
10
|
-
import { generateUnsMeasurements } from "./generate-uns-measurements.js";
|
|
11
|
-
const DEFAULT_DICT_INPUT = "uns-dictionary.json";
|
|
12
|
-
const DEFAULT_DICT_OUTPUT = path.resolve(process.cwd(), "src/uns/uns-dictionary.generated.ts");
|
|
13
|
-
const DEFAULT_MEAS_INPUT = "uns-measurements.json";
|
|
14
|
-
const DEFAULT_MEAS_OUTPUT = path.resolve(process.cwd(), "src/uns/uns-measurements.generated.ts");
|
|
15
|
-
async function main() {
|
|
16
|
-
const args = parseArgs(process.argv.slice(2));
|
|
17
|
-
await generateUnsDictionary({
|
|
18
|
-
input: args.dictionary,
|
|
19
|
-
output: args.dictionaryOutput,
|
|
20
|
-
lang: args.lang,
|
|
21
|
-
});
|
|
22
|
-
await generateUnsMeasurements({
|
|
23
|
-
input: args.measurements,
|
|
24
|
-
output: args.measurementsOutput,
|
|
25
|
-
lang: args.lang,
|
|
26
|
-
});
|
|
27
|
-
console.log(`Generated reference -> dictionary: ${args.dictionaryOutput}, measurements: ${args.measurementsOutput}`);
|
|
28
|
-
}
|
|
29
|
-
function parseArgs(argv) {
|
|
30
|
-
let dictionary = DEFAULT_DICT_INPUT;
|
|
31
|
-
let dictionaryOutput = DEFAULT_DICT_OUTPUT;
|
|
32
|
-
let measurements = DEFAULT_MEAS_INPUT;
|
|
33
|
-
let measurementsOutput = DEFAULT_MEAS_OUTPUT;
|
|
34
|
-
let lang = "sl";
|
|
35
|
-
for (let i = 0; i < argv.length; i++) {
|
|
36
|
-
const arg = argv[i];
|
|
37
|
-
if (arg === "--dictionary" && argv[i + 1]) {
|
|
38
|
-
dictionary = argv[++i];
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (arg === "--dictionary-output" && argv[i + 1]) {
|
|
42
|
-
dictionaryOutput = argv[++i];
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
if (arg === "--measurements" && argv[i + 1]) {
|
|
46
|
-
measurements = argv[++i];
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
if (arg === "--measurements-output" && argv[i + 1]) {
|
|
50
|
-
measurementsOutput = argv[++i];
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
if (arg === "--lang" && argv[i + 1]) {
|
|
54
|
-
lang = argv[++i];
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
if (arg === "--help" || arg === "-h") {
|
|
58
|
-
printHelp();
|
|
59
|
-
process.exit(0);
|
|
60
|
-
}
|
|
61
|
-
throw new Error(`Unknown argument: ${arg}`);
|
|
62
|
-
}
|
|
63
|
-
return { dictionary, dictionaryOutput, measurements, measurementsOutput, lang };
|
|
64
|
-
}
|
|
65
|
-
function printHelp() {
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generate both UNS dictionary and measurements in one go.
|
|
4
|
+
* This is a small wrapper over generate-uns-dictionary.ts and
|
|
5
|
+
* generate-uns-measurements.ts to make project setup simpler.
|
|
6
|
+
*/
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { pathToFileURL } from "node:url";
|
|
9
|
+
import { generateUnsDictionary } from "./generate-uns-dictionary.js";
|
|
10
|
+
import { generateUnsMeasurements } from "./generate-uns-measurements.js";
|
|
11
|
+
const DEFAULT_DICT_INPUT = "uns-dictionary.json";
|
|
12
|
+
const DEFAULT_DICT_OUTPUT = path.resolve(process.cwd(), "src/uns/uns-dictionary.generated.ts");
|
|
13
|
+
const DEFAULT_MEAS_INPUT = "uns-measurements.json";
|
|
14
|
+
const DEFAULT_MEAS_OUTPUT = path.resolve(process.cwd(), "src/uns/uns-measurements.generated.ts");
|
|
15
|
+
async function main() {
|
|
16
|
+
const args = parseArgs(process.argv.slice(2));
|
|
17
|
+
await generateUnsDictionary({
|
|
18
|
+
input: args.dictionary,
|
|
19
|
+
output: args.dictionaryOutput,
|
|
20
|
+
lang: args.lang,
|
|
21
|
+
});
|
|
22
|
+
await generateUnsMeasurements({
|
|
23
|
+
input: args.measurements,
|
|
24
|
+
output: args.measurementsOutput,
|
|
25
|
+
lang: args.lang,
|
|
26
|
+
});
|
|
27
|
+
console.log(`Generated reference -> dictionary: ${args.dictionaryOutput}, measurements: ${args.measurementsOutput}`);
|
|
28
|
+
}
|
|
29
|
+
function parseArgs(argv) {
|
|
30
|
+
let dictionary = DEFAULT_DICT_INPUT;
|
|
31
|
+
let dictionaryOutput = DEFAULT_DICT_OUTPUT;
|
|
32
|
+
let measurements = DEFAULT_MEAS_INPUT;
|
|
33
|
+
let measurementsOutput = DEFAULT_MEAS_OUTPUT;
|
|
34
|
+
let lang = "sl";
|
|
35
|
+
for (let i = 0; i < argv.length; i++) {
|
|
36
|
+
const arg = argv[i];
|
|
37
|
+
if (arg === "--dictionary" && argv[i + 1]) {
|
|
38
|
+
dictionary = argv[++i];
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (arg === "--dictionary-output" && argv[i + 1]) {
|
|
42
|
+
dictionaryOutput = argv[++i];
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (arg === "--measurements" && argv[i + 1]) {
|
|
46
|
+
measurements = argv[++i];
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (arg === "--measurements-output" && argv[i + 1]) {
|
|
50
|
+
measurementsOutput = argv[++i];
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (arg === "--lang" && argv[i + 1]) {
|
|
54
|
+
lang = argv[++i];
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (arg === "--help" || arg === "-h") {
|
|
58
|
+
printHelp();
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
62
|
+
}
|
|
63
|
+
return { dictionary, dictionaryOutput, measurements, measurementsOutput, lang };
|
|
64
|
+
}
|
|
65
|
+
function printHelp() {
|
|
66
66
|
console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-reference.ts [options]
|
|
67
67
|
|
|
68
68
|
Options:
|
|
@@ -72,15 +72,15 @@ Options:
|
|
|
72
72
|
--measurements-output <file> Path to generated measurements TS (default: ${DEFAULT_MEAS_OUTPUT})
|
|
73
73
|
--lang <code> Preferred description language (default: "sl")
|
|
74
74
|
--help, -h Show this help
|
|
75
|
-
`);
|
|
76
|
-
}
|
|
77
|
-
const isDirectExecution = process.argv[1]
|
|
78
|
-
? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href
|
|
79
|
-
: false;
|
|
80
|
-
if (isDirectExecution) {
|
|
81
|
-
main().catch((err) => {
|
|
82
|
-
console.error("Failed to generate UNS reference:", err);
|
|
83
|
-
process.exitCode = 1;
|
|
84
|
-
});
|
|
85
|
-
}
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
const isDirectExecution = process.argv[1]
|
|
78
|
+
? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href
|
|
79
|
+
: false;
|
|
80
|
+
if (isDirectExecution) {
|
|
81
|
+
main().catch((err) => {
|
|
82
|
+
console.error("Failed to generate UNS reference:", err);
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
86
|
//# sourceMappingURL=generate-uns-reference.js.map
|
|
@@ -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\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
|
+
{"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\r\n/**\r\n * Generate both UNS dictionary and measurements in one go.\r\n * This is a small wrapper over generate-uns-dictionary.ts and\r\n * generate-uns-measurements.ts to make project setup simpler.\r\n */\r\nimport path from \"node:path\";\r\nimport { pathToFileURL } from \"node:url\";\r\nimport { generateUnsDictionary } from \"./generate-uns-dictionary.js\";\r\nimport { generateUnsMeasurements } from \"./generate-uns-measurements.js\";\r\n\r\ntype CliArgs = {\r\n dictionary: string;\r\n dictionaryOutput: string;\r\n measurements: string;\r\n measurementsOutput: string;\r\n lang: string;\r\n};\r\n\r\nconst DEFAULT_DICT_INPUT = \"uns-dictionary.json\";\r\nconst DEFAULT_DICT_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-dictionary.generated.ts\");\r\nconst DEFAULT_MEAS_INPUT = \"uns-measurements.json\";\r\nconst DEFAULT_MEAS_OUTPUT = path.resolve(process.cwd(), \"src/uns/uns-measurements.generated.ts\");\r\n\r\nasync function main(): Promise<void> {\r\n const args = parseArgs(process.argv.slice(2));\r\n\r\n await generateUnsDictionary({\r\n input: args.dictionary,\r\n output: args.dictionaryOutput,\r\n lang: args.lang,\r\n });\r\n\r\n await generateUnsMeasurements({\r\n input: args.measurements,\r\n output: args.measurementsOutput,\r\n lang: args.lang,\r\n });\r\n\r\n console.log(\r\n `Generated reference -> dictionary: ${args.dictionaryOutput}, measurements: ${args.measurementsOutput}`,\r\n );\r\n}\r\n\r\nfunction parseArgs(argv: string[]): CliArgs {\r\n let dictionary = DEFAULT_DICT_INPUT;\r\n let dictionaryOutput = DEFAULT_DICT_OUTPUT;\r\n let measurements = DEFAULT_MEAS_INPUT;\r\n let measurementsOutput = DEFAULT_MEAS_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 === \"--dictionary\" && argv[i + 1]) {\r\n dictionary = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--dictionary-output\" && argv[i + 1]) {\r\n dictionaryOutput = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--measurements\" && argv[i + 1]) {\r\n measurements = argv[++i];\r\n continue;\r\n }\r\n if (arg === \"--measurements-output\" && argv[i + 1]) {\r\n measurementsOutput = 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 { dictionary, dictionaryOutput, measurements, measurementsOutput, lang };\r\n}\r\n\r\nfunction printHelp(): void {\r\n console.log(`Usage: tsx packages/uns-core/src/tools/generate-uns-reference.ts [options]\r\n\r\nOptions:\r\n --dictionary <file> Path to uns-dictionary.json (default: ${DEFAULT_DICT_INPUT})\r\n --dictionary-output <file> Path to generated dictionary TS (default: ${DEFAULT_DICT_OUTPUT})\r\n --measurements <file> Path to uns-measurements.json (default: ${DEFAULT_MEAS_INPUT})\r\n --measurements-output <file> Path to generated measurements TS (default: ${DEFAULT_MEAS_OUTPUT})\r\n --lang <code> Preferred description language (default: \"sl\")\r\n --help, -h Show this help\r\n`);\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 UNS reference:\", err);\r\n process.exitCode = 1;\r\n });\r\n}\r\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\";\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"]}
|
|
1
|
+
{"version":3,"file":"pull-request.js","sourceRoot":"","sources":["../../src/tools/pull-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAI/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAa,SAAS,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC;AACzE,MAAM,GAAG,GAAc,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACjE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE5D,IAAI,iBAAiB,GAAG,EAAE,CAAC;AAC3B,IAAI,YAAY,GAAG,EAAE,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;IAC7C,iBAAiB,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,iBAAiB,CAAC;IAChF,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,YAAY,CAAC;AACnE,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,uDAAuD;AACzD,CAAC;AAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvB,MAAM,IAAI,KAAK,CACb,8HAA8H,CAC/H,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,YAAY,EAAE,CAAC;IAClB,MAAM,IAAI,KAAK,CACb,oHAAoH,CACrH,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,WAAW,iBAAiB,kBAAkB,iBAAiB,EAAE,CAAC;AACjF,MAAM,UAAU,GAAG,yBAAyB,iBAAiB,EAAE,CAAC;AAChE,MAAM,SAAS,GAAG,GAAG,UAAU,wBAAwB,CAAC;AAExD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,MAAM,QAAQ,GAAW,WAAW,CAAC,IAAI,CAAC;AAC1C,MAAM,OAAO,GAAW,WAAW,CAAC,OAAO,CAAC;AAE5C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;AACzC,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC;AAEvC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;AAErC,IAAI,KAAK,GAAW,EAAE,CAAC;AACvB,IAAI,MAA8B,CAAC;AACnC,IAAI,WAAkC,CAAC;AAcvC,SAAS,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACzB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC1B;QACD,MAAM,EAAE,KAAK;QACb,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,cAAc,GAAG,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/F,OAAO;QACL,OAAO,EAAE,UAAU,IAAI,SAAS;QAChC,KAAK,EAAE,QAAQ,IAAI,SAAS;QAC5B,WAAW,EAAE,cAAc,IAAI,SAAS;QACxC,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;QACL,2FAA2F;QAC3F,EAAE;QACF,4CAA4C;QAC5C,+EAA+E;QAC/E,EAAE;QACF,cAAc;QACd,wDAAwD;KACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAmD,CAAC;IACxG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;AAE/B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,QAA8B,CAAC;AAEnC,IAAI,CAAC;IACH,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;QAAS,CAAC;IACT,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,GAAY;IAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAChD,MAAM,oBAAoB,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;IAC5E,IAAI,oBAAoB,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,+HAA+H,WAAW,EAAE,EAAE,CAC/I,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnD,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,4HAA4H,CAC7H,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACjC,KAAK,GAAG,MAAM,CAAC;YACf,MAAM,WAAW,GAAG,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACzD,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;gBACzD,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC3B,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;gBACnF,KAAK,GAAG,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,KAAK,cAAc,EAAE,CAAC;YAC9B,KAAK;gBACH,CAAC,MAAM,QAAQ,CAAC,QAAQ,CACtB,+CAA+C,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,CACvF,CAAC,IAAI,EAAE,CAAC;YACX,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAErB,MAAM,WAAW,GAAG,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC3B,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;gBACnF,KAAK,GAAG,EAAE,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACtD,WAAW,GAAG,SAAS,CAAC;QACtB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,oBAAoB,UAAU,EAAE,CAAC;KAC3C,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAE7B,MAAM,sBAAsB,EAAE,CAAC;IAE/B,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAElE,MAAM,UAAU,CAAC,eAAe,CAAC,CAAC;IAClC,MAAM,aAAa,CAAC,eAAe,CAAC,CAAC;IACrC,MAAM,WAAW,EAAE,CAAC;IACpB,MAAM,iBAAiB,CAAC,eAAe,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,UAAmB;IAC3C,MAAM,gBAAgB,GAAG,kBAAkB,EAAE,CAAC;IAC9C,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;IAClC,OAAO,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,QAAQ,KAAK,cAAc,EAAE,CAAC;YAC9B,UAAU;gBACR,CAAC,MAAM,QAAQ,CAAC,QAAQ,CACtB,sFAAsF,OAAO,KAAK,CACnG,CAAC,IAAI,OAAO,CAAC;YAChB,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC;QAC5C,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,OAAO,CAAC,aAAa,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,UAAU,+BAA+B,CAAC,CAAC,CAAC;YAClF,IAAI,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CACb,WAAW,UAAU,iFAAiF,CACvG,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAA;YAC1C,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAiB;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,iGAAiG,WAAW,EAAE,EAAE,CACjH,CAAC;IACJ,CAAC;IACD,QAAQ,KAAK,cAAc,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,cAAuB;IACnD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,uGAAuG,WAAW,EAAE,EAAE,CACvH,CAAC;IACJ,CAAC;IACD,QAAQ,KAAK,cAAc,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3F,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,UAAkB;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,aAAa,GAAG,CAAC,CAAC;IACnE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,GAAG,CAAC,MAAM,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,gBAAgB,GAAG,kBAAkB,EAAE,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,aAAa,GAAG,CAAC,CAAC;IACxE,MAAM,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,UAAkB;IAC1C,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;QACnE,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAEtD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,KAAa,EAAE,WAAmB;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,aAAa,aAAa,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,OAAO,GAAW,YAAY,CAAC;IACrC,MAAM,KAAK,GAAoB,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,sBAAsB,GAAmB;QAC7C,aAAa,EAAE,cAAc,aAAa,EAAE;QAC5C,aAAa,EAAE,mBAAmB;QAClC,KAAK;QACL,WAAW;QACX,MAAM,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,EAAC,CAAC;KACnC,CAAC;IACF,MAAM,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI,OAAO,SAAS,QAAQ,gBAAgB,CAAC,CAAC,CAAC;AACzH,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAErE,IAAI,aAAa,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,8DAA8D,aAAa,4CAA4C,CACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;YACpC,MAAM,qBAAqB,GAAG,2DAA2D,CAAC;YAC1F,IAAI,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAA2B;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC;IAC7B,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7E,CAAC;AAED,SAAS,2BAA2B,CAAC,mBAA2B;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1E,OAAO,wBAAwB,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC","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"]}
|