@uns-kit/core 0.0.17 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,6 +16,7 @@ npm install @uns-kit/core
16
16
  - **MQTT helpers** – resilient publishers, topic builders, throttled queues, and handover support.
17
17
  - **Configuration utilities** – Zod-powered config schema generation and secret resolution helpers.
18
18
  - **gRPC gateway helpers** – infrastructure to bridge Python workers into the UNS message fabric.
19
+ - **GraphQL tooling** – utilities such as `refresh-uns` that rebuild UNS topic/tag unions from your environment.
19
20
 
20
21
  ## Usage
21
22
 
@@ -29,6 +30,16 @@ const process = new UnsProxyProcess("mqtt-broker.svc:1883", { processName: "my-r
29
30
 
30
31
  See the individual plugin packages (`@uns-kit/cron`, `@uns-kit/api`, `@uns-kit/temporal`) for examples on extending the process with runtime capabilities.
31
32
 
33
+ ### Refresh UNS topic/tag unions
34
+
35
+ The package ships a CLI tool that regenerates strongly-typed UNS topics and tags based on the live GraphQL schema:
36
+
37
+ ```bash
38
+ pnpm run refresh-uns
39
+ ```
40
+
41
+ When configured via `uns-kit configure-codegen`, this script lives in your project `package.json` and writes into `src/uns/`.
42
+
32
43
  ## Development
33
44
 
34
45
  ```bash
@@ -175,6 +175,7 @@ export type AppConfig = {
175
175
  clientId?: string | undefined;
176
176
  };
177
177
  devops?: {
178
+ provider?: string | undefined;
178
179
  organization: string;
179
180
  project?: string | undefined;
180
181
  } | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"app-config.js","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"","sourcesContent":["/* Auto-generated. Do not edit by hand. */\nexport type AppConfig = {\n uns: {\n graphql: string;\n rest: string;\n instanceMode?: \"wait\" | \"force\" | \"handover\";\n processName?: string | undefined;\n handover?: boolean;\n jwksWellKnownUrl?: string | undefined;\n kidWellKnownUrl?: string | undefined;\n env?: \"dev\" | \"staging\" | \"test\" | \"prod\";\n };\n input?: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n } | undefined;\n output?: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n } | undefined;\n infra: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n };\n devops?: {\n organization: string;\n project?: string | undefined;\n } | undefined;\n}\n"]}
1
+ {"version":3,"file":"app-config.js","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"","sourcesContent":["/* Auto-generated. Do not edit by hand. */\nexport type AppConfig = {\n uns: {\n graphql: string;\n rest: string;\n instanceMode?: \"wait\" | \"force\" | \"handover\";\n processName?: string | undefined;\n handover?: boolean;\n jwksWellKnownUrl?: string | undefined;\n kidWellKnownUrl?: string | undefined;\n env?: \"dev\" | \"staging\" | \"test\" | \"prod\";\n };\n input?: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n } | undefined;\n output?: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n } | undefined;\n infra: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n };\n devops?: {\n provider?: string | undefined;\n organization: string;\n project?: string | undefined;\n } | undefined;\n}\n"]}
@@ -16,43 +16,37 @@ const rl = readline.createInterface({
16
16
  output: process.stdout,
17
17
  });
18
18
  const question = util.promisify(rl.question).bind(rl);
19
+ process.env.GIT_TERMINAL_PROMPT = process.env.GIT_TERMINAL_PROMPT ?? "0";
19
20
  const git = simpleGit("./").clean(CleanOptions.FORCE);
20
- git.env("GIT_TERMINAL_PROMPT", "0");
21
21
  const packageJsonPath = path.join(basePath, "package.json");
22
- const unsLibraryPath = path.join(basePath, "uns-library.json");
23
- let configOrganization;
24
- let configProject;
22
+ let azureOrganization = "";
23
+ let azureProject = "";
25
24
  try {
26
25
  const appConfig = ConfigFile.loadRawConfig();
27
- configOrganization = appConfig.devops?.organization?.trim() || undefined;
28
- configProject = appConfig.devops?.project?.trim() || undefined;
26
+ azureOrganization = appConfig.devops?.organization?.trim() || azureOrganization;
27
+ azureProject = appConfig.devops?.project?.trim() || azureProject;
29
28
  }
30
29
  catch (error) {
31
- // Continue with defaults when config.json is missing or malformed
30
+ // Use default organization when config.json is missing
32
31
  }
32
+ if (!azureOrganization) {
33
+ throw new Error("Azure DevOps organization is not configured. Please set devops.organization in config.json (run `uns-kit configure-devops`).");
34
+ }
35
+ if (!azureProject) {
36
+ throw new Error("Azure DevOps project is not configured. Please set devops.project in config.json (run `uns-kit configure-devops`).");
37
+ }
38
+ const orgUrl = `https://${azureOrganization}@dev.azure.com/${azureOrganization}`;
39
+ const orgBaseUrl = `https://dev.azure.com/${azureOrganization}`;
40
+ const tokensUrl = `${orgBaseUrl}/_usersSettings/tokens`;
33
41
  const packageJson = JSON.parse(await readFile(packageJsonPath, "utf8"));
34
42
  const repoName = packageJson.name;
35
43
  const version = packageJson.version;
36
- let originRemoteUrl;
37
- try {
38
- originRemoteUrl = (await git.raw(["remote", "get-url", "origin"])).trim();
39
- }
40
- catch (error) {
41
- // Ignore missing remote here, we surface a clearer error later when required
42
- }
43
- const remoteInfo = originRemoteUrl ? parseAzureRemote(originRemoteUrl) : undefined;
44
- let azureOrganization = (configOrganization || remoteInfo?.organization || "sijit").trim();
45
- let azureProjectName = (configProject || remoteInfo?.project || "").trim();
46
- let azureRepositoryName = (remoteInfo?.repo || inferRepositoryName(repoName)).trim();
47
44
  const branches = await git.branchLocal();
48
45
  const currentBranch = branches.current;
49
46
  const gitStatus = await git.status();
50
- const remoteName = "origin";
51
47
  let token = "";
48
+ let gitApi;
52
49
  let gitWithAuth;
53
- let orgUrl = "";
54
- let orgBaseUrl = "";
55
- let pullRequestsUrl;
56
50
  try {
57
51
  await main();
58
52
  rl.close();
@@ -65,18 +59,7 @@ async function main() {
65
59
  if (!gitStatus.isClean()) {
66
60
  throw new Error(`Repository needs to be clean. Please commit or stash the changes.`);
67
61
  }
68
- else if (currentBranch == "master") {
69
- throw new Error(`You can not create pull request from master to master.`);
70
- }
71
62
  else {
72
- if (!originRemoteUrl) {
73
- throw new Error(`Git remote "${remoteName}" is not configured. Please run uns-kit configure-devops or add the remote before creating a pull request.`);
74
- }
75
- azureProjectName = await resolveAzureProjectName();
76
- orgBaseUrl = `https://dev.azure.com/${azureOrganization}`;
77
- orgUrl = `https://${azureOrganization}@dev.azure.com/${azureOrganization}`;
78
- pullRequestsUrl = buildAzurePullRequestsUrl(azureOrganization, azureProjectName, azureRepositoryName);
79
- const tokensUrl = `${orgBaseUrl}/_usersSettings/tokens`;
80
63
  const envPat = process.env.AZURE_PAT;
81
64
  while (!token) {
82
65
  if (envPat && envPat.length > 10) {
@@ -86,6 +69,7 @@ async function main() {
86
69
  try {
87
70
  console.log("Using PAT from your AZURE_PAT environment");
88
71
  await connection.connect();
72
+ gitApi = await connection.getGitApi();
89
73
  }
90
74
  catch (error) {
91
75
  console.log("The provided PAT is invalid or expired. Please provide a valid PAT.");
@@ -93,11 +77,12 @@ async function main() {
93
77
  }
94
78
  }
95
79
  if (!token) {
96
- token = await question(`Please enter your PAT, you can create one at [${tokensUrl}]: `);
80
+ token = await question(`Please enter your PAT, you can create one at ` + chalk.green.bold(`[${tokensUrl}]: `));
97
81
  const authHandler = azdev.getPersonalAccessTokenHandler(token);
98
82
  const connection = new azdev.WebApi(orgUrl, authHandler);
99
83
  try {
100
84
  await connection.connect();
85
+ gitApi = await connection.getGitApi();
101
86
  }
102
87
  catch (error) {
103
88
  console.log("The provided PAT is invalid or expired. Please provide a valid PAT.");
@@ -105,26 +90,26 @@ async function main() {
105
90
  }
106
91
  }
107
92
  }
108
- gitWithAuth = simpleGit("./");
109
- gitWithAuth.env("GIT_TERMINAL_PROMPT", "0");
110
- gitWithAuth.env("GIT_HTTP_EXTRAHEADER", buildGitAuthorizationHeader(token));
93
+ const authHeader = buildGitAuthorizationHeader(token);
94
+ gitWithAuth = simpleGit({
95
+ baseDir: "./",
96
+ config: [`http.extraheader=${authHeader}`],
97
+ }).clean(CleanOptions.FORCE);
98
+ await assertNotDefaultBranch();
111
99
  const version = await getVersion();
112
100
  await setVersion(version);
113
- await runMake();
114
101
  await commitChanges(version);
115
102
  await pushChanges();
116
103
  await createPullRequest(version);
117
104
  }
118
105
  }
119
106
  async function getVersion() {
120
- if (!gitWithAuth) {
121
- throw new Error("Git authentication is not initialized.");
122
- }
107
+ const authenticatedGit = requireGitWithAuth();
123
108
  let versionExists = true;
124
109
  let newVersion = version;
125
110
  while (versionExists) {
126
111
  newVersion = await question(`Every PR needs a unique version, please accept current version or enter a new one [${version}]: `) || version;
127
- const remoteTags = await gitWithAuth.listRemote(["--tags", remoteName]);
112
+ const remoteTags = await authenticatedGit.listRemote(["--tags"]);
128
113
  if (remoteTags.indexOf(`refs/tags/${newVersion}`) > 0) {
129
114
  console.log(chalk.bold.red(`Version ${newVersion} already exists on the server`));
130
115
  }
@@ -145,11 +130,9 @@ async function commitChanges(newVersion) {
145
130
  console.log(chalk.green.bold(` ... OK`));
146
131
  }
147
132
  async function pushChanges() {
148
- if (!gitWithAuth) {
149
- throw new Error("Git authentication is not initialized.");
150
- }
133
+ const authenticatedGit = requireGitWithAuth();
151
134
  process.stdout.write(`Push changes to remote branch ${currentBranch} `);
152
- await gitWithAuth.push(remoteName, currentBranch);
135
+ await authenticatedGit.push("origin", currentBranch);
153
136
  console.log(chalk.green.bold(` ... OK`));
154
137
  }
155
138
  async function setVersion(newVersion) {
@@ -158,50 +141,19 @@ async function setVersion(newVersion) {
158
141
  parser: "json",
159
142
  });
160
143
  fs.writeFileSync("package.json", docString, "utf8");
161
- if (repoName === "template-uns-rtt") {
162
- try {
163
- const unsLibraryFile = await readFile(unsLibraryPath, "utf8");
164
- const unsLibrary = JSON.parse(unsLibraryFile);
165
- unsLibrary.version = newVersion;
166
- const unsLibraryDoc = await prettier.format(JSON.stringify(unsLibrary), {
167
- parser: "json",
168
- });
169
- fs.writeFileSync(unsLibraryPath, unsLibraryDoc, "utf8");
170
- }
171
- catch (error) {
172
- if (error.code === "ENOENT") {
173
- const unsLibraryDoc = await prettier.format(JSON.stringify({ name: repoName, version: newVersion }), { parser: "json" });
174
- fs.writeFileSync(unsLibraryPath, unsLibraryDoc, "utf8");
175
- }
176
- else {
177
- throw error;
178
- }
179
- }
180
- }
181
144
  }
182
145
  async function createPullRequest(tag) {
183
146
  const title = await question(`Title for the pull request: `);
184
147
  const description = await question(`Description for the pull request: `);
185
148
  process.stdout.write(`Create new pull request from ${currentBranch} to master `);
186
- const authHandler = azdev.getPersonalAccessTokenHandler(token);
187
- const connection = new azdev.WebApi(orgUrl, authHandler);
188
- const gitApi = await connection.getGitApi();
189
- const project = azureProjectName;
190
- if (!project) {
191
- throw new Error("Azure DevOps project is not defined.");
192
- }
193
- let repository;
194
- try {
195
- repository = await gitApi.getRepository(azureRepositoryName, project);
196
- }
197
- catch (error) {
198
- // Fallback to searching by display name when direct lookup fails
199
- const repositories = await gitApi.getRepositories(project);
200
- repository = repositories.find((candidate) => candidate.name === azureRepositoryName || candidate.name === repoName);
201
- }
202
- if (!repository?.id) {
203
- throw new Error(`Unable to find repository "${azureRepositoryName}" in project "${project}".`);
204
- }
149
+ if (!gitApi) {
150
+ const authHandler = azdev.getPersonalAccessTokenHandler(token);
151
+ const connection = new azdev.WebApi(orgUrl, authHandler);
152
+ gitApi = await connection.getGitApi();
153
+ }
154
+ const project = azureProject;
155
+ const repos = await gitApi.getRepositories(project);
156
+ const repoId = repos.filter((x) => x.name == repoName)[0].id;
205
157
  const gitPullRequestToCreate = {
206
158
  sourceRefName: `refs/heads/${currentBranch}`,
207
159
  targetRefName: "refs/heads/master",
@@ -209,109 +161,53 @@ async function createPullRequest(tag) {
209
161
  description,
210
162
  labels: [{ active: true, name: tag }]
211
163
  };
212
- await gitApi.createPullRequest(gitPullRequestToCreate, repository.id, project);
164
+ gitApi.createPullRequest(gitPullRequestToCreate, repoId, project);
213
165
  console.log(chalk.green.bold(` ... OK`));
214
- const pullRequestUrl = pullRequestsUrl ?? `${orgBaseUrl}/${project}/_git/${azureRepositoryName}/pullrequests`;
215
- console.log(`Pull request created at ` + chalk.green.bold(`[${pullRequestUrl}]`));
166
+ console.log(`Pull request created at ` + chalk.green.bold(`[${orgBaseUrl}/${project}/_git/${repoName}/pullrequests]`));
216
167
  }
217
- async function resolveAzureProjectName() {
218
- const existing = azureProjectName.trim();
219
- if (existing) {
220
- return existing;
221
- }
222
- const remoteProject = remoteInfo?.project?.trim() ?? "";
223
- const prompt = remoteProject
224
- ? `Azure DevOps project [${remoteProject}]: `
225
- : "Azure DevOps project: ";
226
- const answer = (await question(prompt)).trim();
227
- const resolved = (answer || remoteProject).trim();
228
- if (!resolved) {
229
- throw new Error("Azure DevOps project is required. Update config.json (devops.project) or run uns-kit configure-devops.");
168
+ async function assertNotDefaultBranch() {
169
+ if (!gitApi) {
170
+ return;
230
171
  }
231
- azureProjectName = resolved;
232
- return azureProjectName;
233
- }
234
- function buildGitAuthorizationHeader(personalAccessToken) {
235
- const encoded = Buffer.from(`:${personalAccessToken}`).toString("base64");
236
- return `Authorization: Basic ${encoded}`;
237
- }
238
- function buildAzureRepositoryUrl(organization, project, repository) {
239
- if (!organization || !project || !repository) {
240
- return undefined;
172
+ const project = azureProject.trim();
173
+ if (!project) {
174
+ return;
241
175
  }
242
- const segments = [organization, project, "_git", repository].map(encodeAzureSegment);
243
- return `https://dev.azure.com/${segments.join("/")}`;
244
- }
245
- function buildAzurePullRequestsUrl(organization, project, repository) {
246
- const repositoryUrl = buildAzureRepositoryUrl(organization, project, repository);
247
- return repositoryUrl ? `${repositoryUrl}/pullrequests` : undefined;
248
- }
249
- function encodeAzureSegment(segment) {
250
- return encodeURIComponent(segment.trim());
251
- }
252
- function parseAzureRemote(remoteUrl) {
253
176
  try {
254
- const url = new URL(remoteUrl);
255
- const hostname = url.hostname.toLowerCase();
256
- const segments = url.pathname.split("/").filter(Boolean).map(decodeURIComponent);
257
- if (hostname === "dev.azure.com") {
258
- const organization = (segments[0] || url.username) ? decodeAzureSegment(segments[0] || url.username) : undefined;
259
- const project = decodeAzureSegment(segments[1]);
260
- const repo = extractRepoFromSegments(segments.slice(2));
261
- return { organization, project, repo };
262
- }
263
- if (hostname.endsWith(".visualstudio.com")) {
264
- const organization = hostname.replace(/\.visualstudio\.com$/, "");
265
- const project = decodeAzureSegment(segments[0]);
266
- const repo = extractRepoFromSegments(segments.slice(1));
267
- return { organization, project, repo };
177
+ const repository = await gitApi.getRepository(repoName, project);
178
+ const defaultBranch = normalizeBranchName(repository?.defaultBranch);
179
+ if (defaultBranch && defaultBranch === currentBranch) {
180
+ throw new Error(`You can not create a pull request from the default branch (${defaultBranch}). Please create a feature branch instead.`);
268
181
  }
269
182
  }
270
183
  catch (error) {
271
- // Ignore parse errors for non-HTTP remotes
272
- }
273
- if (remoteUrl.startsWith("git@ssh.dev.azure.com:")) {
274
- const [, pathPart] = remoteUrl.split(":", 2);
275
- if (pathPart) {
276
- const segments = pathPart.split("/").filter(Boolean).map(decodeURIComponent);
277
- if (segments[0]?.toLowerCase() === "v3") {
278
- return {
279
- organization: decodeAzureSegment(segments[1]),
280
- project: decodeAzureSegment(segments[2]),
281
- repo: stripGitExtension(segments.slice(3).join("/")),
282
- };
184
+ if (error instanceof Error) {
185
+ const message = error.message || "";
186
+ const protectedBranchPrefix = "You can not create a pull request from the default branch";
187
+ if (message.startsWith(protectedBranchPrefix)) {
188
+ throw error;
189
+ }
190
+ if (message) {
191
+ console.log(`Warning: Unable to verify default branch: ${message}`);
283
192
  }
284
193
  }
285
194
  }
286
- return undefined;
287
- }
288
- function decodeAzureSegment(segment) {
289
- return segment ? decodeURIComponent(segment) : undefined;
290
195
  }
291
- function extractRepoFromSegments(segments) {
292
- if (!segments.length) {
196
+ function normalizeBranchName(refName) {
197
+ if (!refName) {
293
198
  return undefined;
294
199
  }
295
- if (segments[0] === "_git") {
296
- return stripGitExtension(segments.slice(1).join("/"));
297
- }
298
- if (segments.length >= 2 && segments[1] === "_git") {
299
- return stripGitExtension(segments.slice(2).join("/"));
300
- }
301
- return stripGitExtension(segments.join("/"));
200
+ const prefix = "refs/heads/";
201
+ return refName.startsWith(prefix) ? refName.slice(prefix.length) : refName;
302
202
  }
303
- function stripGitExtension(value) {
304
- if (!value) {
305
- return undefined;
306
- }
307
- return value.endsWith(".git") ? value.slice(0, -4) : value;
203
+ function buildGitAuthorizationHeader(personalAccessToken) {
204
+ const encoded = Buffer.from(`:${personalAccessToken}`).toString("base64");
205
+ return `Authorization: Basic ${encoded}`;
308
206
  }
309
- function inferRepositoryName(pkgName) {
310
- if (typeof pkgName !== "string" || !pkgName.trim()) {
311
- return "uns-app";
207
+ function requireGitWithAuth() {
208
+ if (!gitWithAuth) {
209
+ throw new Error("Git authentication is not initialized.");
312
210
  }
313
- const trimmed = pkgName.trim();
314
- const baseName = trimmed.startsWith("@") ? trimmed.split("/").pop() ?? trimmed : trimmed;
315
- return baseName.replace(/[^A-Za-z0-9._-]+/g, "-");
211
+ return gitWithAuth;
316
212
  }
317
213
  //# sourceMappingURL=pull-request.js.map
@@ -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\";\nimport { GitPullRequest } from \"azure-devops-node-api/interfaces/GitInterfaces.js\";\nimport { GitRepository } from \"azure-devops-node-api/interfaces/TfvcInterfaces\";\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\ntype AzureRemoteInfo = {\n organization?: string;\n project?: string;\n repo?: string;\n};\n\nimport { ConfigFile } from \"../config-file.js\";\nimport { basePath } from \"../base-path.js\";\n\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\nconst question = util.promisify(rl.question).bind(rl);\n\nconst git: SimpleGit = simpleGit(\"./\").clean(CleanOptions.FORCE);\ngit.env(\"GIT_TERMINAL_PROMPT\", \"0\");\nconst packageJsonPath = path.join(basePath, \"package.json\");\nconst unsLibraryPath = path.join(basePath, \"uns-library.json\");\n\nlet configOrganization: string | undefined;\nlet configProject: string | undefined;\ntry {\n const appConfig = ConfigFile.loadRawConfig();\n configOrganization = appConfig.devops?.organization?.trim() || undefined;\n configProject = appConfig.devops?.project?.trim() || undefined;\n} catch (error) {\n // Continue with defaults when config.json is missing or malformed\n}\n\nconst packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\"));\nconst repoName: string = packageJson.name;\nconst version: string = packageJson.version;\n\nlet originRemoteUrl: string | undefined;\ntry {\n originRemoteUrl = (await git.raw([\"remote\", \"get-url\", \"origin\"])).trim();\n} catch (error) {\n // Ignore missing remote here, we surface a clearer error later when required\n}\n\nconst remoteInfo = originRemoteUrl ? parseAzureRemote(originRemoteUrl) : undefined;\n\nlet azureOrganization = (configOrganization || remoteInfo?.organization || \"sijit\").trim();\nlet azureProjectName = (configProject || remoteInfo?.project || \"\").trim();\nlet azureRepositoryName = (remoteInfo?.repo || inferRepositoryName(repoName)).trim();\n\nconst branches = await git.branchLocal();\nconst currentBranch = branches.current;\n\nconst gitStatus = await git.status();\n\nconst remoteName = \"origin\";\n\nlet token: string = \"\";\nlet gitWithAuth: SimpleGit | undefined;\nlet orgUrl = \"\";\nlet orgBaseUrl = \"\";\nlet pullRequestsUrl: string | undefined;\n\n\ntry {\n await main();\n rl.close();\n} catch (error) {\n console.log(chalk.red.bold(`\\n${error}`));\n rl.close();\n}\n\nasync function main() {\n if (!gitStatus.isClean()) {\n throw new Error(`Repository needs to be clean. Please commit or stash the changes.`);\n } else if (currentBranch == \"master\") {\n throw new Error(`You can not create pull request from master to master.`);\n } else { \n if (!originRemoteUrl) {\n throw new Error(\n `Git remote \"${remoteName}\" is not configured. Please run uns-kit configure-devops or add the remote before creating a pull request.`,\n );\n }\n\n azureProjectName = await resolveAzureProjectName();\n orgBaseUrl = `https://dev.azure.com/${azureOrganization}`;\n orgUrl = `https://${azureOrganization}@dev.azure.com/${azureOrganization}`;\n pullRequestsUrl = buildAzurePullRequestsUrl(azureOrganization, azureProjectName, azureRepositoryName);\n\n const tokensUrl = `${orgBaseUrl}/_usersSettings/tokens`;\n const envPat = process.env.AZURE_PAT;\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 } catch (error) {\n console.log(\n \"The provided PAT is invalid or expired. Please provide a valid PAT.\",\n );\n token = \"\";\n }\n }\n if (!token) {\n token = await question(\n `Please enter your PAT, you can create one at [${tokensUrl}]: `,\n );\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\n const connection = new azdev.WebApi(orgUrl, authHandler);\n try {\n await connection.connect();\n } catch (error) {\n console.log(\n \"The provided PAT is invalid or expired. Please provide a valid PAT.\",\n );\n token = \"\";\n }\n }\n }\n\n gitWithAuth = simpleGit(\"./\");\n gitWithAuth.env(\"GIT_TERMINAL_PROMPT\", \"0\");\n gitWithAuth.env(\"GIT_HTTP_EXTRAHEADER\", buildGitAuthorizationHeader(token));\n\n const version = await getVersion();\n await setVersion(version);\n await runMake();\n await commitChanges(version);\n await pushChanges();\n await createPullRequest(version);\n }\n}\n\nasync function getVersion(): Promise<string> {\n if (!gitWithAuth) {\n throw new Error(\"Git authentication is not initialized.\");\n }\n\n let versionExists = true;\n let newVersion = version;\n while (versionExists) {\n newVersion = await question(\n `Every PR needs a unique version, please accept current version or enter a new one [${version}]: `\n ) || version;\n\n const remoteTags = await gitWithAuth.listRemote([\"--tags\", remoteName]);\n if (remoteTags.indexOf(`refs/tags/${newVersion}`) > 0) {\n console.log(chalk.bold.red(`Version ${newVersion} already exists on the server`));\n } else {\n console.log(`Using version ${newVersion}`)\n versionExists = false;\n }\n }\n return newVersion;\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 if (!gitWithAuth) {\n throw new Error(\"Git authentication is not initialized.\");\n }\n\n process.stdout.write(`Push changes to remote branch ${currentBranch} `);\n await gitWithAuth.push(remoteName, 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 if (repoName === \"template-uns-rtt\") {\n try {\n const unsLibraryFile = await readFile(unsLibraryPath, \"utf8\");\n const unsLibrary = JSON.parse(unsLibraryFile);\n unsLibrary.version = newVersion;\n const unsLibraryDoc = await prettier.format(JSON.stringify(unsLibrary), {\n parser: \"json\",\n });\n fs.writeFileSync(unsLibraryPath, unsLibraryDoc, \"utf8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n const unsLibraryDoc = await prettier.format(\n JSON.stringify({ name: repoName, version: newVersion }),\n { parser: \"json\" },\n );\n fs.writeFileSync(unsLibraryPath, unsLibraryDoc, \"utf8\");\n } else {\n throw error;\n }\n }\n }\n}\n\nasync function createPullRequest(tag: string) {\n const title = await question(\n `Title for the pull request: `,\n );\n const description = await question(\n `Description for the pull request: `,\n ); \n process.stdout.write(`Create new pull request from ${currentBranch} to master `);\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\n const connection = new azdev.WebApi(orgUrl, authHandler);\n const gitApi: ga.IGitApi = await connection.getGitApi();\n const project = azureProjectName;\n if (!project) {\n throw new Error(\"Azure DevOps project is not defined.\");\n }\n\n let repository: GitRepository | undefined;\n try {\n repository = await gitApi.getRepository(azureRepositoryName, project);\n } catch (error) {\n // Fallback to searching by display name when direct lookup fails\n const repositories = await gitApi.getRepositories(project);\n repository = repositories.find((candidate) => candidate.name === azureRepositoryName || candidate.name === repoName);\n }\n\n if (!repository?.id) {\n throw new Error(`Unable to find repository \"${azureRepositoryName}\" in project \"${project}\".`);\n }\n\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, repository.id, project);\n console.log(chalk.green.bold(` ... OK`));\n const pullRequestUrl = pullRequestsUrl ?? `${orgBaseUrl}/${project}/_git/${azureRepositoryName}/pullrequests`;\n console.log(`Pull request created at ` + chalk.green.bold(`[${pullRequestUrl}]`));\n}\n\nasync function resolveAzureProjectName(): Promise<string> {\n const existing = azureProjectName.trim();\n if (existing) {\n return existing;\n }\n\n const remoteProject = remoteInfo?.project?.trim() ?? \"\";\n const prompt = remoteProject\n ? `Azure DevOps project [${remoteProject}]: `\n : \"Azure DevOps project: \";\n const answer = (await question(prompt)).trim();\n const resolved = (answer || remoteProject).trim();\n\n if (!resolved) {\n throw new Error(\n \"Azure DevOps project is required. Update config.json (devops.project) or run uns-kit configure-devops.\",\n );\n }\n\n azureProjectName = resolved;\n return azureProjectName;\n}\n\nfunction buildGitAuthorizationHeader(personalAccessToken: string): string {\n const encoded = Buffer.from(`:${personalAccessToken}`).toString(\"base64\");\n return `Authorization: Basic ${encoded}`;\n}\n\nfunction buildAzureRepositoryUrl(organization: string, project: string, repository: string): string | undefined {\n if (!organization || !project || !repository) {\n return undefined;\n }\n\n const segments = [organization, project, \"_git\", repository].map(encodeAzureSegment);\n return `https://dev.azure.com/${segments.join(\"/\")}`;\n}\n\nfunction buildAzurePullRequestsUrl(organization: string, project: string, repository: string): string | undefined {\n const repositoryUrl = buildAzureRepositoryUrl(organization, project, repository);\n return repositoryUrl ? `${repositoryUrl}/pullrequests` : undefined;\n}\n\nfunction encodeAzureSegment(segment: string): string {\n return encodeURIComponent(segment.trim());\n}\n\nfunction parseAzureRemote(remoteUrl: string): AzureRemoteInfo | undefined {\n try {\n const url = new URL(remoteUrl);\n const hostname = url.hostname.toLowerCase();\n const segments = url.pathname.split(\"/\").filter(Boolean).map(decodeURIComponent);\n\n if (hostname === \"dev.azure.com\") {\n const organization = (segments[0] || url.username) ? decodeAzureSegment(segments[0] || url.username) : undefined;\n const project = decodeAzureSegment(segments[1]);\n const repo = extractRepoFromSegments(segments.slice(2));\n return { organization, project, repo };\n }\n\n if (hostname.endsWith(\".visualstudio.com\")) {\n const organization = hostname.replace(/\\.visualstudio\\.com$/, \"\");\n const project = decodeAzureSegment(segments[0]);\n const repo = extractRepoFromSegments(segments.slice(1));\n return { organization, project, repo };\n }\n } catch (error) {\n // Ignore parse errors for non-HTTP remotes\n }\n\n if (remoteUrl.startsWith(\"git@ssh.dev.azure.com:\")) {\n const [, pathPart] = remoteUrl.split(\":\", 2);\n if (pathPart) {\n const segments = pathPart.split(\"/\").filter(Boolean).map(decodeURIComponent);\n if (segments[0]?.toLowerCase() === \"v3\") {\n return {\n organization: decodeAzureSegment(segments[1]),\n project: decodeAzureSegment(segments[2]),\n repo: stripGitExtension(segments.slice(3).join(\"/\")),\n };\n }\n }\n }\n\n return undefined;\n}\n\nfunction decodeAzureSegment(segment: string | undefined): string | undefined {\n return segment ? decodeURIComponent(segment) : undefined;\n}\n\nfunction extractRepoFromSegments(segments: string[]): string | undefined {\n if (!segments.length) {\n return undefined;\n }\n\n if (segments[0] === \"_git\") {\n return stripGitExtension(segments.slice(1).join(\"/\"));\n }\n\n if (segments.length >= 2 && segments[1] === \"_git\") {\n return stripGitExtension(segments.slice(2).join(\"/\"));\n }\n\n return stripGitExtension(segments.join(\"/\"));\n}\n\nfunction stripGitExtension(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n return value.endsWith(\".git\") ? value.slice(0, -4) : value;\n}\n\nfunction inferRepositoryName(pkgName: unknown): string {\n if (typeof pkgName !== \"string\" || !pkgName.trim()) {\n return \"uns-app\";\n }\n\n const trimmed = pkgName.trim();\n const baseName = trimmed.startsWith(\"@\") ? trimmed.split(\"/\").pop() ?? trimmed : trimmed;\n return baseName.replace(/[^A-Za-z0-9._-]+/g, \"-\");\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\";\nimport * as ga from \"azure-devops-node-api/GitApi\";\nimport { GitPullRequest } from \"azure-devops-node-api/interfaces/GitInterfaces.js\";\nimport { GitRepository } from \"azure-devops-node-api/interfaces/TfvcInterfaces\";\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\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\nconst question = util.promisify(rl.question).bind(rl);\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\n\ntry {\n await main();\n rl.close();\n} catch (error) {\n console.log(chalk.red.bold(`\\n${error}`));\n rl.close();\n}\n\nasync function main() {\n if (!gitStatus.isClean()) {\n throw new Error(`Repository needs to be clean. Please commit or stash the changes.`);\n } else { \n const envPat = process.env.AZURE_PAT;\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(\n \"The provided PAT is invalid or expired. Please provide a valid PAT.\",\n );\n token = \"\";\n }\n }\n if (!token) {\n token = await question(\n `Please enter your PAT, you can create one at ` + chalk.green.bold(`[${tokensUrl}]: `),\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(\n \"The provided PAT is invalid or expired. Please provide a valid PAT.\",\n );\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 version = await getVersion();\n await setVersion(version);\n await commitChanges(version);\n await pushChanges();\n await createPullRequest(version);\n }\n}\n\nasync function getVersion(): Promise<string> {\n const authenticatedGit = requireGitWithAuth();\n let versionExists = true;\n let newVersion = version;\n while (versionExists) {\n newVersion = await question(\n `Every PR needs a unique version, please accept current version or enter a new one [${version}]: `\n ) || version;\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 } else {\n console.log(`Using version ${newVersion}`)\n versionExists = false;\n }\n }\n return newVersion;\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) {\n const title = await question(\n `Title for the pull request: `,\n );\n const description = await question(\n `Description for the pull request: `,\n ); \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 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,7 +1,7 @@
1
1
  import { GraphQLClient, gql, ClientError } from "graphql-request";
2
- import { basePath } from "./base-path.js";
3
2
  import * as path from "path";
4
3
  import * as fs from 'fs';
4
+ import { mkdir } from "fs/promises";
5
5
  import { ConfigFile } from "../config-file.js";
6
6
  import { AuthClient } from "./auth/index.js";
7
7
  const config = await ConfigFile.loadConfig();
@@ -89,7 +89,9 @@ async function refreshUnsTopics() {
89
89
  const query = await requestWithAuth(document);
90
90
  const tree = query.GetTreeStructure;
91
91
  const vsebina = `export type UnsTopics = ${generateUnsTopics(tree, '')}\n(string & {});`;
92
- await writeToFile(path.join(basePath, "src/uns/uns-topics.ts"), vsebina);
92
+ const outputPath = path.resolve(process.cwd(), "src/uns/uns-topics.ts");
93
+ await ensureDirectory(path.dirname(outputPath));
94
+ await writeToFile(outputPath, vsebina);
93
95
  }
94
96
  // Fetch and generate UnsTags
95
97
  async function refreshUnsTags() {
@@ -100,11 +102,16 @@ async function refreshUnsTags() {
100
102
  const query = await requestWithAuth(document);
101
103
  const tags = query.GetTags;
102
104
  const vsebina = `export type UnsTags = ${tags.map(tag => `"${tag}" |`).join('')}\n(string & {});`;
103
- await writeToFile(path.join(basePath, "src/uns/uns-tags.ts"), vsebina);
105
+ const outputPath = path.resolve(process.cwd(), "src/uns/uns-tags.ts");
106
+ await ensureDirectory(path.dirname(outputPath));
107
+ await writeToFile(outputPath, vsebina);
104
108
  }
105
109
  // Execute the refresh processes
106
110
  async function refresh() {
107
111
  await Promise.all([refreshUnsTopics(), refreshUnsTags()]);
108
112
  }
109
113
  refresh().catch(error => console.error('Error during refresh:', error));
114
+ async function ensureDirectory(dirPath) {
115
+ await mkdir(dirPath, { recursive: true });
116
+ }
110
117
  //# sourceMappingURL=refresh-uns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"refresh-uns.js","sourceRoot":"","sources":["../../src/tools/refresh-uns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;AAE7C,6CAA6C;AAC7C,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAe;IAC1D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,KAAmC,EAAE,EAAE;YACtE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;gBAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,iDAAiD;AACjD,SAAS,iBAAiB,CAAC,IAAqB,EAAE,WAAmB;IACnE,OAAO,IAAI;SACR,GAAG,CAAC,OAAO,CAAC,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,WAAW,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC;QACpD,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM;YAC7C,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,IAAI,OAAO,MAAM,cAAc,EAAE,CAAC;IAC3C,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,8DAA8D;AAC9D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;AACvC,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC9C,IAAI,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE;IACjD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;CACpD,CAAC,CAAC;AAEH,KAAK,UAAU,eAAe,CAAI,QAAa;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAI,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,GAAG,YAAY,WAAW,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;QAC7G,IAAI,SAAS,EAAE,CAAC;YACd,+DAA+D;YAC/D,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,WAAW,EAAE,CAAC,CAAC;YAC3D,OAAO,MAAM,MAAM,CAAC,OAAO,CAAI,QAAQ,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,+BAA+B;AAC/B,KAAK,UAAU,gBAAgB;IAC7B,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgClB,CAAC;IAEH,MAAM,KAAK,GAAQ,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,IAAI,GAAoB,KAAK,CAAC,gBAAgB,CAAC;IAErD,MAAM,OAAO,GAAG,2BAA2B,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC;IACzF,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,6BAA6B;AAC7B,KAAK,UAAU,cAAc;IAC3B,MAAM,QAAQ,GAAG,GAAG,CAAA;;;IAGlB,CAAC;IAEH,MAAM,KAAK,GAAQ,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,IAAI,GAAa,KAAK,CAAC,OAAO,CAAC;IAErC,MAAM,OAAO,GAAG,yBAAyB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;IAClG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,gCAAgC;AAChC,KAAK,UAAU,OAAO;IACpB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC","sourcesContent":["import { GraphQLClient, gql, ClientError } from \"graphql-request\";\nimport { TreeStructure } from \"./schema.js\";\nimport { basePath } from \"./base-path.js\";\nimport * as path from \"path\";\nimport * as fs from 'fs';\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 await writeToFile(path.join(basePath, \"src/uns/uns-topics.ts\"), 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 await writeToFile(path.join(basePath, \"src/uns/uns-tags.ts\"), vsebina);\n}\n\n// Execute the refresh processes\nasync function refresh() {\n await Promise.all([refreshUnsTopics(), refreshUnsTags()]);\n}\n\nrefresh().catch(error => console.error('Error during refresh:', error));\n"]}
1
+ {"version":3,"file":"refresh-uns.js","sourceRoot":"","sources":["../../src/tools/refresh-uns.ts"],"names":[],"mappings":"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","sourcesContent":["import { GraphQLClient, gql, ClientError } from \"graphql-request\";\nimport { TreeStructure } 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\n// Execute the refresh processes\nasync function refresh() {\n await Promise.all([refreshUnsTopics(), refreshUnsTags()]);\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"]}
@@ -482,12 +482,15 @@ export declare const unsCoreSchema: z.ZodObject<{
482
482
  clientId?: string;
483
483
  }>;
484
484
  devops: z.ZodOptional<z.ZodObject<{
485
+ provider: z.ZodDefault<z.ZodEnum<["azure-devops"]>>;
485
486
  organization: z.ZodString;
486
487
  project: z.ZodOptional<z.ZodString>;
487
488
  }, "strict", z.ZodTypeAny, {
489
+ provider?: "azure-devops";
488
490
  organization?: string;
489
491
  project?: string;
490
492
  }, {
493
+ provider?: "azure-devops";
491
494
  organization?: string;
492
495
  project?: string;
493
496
  }>>;
@@ -602,6 +605,7 @@ export declare const unsCoreSchema: z.ZodObject<{
602
605
  clientId?: string;
603
606
  };
604
607
  devops?: {
608
+ provider?: "azure-devops";
605
609
  organization?: string;
606
610
  project?: string;
607
611
  };
@@ -716,6 +720,7 @@ export declare const unsCoreSchema: z.ZodObject<{
716
720
  clientId?: string;
717
721
  };
718
722
  devops?: {
723
+ provider?: "azure-devops";
719
724
  organization?: string;
720
725
  project?: string;
721
726
  };
@@ -1 +1 @@
1
- {"version":3,"file":"uns-core-schema.d.ts","sourceRoot":"","sources":["../../src/uns-config/uns-core-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBf,CAAC;AAEZ,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"uns-core-schema.d.ts","sourceRoot":"","sources":["../../src/uns-config/uns-core-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBf,CAAC;AAEZ,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -23,6 +23,7 @@ export const unsCoreSchema = z.object({
23
23
  output: mqttChannelSchema.optional(),
24
24
  infra: mqttChannelSchema,
25
25
  devops: z.object({
26
+ provider: z.enum(["azure-devops"]).default("azure-devops"),
26
27
  organization: z.string().min(1),
27
28
  project: z.string().min(1).optional(),
28
29
  }).strict().optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"uns-core-schema.js","sourceRoot":"","sources":["../../src/uns-config/uns-core-schema.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACtB,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACnE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACnC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC7C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC5C,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC,MAAM,EAAE;IAEX,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,iBAAiB;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvB,CAAC,CAAC,MAAM,EAAE,CAAC","sourcesContent":["// src/uns-config/uns-core-schema.ts\nimport { z } from \"zod\";\nimport { secretValueSchema } from \"./secret-placeholders.js\";\nimport { hostValueSchema } from \"./host-placeholders.js\";\n\nconst mqttChannelSchema = z.object({\n host: hostValueSchema,\n username: z.string().optional(),\n password: secretValueSchema.optional(),\n clientId: z.string().optional(),\n}).strict();\n\nexport const unsCoreSchema = z.object({\n uns: z.object({\n graphql: z.string().url(),\n rest: z.string().url(),\n instanceMode: z.enum([\"wait\", \"force\", \"handover\"]).default(\"wait\"),\n processName: z.string().min(1).optional(),\n handover: z.boolean().default(true),\n jwksWellKnownUrl: z.string().url().optional(),\n kidWellKnownUrl: z.string().url().optional(),\n env: z.enum([\"dev\", \"staging\", \"test\", \"prod\"]).default(\"dev\"),\n }).strict(),\n\n input: mqttChannelSchema.optional(),\n output: mqttChannelSchema.optional(),\n infra: mqttChannelSchema,\n devops: z.object({\n organization: z.string().min(1),\n project: z.string().min(1).optional(),\n }).strict().optional(),\n}).strict();\n\nexport type UnsCore = z.infer<typeof unsCoreSchema>;\n"]}
1
+ {"version":3,"file":"uns-core-schema.js","sourceRoot":"","sources":["../../src/uns-config/uns-core-schema.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACtB,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACnE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACnC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC7C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC5C,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC,MAAM,EAAE;IAEX,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,iBAAiB;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAC1D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvB,CAAC,CAAC,MAAM,EAAE,CAAC","sourcesContent":["// src/uns-config/uns-core-schema.ts\nimport { z } from \"zod\";\nimport { secretValueSchema } from \"./secret-placeholders.js\";\nimport { hostValueSchema } from \"./host-placeholders.js\";\n\nconst mqttChannelSchema = z.object({\n host: hostValueSchema,\n username: z.string().optional(),\n password: secretValueSchema.optional(),\n clientId: z.string().optional(),\n}).strict();\n\nexport const unsCoreSchema = z.object({\n uns: z.object({\n graphql: z.string().url(),\n rest: z.string().url(),\n instanceMode: z.enum([\"wait\", \"force\", \"handover\"]).default(\"wait\"),\n processName: z.string().min(1).optional(),\n handover: z.boolean().default(true),\n jwksWellKnownUrl: z.string().url().optional(),\n kidWellKnownUrl: z.string().url().optional(),\n env: z.enum([\"dev\", \"staging\", \"test\", \"prod\"]).default(\"dev\"),\n }).strict(),\n\n input: mqttChannelSchema.optional(),\n output: mqttChannelSchema.optional(),\n infra: mqttChannelSchema,\n devops: z.object({\n provider: z.enum([\"azure-devops\"]).default(\"azure-devops\"),\n organization: z.string().min(1),\n project: z.string().min(1).optional(),\n }).strict().optional(),\n}).strict();\n\nexport type UnsCore = z.infer<typeof unsCoreSchema>;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uns-kit/core",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "description": "Core utilities and runtime building blocks for UNS-based realtime transformers.",
5
5
  "type": "module",
6
6
  "license": "MIT",