@knpkv/jira-cli 0.1.1 → 1.0.0
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/CHANGELOG.md +67 -0
- package/README.md +66 -4
- package/dist/IssueService.d.ts +2 -2
- package/dist/IssueService.d.ts.map +1 -1
- package/dist/IssueService.js +3 -3
- package/dist/IssueService.js.map +1 -1
- package/dist/JiraAuth.d.ts +14 -14
- package/dist/JiraAuth.d.ts.map +1 -1
- package/dist/JiraAuth.js +18 -10
- package/dist/JiraAuth.js.map +1 -1
- package/dist/JiraCliError.d.ts +30 -0
- package/dist/JiraCliError.d.ts.map +1 -1
- package/dist/JiraCliError.js +14 -0
- package/dist/JiraCliError.js.map +1 -1
- package/dist/MarkdownWriter.d.ts +4 -4
- package/dist/MarkdownWriter.d.ts.map +1 -1
- package/dist/MarkdownWriter.js +6 -6
- package/dist/MarkdownWriter.js.map +1 -1
- package/dist/SyncWorkspace.d.ts +34 -0
- package/dist/SyncWorkspace.d.ts.map +1 -0
- package/dist/SyncWorkspace.js +105 -0
- package/dist/SyncWorkspace.js.map +1 -0
- package/dist/VersionService.d.ts +206 -0
- package/dist/VersionService.d.ts.map +1 -0
- package/dist/VersionService.js +426 -0
- package/dist/VersionService.js.map +1 -0
- package/dist/bin.js +29 -22
- package/dist/bin.js.map +1 -1
- package/dist/commands/auth.d.ts +2 -21
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +6 -6
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/get.d.ts +3 -8
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +4 -4
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/index.d.ts +2 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -2
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/issue.d.ts +8 -0
- package/dist/commands/issue.d.ts.map +1 -0
- package/dist/commands/issue.js +10 -0
- package/dist/commands/issue.js.map +1 -0
- package/dist/commands/layers.d.ts +6 -18
- package/dist/commands/layers.d.ts.map +1 -1
- package/dist/commands/layers.js +35 -24
- package/dist/commands/layers.js.map +1 -1
- package/dist/commands/search.d.ts +3 -8
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +8 -8
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/version.d.ts +12 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +179 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/internal/frontmatter.d.ts.map +1 -1
- package/dist/internal/frontmatter.js +14 -1
- package/dist/internal/frontmatter.js.map +1 -1
- package/dist/internal/oauthServer.d.ts +17 -5
- package/dist/internal/oauthServer.d.ts.map +1 -1
- package/dist/internal/oauthServer.js +23 -40
- package/dist/internal/oauthServer.js.map +1 -1
- package/dist/internal/openBrowser.d.ts +10 -0
- package/dist/internal/openBrowser.d.ts.map +1 -0
- package/dist/internal/openBrowser.js +17 -0
- package/dist/internal/openBrowser.js.map +1 -0
- package/dist/internal/sync/baseline.d.ts +11 -0
- package/dist/internal/sync/baseline.d.ts.map +1 -0
- package/dist/internal/sync/baseline.js +18 -0
- package/dist/internal/sync/baseline.js.map +1 -0
- package/dist/internal/sync/changes.d.ts +15 -0
- package/dist/internal/sync/changes.d.ts.map +1 -0
- package/dist/internal/sync/changes.js +72 -0
- package/dist/internal/sync/changes.js.map +1 -0
- package/dist/internal/sync/config.d.ts +12 -0
- package/dist/internal/sync/config.d.ts.map +1 -0
- package/dist/internal/sync/config.js +53 -0
- package/dist/internal/sync/config.js.map +1 -0
- package/dist/internal/sync/document.d.ts +9 -0
- package/dist/internal/sync/document.d.ts.map +1 -0
- package/dist/internal/sync/document.js +173 -0
- package/dist/internal/sync/document.js.map +1 -0
- package/dist/internal/sync/fieldValues.d.ts +30 -0
- package/dist/internal/sync/fieldValues.d.ts.map +1 -0
- package/dist/internal/sync/fieldValues.js +91 -0
- package/dist/internal/sync/fieldValues.js.map +1 -0
- package/dist/internal/sync/manifest.d.ts +12 -0
- package/dist/internal/sync/manifest.d.ts.map +1 -0
- package/dist/internal/sync/manifest.js +23 -0
- package/dist/internal/sync/manifest.js.map +1 -0
- package/dist/internal/sync/paths.d.ts +26 -0
- package/dist/internal/sync/paths.d.ts.map +1 -0
- package/dist/internal/sync/paths.js +22 -0
- package/dist/internal/sync/paths.js.map +1 -0
- package/dist/internal/sync/schemas.d.ts +128 -0
- package/dist/internal/sync/schemas.d.ts.map +1 -0
- package/dist/internal/sync/schemas.js +82 -0
- package/dist/internal/sync/schemas.js.map +1 -0
- package/dist/internal/sync/types.d.ts +144 -0
- package/dist/internal/sync/types.d.ts.map +1 -0
- package/dist/internal/sync/types.js +17 -0
- package/dist/internal/sync/types.js.map +1 -0
- package/package.json +13 -12
- package/skills/jira/SKILL.md +90 -0
- package/skills/jira/agents/openai.yaml +4 -0
- package/src/IssueService.ts +34 -28
- package/src/JiraAuth.ts +53 -39
- package/src/JiraCliError.ts +24 -0
- package/src/MarkdownWriter.ts +7 -11
- package/src/SyncWorkspace.ts +185 -0
- package/src/VersionService.ts +647 -0
- package/src/bin.ts +39 -29
- package/src/commands/auth.ts +6 -12
- package/src/commands/get.ts +4 -4
- package/src/commands/index.ts +2 -2
- package/src/commands/issue.ts +13 -0
- package/src/commands/layers.ts +44 -26
- package/src/commands/search.ts +8 -8
- package/src/commands/version.ts +267 -0
- package/src/internal/frontmatter.ts +15 -1
- package/src/internal/oauthServer.ts +43 -70
- package/src/internal/openBrowser.ts +31 -0
- package/src/internal/sync/baseline.ts +27 -0
- package/src/internal/sync/changes.ts +118 -0
- package/src/internal/sync/config.ts +76 -0
- package/src/internal/sync/document.ts +201 -0
- package/src/internal/sync/fieldValues.ts +145 -0
- package/src/internal/sync/manifest.ts +32 -0
- package/src/internal/sync/paths.ts +48 -0
- package/src/internal/sync/schemas.ts +103 -0
- package/src/internal/sync/types.ts +192 -0
- package/test/SyncWorkspace.test.ts +76 -0
- package/test/VersionService.test.ts +266 -0
- package/test/commandTree.test.ts +266 -0
- package/test/frontmatter.test.ts +69 -0
- package/test/integration.test.ts +187 -0
- package/test/syncChanges.test.ts +106 -0
- package/test/syncConfig.test.ts +138 -0
- package/test/syncDocument.test.ts +69 -0
- package/test/syncFieldValues.test.ts +101 -0
- package/vitest.config.integration.ts +17 -0
- package/vitest.config.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownWriter.js","sourceRoot":"","sources":["../src/MarkdownWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"MarkdownWriter.js","sourceRoot":"","sources":["../src/MarkdownWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local workspace I/O for Jira Markdown Sync.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import * as Context from "effect/Context";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as FileSystem from "effect/FileSystem";
|
|
9
|
+
import * as Layer from "effect/Layer";
|
|
10
|
+
import * as Path from "effect/Path";
|
|
11
|
+
import { type SyncWorkspacePaths } from "./internal/sync/paths.js";
|
|
12
|
+
import type { SyncBaseline, SyncManifest, WorkspaceConfig } from "./internal/sync/types.js";
|
|
13
|
+
import { SyncWorkspaceError } from "./JiraCliError.js";
|
|
14
|
+
export interface InitWorkspaceInput {
|
|
15
|
+
readonly root: string;
|
|
16
|
+
readonly siteUrl: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SyncWorkspaceShape {
|
|
19
|
+
readonly init: (input: InitWorkspaceInput) => Effect.Effect<SyncWorkspacePaths, SyncWorkspaceError>;
|
|
20
|
+
readonly paths: (root: string, config?: Pick<WorkspaceConfig, "documentsDir">) => Effect.Effect<SyncWorkspacePaths>;
|
|
21
|
+
readonly readConfig: (root: string) => Effect.Effect<WorkspaceConfig, SyncWorkspaceError>;
|
|
22
|
+
readonly writeConfig: (root: string, config: WorkspaceConfig) => Effect.Effect<void, SyncWorkspaceError>;
|
|
23
|
+
readonly readManifest: (root: string) => Effect.Effect<SyncManifest, SyncWorkspaceError>;
|
|
24
|
+
readonly writeManifest: (root: string, manifest: SyncManifest) => Effect.Effect<void, SyncWorkspaceError>;
|
|
25
|
+
readonly readBaseline: (root: string, issueId: string) => Effect.Effect<SyncBaseline, SyncWorkspaceError>;
|
|
26
|
+
readonly writeBaseline: (root: string, baseline: SyncBaseline) => Effect.Effect<void, SyncWorkspaceError>;
|
|
27
|
+
readonly conventionDocumentPath: (root: string, issueKey: string) => Effect.Effect<string, SyncWorkspaceError>;
|
|
28
|
+
}
|
|
29
|
+
declare const SyncWorkspace_base: Context.ServiceClass<SyncWorkspace, "@knpkv/jira-cli/SyncWorkspace", SyncWorkspaceShape>;
|
|
30
|
+
export declare class SyncWorkspace extends SyncWorkspace_base {
|
|
31
|
+
}
|
|
32
|
+
export declare const layer: Layer.Layer<SyncWorkspace, never, FileSystem.FileSystem | Path.Path>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=SyncWorkspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncWorkspace.d.ts","sourceRoot":"","sources":["../src/SyncWorkspace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAInC,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;IACnG,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;IACnH,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAA;IACzF,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IACxG,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA;IACxF,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IACzG,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA;IACzG,QAAQ,CAAC,aAAa,EAAE,CACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAC5C,QAAQ,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;CAC/G;;AAED,qBAAa,aAAc,SAAQ,kBAGC;CAAG;AAwIvC,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAGtF,CAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local workspace I/O for Jira Markdown Sync.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import * as Context from "effect/Context";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as FileSystem from "effect/FileSystem";
|
|
9
|
+
import * as Layer from "effect/Layer";
|
|
10
|
+
import * as Path from "effect/Path";
|
|
11
|
+
import { parseSyncBaseline, serializeSyncBaseline } from "./internal/sync/baseline.js";
|
|
12
|
+
import { makeDefaultWorkspaceConfig, parseWorkspaceConfig, serializeWorkspaceConfig } from "./internal/sync/config.js";
|
|
13
|
+
import { makeEmptyManifest, parseSyncManifest, serializeSyncManifest } from "./internal/sync/manifest.js";
|
|
14
|
+
import { baselineFilePath, conventionDocumentPath, resolveWorkspacePaths } from "./internal/sync/paths.js";
|
|
15
|
+
import { SyncWorkspaceError } from "./JiraCliError.js";
|
|
16
|
+
export class SyncWorkspace extends Context.Service()("@knpkv/jira-cli/SyncWorkspace") {
|
|
17
|
+
}
|
|
18
|
+
const mapWorkspaceError = (message, path) => (cause) => new SyncWorkspaceError({ message, path, cause });
|
|
19
|
+
const make = Effect.gen(function* () {
|
|
20
|
+
const fs = yield* FileSystem.FileSystem;
|
|
21
|
+
const path = yield* Path.Path;
|
|
22
|
+
const paths = (root, config) => Effect.succeed(resolveWorkspacePaths(path, root, config));
|
|
23
|
+
const ensureDir = (dir) => fs.makeDirectory(dir, { recursive: true }).pipe(Effect.mapError(mapWorkspaceError("Failed to create sync workspace directory", dir)), Effect.asVoid);
|
|
24
|
+
const writeFile = (filePath, content) => Effect.gen(function* () {
|
|
25
|
+
const dir = path.dirname(filePath);
|
|
26
|
+
yield* ensureDir(dir);
|
|
27
|
+
const tempPath = `${filePath}.tmp.${Date.now()}`;
|
|
28
|
+
yield* fs.writeFileString(tempPath, content).pipe(Effect.mapError(mapWorkspaceError("Failed to write sync workspace file", filePath)));
|
|
29
|
+
yield* fs.rename(tempPath, filePath).pipe(Effect.mapError(mapWorkspaceError("Failed to replace sync workspace file", filePath)));
|
|
30
|
+
});
|
|
31
|
+
const readFile = (filePath) => fs.readFileString(filePath).pipe(Effect.mapError(mapWorkspaceError("Failed to read sync workspace file", filePath)));
|
|
32
|
+
const init = ({ root, siteUrl }) => Effect.gen(function* () {
|
|
33
|
+
const config = makeDefaultWorkspaceConfig(siteUrl);
|
|
34
|
+
const workspacePaths = resolveWorkspacePaths(path, root, config);
|
|
35
|
+
yield* ensureDir(workspacePaths.documentsDir);
|
|
36
|
+
yield* ensureDir(workspacePaths.metadataDir);
|
|
37
|
+
yield* ensureDir(workspacePaths.baselinesDir);
|
|
38
|
+
yield* ensureDir(workspacePaths.historyDir);
|
|
39
|
+
yield* writeFile(workspacePaths.configFile, serializeWorkspaceConfig(config));
|
|
40
|
+
yield* writeFile(workspacePaths.manifestFile, serializeSyncManifest(makeEmptyManifest(siteUrl)));
|
|
41
|
+
return workspacePaths;
|
|
42
|
+
});
|
|
43
|
+
const readConfig = (root) => Effect.gen(function* () {
|
|
44
|
+
const workspacePaths = resolveWorkspacePaths(path, root);
|
|
45
|
+
const content = yield* readFile(workspacePaths.configFile);
|
|
46
|
+
return yield* parseWorkspaceConfig(workspacePaths.configFile, content).pipe(Effect.mapError((cause) => new SyncWorkspaceError({
|
|
47
|
+
message: cause.message,
|
|
48
|
+
path: "path" in cause ? cause.path : workspacePaths.configFile,
|
|
49
|
+
cause
|
|
50
|
+
})));
|
|
51
|
+
});
|
|
52
|
+
const writeConfig = (root, config) => Effect.gen(function* () {
|
|
53
|
+
const workspacePaths = resolveWorkspacePaths(path, root, config);
|
|
54
|
+
yield* ensureDir(workspacePaths.metadataDir);
|
|
55
|
+
yield* writeFile(workspacePaths.configFile, serializeWorkspaceConfig(config));
|
|
56
|
+
});
|
|
57
|
+
const readManifest = (root) => Effect.gen(function* () {
|
|
58
|
+
const workspacePaths = resolveWorkspacePaths(path, root);
|
|
59
|
+
const content = yield* readFile(workspacePaths.manifestFile);
|
|
60
|
+
return yield* parseSyncManifest(workspacePaths.manifestFile, content).pipe(Effect.mapError((cause) => new SyncWorkspaceError({
|
|
61
|
+
message: cause.message,
|
|
62
|
+
path: "path" in cause ? cause.path : workspacePaths.manifestFile,
|
|
63
|
+
cause
|
|
64
|
+
})));
|
|
65
|
+
});
|
|
66
|
+
const writeManifest = (root, manifest) => Effect.gen(function* () {
|
|
67
|
+
const workspacePaths = resolveWorkspacePaths(path, root);
|
|
68
|
+
yield* ensureDir(workspacePaths.metadataDir);
|
|
69
|
+
yield* writeFile(workspacePaths.manifestFile, serializeSyncManifest(manifest));
|
|
70
|
+
});
|
|
71
|
+
const readBaseline = (root, issueId) => Effect.gen(function* () {
|
|
72
|
+
const workspacePaths = resolveWorkspacePaths(path, root);
|
|
73
|
+
const filePath = baselineFilePath(path, workspacePaths, issueId);
|
|
74
|
+
const content = yield* readFile(filePath);
|
|
75
|
+
return yield* parseSyncBaseline(filePath, content).pipe(Effect.mapError((cause) => new SyncWorkspaceError({
|
|
76
|
+
message: cause.message,
|
|
77
|
+
path: "path" in cause ? cause.path : filePath,
|
|
78
|
+
cause
|
|
79
|
+
})));
|
|
80
|
+
});
|
|
81
|
+
const writeBaseline = (root, baseline) => Effect.gen(function* () {
|
|
82
|
+
const workspacePaths = resolveWorkspacePaths(path, root);
|
|
83
|
+
const filePath = baselineFilePath(path, workspacePaths, baseline.issueId);
|
|
84
|
+
yield* ensureDir(workspacePaths.baselinesDir);
|
|
85
|
+
yield* writeFile(filePath, serializeSyncBaseline(baseline));
|
|
86
|
+
});
|
|
87
|
+
const getConventionDocumentPath = (root, issueKey) => Effect.gen(function* () {
|
|
88
|
+
const config = yield* readConfig(root);
|
|
89
|
+
const workspacePaths = resolveWorkspacePaths(path, root, config);
|
|
90
|
+
return conventionDocumentPath(path, workspacePaths, issueKey);
|
|
91
|
+
});
|
|
92
|
+
return SyncWorkspace.of({
|
|
93
|
+
init,
|
|
94
|
+
paths,
|
|
95
|
+
readConfig,
|
|
96
|
+
writeConfig,
|
|
97
|
+
readManifest,
|
|
98
|
+
writeManifest,
|
|
99
|
+
readBaseline,
|
|
100
|
+
writeBaseline,
|
|
101
|
+
conventionDocumentPath: getConventionDocumentPath
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
export const layer = Layer.effect(SyncWorkspace, make);
|
|
105
|
+
//# sourceMappingURL=SyncWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncWorkspace.js","sourceRoot":"","sources":["../src/SyncWorkspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jira project version (release) fetching with people-field resolution.
|
|
3
|
+
*
|
|
4
|
+
* **Mental model**
|
|
5
|
+
*
|
|
6
|
+
* - **API → domain mapping**: {@link VersionService} wraps the generated V3 client,
|
|
7
|
+
* normalising a project version into a {@link Version} object with resolved Driver,
|
|
8
|
+
* Contributors, and Approvers (each rendered as a {@link Person}).
|
|
9
|
+
* - **Expand options**: `approvers,driver,operations,issuesstatus` plus a passthrough
|
|
10
|
+
* for any extra fields the API returns (`contributors` is sent by Jira Premium even
|
|
11
|
+
* though it is not in the public OpenAPI spec).
|
|
12
|
+
* - **Account-id resolution**: account IDs are looked up against
|
|
13
|
+
* `/rest/api/3/user?accountId={id}` and cached per service instance.
|
|
14
|
+
* - **Mutations**: {@link VersionServiceShape.updateVersion} edits version fields
|
|
15
|
+
* (e.g. description) and {@link VersionServiceShape.addRelatedWork} /
|
|
16
|
+
* {@link VersionServiceShape.listRelatedWork} manage the "Related work" links that
|
|
17
|
+
* surface as Confluence pages on a release report. Mutations require the
|
|
18
|
+
* `manage:jira-project` OAuth scope (see `JiraAuth`).
|
|
19
|
+
*
|
|
20
|
+
* **Common tasks**
|
|
21
|
+
*
|
|
22
|
+
* - List versions for a project: `service.listProjectVersions("RPS", { released: true })`
|
|
23
|
+
* - Get a single version: `service.getVersion("12345")`
|
|
24
|
+
* - Set the description: `service.updateVersion("12345", { description: "..." })`
|
|
25
|
+
* - Attach a Confluence page: `service.addRelatedWork("12345", { title, category, url })`
|
|
26
|
+
*
|
|
27
|
+
* @module
|
|
28
|
+
*/
|
|
29
|
+
import { JiraApiClient } from "@knpkv/jira-api-client";
|
|
30
|
+
import * as Context from "effect/Context";
|
|
31
|
+
import * as Effect from "effect/Effect";
|
|
32
|
+
import * as Layer from "effect/Layer";
|
|
33
|
+
import { JiraApiError } from "./JiraCliError.js";
|
|
34
|
+
/**
|
|
35
|
+
* A resolved Jira user (account ID + display name).
|
|
36
|
+
*
|
|
37
|
+
* @category Types
|
|
38
|
+
*/
|
|
39
|
+
export interface Person {
|
|
40
|
+
readonly accountId: string;
|
|
41
|
+
readonly displayName: string;
|
|
42
|
+
/** Resolved email address (PII). Stripped from `version --json` unless `--emails` is passed. */
|
|
43
|
+
readonly emailAddress: string | null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* One approval line on a version.
|
|
47
|
+
*
|
|
48
|
+
* @category Types
|
|
49
|
+
*/
|
|
50
|
+
export interface Approver {
|
|
51
|
+
readonly person: Person;
|
|
52
|
+
/** APPROVED | DECLINED | PENDING (Jira returns it uppercase). */
|
|
53
|
+
readonly status: string;
|
|
54
|
+
readonly declineReason: string | null;
|
|
55
|
+
readonly description: string | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A ticket with the version set as its fixVersion. Carries the minimum metadata
|
|
59
|
+
* needed by SOC2-style audits: assignee (for contributor derivation), labels
|
|
60
|
+
* (for impact-tagging checks), and summary (for human-readable evidence).
|
|
61
|
+
*
|
|
62
|
+
* @category Types
|
|
63
|
+
*/
|
|
64
|
+
export interface VersionTicket {
|
|
65
|
+
readonly key: string;
|
|
66
|
+
readonly summary: string | null;
|
|
67
|
+
readonly assignee: Person | null;
|
|
68
|
+
readonly labels: ReadonlyArray<string>;
|
|
69
|
+
/**
|
|
70
|
+
* Values of any custom fields the caller asked to include (see
|
|
71
|
+
* {@link ListVersionsOptions.customFieldNames}). Keyed by the field's display
|
|
72
|
+
* name (the same string the caller passed in).
|
|
73
|
+
*/
|
|
74
|
+
readonly customFields: Readonly<Record<string, string | null>>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* A project version (release) with people fields resolved.
|
|
78
|
+
*
|
|
79
|
+
* @category Types
|
|
80
|
+
*/
|
|
81
|
+
export interface Version {
|
|
82
|
+
readonly id: string;
|
|
83
|
+
readonly name: string;
|
|
84
|
+
readonly description: string | null;
|
|
85
|
+
readonly released: boolean;
|
|
86
|
+
readonly archived: boolean;
|
|
87
|
+
readonly startDate: string | null;
|
|
88
|
+
readonly releaseDate: string | null;
|
|
89
|
+
readonly driver: Person | null;
|
|
90
|
+
readonly contributors: ReadonlyArray<Person>;
|
|
91
|
+
readonly approvers: ReadonlyArray<Approver>;
|
|
92
|
+
readonly tickets: ReadonlyArray<VersionTicket>;
|
|
93
|
+
readonly url: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* A "Related work" link on a version (e.g. a Confluence page surfaced on the
|
|
97
|
+
* release report). `category` is a free-form string Jira groups by — common
|
|
98
|
+
* values are `Communication`, `Testing`, `Design`.
|
|
99
|
+
*
|
|
100
|
+
* @category Types
|
|
101
|
+
*/
|
|
102
|
+
export interface RelatedWork {
|
|
103
|
+
readonly relatedWorkId: string | null;
|
|
104
|
+
readonly title: string | null;
|
|
105
|
+
readonly category: string;
|
|
106
|
+
readonly url: string | null;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Input for attaching a new "Related work" link to a version.
|
|
110
|
+
*
|
|
111
|
+
* @category Types
|
|
112
|
+
*/
|
|
113
|
+
export interface AddRelatedWorkInput {
|
|
114
|
+
readonly title: string;
|
|
115
|
+
readonly category: string;
|
|
116
|
+
readonly url: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Editable version fields. Only the provided keys are sent to Jira.
|
|
120
|
+
*
|
|
121
|
+
* @category Types
|
|
122
|
+
*/
|
|
123
|
+
export interface UpdateVersionInput {
|
|
124
|
+
readonly description?: string;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Filters for listing versions.
|
|
128
|
+
*
|
|
129
|
+
* @category Types
|
|
130
|
+
*/
|
|
131
|
+
export interface ListVersionsOptions {
|
|
132
|
+
/** Restrict to released versions. */
|
|
133
|
+
readonly released?: boolean;
|
|
134
|
+
/** Restrict to unreleased versions. */
|
|
135
|
+
readonly unreleased?: boolean;
|
|
136
|
+
/** Hard cap on the number of versions fetched (default: all). */
|
|
137
|
+
readonly maxResults?: number;
|
|
138
|
+
/**
|
|
139
|
+
* Custom field **display names** (e.g. `"Security & Compliance Impact"`)
|
|
140
|
+
* whose values should be populated on each {@link VersionTicket.customFields}
|
|
141
|
+
* map. Names are resolved to per-instance field IDs via `/rest/api/3/field`,
|
|
142
|
+
* cached per service instance.
|
|
143
|
+
*/
|
|
144
|
+
readonly customFieldNames?: ReadonlyArray<string>;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* VersionService interface.
|
|
148
|
+
*
|
|
149
|
+
* @category Services
|
|
150
|
+
*/
|
|
151
|
+
export interface VersionServiceShape {
|
|
152
|
+
readonly listProjectVersions: (projectKey: string, options?: ListVersionsOptions) => Effect.Effect<ReadonlyArray<Version>, JiraApiError>;
|
|
153
|
+
readonly getVersion: (id: string) => Effect.Effect<Version, JiraApiError>;
|
|
154
|
+
/** Update editable fields (currently description) on a version. Needs `manage:jira-project`. */
|
|
155
|
+
readonly updateVersion: (id: string, input: UpdateVersionInput) => Effect.Effect<Version, JiraApiError>;
|
|
156
|
+
/** List the "Related work" links attached to a version. */
|
|
157
|
+
readonly listRelatedWork: (id: string) => Effect.Effect<ReadonlyArray<RelatedWork>, JiraApiError>;
|
|
158
|
+
/** Attach a "Related work" link (e.g. a Confluence page) to a version. Needs `manage:jira-project`. */
|
|
159
|
+
readonly addRelatedWork: (id: string, input: AddRelatedWorkInput) => Effect.Effect<RelatedWork, JiraApiError>;
|
|
160
|
+
}
|
|
161
|
+
declare const VersionService_base: Context.ServiceClass<VersionService, "@knpkv/jira-cli/VersionService", VersionServiceShape>;
|
|
162
|
+
/**
|
|
163
|
+
* VersionService tag.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* import { Effect } from "effect"
|
|
168
|
+
* import { VersionService } from "@knpkv/jira-cli/VersionService"
|
|
169
|
+
*
|
|
170
|
+
* Effect.gen(function* () {
|
|
171
|
+
* const versions = yield* VersionService
|
|
172
|
+
* const list = yield* versions.listProjectVersions("RPS", { released: true })
|
|
173
|
+
* console.log(`Found ${list.length} released versions`)
|
|
174
|
+
* })
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* @category Services
|
|
178
|
+
*/
|
|
179
|
+
export declare class VersionService extends VersionService_base {
|
|
180
|
+
}
|
|
181
|
+
/** Loosely-typed record helper for navigating untyped API JSON. */
|
|
182
|
+
type Raw = Record<string, unknown>;
|
|
183
|
+
/**
|
|
184
|
+
* Render a Jira custom-field value as a flat string.
|
|
185
|
+
*
|
|
186
|
+
* Handles the common shapes returned by `/rest/api/3/search/jql`:
|
|
187
|
+
* - cascading select: `{ value, child: { value } }` → `"Parent > Child"`
|
|
188
|
+
* - single select / option: `{ value }` → `"Parent"`
|
|
189
|
+
* - user object: `{ displayName }` → display name
|
|
190
|
+
* - plain string/number → coerced to string
|
|
191
|
+
* - array of any of the above → values joined with `, `
|
|
192
|
+
* - null / unset / unknown shape → `null`
|
|
193
|
+
*/
|
|
194
|
+
export declare const renderCustomFieldValue: (raw: unknown) => string | null;
|
|
195
|
+
export declare const personFromObject: (raw: unknown, fallbackId?: string) => Person | null;
|
|
196
|
+
export declare const extractContributorIds: (raw: Raw) => ReadonlyArray<string>;
|
|
197
|
+
/** Normalise a Jira "Related work" entry into a {@link RelatedWork}. */
|
|
198
|
+
export declare const toRelatedWork: (raw: unknown) => RelatedWork;
|
|
199
|
+
/**
|
|
200
|
+
* Layer for VersionService.
|
|
201
|
+
*
|
|
202
|
+
* @category Layers
|
|
203
|
+
*/
|
|
204
|
+
export declare const layer: Layer.Layer<VersionService, never, JiraApiClient>;
|
|
205
|
+
export {};
|
|
206
|
+
//# sourceMappingURL=VersionService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VersionService.d.ts","sourceRoot":"","sources":["../src/VersionService.ts"],"names":[],"mappings":"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"}
|