@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.
Files changed (143) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +66 -4
  3. package/dist/IssueService.d.ts +2 -2
  4. package/dist/IssueService.d.ts.map +1 -1
  5. package/dist/IssueService.js +3 -3
  6. package/dist/IssueService.js.map +1 -1
  7. package/dist/JiraAuth.d.ts +14 -14
  8. package/dist/JiraAuth.d.ts.map +1 -1
  9. package/dist/JiraAuth.js +18 -10
  10. package/dist/JiraAuth.js.map +1 -1
  11. package/dist/JiraCliError.d.ts +30 -0
  12. package/dist/JiraCliError.d.ts.map +1 -1
  13. package/dist/JiraCliError.js +14 -0
  14. package/dist/JiraCliError.js.map +1 -1
  15. package/dist/MarkdownWriter.d.ts +4 -4
  16. package/dist/MarkdownWriter.d.ts.map +1 -1
  17. package/dist/MarkdownWriter.js +6 -6
  18. package/dist/MarkdownWriter.js.map +1 -1
  19. package/dist/SyncWorkspace.d.ts +34 -0
  20. package/dist/SyncWorkspace.d.ts.map +1 -0
  21. package/dist/SyncWorkspace.js +105 -0
  22. package/dist/SyncWorkspace.js.map +1 -0
  23. package/dist/VersionService.d.ts +206 -0
  24. package/dist/VersionService.d.ts.map +1 -0
  25. package/dist/VersionService.js +426 -0
  26. package/dist/VersionService.js.map +1 -0
  27. package/dist/bin.js +29 -22
  28. package/dist/bin.js.map +1 -1
  29. package/dist/commands/auth.d.ts +2 -21
  30. package/dist/commands/auth.d.ts.map +1 -1
  31. package/dist/commands/auth.js +6 -6
  32. package/dist/commands/auth.js.map +1 -1
  33. package/dist/commands/get.d.ts +3 -8
  34. package/dist/commands/get.d.ts.map +1 -1
  35. package/dist/commands/get.js +4 -4
  36. package/dist/commands/get.js.map +1 -1
  37. package/dist/commands/index.d.ts +2 -2
  38. package/dist/commands/index.d.ts.map +1 -1
  39. package/dist/commands/index.js +2 -2
  40. package/dist/commands/index.js.map +1 -1
  41. package/dist/commands/issue.d.ts +8 -0
  42. package/dist/commands/issue.d.ts.map +1 -0
  43. package/dist/commands/issue.js +10 -0
  44. package/dist/commands/issue.js.map +1 -0
  45. package/dist/commands/layers.d.ts +6 -18
  46. package/dist/commands/layers.d.ts.map +1 -1
  47. package/dist/commands/layers.js +35 -24
  48. package/dist/commands/layers.js.map +1 -1
  49. package/dist/commands/search.d.ts +3 -8
  50. package/dist/commands/search.d.ts.map +1 -1
  51. package/dist/commands/search.js +8 -8
  52. package/dist/commands/search.js.map +1 -1
  53. package/dist/commands/version.d.ts +12 -0
  54. package/dist/commands/version.d.ts.map +1 -0
  55. package/dist/commands/version.js +179 -0
  56. package/dist/commands/version.js.map +1 -0
  57. package/dist/internal/frontmatter.d.ts.map +1 -1
  58. package/dist/internal/frontmatter.js +14 -1
  59. package/dist/internal/frontmatter.js.map +1 -1
  60. package/dist/internal/oauthServer.d.ts +17 -5
  61. package/dist/internal/oauthServer.d.ts.map +1 -1
  62. package/dist/internal/oauthServer.js +23 -40
  63. package/dist/internal/oauthServer.js.map +1 -1
  64. package/dist/internal/openBrowser.d.ts +10 -0
  65. package/dist/internal/openBrowser.d.ts.map +1 -0
  66. package/dist/internal/openBrowser.js +17 -0
  67. package/dist/internal/openBrowser.js.map +1 -0
  68. package/dist/internal/sync/baseline.d.ts +11 -0
  69. package/dist/internal/sync/baseline.d.ts.map +1 -0
  70. package/dist/internal/sync/baseline.js +18 -0
  71. package/dist/internal/sync/baseline.js.map +1 -0
  72. package/dist/internal/sync/changes.d.ts +15 -0
  73. package/dist/internal/sync/changes.d.ts.map +1 -0
  74. package/dist/internal/sync/changes.js +72 -0
  75. package/dist/internal/sync/changes.js.map +1 -0
  76. package/dist/internal/sync/config.d.ts +12 -0
  77. package/dist/internal/sync/config.d.ts.map +1 -0
  78. package/dist/internal/sync/config.js +53 -0
  79. package/dist/internal/sync/config.js.map +1 -0
  80. package/dist/internal/sync/document.d.ts +9 -0
  81. package/dist/internal/sync/document.d.ts.map +1 -0
  82. package/dist/internal/sync/document.js +173 -0
  83. package/dist/internal/sync/document.js.map +1 -0
  84. package/dist/internal/sync/fieldValues.d.ts +30 -0
  85. package/dist/internal/sync/fieldValues.d.ts.map +1 -0
  86. package/dist/internal/sync/fieldValues.js +91 -0
  87. package/dist/internal/sync/fieldValues.js.map +1 -0
  88. package/dist/internal/sync/manifest.d.ts +12 -0
  89. package/dist/internal/sync/manifest.d.ts.map +1 -0
  90. package/dist/internal/sync/manifest.js +23 -0
  91. package/dist/internal/sync/manifest.js.map +1 -0
  92. package/dist/internal/sync/paths.d.ts +26 -0
  93. package/dist/internal/sync/paths.d.ts.map +1 -0
  94. package/dist/internal/sync/paths.js +22 -0
  95. package/dist/internal/sync/paths.js.map +1 -0
  96. package/dist/internal/sync/schemas.d.ts +128 -0
  97. package/dist/internal/sync/schemas.d.ts.map +1 -0
  98. package/dist/internal/sync/schemas.js +82 -0
  99. package/dist/internal/sync/schemas.js.map +1 -0
  100. package/dist/internal/sync/types.d.ts +144 -0
  101. package/dist/internal/sync/types.d.ts.map +1 -0
  102. package/dist/internal/sync/types.js +17 -0
  103. package/dist/internal/sync/types.js.map +1 -0
  104. package/package.json +13 -12
  105. package/skills/jira/SKILL.md +90 -0
  106. package/skills/jira/agents/openai.yaml +4 -0
  107. package/src/IssueService.ts +34 -28
  108. package/src/JiraAuth.ts +53 -39
  109. package/src/JiraCliError.ts +24 -0
  110. package/src/MarkdownWriter.ts +7 -11
  111. package/src/SyncWorkspace.ts +185 -0
  112. package/src/VersionService.ts +647 -0
  113. package/src/bin.ts +39 -29
  114. package/src/commands/auth.ts +6 -12
  115. package/src/commands/get.ts +4 -4
  116. package/src/commands/index.ts +2 -2
  117. package/src/commands/issue.ts +13 -0
  118. package/src/commands/layers.ts +44 -26
  119. package/src/commands/search.ts +8 -8
  120. package/src/commands/version.ts +267 -0
  121. package/src/internal/frontmatter.ts +15 -1
  122. package/src/internal/oauthServer.ts +43 -70
  123. package/src/internal/openBrowser.ts +31 -0
  124. package/src/internal/sync/baseline.ts +27 -0
  125. package/src/internal/sync/changes.ts +118 -0
  126. package/src/internal/sync/config.ts +76 -0
  127. package/src/internal/sync/document.ts +201 -0
  128. package/src/internal/sync/fieldValues.ts +145 -0
  129. package/src/internal/sync/manifest.ts +32 -0
  130. package/src/internal/sync/paths.ts +48 -0
  131. package/src/internal/sync/schemas.ts +103 -0
  132. package/src/internal/sync/types.ts +192 -0
  133. package/test/SyncWorkspace.test.ts +76 -0
  134. package/test/VersionService.test.ts +266 -0
  135. package/test/commandTree.test.ts +266 -0
  136. package/test/frontmatter.test.ts +69 -0
  137. package/test/integration.test.ts +187 -0
  138. package/test/syncChanges.test.ts +106 -0
  139. package/test/syncConfig.test.ts +138 -0
  140. package/test/syncDocument.test.ts +69 -0
  141. package/test/syncFieldValues.test.ts +101 -0
  142. package/vitest.config.integration.ts +17 -0
  143. package/vitest.config.ts +6 -0
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Parser and serializer for strict Jira Markdown Sync Issue Documents.
3
+ *
4
+ * @internal
5
+ */
6
+ import matter from "gray-matter";
7
+ import * as yaml from "js-yaml";
8
+ import { SyncValidationError } from "../../JiraCliError.js";
9
+ const yamlEngine = {
10
+ parse: (str) => yaml.load(str) ?? {},
11
+ stringify: (data) => yaml.dump(data)
12
+ };
13
+ export const DESCRIPTION_SECTION = "Description";
14
+ export const NEW_COMMENTS_SECTION = "New Comments";
15
+ export const COMMENTS_SECTION = "Comments";
16
+ export const ATTACHMENTS_SECTION = "Attachments";
17
+ export const LOCAL_NOTES_SECTION = "Local Notes";
18
+ const BUILT_IN_SECTIONS = new Set([
19
+ DESCRIPTION_SECTION,
20
+ NEW_COMMENTS_SECTION,
21
+ COMMENTS_SECTION,
22
+ ATTACHMENTS_SECTION,
23
+ LOCAL_NOTES_SECTION
24
+ ]);
25
+ export const serializeIssueDocument = (document) => {
26
+ const body = [
27
+ `# ${document.frontMatter.issueKey}: ${document.frontMatter.summary}`,
28
+ "",
29
+ section(DESCRIPTION_SECTION, document.description),
30
+ ...Object.entries(document.multilineCustomFields).map(([name, content]) => section(name, content)),
31
+ section(NEW_COMMENTS_SECTION, serializeCommentDrafts(document.commentDrafts)),
32
+ section(COMMENTS_SECTION, serializeAcceptedComments(document.acceptedComments)),
33
+ section(ATTACHMENTS_SECTION, serializeAttachments(document.attachments)),
34
+ section(LOCAL_NOTES_SECTION, document.localNotes)
35
+ ].filter((part) => part.length > 0).join("\n");
36
+ return matter.stringify(body, document.frontMatter, { engines: { yaml: yamlEngine } });
37
+ };
38
+ export const parseIssueDocument = (path, content) => {
39
+ const parsed = matter(content, { engines: { yaml: yamlEngine } });
40
+ const frontMatter = parseFrontMatter(path, parsed.data);
41
+ const sections = parseSections(path, parsed.content);
42
+ const description = sections.get(DESCRIPTION_SECTION) ?? fail(path, `Missing ${DESCRIPTION_SECTION} section`);
43
+ const localNotes = sections.get(LOCAL_NOTES_SECTION) ?? "";
44
+ const multilineCustomFields = Object.fromEntries([...sections.entries()].filter(([name]) => !BUILT_IN_SECTIONS.has(name)));
45
+ return {
46
+ frontMatter,
47
+ description,
48
+ multilineCustomFields,
49
+ commentDrafts: parseCommentDrafts(path, sections.get(NEW_COMMENTS_SECTION) ?? ""),
50
+ acceptedComments: parseAcceptedComments(sections.get(COMMENTS_SECTION) ?? ""),
51
+ attachments: parseAttachments(sections.get(ATTACHMENTS_SECTION) ?? ""),
52
+ localNotes
53
+ };
54
+ };
55
+ const section = (name, content) => {
56
+ const normalized = content.trim();
57
+ return normalized.length > 0 ? `## ${name}\n\n${normalized}\n` : `## ${name}\n`;
58
+ };
59
+ const parseFrontMatter = (path, data) => {
60
+ const requiredString = (key) => {
61
+ const value = data[key];
62
+ if (typeof value !== "string")
63
+ fail(path, `Missing or invalid front matter field "${key}"`);
64
+ return value;
65
+ };
66
+ const nullableString = (key) => {
67
+ const value = data[key];
68
+ if (value === null || value === undefined)
69
+ return null;
70
+ if (typeof value !== "string")
71
+ fail(path, `Invalid front matter field "${key}"`);
72
+ return value;
73
+ };
74
+ const userValue = (key) => {
75
+ const value = data[key];
76
+ if (value === null || value === undefined)
77
+ return null;
78
+ if (typeof value !== "object")
79
+ fail(path, `Invalid user field "${key}"`);
80
+ const record = value;
81
+ if (typeof record["accountId"] !== "string" || typeof record["displayName"] !== "string") {
82
+ fail(path, `Invalid user field "${key}"`);
83
+ }
84
+ return {
85
+ accountId: record["accountId"],
86
+ displayName: record["displayName"]
87
+ };
88
+ };
89
+ const labels = data["labels"];
90
+ if (!Array.isArray(labels) || labels.some((label) => typeof label !== "string")) {
91
+ fail(path, `Missing or invalid front matter field "labels"`);
92
+ }
93
+ const customFields = data["customFields"];
94
+ if (customFields === null || typeof customFields !== "object" || Array.isArray(customFields)) {
95
+ fail(path, `Missing or invalid front matter field "customFields"`);
96
+ }
97
+ return {
98
+ issueId: requiredString("issueId"),
99
+ issueKey: requiredString("issueKey"),
100
+ summary: requiredString("summary"),
101
+ status: requiredString("status"),
102
+ issueType: requiredString("issueType"),
103
+ priority: nullableString("priority"),
104
+ assignee: userValue("assignee"),
105
+ reporter: userValue("reporter"),
106
+ labels: labels,
107
+ customFields: customFields
108
+ };
109
+ };
110
+ const parseSections = (path, content) => {
111
+ const lines = content.split(/\r?\n/);
112
+ const sections = new Map();
113
+ let current = null;
114
+ for (const line of lines) {
115
+ const match = /^## (.+)$/.exec(line);
116
+ if (match?.[1]) {
117
+ current = match[1].trim();
118
+ if (sections.has(current))
119
+ fail(path, `Duplicate section "${current}"`);
120
+ sections.set(current, []);
121
+ }
122
+ else if (current) {
123
+ sections.get(current)?.push(line);
124
+ }
125
+ }
126
+ return new Map([...sections.entries()].map(([name, body]) => [name, trimOuterBlankLines(body).join("\n")]));
127
+ };
128
+ const serializeCommentDrafts = (drafts) => drafts.map((draft) => `<!-- draftId: ${draft.draftId} -->\n${draft.body.trim()}`).join("\n\n");
129
+ const parseCommentDrafts = (path, content) => {
130
+ if (content.trim().length === 0)
131
+ return [];
132
+ const parts = content.split(/(?=<!-- draftId: )/g).filter((part) => part.trim().length > 0);
133
+ return parts.map((part) => {
134
+ const match = /^<!-- draftId: ([^ ]+) -->\n?([\s\S]*)$/.exec(part.trim());
135
+ const draftId = match?.[1] ?? fail(path, "Malformed comment draft marker");
136
+ return { draftId, body: match?.[2]?.trim() ?? "" };
137
+ });
138
+ };
139
+ const serializeAcceptedComments = (comments) => comments.map((comment) => `### ${comment.author} - ${comment.created}\n<!-- jiraCommentId: ${comment.id} -->\n\n${comment.body.trim()}`).join("\n\n");
140
+ const parseAcceptedComments = (content) => {
141
+ if (content.trim().length === 0)
142
+ return [];
143
+ const parts = content.split(/(?=^### )/gm).filter((part) => part.trim().length > 0);
144
+ return parts.flatMap((part) => {
145
+ const match = /^### (.+) - (.+)\n<!-- jiraCommentId: ([^ ]+) -->\n?([\s\S]*)$/.exec(part.trim());
146
+ if (!match?.[1] || !match[2] || !match[3])
147
+ return [];
148
+ return [{
149
+ author: match[1],
150
+ created: match[2],
151
+ id: match[3],
152
+ body: match[4]?.trim() ?? ""
153
+ }];
154
+ });
155
+ };
156
+ const serializeAttachments = (attachments) => attachments.map((attachment) => `- [${attachment.filename}](${attachment.url})`).join("\n");
157
+ const parseAttachments = (content) => content.split(/\r?\n/).flatMap((line) => {
158
+ const match = /^- \[(.+)]\((.+)\)$/.exec(line.trim());
159
+ return match?.[1] && match[2] ? [{ filename: match[1], url: match[2] }] : [];
160
+ });
161
+ const trimOuterBlankLines = (lines) => {
162
+ let start = 0;
163
+ let end = lines.length;
164
+ while (start < end && lines[start]?.trim() === "")
165
+ start++;
166
+ while (end > start && lines[end - 1]?.trim() === "")
167
+ end--;
168
+ return lines.slice(start, end);
169
+ };
170
+ const fail = (path, message) => {
171
+ throw new SyncValidationError({ message, path });
172
+ };
173
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/internal/sync/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Field value helpers for Jira Markdown Sync reconciliation.
3
+ *
4
+ * @internal
5
+ */
6
+ import type { CascadingFieldValue, OptionFieldValue, SyncFieldValue, UserFieldValue } from "./types.js";
7
+ export type CompleteListItem = string | number | boolean | UserFieldValue | OptionFieldValue;
8
+ export type CompleteListValue = ReadonlyArray<CompleteListItem>;
9
+ export interface CanonicalFieldValueOptions {
10
+ readonly ordered?: boolean | undefined;
11
+ }
12
+ export declare const explicitClear: null;
13
+ export declare const isExplicitClear: (value: unknown) => value is null;
14
+ export declare const userFieldValue: (accountId: string, displayName: string) => UserFieldValue;
15
+ export declare const makeUserFieldValue: (accountId: string, displayName: string) => UserFieldValue;
16
+ export declare const optionFieldValue: (value: string, id?: string) => OptionFieldValue;
17
+ export declare const makeOptionFieldValue: (value: string, id?: string) => OptionFieldValue;
18
+ export declare const cascadingFieldValue: (parent: OptionFieldValue, child?: OptionFieldValue) => CascadingFieldValue;
19
+ export declare const makeCascadingFieldValue: (parent: OptionFieldValue, child?: OptionFieldValue) => CascadingFieldValue;
20
+ export declare const completeListValue: (items: Iterable<CompleteListItem>, options?: CanonicalFieldValueOptions) => CompleteListValue;
21
+ export declare const makeCompleteListValue: (items: Iterable<CompleteListItem>, options?: CanonicalFieldValueOptions) => CompleteListValue;
22
+ export declare const isUserFieldValue: (value: unknown) => value is UserFieldValue;
23
+ export declare const isOptionFieldValue: (value: unknown) => value is OptionFieldValue;
24
+ export declare const isCascadingFieldValue: (value: unknown) => value is CascadingFieldValue;
25
+ export declare const isCompleteListValue: (value: unknown) => value is CompleteListValue;
26
+ export declare const canonicalFieldOrder: <A extends CompleteListItem>(items: ReadonlyArray<A>, options?: CanonicalFieldValueOptions) => ReadonlyArray<A>;
27
+ export declare const canonicalizeFieldValue: (value: SyncFieldValue, options?: CanonicalFieldValueOptions) => SyncFieldValue;
28
+ export declare const fieldValuesEqual: (left: SyncFieldValue, right: SyncFieldValue, options?: CanonicalFieldValueOptions) => boolean;
29
+ export declare const compareCompleteListItems: (left: CompleteListItem, right: CompleteListItem) => number;
30
+ //# sourceMappingURL=fieldValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldValues.d.ts","sourceRoot":"","sources":["../../../src/internal/sync/fieldValues.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEvG,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,gBAAgB,CAAA;AAE5F,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAA;AAE/D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACvC;AAED,eAAO,MAAM,aAAa,MAAO,CAAA;AAEjC,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IAAsB,CAAA;AAEhF,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,EAAE,aAAa,MAAM,KAAG,cAGtE,CAAA;AAEF,eAAO,MAAM,kBAAkB,cALW,MAAM,eAAe,MAAM,KAAG,cAKxB,CAAA;AAEhD,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,KAAG,gBAChB,CAAA;AAE9C,eAAO,MAAM,oBAAoB,UAHO,MAAM,OAAO,MAAM,KAAG,gBAGV,CAAA;AAEpD,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,gBAAgB,EACxB,QAAQ,gBAAgB,KACvB,mBAA2E,CAAA;AAE9E,eAAO,MAAM,uBAAuB,WAJ1B,gBAAgB,UAChB,gBAAgB,KACvB,mBAEuD,CAAA;AAE1D,eAAO,MAAM,iBAAiB,GAC5B,OAAO,QAAQ,CAAC,gBAAgB,CAAC,EACjC,UAAS,0BAA+B,KACvC,iBAAoE,CAAA;AAEvE,eAAO,MAAM,qBAAqB,UAJzB,QAAQ,CAAC,gBAAgB,CAAC,YACxB,0BAA0B,KAClC,iBAEmD,CAAA;AAEtD,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,cAG1D,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,gBAI5D,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,mBAI/D,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,iBACL,CAAA;AAEzD,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,gBAAgB,EAC5D,OAAO,aAAa,CAAC,CAAC,CAAC,EACvB,UAAS,0BAA+B,KACvC,aAAa,CAAC,CAAC,CAAsF,CAAA;AAExG,eAAO,MAAM,sBAAsB,GACjC,OAAO,cAAc,EACrB,UAAS,0BAA+B,KACvC,cAUF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,MAAM,cAAc,EACpB,OAAO,cAAc,EACrB,UAAS,0BAA+B,KACvC,OAA2F,CAAA;AAE9F,eAAO,MAAM,wBAAwB,GAAI,MAAM,gBAAgB,EAAE,OAAO,gBAAgB,KAAG,MAI1F,CAAA"}
@@ -0,0 +1,91 @@
1
+ export const explicitClear = null;
2
+ export const isExplicitClear = (value) => value === null;
3
+ export const userFieldValue = (accountId, displayName) => ({
4
+ accountId,
5
+ displayName
6
+ });
7
+ export const makeUserFieldValue = userFieldValue;
8
+ export const optionFieldValue = (value, id) => id === undefined ? { value } : { id, value };
9
+ export const makeOptionFieldValue = optionFieldValue;
10
+ export const cascadingFieldValue = (parent, child) => child === undefined ? { parent } : { parent, child };
11
+ export const makeCascadingFieldValue = cascadingFieldValue;
12
+ export const completeListValue = (items, options = {}) => canonicalFieldOrder(Array.from(items), options);
13
+ export const makeCompleteListValue = completeListValue;
14
+ export const isUserFieldValue = (value) => {
15
+ if (!isRecord(value))
16
+ return false;
17
+ return typeof value["accountId"] === "string" && typeof value["displayName"] === "string";
18
+ };
19
+ export const isOptionFieldValue = (value) => {
20
+ if (!isRecord(value) || typeof value["value"] !== "string")
21
+ return false;
22
+ const id = value["id"];
23
+ return id === undefined || typeof id === "string";
24
+ };
25
+ export const isCascadingFieldValue = (value) => {
26
+ if (!isRecord(value) || !isOptionFieldValue(value["parent"]))
27
+ return false;
28
+ const child = value["child"];
29
+ return child === undefined || isOptionFieldValue(child);
30
+ };
31
+ export const isCompleteListValue = (value) => Array.isArray(value) && value.every(isCompleteListItem);
32
+ export const canonicalFieldOrder = (items, options = {}) => options.ordered === true ? [...items] : [...items].sort(compareCompleteListItems);
33
+ export const canonicalizeFieldValue = (value, options = {}) => {
34
+ if (Array.isArray(value))
35
+ return canonicalFieldOrder(value, options);
36
+ if (isCascadingFieldValue(value)) {
37
+ return value.child === undefined
38
+ ? { parent: canonicalizeOption(value.parent) }
39
+ : { parent: canonicalizeOption(value.parent), child: canonicalizeOption(value.child) };
40
+ }
41
+ if (isUserFieldValue(value))
42
+ return { accountId: value.accountId, displayName: value.displayName };
43
+ if (isOptionFieldValue(value))
44
+ return canonicalizeOption(value);
45
+ return value;
46
+ };
47
+ export const fieldValuesEqual = (left, right, options = {}) => canonicalFieldValueKey(left, options) === canonicalFieldValueKey(right, options);
48
+ export const compareCompleteListItems = (left, right) => {
49
+ const leftKey = completeListItemOrderKey(left);
50
+ const rightKey = completeListItemOrderKey(right);
51
+ return leftKey.localeCompare(rightKey, "en", { numeric: true });
52
+ };
53
+ const canonicalizeOption = (value) => value.id === undefined ? { value: value.value } : { id: value.id, value: value.value };
54
+ const canonicalFieldValueKey = (value, options) => {
55
+ if (value === null)
56
+ return "clear:";
57
+ if (Array.isArray(value)) {
58
+ return `list:${canonicalFieldOrder(value, options).map(completeListItemOrderKey).join("\u0000")}`;
59
+ }
60
+ if (isCascadingFieldValue(value)) {
61
+ return `cascading:${optionOrderKey(value.parent)}\u0000${value.child === undefined ? "" : optionOrderKey(value.child)}`;
62
+ }
63
+ if (isUserFieldValue(value))
64
+ return userOrderKey(value);
65
+ if (isOptionFieldValue(value))
66
+ return optionOrderKey(value);
67
+ return `${typeof value}:${String(value)}`;
68
+ };
69
+ const completeListItemOrderKey = (value) => {
70
+ if (isUserFieldValue(value))
71
+ return userOrderKey(value);
72
+ if (isOptionFieldValue(value))
73
+ return optionOrderKey(value);
74
+ return `${typeof value}:${String(value)}`;
75
+ };
76
+ const userOrderKey = (value) => `user:${value.displayName.toLocaleLowerCase("en")}\u0000${value.accountId}`;
77
+ const optionOrderKey = (value) => `option:${value.value.toLocaleLowerCase("en")}\u0000${value.id ?? ""}`;
78
+ const isCompleteListItem = (value) => {
79
+ switch (typeof value) {
80
+ case "string":
81
+ case "number":
82
+ case "boolean":
83
+ return true;
84
+ case "object":
85
+ return isUserFieldValue(value) || isOptionFieldValue(value);
86
+ default:
87
+ return false;
88
+ }
89
+ };
90
+ const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
91
+ //# sourceMappingURL=fieldValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldValues.js","sourceRoot":"","sources":["../../../src/internal/sync/fieldValues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sync Manifest helpers.
3
+ *
4
+ * @internal
5
+ */
6
+ import * as Effect from "effect/Effect";
7
+ import { SyncValidationError, SyncWorkspaceError } from "../../JiraCliError.js";
8
+ import type { SyncManifest } from "./types.js";
9
+ export declare const makeEmptyManifest: (siteUrl: string) => SyncManifest;
10
+ export declare const parseSyncManifest: (path: string, content: string) => Effect.Effect<SyncManifest, SyncWorkspaceError | SyncValidationError>;
11
+ export declare const serializeSyncManifest: (manifest: SyncManifest) => string;
12
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/internal/sync/manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,KAAG,YAIlD,CAAA;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,SAAS,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,GAAG,mBAAmB,CASnE,CAAA;AAEJ,eAAO,MAAM,qBAAqB,GAAI,UAAU,YAAY,KAAG,MAAkD,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Sync Manifest helpers.
3
+ *
4
+ * @internal
5
+ */
6
+ import * as Effect from "effect/Effect";
7
+ import * as Schema from "effect/Schema";
8
+ import { SyncValidationError, SyncWorkspaceError } from "../../JiraCliError.js";
9
+ import { SyncManifestSchema } from "./schemas.js";
10
+ export const makeEmptyManifest = (siteUrl) => ({
11
+ version: 1,
12
+ siteUrl,
13
+ issues: []
14
+ });
15
+ export const parseSyncManifest = (path, content) => Effect.gen(function* () {
16
+ const raw = yield* Effect.try({
17
+ try: () => JSON.parse(content),
18
+ catch: (cause) => new SyncWorkspaceError({ message: "Failed to parse Sync Manifest JSON", path, cause })
19
+ });
20
+ return yield* Schema.decodeUnknownEffect(SyncManifestSchema)(raw).pipe(Effect.mapError((cause) => new SyncValidationError({ message: "Invalid Sync Manifest", path, cause })));
21
+ });
22
+ export const serializeSyncManifest = (manifest) => `${JSON.stringify(manifest, null, 2)}\n`;
23
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/internal/sync/manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAGjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAgB,EAAE,CAAC,CAAC;IACnE,OAAO,EAAE,CAAC;IACV,OAAO;IACP,MAAM,EAAE,EAAE;CACX,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAY,EACZ,OAAe,EACwD,EAAE,CACzE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY;QACzC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACzG,CAAC,CAAA;IACF,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CACpE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CACvG,CAAA;AACH,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAsB,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Path helpers for Jira Markdown Sync workspace files.
3
+ *
4
+ * @internal
5
+ */
6
+ import type * as Path from "effect/Path";
7
+ import type { WorkspaceConfig } from "./types.js";
8
+ export declare const METADATA_DIR = ".jira-md";
9
+ export declare const DEFAULT_DOCUMENTS_DIR = "issues";
10
+ export declare const CONFIG_FILE = "config.yaml";
11
+ export declare const MANIFEST_FILE = "manifest.json";
12
+ export declare const BASELINES_DIR = "baselines";
13
+ export declare const HISTORY_DIR = "history";
14
+ export interface SyncWorkspacePaths {
15
+ readonly root: string;
16
+ readonly documentsDir: string;
17
+ readonly metadataDir: string;
18
+ readonly configFile: string;
19
+ readonly manifestFile: string;
20
+ readonly baselinesDir: string;
21
+ readonly historyDir: string;
22
+ }
23
+ export declare const resolveWorkspacePaths: (path: Path.Path, root: string, config?: Pick<WorkspaceConfig, "documentsDir">) => SyncWorkspacePaths;
24
+ export declare const baselineFilePath: (path: Path.Path, paths: SyncWorkspacePaths, issueId: string) => string;
25
+ export declare const conventionDocumentPath: (path: Path.Path, paths: SyncWorkspacePaths, issueKey: string) => string;
26
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/internal/sync/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAO,MAAM,YAAY,aAAa,CAAA;AACtC,eAAO,MAAM,qBAAqB,WAAW,CAAA;AAC7C,eAAO,MAAM,WAAW,gBAAgB,CAAA;AACxC,eAAO,MAAM,aAAa,kBAAkB,CAAA;AAC5C,eAAO,MAAM,aAAa,cAAc,CAAA;AACxC,eAAO,MAAM,WAAW,YAAY,CAAA;AAEpC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,eAAO,MAAM,qBAAqB,GAChC,MAAM,IAAI,CAAC,IAAI,EACf,MAAM,MAAM,EACZ,SAAS,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,KAC7C,kBAYF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,kBAAkB,EAAE,SAAS,MAAM,KAAG,MAC7C,CAAA;AAElD,eAAO,MAAM,sBAAsB,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO,kBAAkB,EAAE,UAAU,MAAM,KAAG,MACrD,CAAA"}
@@ -0,0 +1,22 @@
1
+ export const METADATA_DIR = ".jira-md";
2
+ export const DEFAULT_DOCUMENTS_DIR = "issues";
3
+ export const CONFIG_FILE = "config.yaml";
4
+ export const MANIFEST_FILE = "manifest.json";
5
+ export const BASELINES_DIR = "baselines";
6
+ export const HISTORY_DIR = "history";
7
+ export const resolveWorkspacePaths = (path, root, config) => {
8
+ const documentsDir = path.resolve(root, config?.documentsDir ?? DEFAULT_DOCUMENTS_DIR);
9
+ const metadataDir = path.resolve(root, METADATA_DIR);
10
+ return {
11
+ root: path.resolve(root),
12
+ documentsDir,
13
+ metadataDir,
14
+ configFile: path.join(metadataDir, CONFIG_FILE),
15
+ manifestFile: path.join(metadataDir, MANIFEST_FILE),
16
+ baselinesDir: path.join(metadataDir, BASELINES_DIR),
17
+ historyDir: path.join(metadataDir, HISTORY_DIR)
18
+ };
19
+ };
20
+ export const baselineFilePath = (path, paths, issueId) => path.join(paths.baselinesDir, `${issueId}.json`);
21
+ export const conventionDocumentPath = (path, paths, issueKey) => path.join(paths.documentsDir, `${issueKey}.md`);
22
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/internal/sync/paths.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAA;AACtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAA;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AACxC,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAA;AAC5C,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAA;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAA;AAYpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAAe,EACf,IAAY,EACZ,MAA8C,EAC1B,EAAE;IACtB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,IAAI,qBAAqB,CAAC,CAAA;IACtF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACpD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,YAAY;QACZ,WAAW;QACX,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;QAC/C,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;QACnD,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;QACnD,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;KAChD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,KAAyB,EAAE,OAAe,EAAU,EAAE,CACtG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,OAAO,OAAO,CAAC,CAAA;AAElD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAe,EAAE,KAAyB,EAAE,QAAgB,EAAU,EAAE,CAC7G,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAA"}
@@ -0,0 +1,128 @@
1
+ import * as Schema from "effect/Schema";
2
+ export declare const FieldShapeSchema: Schema.Literals<readonly ["text", "multilineText", "number", "boolean", "date", "singleSelect", "multiSelect", "user", "cascadingSelect"]>;
3
+ export declare const RequestedCustomFieldSchema: Schema.Struct<{
4
+ readonly displayName: Schema.String;
5
+ readonly fieldId: Schema.optional<Schema.String>;
6
+ readonly shape: Schema.Literals<readonly ["text", "multilineText", "number", "boolean", "date", "singleSelect", "multiSelect", "user", "cascadingSelect"]>;
7
+ readonly ordered: Schema.optional<Schema.Boolean>;
8
+ }>;
9
+ export declare const WorkspaceConfigSchema: Schema.Struct<{
10
+ readonly version: Schema.withDecodingDefaultTypeKey<Schema.Literal<1>, never>;
11
+ readonly siteUrl: Schema.String;
12
+ readonly documentsDir: Schema.withDecodingDefaultTypeKey<Schema.String, never>;
13
+ readonly customFields: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.Struct<{
14
+ readonly displayName: Schema.String;
15
+ readonly fieldId: Schema.optional<Schema.String>;
16
+ readonly shape: Schema.Literals<readonly ["text", "multilineText", "number", "boolean", "date", "singleSelect", "multiSelect", "user", "cascadingSelect"]>;
17
+ readonly ordered: Schema.optional<Schema.Boolean>;
18
+ }>>, never>;
19
+ }>;
20
+ export declare const ManifestIssueSchema: Schema.Struct<{
21
+ readonly issueId: Schema.String;
22
+ readonly issueKey: Schema.String;
23
+ readonly documentPath: Schema.String;
24
+ readonly filenameMode: Schema.Literals<readonly ["convention", "custom"]>;
25
+ }>;
26
+ export declare const SyncManifestSchema: Schema.Struct<{
27
+ readonly version: Schema.Literal<1>;
28
+ readonly siteUrl: Schema.String;
29
+ readonly issues: Schema.$Array<Schema.Struct<{
30
+ readonly issueId: Schema.String;
31
+ readonly issueKey: Schema.String;
32
+ readonly documentPath: Schema.String;
33
+ readonly filenameMode: Schema.Literals<readonly ["convention", "custom"]>;
34
+ }>>;
35
+ }>;
36
+ export declare const SyncFieldValueSchema: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.Null, Schema.Struct<{
37
+ readonly accountId: Schema.String;
38
+ readonly displayName: Schema.String;
39
+ }>, Schema.Struct<{
40
+ readonly id: Schema.optional<Schema.String>;
41
+ readonly value: Schema.String;
42
+ }>, Schema.Struct<{
43
+ readonly parent: Schema.Struct<{
44
+ readonly id: Schema.optional<Schema.String>;
45
+ readonly value: Schema.String;
46
+ }>;
47
+ readonly child: Schema.optional<Schema.Struct<{
48
+ readonly id: Schema.optional<Schema.String>;
49
+ readonly value: Schema.String;
50
+ }>>;
51
+ }>, Schema.$Array<Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.Struct<{
52
+ readonly accountId: Schema.String;
53
+ readonly displayName: Schema.String;
54
+ }>, Schema.Struct<{
55
+ readonly id: Schema.optional<Schema.String>;
56
+ readonly value: Schema.String;
57
+ }>]>>]>;
58
+ export declare const BaselineCustomFieldSchema: Schema.Struct<{
59
+ readonly fieldId: Schema.String;
60
+ readonly displayName: Schema.String;
61
+ readonly shape: Schema.Literals<readonly ["text", "multilineText", "number", "boolean", "date", "singleSelect", "multiSelect", "user", "cascadingSelect"]>;
62
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.Null, Schema.Struct<{
63
+ readonly accountId: Schema.String;
64
+ readonly displayName: Schema.String;
65
+ }>, Schema.Struct<{
66
+ readonly id: Schema.optional<Schema.String>;
67
+ readonly value: Schema.String;
68
+ }>, Schema.Struct<{
69
+ readonly parent: Schema.Struct<{
70
+ readonly id: Schema.optional<Schema.String>;
71
+ readonly value: Schema.String;
72
+ }>;
73
+ readonly child: Schema.optional<Schema.Struct<{
74
+ readonly id: Schema.optional<Schema.String>;
75
+ readonly value: Schema.String;
76
+ }>>;
77
+ }>, Schema.$Array<Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.Struct<{
78
+ readonly accountId: Schema.String;
79
+ readonly displayName: Schema.String;
80
+ }>, Schema.Struct<{
81
+ readonly id: Schema.optional<Schema.String>;
82
+ readonly value: Schema.String;
83
+ }>]>>]>;
84
+ }>;
85
+ export declare const SyncBaselineSchema: Schema.Struct<{
86
+ readonly version: Schema.Literal<1>;
87
+ readonly issueId: Schema.String;
88
+ readonly issueKey: Schema.String;
89
+ readonly fields: Schema.Struct<{
90
+ readonly summary: Schema.String;
91
+ readonly description: Schema.String;
92
+ readonly labels: Schema.$Array<Schema.String>;
93
+ readonly customFields: Schema.$Record<Schema.String, Schema.Struct<{
94
+ readonly fieldId: Schema.String;
95
+ readonly displayName: Schema.String;
96
+ readonly shape: Schema.Literals<readonly ["text", "multilineText", "number", "boolean", "date", "singleSelect", "multiSelect", "user", "cascadingSelect"]>;
97
+ readonly value: Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.Null, Schema.Struct<{
98
+ readonly accountId: Schema.String;
99
+ readonly displayName: Schema.String;
100
+ }>, Schema.Struct<{
101
+ readonly id: Schema.optional<Schema.String>;
102
+ readonly value: Schema.String;
103
+ }>, Schema.Struct<{
104
+ readonly parent: Schema.Struct<{
105
+ readonly id: Schema.optional<Schema.String>;
106
+ readonly value: Schema.String;
107
+ }>;
108
+ readonly child: Schema.optional<Schema.Struct<{
109
+ readonly id: Schema.optional<Schema.String>;
110
+ readonly value: Schema.String;
111
+ }>>;
112
+ }>, Schema.$Array<Schema.Union<readonly [Schema.String, Schema.Number, Schema.Boolean, Schema.Struct<{
113
+ readonly accountId: Schema.String;
114
+ readonly displayName: Schema.String;
115
+ }>, Schema.Struct<{
116
+ readonly id: Schema.optional<Schema.String>;
117
+ readonly value: Schema.String;
118
+ }>]>>]>;
119
+ }>>;
120
+ }>;
121
+ readonly comments: Schema.$Array<Schema.Struct<{
122
+ readonly id: Schema.String;
123
+ }>>;
124
+ }>;
125
+ export type WorkspaceConfig = Schema.Schema.Type<typeof WorkspaceConfigSchema>;
126
+ export type SyncManifest = Schema.Schema.Type<typeof SyncManifestSchema>;
127
+ export type SyncBaseline = Schema.Schema.Type<typeof SyncBaselineSchema>;
128
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/internal/sync/schemas.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AASvC,eAAO,MAAM,gBAAgB,4IAAgC,CAAA;AAE7D,eAAO,MAAM,0BAA0B;;;;;EAKrC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;EAOhC,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;EAI7B,CAAA;AAyBF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;OAS/B,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;EAKpC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW7B,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAC9E,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAA;AACxE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAA"}