@uns-kit/core 2.0.25 → 2.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +137 -137
  3. package/dist/app-config.d.ts.map +1 -0
  4. package/dist/app-config.js.map +1 -0
  5. package/dist/base-path.js.map +1 -1
  6. package/dist/config/app-config.d.ts +1 -0
  7. package/dist/config/app-config.d.ts.map +1 -1
  8. package/dist/config/app-config.js.map +1 -1
  9. package/dist/config/project.config.extension.js.map +1 -1
  10. package/dist/config-file.js.map +1 -1
  11. package/dist/graphql/schema.js.map +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/logger.js +1 -1
  14. package/dist/logger.js.map +1 -1
  15. package/dist/tools/auth/auth-client.js.map +1 -1
  16. package/dist/tools/auth/index.js.map +1 -1
  17. package/dist/tools/auth/secure-store.js.map +1 -1
  18. package/dist/tools/base-path.js.map +1 -1
  19. package/dist/tools/file-utils.js.map +1 -1
  20. package/dist/tools/generate-config-schema.js.map +1 -1
  21. package/dist/tools/generate-uns-dictionary.js +7 -7
  22. package/dist/tools/generate-uns-dictionary.js.map +1 -1
  23. package/dist/tools/generate-uns-measurements.js +7 -7
  24. package/dist/tools/generate-uns-measurements.js.map +1 -1
  25. package/dist/tools/generate-uns-reference.js +9 -9
  26. package/dist/tools/generate-uns-reference.js.map +1 -1
  27. package/dist/tools/pull-request.js.map +1 -1
  28. package/dist/tools/refresh-uns.js +50 -50
  29. package/dist/tools/refresh-uns.js.map +1 -1
  30. package/dist/tools/schema.js.map +1 -1
  31. package/dist/tools/sync-uns-schema.js +17 -17
  32. package/dist/tools/sync-uns-schema.js.map +1 -1
  33. package/dist/uns/handover-manager-event-emitter.js.map +1 -1
  34. package/dist/uns/handover-manager.js.map +1 -1
  35. package/dist/uns/process-config.js.map +1 -1
  36. package/dist/uns/process-name-service.js.map +1 -1
  37. package/dist/uns/status-monitor.js.map +1 -1
  38. package/dist/uns/uns-asset.js.map +1 -1
  39. package/dist/uns/uns-attributes.js.map +1 -1
  40. package/dist/uns/uns-dictionary-registry.js.map +1 -1
  41. package/dist/uns/uns-dictionary.generated.js.map +1 -1
  42. package/dist/uns/uns-event-emitter.js.map +1 -1
  43. package/dist/uns/uns-interfaces.js.map +1 -1
  44. package/dist/uns/uns-measurements.generated.js.map +1 -1
  45. package/dist/uns/uns-measurements.js.map +1 -1
  46. package/dist/uns/uns-object.js.map +1 -1
  47. package/dist/uns/uns-packet.js.map +1 -1
  48. package/dist/uns/uns-path.js.map +1 -1
  49. package/dist/uns/uns-proxy-process.js.map +1 -1
  50. package/dist/uns/uns-proxy.js.map +1 -1
  51. package/dist/uns/uns-tags.js.map +1 -1
  52. package/dist/uns/uns-topic-matcher.js.map +1 -1
  53. package/dist/uns/uns-topics.js.map +1 -1
  54. package/dist/uns-config/config-schema.js.map +1 -1
  55. package/dist/uns-config/host-placeholders.js.map +1 -1
  56. package/dist/uns-config/schema-tolls.js.map +1 -1
  57. package/dist/uns-config/schema-tools.js.map +1 -1
  58. package/dist/uns-config/secret-placeholders.js.map +1 -1
  59. package/dist/uns-config/secret-resolver.js.map +1 -1
  60. package/dist/uns-config/uns-core-schema.d.ts +405 -400
  61. package/dist/uns-config/uns-core-schema.d.ts.map +1 -1
  62. package/dist/uns-config/uns-core-schema.js +10 -0
  63. package/dist/uns-config/uns-core-schema.js.map +1 -1
  64. package/dist/uns-grpc/uns-gateway-cli.js.map +1 -1
  65. package/dist/uns-grpc/uns-gateway-server.js.map +1 -1
  66. package/dist/uns-grpc/uns-gateway.proto +104 -104
  67. package/dist/uns-mqtt/mqtt-interfaces.js.map +1 -1
  68. package/dist/uns-mqtt/mqtt-proxy.js.map +1 -1
  69. package/dist/uns-mqtt/mqtt-topic-builder.js.map +1 -1
  70. package/dist/uns-mqtt/mqtt-worker-init.js.map +1 -1
  71. package/dist/uns-mqtt/mqtt-worker.js.map +1 -1
  72. package/dist/uns-mqtt/throttled-queue.js.map +1 -1
  73. package/dist/uns-mqtt/uns-mqtt-proxy.js.map +1 -1
  74. package/dist/uns-mqtt/ws-proxy.js.map +1 -1
  75. package/package.json +1 -1
@@ -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":"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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"]}
@@ -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\";\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"]}
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 +1 @@
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"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"","sourcesContent":["export type Maybe<T> = T | null;\r\nexport type InputMaybe<T> = Maybe<T>;\r\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\r\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\r\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\r\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\r\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\r\n/** All built-in and custom scalars, mapped to their actual values */\r\nexport type Scalars = {\r\n ID: { input: string; output: string; }\r\n String: { input: string; output: string; }\r\n Boolean: { input: boolean; output: boolean; }\r\n Int: { input: number; output: number; }\r\n Float: { input: number; output: number; }\r\n Date: { input: any; output: any; }\r\n};\r\n\r\nexport type ActivateMqttTranslation = {\r\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n/** MQTT Translator object. */\r\nexport type AddMqttTranslation = {\r\n description?: InputMaybe<Scalars['String']['input']>;\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n targetTag?: InputMaybe<Scalars['String']['input']>;\r\n targetTopic?: InputMaybe<Scalars['String']['input']>;\r\n uom?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type AddMqttTranslatorTopic = {\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type DeleteMqttTranslation = {\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type DeleteMqttTranslatorTopic = {\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type InitMqttTranslation = {\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type InsertUnsNode = {\r\n parent?: InputMaybe<Scalars['Int']['input']>;\r\n unsNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type ModifyMqttTranslation = {\r\n description?: InputMaybe<Scalars['String']['input']>;\r\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n targetTag?: InputMaybe<Scalars['String']['input']>;\r\n targetTopic?: InputMaybe<Scalars['String']['input']>;\r\n uom?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n/** MQTT Translator object. */\r\nexport type MqttTranslation = {\r\n __typename?: 'MqttTranslation';\r\n description?: Maybe<Scalars['String']['output']>;\r\n enabled?: Maybe<Scalars['Boolean']['output']>;\r\n sourceTag?: Maybe<Scalars['String']['output']>;\r\n sourceTopic?: Maybe<Scalars['String']['output']>;\r\n targetTag?: Maybe<Scalars['String']['output']>;\r\n targetTopic?: Maybe<Scalars['String']['output']>;\r\n uom?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type MqttTranslatorTopic = {\r\n __typename?: 'MqttTranslatorTopic';\r\n sourceTopic?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type Mutation = {\r\n __typename?: 'Mutation';\r\n ActivateMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n AddMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n /** Add MQTT topic to be translated. */\r\n AddMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\r\n AddUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n /** Add MQTT translation. */\r\n DeleteMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n DeleteMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\r\n DeleteRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n DeleteUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n DeployRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n /** Populate MQTT Translator table with sourceTag and sourceTopic. */\r\n InitMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n /** Update MQTT Translator table with defined targetTopic. */\r\n ModifyMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n ModifyUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n StartRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n StopRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n};\r\n\r\n\r\nexport type MutationActivateMqttTranslationArgs = {\r\n entry?: InputMaybe<ActivateMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationAddMqttTranslationArgs = {\r\n entry?: InputMaybe<AddMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationAddMqttTranslatorTopicArgs = {\r\n entry?: InputMaybe<AddMqttTranslatorTopic>;\r\n};\r\n\r\n\r\nexport type MutationAddUnsNodeArgs = {\r\n node?: InputMaybe<InsertUnsNode>;\r\n};\r\n\r\n\r\nexport type MutationDeleteMqttTranslationArgs = {\r\n entry?: InputMaybe<DeleteMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationDeleteMqttTranslatorTopicArgs = {\r\n entry?: InputMaybe<DeleteMqttTranslatorTopic>;\r\n};\r\n\r\n\r\nexport type MutationDeleteRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationDeleteUnsNodeArgs = {\r\n id?: InputMaybe<Scalars['Int']['input']>;\r\n};\r\n\r\n\r\nexport type MutationDeployRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n tag?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationInitMqttTranslationArgs = {\r\n entry?: InputMaybe<InitMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationModifyMqttTranslationArgs = {\r\n entry?: InputMaybe<ModifyMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationModifyUnsNodeArgs = {\r\n id?: InputMaybe<Scalars['Int']['input']>;\r\n node?: InputMaybe<UpdateUnsNode>;\r\n};\r\n\r\n\r\nexport type MutationStartRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationStopRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n/** name: uns-datahub */\r\nexport type Query = {\r\n __typename?: 'Query';\r\n GetAssets?: Maybe<Array<Maybe<UnsAssetSummary>>>;\r\n GetAttributes?: Maybe<Array<Maybe<UnsAttributeSummary>>>;\r\n GetTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n /** Get MQTT Translator translations. */\r\n GetMqttTranslations?: Maybe<Array<Maybe<MqttTranslation>>>;\r\n GetMqttTranslatorTopics?: Maybe<Array<Maybe<MqttTranslatorTopic>>>;\r\n GetRttNodes?: Maybe<Array<Maybe<RttNode>>>;\r\n GetTreeStructure?: Maybe<Array<Maybe<TreeStructure>>>;\r\n};\r\n\r\nexport type QueryGetAssetsArgs = {\r\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type QueryGetAttributesArgs = {\r\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type RttNode = {\r\n __typename?: 'RttNode';\r\n author?: Maybe<Scalars['String']['output']>;\r\n deployedVersions?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n lastLog?: Maybe<Scalars['String']['output']>;\r\n latestDeployedVersion?: Maybe<Scalars['String']['output']>;\r\n memory?: Maybe<Scalars['Int']['output']>;\r\n pid?: Maybe<Scalars['Int']['output']>;\r\n restarts?: Maybe<Scalars['Int']['output']>;\r\n rttNode?: Maybe<Scalars['String']['output']>;\r\n runningVersion?: Maybe<Scalars['String']['output']>;\r\n status?: Maybe<Scalars['String']['output']>;\r\n uptime?: Maybe<Scalars['Int']['output']>;\r\n version?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type TreeStructure = {\r\n __typename?: 'TreeStructure';\r\n children?: Maybe<Array<Maybe<TreeStructure>>>;\r\n id?: Maybe<Scalars['Int']['output']>;\r\n parent?: Maybe<Scalars['Int']['output']>;\r\n unsNode?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UnsAssetSummary = {\r\n __typename?: 'UnsAssetSummary';\r\n asset?: Maybe<Scalars['String']['output']>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n objectId?: Maybe<Scalars['String']['output']>;\r\n objectType?: Maybe<Scalars['String']['output']>;\r\n path?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UnsAttributeSummary = {\r\n __typename?: 'UnsAttributeSummary';\r\n attributeType?: Maybe<Scalars['String']['output']>;\r\n dataGroup?: Maybe<Scalars['String']['output']>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n objectId?: Maybe<Scalars['String']['output']>;\r\n objectType?: Maybe<Scalars['String']['output']>;\r\n path?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UnsNode = {\r\n __typename?: 'UnsNode';\r\n id?: Maybe<Scalars['Int']['output']>;\r\n parent?: Maybe<Scalars['Int']['output']>;\r\n unsNode?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UpdateUnsNode = {\r\n parent?: InputMaybe<Scalars['Int']['input']>;\r\n unsNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n"]}
@@ -178,23 +178,23 @@ function assertValidUrl(value) {
178
178
  }
179
179
  }
180
180
  function printHelp() {
181
- console.log(`Usage: tsx packages/uns-core/src/tools/sync-uns-schema.ts [options]
182
-
183
- Pull the canonical UNS schema export from a controller and refresh the local
184
- JSON files plus generated TypeScript artifacts.
185
-
186
- Options:
187
- --controller-url <url> Controller base URL (env: UNS_CONTROLLER_URL)
188
- --token <token> Bearer token for REST export (env: UNS_CONTROLLER_TOKEN)
189
- --status <value> Dictionary status filter: ${STATUS_VALUES.join("|")} (default: ${DEFAULT_STATUS}, env: UNS_SCHEMA_STATUS)
190
- --project-root <dir> Write into a generated microservice project root (env: UNS_SCHEMA_PROJECT_ROOT).
191
- When omitted, the tool auto-detects a generated project from the current working directory
192
- and otherwise updates the uns-kit repo templates.
193
- --dry-run Report file changes without writing anything
194
- --dictionary-only Sync only the UNS dictionary export
195
- --measurements-only Sync only the UNS measurements export
196
- --skip-generate Skip generated TypeScript refresh
197
- --help, -h Show this help
181
+ console.log(`Usage: tsx packages/uns-core/src/tools/sync-uns-schema.ts [options]
182
+
183
+ Pull the canonical UNS schema export from a controller and refresh the local
184
+ JSON files plus generated TypeScript artifacts.
185
+
186
+ Options:
187
+ --controller-url <url> Controller base URL (env: UNS_CONTROLLER_URL)
188
+ --token <token> Bearer token for REST export (env: UNS_CONTROLLER_TOKEN)
189
+ --status <value> Dictionary status filter: ${STATUS_VALUES.join("|")} (default: ${DEFAULT_STATUS}, env: UNS_SCHEMA_STATUS)
190
+ --project-root <dir> Write into a generated microservice project root (env: UNS_SCHEMA_PROJECT_ROOT).
191
+ When omitted, the tool auto-detects a generated project from the current working directory
192
+ and otherwise updates the uns-kit repo templates.
193
+ --dry-run Report file changes without writing anything
194
+ --dictionary-only Sync only the UNS dictionary export
195
+ --measurements-only Sync only the UNS measurements export
196
+ --skip-generate Skip generated TypeScript refresh
197
+ --help, -h Show this help
198
198
  `);
199
199
  }
200
200
  async function findRepoRoot() {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-uns-schema.js","sourceRoot":"","sources":["../../src/tools/sync-uns-schema.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { readTextFileIfExists, writeTextFileIfChanged } from \"./file-utils.js\";\nimport { renderDictionaryTs } from \"./generate-uns-dictionary.js\";\nimport { renderMeasurementsTs } from \"./generate-uns-measurements.js\";\n\ntype SchemaStatus = \"active\" | \"draft\" | \"deprecated\" | \"all\";\n\ntype DictionaryDocument = Parameters<typeof renderDictionaryTs>[0];\ntype MeasurementsDocument = Parameters<typeof renderMeasurementsTs>[0];\n\ntype CliArgs = {\n controllerUrl: string;\n token: string;\n status: SchemaStatus;\n projectRoot?: string;\n dryRun: boolean;\n dictionaryOnly: boolean;\n measurementsOnly: boolean;\n skipGenerate: boolean;\n help: boolean;\n};\n\ntype FileChangeResult = {\n changed: boolean;\n relativePath: string;\n};\n\ntype DictionarySummary = {\n objectTypeCount: number;\n attributeCount: number;\n jsonChanged: boolean;\n generatedChanged: FileChangeResult[];\n};\n\ntype MeasurementsSummary = {\n categoryCount: number;\n jsonChanged: boolean;\n generatedChanged: FileChangeResult[];\n};\n\ntype SyncTarget = {\n rootDir: string;\n label: string;\n dictionaryJson: string;\n measurementsJson: string;\n dictionaryGenerated: string[];\n measurementsGenerated: string[];\n};\n\nconst DEFAULT_STATUS: SchemaStatus = \"active\";\nconst GENERATOR_LANG = \"sl\";\nconst STATUS_VALUES: SchemaStatus[] = [\"active\", \"draft\", \"deprecated\", \"all\"];\n\nconst isDirectExecution = process.argv[1]\n ? import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href\n : false;\n\nasync function main(): Promise<void> {\n const args = parseArgs(process.argv.slice(2));\n\n if (args.help) {\n printHelp();\n return;\n }\n\n const target = await resolveSyncTarget(args);\n\n const shouldSyncDictionary = !args.measurementsOnly;\n const shouldSyncMeasurements = !args.dictionaryOnly;\n\n const [dictionaryDocument, measurementsDocument] = await Promise.all([\n shouldSyncDictionary ? fetchDictionaryDocument(args.controllerUrl, args.token, args.status) : Promise.resolve(undefined),\n shouldSyncMeasurements ? fetchMeasurementsDocument(args.controllerUrl, args.token) : Promise.resolve(undefined),\n ]);\n\n let dictionarySummary: DictionarySummary | undefined;\n let measurementsSummary: MeasurementsSummary | undefined;\n\n if (dictionaryDocument) {\n const content = formatJsonDocument(dictionaryDocument);\n const jsonResult = await updateFile(target.dictionaryJson, content, target.rootDir, args.dryRun);\n const generatedChanged = args.skipGenerate\n ? []\n : await updateGeneratedFiles(\n target.dictionaryGenerated,\n renderDictionaryTs(dictionaryDocument, GENERATOR_LANG),\n target.rootDir,\n args.dryRun,\n );\n\n dictionarySummary = {\n objectTypeCount: Object.keys(dictionaryDocument.objectTypes ?? {}).length,\n attributeCount: Object.keys(dictionaryDocument.attributes ?? {}).length,\n jsonChanged: jsonResult.changed,\n generatedChanged,\n };\n }\n\n if (measurementsDocument) {\n const content = formatJsonDocument(measurementsDocument);\n const jsonResult = await updateFile(target.measurementsJson, content, target.rootDir, args.dryRun);\n const generatedChanged = args.skipGenerate\n ? []\n : await updateGeneratedFiles(\n target.measurementsGenerated,\n renderMeasurementsTs(measurementsDocument, GENERATOR_LANG),\n target.rootDir,\n args.dryRun,\n );\n\n measurementsSummary = {\n categoryCount: countMeasurementCategories(measurementsDocument),\n jsonChanged: jsonResult.changed,\n generatedChanged,\n };\n }\n\n printSummary({\n controllerUrl: args.controllerUrl,\n targetLabel: target.label,\n targetRoot: target.rootDir,\n dryRun: args.dryRun,\n skipGenerate: args.skipGenerate,\n status: args.status,\n dictionary: dictionarySummary,\n measurements: measurementsSummary,\n });\n}\n\nfunction parseArgs(argv: string[]): CliArgs {\n let controllerUrl = process.env.UNS_CONTROLLER_URL?.trim() ?? \"\";\n let token = process.env.UNS_CONTROLLER_TOKEN?.trim() ?? \"\";\n let status = normalizeStatus(process.env.UNS_SCHEMA_STATUS, DEFAULT_STATUS);\n let projectRoot = process.env.UNS_SCHEMA_PROJECT_ROOT?.trim() || undefined;\n let dryRun = false;\n let dictionaryOnly = false;\n let measurementsOnly = false;\n let skipGenerate = false;\n let help = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--help\" || arg === \"-h\") {\n help = true;\n continue;\n }\n\n if (arg === \"--dry-run\") {\n dryRun = true;\n continue;\n }\n\n if (arg === \"--dictionary-only\") {\n dictionaryOnly = true;\n continue;\n }\n\n if (arg === \"--measurements-only\") {\n measurementsOnly = true;\n continue;\n }\n\n if (arg === \"--skip-generate\") {\n skipGenerate = true;\n continue;\n }\n\n if (arg === \"--project-root\") {\n projectRoot = readRequiredValue(argv, ++index, \"--project-root\");\n continue;\n }\n\n if (arg.startsWith(\"--project-root=\")) {\n projectRoot = arg.slice(\"--project-root=\".length);\n continue;\n }\n\n if (arg === \"--controller-url\") {\n controllerUrl = readRequiredValue(argv, ++index, \"--controller-url\");\n continue;\n }\n\n if (arg.startsWith(\"--controller-url=\")) {\n controllerUrl = arg.slice(\"--controller-url=\".length);\n continue;\n }\n\n if (arg === \"--token\") {\n token = readRequiredValue(argv, ++index, \"--token\");\n continue;\n }\n\n if (arg.startsWith(\"--token=\")) {\n token = arg.slice(\"--token=\".length);\n continue;\n }\n\n if (arg === \"--status\") {\n status = normalizeStatus(readRequiredValue(argv, ++index, \"--status\"), DEFAULT_STATUS);\n continue;\n }\n\n if (arg.startsWith(\"--status=\")) {\n status = normalizeStatus(arg.slice(\"--status=\".length), DEFAULT_STATUS);\n continue;\n }\n\n throw new Error(`Unknown argument: ${arg}`);\n }\n\n if (!help) {\n if (dictionaryOnly && measurementsOnly) {\n throw new Error(\"Choose either --dictionary-only or --measurements-only, not both.\");\n }\n if (!controllerUrl) {\n throw new Error(\"Missing controller URL. Use --controller-url or set UNS_CONTROLLER_URL.\");\n }\n if (!token) {\n throw new Error(\"Missing controller token. Use --token or set UNS_CONTROLLER_TOKEN.\");\n }\n assertValidUrl(controllerUrl);\n }\n\n return {\n controllerUrl,\n token,\n status,\n projectRoot,\n dryRun,\n dictionaryOnly,\n measurementsOnly,\n skipGenerate,\n help,\n };\n}\n\nfunction readRequiredValue(argv: string[], index: number, flag: string): string {\n const value = argv[index];\n if (!value) {\n throw new Error(`Missing value for ${flag}.`);\n }\n return value;\n}\n\nfunction normalizeStatus(value: string | undefined, fallback: SchemaStatus): SchemaStatus {\n if (!value) return fallback;\n const normalized = value.trim().toLowerCase();\n if (STATUS_VALUES.includes(normalized as SchemaStatus)) {\n return normalized as SchemaStatus;\n }\n throw new Error(`Invalid --status value \"${value}\". Expected one of: ${STATUS_VALUES.join(\", \")}.`);\n}\n\nfunction assertValidUrl(value: string): void {\n try {\n new URL(value);\n } catch (error) {\n throw new Error(`Invalid controller URL \"${value}\". Expected an absolute URL such as http://localhost:3200.`);\n }\n}\n\nfunction printHelp(): void {\n console.log(`Usage: tsx packages/uns-core/src/tools/sync-uns-schema.ts [options]\n\nPull the canonical UNS schema export from a controller and refresh the local\nJSON files plus generated TypeScript artifacts.\n\nOptions:\n --controller-url <url> Controller base URL (env: UNS_CONTROLLER_URL)\n --token <token> Bearer token for REST export (env: UNS_CONTROLLER_TOKEN)\n --status <value> Dictionary status filter: ${STATUS_VALUES.join(\"|\")} (default: ${DEFAULT_STATUS}, env: UNS_SCHEMA_STATUS)\n --project-root <dir> Write into a generated microservice project root (env: UNS_SCHEMA_PROJECT_ROOT).\n When omitted, the tool auto-detects a generated project from the current working directory\n and otherwise updates the uns-kit repo templates.\n --dry-run Report file changes without writing anything\n --dictionary-only Sync only the UNS dictionary export\n --measurements-only Sync only the UNS measurements export\n --skip-generate Skip generated TypeScript refresh\n --help, -h Show this help\n`);\n}\n\nasync function findRepoRoot(): Promise<string> {\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n let probeDir = currentDir;\n\n while (true) {\n const packageJsonPath = path.join(probeDir, \"package.json\");\n try {\n const raw = await readFile(packageJsonPath, \"utf8\");\n const pkg = JSON.parse(raw) as { name?: string };\n if (pkg.name === \"@uns-kit/core\") {\n return path.resolve(probeDir, \"../..\");\n }\n } catch (error) {\n // Ignore missing package.json and continue walking upward.\n }\n\n const parentDir = path.dirname(probeDir);\n if (parentDir === probeDir) {\n break;\n }\n probeDir = parentDir;\n }\n\n throw new Error(\"Could not locate the @uns-kit/core package directory from sync-uns-schema.ts.\");\n}\n\nasync function resolveSyncTarget(args: CliArgs): Promise<SyncTarget> {\n if (args.projectRoot) {\n return buildProjectTarget(path.resolve(process.cwd(), args.projectRoot));\n }\n\n const currentDir = process.cwd();\n if (await looksLikeGeneratedProjectRoot(currentDir)) {\n return buildProjectTarget(currentDir);\n }\n\n return buildRepoTarget(await findRepoRoot());\n}\n\nfunction buildRepoTarget(repoRoot: string): SyncTarget {\n return {\n rootDir: repoRoot,\n label: \"uns-kit repo templates\",\n dictionaryJson: path.join(repoRoot, \"packages/uns-cli/templates/uns-dictionary/uns-dictionary.json\"),\n measurementsJson: path.join(repoRoot, \"packages/uns-cli/templates/uns-measurements/uns-measurements.json\"),\n dictionaryGenerated: [\n path.join(repoRoot, \"packages/uns-core/src/uns/uns-dictionary.generated.ts\"),\n path.join(repoRoot, \"packages/uns-cli/templates/default/src/uns/uns-dictionary.generated.ts\"),\n ],\n measurementsGenerated: [\n path.join(repoRoot, \"packages/uns-core/src/uns/uns-measurements.generated.ts\"),\n path.join(repoRoot, \"packages/uns-cli/templates/default/src/uns/uns-measurements.generated.ts\"),\n ],\n };\n}\n\nfunction buildProjectTarget(projectRoot: string): SyncTarget {\n return {\n rootDir: projectRoot,\n label: \"generated microservice project\",\n dictionaryJson: path.join(projectRoot, \"uns-dictionary.json\"),\n measurementsJson: path.join(projectRoot, \"uns-measurements.json\"),\n dictionaryGenerated: [path.join(projectRoot, \"src/uns/uns-dictionary.generated.ts\")],\n measurementsGenerated: [path.join(projectRoot, \"src/uns/uns-measurements.generated.ts\")],\n };\n}\n\nasync function looksLikeGeneratedProjectRoot(rootDir: string): Promise<boolean> {\n const [hasPackageJson, hasConfigJson, hasUnsDir] = await Promise.all([\n pathExists(path.join(rootDir, \"package.json\")),\n pathExists(path.join(rootDir, \"config.json\")),\n pathExists(path.join(rootDir, \"src/uns\")),\n ]);\n\n return hasPackageJson && hasConfigJson && hasUnsDir;\n}\n\nasync function pathExists(targetPath: string): Promise<boolean> {\n try {\n await access(targetPath);\n return true;\n } catch (error) {\n return false;\n }\n}\n\nfunction buildControllerUrl(controllerUrl: string, relativePath: string): URL {\n const base = new URL(controllerUrl);\n if (!base.pathname.endsWith(\"/\")) {\n base.pathname = `${base.pathname}/`;\n }\n return new URL(relativePath, base);\n}\n\nasync function fetchDictionaryDocument(\n controllerUrl: string,\n token: string,\n status: SchemaStatus,\n): Promise<DictionaryDocument> {\n const url = buildControllerUrl(controllerUrl, `api/schema/export/uns-dictionary?status=${encodeURIComponent(status)}`);\n const document = await fetchJson(url, token, \"UNS dictionary\");\n if (!document || typeof document !== \"object\" || Array.isArray(document)) {\n throw new Error(`Controller returned an invalid UNS dictionary document from ${url.toString()}.`);\n }\n return document as DictionaryDocument;\n}\n\nasync function fetchMeasurementsDocument(controllerUrl: string, token: string): Promise<MeasurementsDocument> {\n const url = buildControllerUrl(controllerUrl, \"api/schema/export/uns-measurements\");\n const document = await fetchJson(url, token, \"UNS measurements\");\n if (!document || typeof document !== \"object\" || Array.isArray(document)) {\n throw new Error(`Controller returned an invalid UNS measurements document from ${url.toString()}.`);\n }\n return document as MeasurementsDocument;\n}\n\nasync function fetchJson(url: URL, token: string, label: string): Promise<unknown> {\n let response: Response;\n\n try {\n response = await fetch(url, {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n } catch (error) {\n throw new Error(`Network failure while fetching ${label} export from ${url.toString()}: ${(error as Error).message}`);\n }\n\n const text = await response.text();\n\n if (!response.ok) {\n throw new Error(formatHttpError(response, url, label, text));\n }\n\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new Error(`Controller returned invalid JSON for the ${label} export from ${url.toString()}.`);\n }\n}\n\nfunction formatHttpError(response: Response, url: URL, label: string, body: string): string {\n if (response.status === 401) {\n return `Unauthorized (401) while fetching ${label} export from ${url.toString()}. Check --token or UNS_CONTROLLER_TOKEN.`;\n }\n\n if (response.status === 403) {\n return `Forbidden (403) while fetching ${label} export from ${url.toString()}. The token must have admin access.`;\n }\n\n const detail = extractErrorDetail(body);\n return `Failed to fetch ${label} export from ${url.toString()}: HTTP ${response.status}${detail ? ` - ${detail}` : \"\"}`;\n}\n\nfunction extractErrorDetail(body: string): string {\n const trimmed = body.trim();\n if (!trimmed) return \"\";\n\n try {\n const parsed = JSON.parse(trimmed) as { error?: unknown; message?: unknown };\n if (typeof parsed.error === \"string\" && parsed.error.trim().length > 0) {\n return parsed.error.trim();\n }\n if (typeof parsed.message === \"string\" && parsed.message.trim().length > 0) {\n return parsed.message.trim();\n }\n } catch (error) {\n // Fall back to plain text handling below.\n }\n\n return trimmed.replace(/\\s+/g, \" \").slice(0, 200);\n}\n\nfunction formatJsonDocument(document: unknown): string {\n return `${JSON.stringify(document, null, 2)}\\n`;\n}\n\nasync function updateGeneratedFiles(\n filePaths: string[],\n content: string,\n repoRoot: string,\n dryRun: boolean,\n): Promise<FileChangeResult[]> {\n return Promise.all(filePaths.map((filePath) => updateFile(filePath, content, repoRoot, dryRun)));\n}\n\nasync function updateFile(\n filePath: string,\n content: string,\n repoRoot: string,\n dryRun: boolean,\n): Promise<FileChangeResult> {\n const current = await readTextFileIfExists(filePath);\n const changed = current !== content;\n const relativePath = path.relative(repoRoot, filePath);\n\n if (dryRun) {\n console.log(`${changed ? \"Would update\" : \"No change\"} ${relativePath}`);\n return { changed, relativePath };\n }\n\n if (!changed) {\n console.log(`Unchanged ${relativePath}`);\n return { changed: false, relativePath };\n }\n\n await writeTextFileIfChanged(filePath, content);\n console.log(`Updated ${relativePath}`);\n return { changed: true, relativePath };\n}\n\nfunction countMeasurementCategories(document: MeasurementsDocument): number {\n return Object.entries(document).filter(([key, value]) => {\n if (key === \"schemaVersion\") return false;\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n }).length;\n}\n\nfunction printSummary(summary: {\n controllerUrl: string;\n targetLabel: string;\n targetRoot: string;\n dryRun: boolean;\n skipGenerate: boolean;\n status: SchemaStatus;\n dictionary?: DictionarySummary;\n measurements?: MeasurementsSummary;\n}): void {\n console.log(\"\");\n console.log(summary.dryRun ? \"Dry-run summary\" : \"Sync summary\");\n console.log(` Controller: ${summary.controllerUrl}`);\n console.log(` Target: ${summary.targetLabel}`);\n console.log(` Root: ${summary.targetRoot}`);\n console.log(` Dictionary status: ${summary.status}`);\n\n if (summary.dictionary) {\n console.log(\n ` Dictionary: ${summary.dictionary.objectTypeCount} object types, ${summary.dictionary.attributeCount} attributes, JSON ${summary.dictionary.jsonChanged ? \"changed\" : \"unchanged\"}`,\n );\n if (summary.skipGenerate) {\n console.log(\" Dictionary TS: skipped\");\n } else {\n console.log(` Dictionary TS: ${renderGeneratedSummary(summary.dictionary.generatedChanged)}`);\n }\n }\n\n if (summary.measurements) {\n console.log(\n ` Measurements: ${summary.measurements.categoryCount} categories, JSON ${summary.measurements.jsonChanged ? \"changed\" : \"unchanged\"}`,\n );\n if (summary.skipGenerate) {\n console.log(\" Measurements TS: skipped\");\n } else {\n console.log(` Measurements TS: ${renderGeneratedSummary(summary.measurements.generatedChanged)}`);\n }\n }\n}\n\nfunction renderGeneratedSummary(results: FileChangeResult[]): string {\n if (!results.length) return \"none\";\n const changedCount = results.filter((result) => result.changed).length;\n return `${changedCount}/${results.length} file${results.length === 1 ? \"\" : \"s\"} changed`;\n}\n\nif (isDirectExecution) {\n main().catch((error) => {\n console.error(\"Failed to sync UNS schema:\", error instanceof Error ? error.message : error);\n process.exitCode = 1;\n });\n}\n"]}
1
+ {"version":3,"file":"sync-uns-schema.js","sourceRoot":"","sources":["../../src/tools/sync-uns-schema.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\r\nimport { access, readFile } from \"node:fs/promises\";\r\nimport path from \"node:path\";\r\nimport process from \"node:process\";\r\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\r\nimport { readTextFileIfExists, writeTextFileIfChanged } from \"./file-utils.js\";\r\nimport { renderDictionaryTs } from \"./generate-uns-dictionary.js\";\r\nimport { renderMeasurementsTs } from \"./generate-uns-measurements.js\";\r\n\r\ntype SchemaStatus = \"active\" | \"draft\" | \"deprecated\" | \"all\";\r\n\r\ntype DictionaryDocument = Parameters<typeof renderDictionaryTs>[0];\r\ntype MeasurementsDocument = Parameters<typeof renderMeasurementsTs>[0];\r\n\r\ntype CliArgs = {\r\n controllerUrl: string;\r\n token: string;\r\n status: SchemaStatus;\r\n projectRoot?: string;\r\n dryRun: boolean;\r\n dictionaryOnly: boolean;\r\n measurementsOnly: boolean;\r\n skipGenerate: boolean;\r\n help: boolean;\r\n};\r\n\r\ntype FileChangeResult = {\r\n changed: boolean;\r\n relativePath: string;\r\n};\r\n\r\ntype DictionarySummary = {\r\n objectTypeCount: number;\r\n attributeCount: number;\r\n jsonChanged: boolean;\r\n generatedChanged: FileChangeResult[];\r\n};\r\n\r\ntype MeasurementsSummary = {\r\n categoryCount: number;\r\n jsonChanged: boolean;\r\n generatedChanged: FileChangeResult[];\r\n};\r\n\r\ntype SyncTarget = {\r\n rootDir: string;\r\n label: string;\r\n dictionaryJson: string;\r\n measurementsJson: string;\r\n dictionaryGenerated: string[];\r\n measurementsGenerated: string[];\r\n};\r\n\r\nconst DEFAULT_STATUS: SchemaStatus = \"active\";\r\nconst GENERATOR_LANG = \"sl\";\r\nconst STATUS_VALUES: SchemaStatus[] = [\"active\", \"draft\", \"deprecated\", \"all\"];\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\nasync function main(): Promise<void> {\r\n const args = parseArgs(process.argv.slice(2));\r\n\r\n if (args.help) {\r\n printHelp();\r\n return;\r\n }\r\n\r\n const target = await resolveSyncTarget(args);\r\n\r\n const shouldSyncDictionary = !args.measurementsOnly;\r\n const shouldSyncMeasurements = !args.dictionaryOnly;\r\n\r\n const [dictionaryDocument, measurementsDocument] = await Promise.all([\r\n shouldSyncDictionary ? fetchDictionaryDocument(args.controllerUrl, args.token, args.status) : Promise.resolve(undefined),\r\n shouldSyncMeasurements ? fetchMeasurementsDocument(args.controllerUrl, args.token) : Promise.resolve(undefined),\r\n ]);\r\n\r\n let dictionarySummary: DictionarySummary | undefined;\r\n let measurementsSummary: MeasurementsSummary | undefined;\r\n\r\n if (dictionaryDocument) {\r\n const content = formatJsonDocument(dictionaryDocument);\r\n const jsonResult = await updateFile(target.dictionaryJson, content, target.rootDir, args.dryRun);\r\n const generatedChanged = args.skipGenerate\r\n ? []\r\n : await updateGeneratedFiles(\r\n target.dictionaryGenerated,\r\n renderDictionaryTs(dictionaryDocument, GENERATOR_LANG),\r\n target.rootDir,\r\n args.dryRun,\r\n );\r\n\r\n dictionarySummary = {\r\n objectTypeCount: Object.keys(dictionaryDocument.objectTypes ?? {}).length,\r\n attributeCount: Object.keys(dictionaryDocument.attributes ?? {}).length,\r\n jsonChanged: jsonResult.changed,\r\n generatedChanged,\r\n };\r\n }\r\n\r\n if (measurementsDocument) {\r\n const content = formatJsonDocument(measurementsDocument);\r\n const jsonResult = await updateFile(target.measurementsJson, content, target.rootDir, args.dryRun);\r\n const generatedChanged = args.skipGenerate\r\n ? []\r\n : await updateGeneratedFiles(\r\n target.measurementsGenerated,\r\n renderMeasurementsTs(measurementsDocument, GENERATOR_LANG),\r\n target.rootDir,\r\n args.dryRun,\r\n );\r\n\r\n measurementsSummary = {\r\n categoryCount: countMeasurementCategories(measurementsDocument),\r\n jsonChanged: jsonResult.changed,\r\n generatedChanged,\r\n };\r\n }\r\n\r\n printSummary({\r\n controllerUrl: args.controllerUrl,\r\n targetLabel: target.label,\r\n targetRoot: target.rootDir,\r\n dryRun: args.dryRun,\r\n skipGenerate: args.skipGenerate,\r\n status: args.status,\r\n dictionary: dictionarySummary,\r\n measurements: measurementsSummary,\r\n });\r\n}\r\n\r\nfunction parseArgs(argv: string[]): CliArgs {\r\n let controllerUrl = process.env.UNS_CONTROLLER_URL?.trim() ?? \"\";\r\n let token = process.env.UNS_CONTROLLER_TOKEN?.trim() ?? \"\";\r\n let status = normalizeStatus(process.env.UNS_SCHEMA_STATUS, DEFAULT_STATUS);\r\n let projectRoot = process.env.UNS_SCHEMA_PROJECT_ROOT?.trim() || undefined;\r\n let dryRun = false;\r\n let dictionaryOnly = false;\r\n let measurementsOnly = false;\r\n let skipGenerate = false;\r\n let help = false;\r\n\r\n for (let index = 0; index < argv.length; index += 1) {\r\n const arg = argv[index];\r\n\r\n if (arg === \"--help\" || arg === \"-h\") {\r\n help = true;\r\n continue;\r\n }\r\n\r\n if (arg === \"--dry-run\") {\r\n dryRun = true;\r\n continue;\r\n }\r\n\r\n if (arg === \"--dictionary-only\") {\r\n dictionaryOnly = true;\r\n continue;\r\n }\r\n\r\n if (arg === \"--measurements-only\") {\r\n measurementsOnly = true;\r\n continue;\r\n }\r\n\r\n if (arg === \"--skip-generate\") {\r\n skipGenerate = true;\r\n continue;\r\n }\r\n\r\n if (arg === \"--project-root\") {\r\n projectRoot = readRequiredValue(argv, ++index, \"--project-root\");\r\n continue;\r\n }\r\n\r\n if (arg.startsWith(\"--project-root=\")) {\r\n projectRoot = arg.slice(\"--project-root=\".length);\r\n continue;\r\n }\r\n\r\n if (arg === \"--controller-url\") {\r\n controllerUrl = readRequiredValue(argv, ++index, \"--controller-url\");\r\n continue;\r\n }\r\n\r\n if (arg.startsWith(\"--controller-url=\")) {\r\n controllerUrl = arg.slice(\"--controller-url=\".length);\r\n continue;\r\n }\r\n\r\n if (arg === \"--token\") {\r\n token = readRequiredValue(argv, ++index, \"--token\");\r\n continue;\r\n }\r\n\r\n if (arg.startsWith(\"--token=\")) {\r\n token = arg.slice(\"--token=\".length);\r\n continue;\r\n }\r\n\r\n if (arg === \"--status\") {\r\n status = normalizeStatus(readRequiredValue(argv, ++index, \"--status\"), DEFAULT_STATUS);\r\n continue;\r\n }\r\n\r\n if (arg.startsWith(\"--status=\")) {\r\n status = normalizeStatus(arg.slice(\"--status=\".length), DEFAULT_STATUS);\r\n continue;\r\n }\r\n\r\n throw new Error(`Unknown argument: ${arg}`);\r\n }\r\n\r\n if (!help) {\r\n if (dictionaryOnly && measurementsOnly) {\r\n throw new Error(\"Choose either --dictionary-only or --measurements-only, not both.\");\r\n }\r\n if (!controllerUrl) {\r\n throw new Error(\"Missing controller URL. Use --controller-url or set UNS_CONTROLLER_URL.\");\r\n }\r\n if (!token) {\r\n throw new Error(\"Missing controller token. Use --token or set UNS_CONTROLLER_TOKEN.\");\r\n }\r\n assertValidUrl(controllerUrl);\r\n }\r\n\r\n return {\r\n controllerUrl,\r\n token,\r\n status,\r\n projectRoot,\r\n dryRun,\r\n dictionaryOnly,\r\n measurementsOnly,\r\n skipGenerate,\r\n help,\r\n };\r\n}\r\n\r\nfunction readRequiredValue(argv: string[], index: number, flag: string): string {\r\n const value = argv[index];\r\n if (!value) {\r\n throw new Error(`Missing value for ${flag}.`);\r\n }\r\n return value;\r\n}\r\n\r\nfunction normalizeStatus(value: string | undefined, fallback: SchemaStatus): SchemaStatus {\r\n if (!value) return fallback;\r\n const normalized = value.trim().toLowerCase();\r\n if (STATUS_VALUES.includes(normalized as SchemaStatus)) {\r\n return normalized as SchemaStatus;\r\n }\r\n throw new Error(`Invalid --status value \"${value}\". Expected one of: ${STATUS_VALUES.join(\", \")}.`);\r\n}\r\n\r\nfunction assertValidUrl(value: string): void {\r\n try {\r\n new URL(value);\r\n } catch (error) {\r\n throw new Error(`Invalid controller URL \"${value}\". Expected an absolute URL such as http://localhost:3200.`);\r\n }\r\n}\r\n\r\nfunction printHelp(): void {\r\n console.log(`Usage: tsx packages/uns-core/src/tools/sync-uns-schema.ts [options]\r\n\r\nPull the canonical UNS schema export from a controller and refresh the local\r\nJSON files plus generated TypeScript artifacts.\r\n\r\nOptions:\r\n --controller-url <url> Controller base URL (env: UNS_CONTROLLER_URL)\r\n --token <token> Bearer token for REST export (env: UNS_CONTROLLER_TOKEN)\r\n --status <value> Dictionary status filter: ${STATUS_VALUES.join(\"|\")} (default: ${DEFAULT_STATUS}, env: UNS_SCHEMA_STATUS)\r\n --project-root <dir> Write into a generated microservice project root (env: UNS_SCHEMA_PROJECT_ROOT).\r\n When omitted, the tool auto-detects a generated project from the current working directory\r\n and otherwise updates the uns-kit repo templates.\r\n --dry-run Report file changes without writing anything\r\n --dictionary-only Sync only the UNS dictionary export\r\n --measurements-only Sync only the UNS measurements export\r\n --skip-generate Skip generated TypeScript refresh\r\n --help, -h Show this help\r\n`);\r\n}\r\n\r\nasync function findRepoRoot(): Promise<string> {\r\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\r\n let probeDir = currentDir;\r\n\r\n while (true) {\r\n const packageJsonPath = path.join(probeDir, \"package.json\");\r\n try {\r\n const raw = await readFile(packageJsonPath, \"utf8\");\r\n const pkg = JSON.parse(raw) as { name?: string };\r\n if (pkg.name === \"@uns-kit/core\") {\r\n return path.resolve(probeDir, \"../..\");\r\n }\r\n } catch (error) {\r\n // Ignore missing package.json and continue walking upward.\r\n }\r\n\r\n const parentDir = path.dirname(probeDir);\r\n if (parentDir === probeDir) {\r\n break;\r\n }\r\n probeDir = parentDir;\r\n }\r\n\r\n throw new Error(\"Could not locate the @uns-kit/core package directory from sync-uns-schema.ts.\");\r\n}\r\n\r\nasync function resolveSyncTarget(args: CliArgs): Promise<SyncTarget> {\r\n if (args.projectRoot) {\r\n return buildProjectTarget(path.resolve(process.cwd(), args.projectRoot));\r\n }\r\n\r\n const currentDir = process.cwd();\r\n if (await looksLikeGeneratedProjectRoot(currentDir)) {\r\n return buildProjectTarget(currentDir);\r\n }\r\n\r\n return buildRepoTarget(await findRepoRoot());\r\n}\r\n\r\nfunction buildRepoTarget(repoRoot: string): SyncTarget {\r\n return {\r\n rootDir: repoRoot,\r\n label: \"uns-kit repo templates\",\r\n dictionaryJson: path.join(repoRoot, \"packages/uns-cli/templates/uns-dictionary/uns-dictionary.json\"),\r\n measurementsJson: path.join(repoRoot, \"packages/uns-cli/templates/uns-measurements/uns-measurements.json\"),\r\n dictionaryGenerated: [\r\n path.join(repoRoot, \"packages/uns-core/src/uns/uns-dictionary.generated.ts\"),\r\n path.join(repoRoot, \"packages/uns-cli/templates/default/src/uns/uns-dictionary.generated.ts\"),\r\n ],\r\n measurementsGenerated: [\r\n path.join(repoRoot, \"packages/uns-core/src/uns/uns-measurements.generated.ts\"),\r\n path.join(repoRoot, \"packages/uns-cli/templates/default/src/uns/uns-measurements.generated.ts\"),\r\n ],\r\n };\r\n}\r\n\r\nfunction buildProjectTarget(projectRoot: string): SyncTarget {\r\n return {\r\n rootDir: projectRoot,\r\n label: \"generated microservice project\",\r\n dictionaryJson: path.join(projectRoot, \"uns-dictionary.json\"),\r\n measurementsJson: path.join(projectRoot, \"uns-measurements.json\"),\r\n dictionaryGenerated: [path.join(projectRoot, \"src/uns/uns-dictionary.generated.ts\")],\r\n measurementsGenerated: [path.join(projectRoot, \"src/uns/uns-measurements.generated.ts\")],\r\n };\r\n}\r\n\r\nasync function looksLikeGeneratedProjectRoot(rootDir: string): Promise<boolean> {\r\n const [hasPackageJson, hasConfigJson, hasUnsDir] = await Promise.all([\r\n pathExists(path.join(rootDir, \"package.json\")),\r\n pathExists(path.join(rootDir, \"config.json\")),\r\n pathExists(path.join(rootDir, \"src/uns\")),\r\n ]);\r\n\r\n return hasPackageJson && hasConfigJson && hasUnsDir;\r\n}\r\n\r\nasync function pathExists(targetPath: string): Promise<boolean> {\r\n try {\r\n await access(targetPath);\r\n return true;\r\n } catch (error) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction buildControllerUrl(controllerUrl: string, relativePath: string): URL {\r\n const base = new URL(controllerUrl);\r\n if (!base.pathname.endsWith(\"/\")) {\r\n base.pathname = `${base.pathname}/`;\r\n }\r\n return new URL(relativePath, base);\r\n}\r\n\r\nasync function fetchDictionaryDocument(\r\n controllerUrl: string,\r\n token: string,\r\n status: SchemaStatus,\r\n): Promise<DictionaryDocument> {\r\n const url = buildControllerUrl(controllerUrl, `api/schema/export/uns-dictionary?status=${encodeURIComponent(status)}`);\r\n const document = await fetchJson(url, token, \"UNS dictionary\");\r\n if (!document || typeof document !== \"object\" || Array.isArray(document)) {\r\n throw new Error(`Controller returned an invalid UNS dictionary document from ${url.toString()}.`);\r\n }\r\n return document as DictionaryDocument;\r\n}\r\n\r\nasync function fetchMeasurementsDocument(controllerUrl: string, token: string): Promise<MeasurementsDocument> {\r\n const url = buildControllerUrl(controllerUrl, \"api/schema/export/uns-measurements\");\r\n const document = await fetchJson(url, token, \"UNS measurements\");\r\n if (!document || typeof document !== \"object\" || Array.isArray(document)) {\r\n throw new Error(`Controller returned an invalid UNS measurements document from ${url.toString()}.`);\r\n }\r\n return document as MeasurementsDocument;\r\n}\r\n\r\nasync function fetchJson(url: URL, token: string, label: string): Promise<unknown> {\r\n let response: Response;\r\n\r\n try {\r\n response = await fetch(url, {\r\n headers: {\r\n Accept: \"application/json\",\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n } catch (error) {\r\n throw new Error(`Network failure while fetching ${label} export from ${url.toString()}: ${(error as Error).message}`);\r\n }\r\n\r\n const text = await response.text();\r\n\r\n if (!response.ok) {\r\n throw new Error(formatHttpError(response, url, label, text));\r\n }\r\n\r\n try {\r\n return JSON.parse(text);\r\n } catch (error) {\r\n throw new Error(`Controller returned invalid JSON for the ${label} export from ${url.toString()}.`);\r\n }\r\n}\r\n\r\nfunction formatHttpError(response: Response, url: URL, label: string, body: string): string {\r\n if (response.status === 401) {\r\n return `Unauthorized (401) while fetching ${label} export from ${url.toString()}. Check --token or UNS_CONTROLLER_TOKEN.`;\r\n }\r\n\r\n if (response.status === 403) {\r\n return `Forbidden (403) while fetching ${label} export from ${url.toString()}. The token must have admin access.`;\r\n }\r\n\r\n const detail = extractErrorDetail(body);\r\n return `Failed to fetch ${label} export from ${url.toString()}: HTTP ${response.status}${detail ? ` - ${detail}` : \"\"}`;\r\n}\r\n\r\nfunction extractErrorDetail(body: string): string {\r\n const trimmed = body.trim();\r\n if (!trimmed) return \"\";\r\n\r\n try {\r\n const parsed = JSON.parse(trimmed) as { error?: unknown; message?: unknown };\r\n if (typeof parsed.error === \"string\" && parsed.error.trim().length > 0) {\r\n return parsed.error.trim();\r\n }\r\n if (typeof parsed.message === \"string\" && parsed.message.trim().length > 0) {\r\n return parsed.message.trim();\r\n }\r\n } catch (error) {\r\n // Fall back to plain text handling below.\r\n }\r\n\r\n return trimmed.replace(/\\s+/g, \" \").slice(0, 200);\r\n}\r\n\r\nfunction formatJsonDocument(document: unknown): string {\r\n return `${JSON.stringify(document, null, 2)}\\n`;\r\n}\r\n\r\nasync function updateGeneratedFiles(\r\n filePaths: string[],\r\n content: string,\r\n repoRoot: string,\r\n dryRun: boolean,\r\n): Promise<FileChangeResult[]> {\r\n return Promise.all(filePaths.map((filePath) => updateFile(filePath, content, repoRoot, dryRun)));\r\n}\r\n\r\nasync function updateFile(\r\n filePath: string,\r\n content: string,\r\n repoRoot: string,\r\n dryRun: boolean,\r\n): Promise<FileChangeResult> {\r\n const current = await readTextFileIfExists(filePath);\r\n const changed = current !== content;\r\n const relativePath = path.relative(repoRoot, filePath);\r\n\r\n if (dryRun) {\r\n console.log(`${changed ? \"Would update\" : \"No change\"} ${relativePath}`);\r\n return { changed, relativePath };\r\n }\r\n\r\n if (!changed) {\r\n console.log(`Unchanged ${relativePath}`);\r\n return { changed: false, relativePath };\r\n }\r\n\r\n await writeTextFileIfChanged(filePath, content);\r\n console.log(`Updated ${relativePath}`);\r\n return { changed: true, relativePath };\r\n}\r\n\r\nfunction countMeasurementCategories(document: MeasurementsDocument): number {\r\n return Object.entries(document).filter(([key, value]) => {\r\n if (key === \"schemaVersion\") return false;\r\n return !!value && typeof value === \"object\" && !Array.isArray(value);\r\n }).length;\r\n}\r\n\r\nfunction printSummary(summary: {\r\n controllerUrl: string;\r\n targetLabel: string;\r\n targetRoot: string;\r\n dryRun: boolean;\r\n skipGenerate: boolean;\r\n status: SchemaStatus;\r\n dictionary?: DictionarySummary;\r\n measurements?: MeasurementsSummary;\r\n}): void {\r\n console.log(\"\");\r\n console.log(summary.dryRun ? \"Dry-run summary\" : \"Sync summary\");\r\n console.log(` Controller: ${summary.controllerUrl}`);\r\n console.log(` Target: ${summary.targetLabel}`);\r\n console.log(` Root: ${summary.targetRoot}`);\r\n console.log(` Dictionary status: ${summary.status}`);\r\n\r\n if (summary.dictionary) {\r\n console.log(\r\n ` Dictionary: ${summary.dictionary.objectTypeCount} object types, ${summary.dictionary.attributeCount} attributes, JSON ${summary.dictionary.jsonChanged ? \"changed\" : \"unchanged\"}`,\r\n );\r\n if (summary.skipGenerate) {\r\n console.log(\" Dictionary TS: skipped\");\r\n } else {\r\n console.log(` Dictionary TS: ${renderGeneratedSummary(summary.dictionary.generatedChanged)}`);\r\n }\r\n }\r\n\r\n if (summary.measurements) {\r\n console.log(\r\n ` Measurements: ${summary.measurements.categoryCount} categories, JSON ${summary.measurements.jsonChanged ? \"changed\" : \"unchanged\"}`,\r\n );\r\n if (summary.skipGenerate) {\r\n console.log(\" Measurements TS: skipped\");\r\n } else {\r\n console.log(` Measurements TS: ${renderGeneratedSummary(summary.measurements.generatedChanged)}`);\r\n }\r\n }\r\n}\r\n\r\nfunction renderGeneratedSummary(results: FileChangeResult[]): string {\r\n if (!results.length) return \"none\";\r\n const changedCount = results.filter((result) => result.changed).length;\r\n return `${changedCount}/${results.length} file${results.length === 1 ? \"\" : \"s\"} changed`;\r\n}\r\n\r\nif (isDirectExecution) {\r\n main().catch((error) => {\r\n console.error(\"Failed to sync UNS schema:\", error instanceof Error ? error.message : error);\r\n process.exitCode = 1;\r\n });\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"handover-manager-event-emitter.js","sourceRoot":"","sources":["../../src/uns/handover-manager-event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,2BAA2B;IAC9B,SAAS,GAEb,EAAE,CAAC;IAEP,EAAE,CACA,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,CAAyB,SAAY,EAAE,KAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;CACF","sourcesContent":["export class HandoverManagerEventEmitter<Events extends Record<string, any>> {\n private listeners: {\n [K in keyof Events]?: Array<(event: Events[K]) => void>;\n } = {};\n\n on<K extends keyof Events>(\n eventName: K,\n listener: (event: Events[K]) => void,\n ): void {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName]!.push(listener);\n }\n\n off<K extends keyof Events>(\n eventName: K,\n listener: (event: Events[K]) => void,\n ): void {\n if (!this.listeners[eventName]) return;\n this.listeners[eventName] = this.listeners[eventName]!.filter(\n (l) => l !== listener,\n );\n }\n\n emit<K extends keyof Events>(eventName: K, event: Events[K]): void {\n if (!this.listeners[eventName]) return;\n this.listeners[eventName]!.forEach((listener) => listener(event));\n }\n}"]}
1
+ {"version":3,"file":"handover-manager-event-emitter.js","sourceRoot":"","sources":["../../src/uns/handover-manager-event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,2BAA2B;IAC9B,SAAS,GAEb,EAAE,CAAC;IAEP,EAAE,CACA,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,CAAyB,SAAY,EAAE,KAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;CACF","sourcesContent":["export class HandoverManagerEventEmitter<Events extends Record<string, any>> {\r\n private listeners: {\r\n [K in keyof Events]?: Array<(event: Events[K]) => void>;\r\n } = {};\r\n\r\n on<K extends keyof Events>(\r\n eventName: K,\r\n listener: (event: Events[K]) => void,\r\n ): void {\r\n if (!this.listeners[eventName]) {\r\n this.listeners[eventName] = [];\r\n }\r\n this.listeners[eventName]!.push(listener);\r\n }\r\n\r\n off<K extends keyof Events>(\r\n eventName: K,\r\n listener: (event: Events[K]) => void,\r\n ): void {\r\n if (!this.listeners[eventName]) return;\r\n this.listeners[eventName] = this.listeners[eventName]!.filter(\r\n (l) => l !== listener,\r\n );\r\n }\r\n\r\n emit<K extends keyof Events>(eventName: K, event: Events[K]): void {\r\n if (!this.listeners[eventName]) return;\r\n this.listeners[eventName]!.forEach((listener) => listener(event));\r\n }\r\n}"]}