project-logbook 0.4.0 → 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/README.md +36 -1
- package/dist/commands/build.js +34 -76
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.js +7 -2
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/list.js +4 -16
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +1 -3
- package/dist/commands/log.js +4 -3
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/new.js +1 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/preview.js +1 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/release.js +1 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/start.d.ts +1 -1
- package/dist/commands/start.js +53 -12
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.js +7 -18
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/steer.js +1 -0
- package/dist/commands/steer.js.map +1 -0
- package/dist/commands/upgrade.js +1 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -0
- package/dist/lib/about-content.js +1 -0
- package/dist/lib/about-content.js.map +1 -0
- package/dist/lib/adr-renderer.d.ts +12 -0
- package/dist/lib/adr-renderer.js +53 -0
- package/dist/lib/adr-renderer.js.map +1 -0
- package/dist/lib/build-helpers.js +8 -3
- package/dist/lib/build-helpers.js.map +1 -0
- package/dist/lib/build-steps.d.ts +20 -2
- package/dist/lib/build-steps.js +107 -13
- package/dist/lib/build-steps.js.map +1 -0
- package/dist/lib/config.d.ts +8 -0
- package/dist/lib/config.js +19 -1
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/entry-id.js +1 -0
- package/dist/lib/entry-id.js.map +1 -0
- package/dist/lib/entry-paths.js +1 -0
- package/dist/lib/entry-paths.js.map +1 -0
- package/dist/lib/git-helpers.d.ts +5 -16
- package/dist/lib/git-helpers.js +52 -78
- package/dist/lib/git-helpers.js.map +1 -0
- package/dist/lib/git-url-helpers.d.ts +16 -0
- package/dist/lib/git-url-helpers.js +76 -0
- package/dist/lib/git-url-helpers.js.map +1 -0
- package/dist/lib/hast-helpers.js +1 -0
- package/dist/lib/hast-helpers.js.map +1 -0
- package/dist/lib/html-attributes.js +1 -0
- package/dist/lib/html-attributes.js.map +1 -0
- package/dist/lib/html-escape.js +1 -0
- package/dist/lib/html-escape.js.map +1 -0
- package/dist/lib/image-helpers.js +20 -30
- package/dist/lib/image-helpers.js.map +1 -0
- package/dist/lib/jira-helpers.js +1 -0
- package/dist/lib/jira-helpers.js.map +1 -0
- package/dist/lib/lint-runner.js +1 -0
- package/dist/lib/lint-runner.js.map +1 -0
- package/dist/lib/lint-types.js +1 -0
- package/dist/lib/lint-types.js.map +1 -0
- package/dist/lib/lockfile.js +1 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/logbook-client.js +1 -0
- package/dist/lib/logbook-client.js.map +1 -0
- package/dist/lib/markdown-processors.js +1 -0
- package/dist/lib/markdown-processors.js.map +1 -0
- package/dist/lib/migrations.js +1 -0
- package/dist/lib/migrations.js.map +1 -0
- package/dist/lib/package-version.js +1 -0
- package/dist/lib/package-version.js.map +1 -0
- package/dist/lib/rss.js +1 -0
- package/dist/lib/rss.js.map +1 -0
- package/dist/lib/session.js +47 -35
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/styles.js +1 -0
- package/dist/lib/styles.js.map +1 -0
- package/dist/lib/template-helpers.d.ts +6 -1
- package/dist/lib/template-helpers.js +64 -0
- package/dist/lib/template-helpers.js.map +1 -0
- package/dist/lib/template-types.d.ts +22 -2
- package/dist/lib/template-types.js +1 -0
- package/dist/lib/template-types.js.map +1 -0
- package/dist/lib/templates.d.ts +7 -2
- package/dist/lib/templates.js +54 -34
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/theme.js +1 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/url-helpers.js +1 -0
- package/dist/lib/url-helpers.js.map +1 -0
- package/dist/linters/diff-to-narrative.d.ts +2 -1
- package/dist/linters/diff-to-narrative.js +3 -10
- package/dist/linters/diff-to-narrative.js.map +1 -0
- package/dist/linters/frontmatter.js +1 -0
- package/dist/linters/frontmatter.js.map +1 -0
- package/dist/linters/index.js +1 -0
- package/dist/linters/index.js.map +1 -0
- package/dist/linters/jira-prefix.js +1 -0
- package/dist/linters/jira-prefix.js.map +1 -0
- package/dist/linters/links.js +26 -4
- package/dist/linters/links.js.map +1 -0
- package/dist/linters/lockfile.js +1 -0
- package/dist/linters/lockfile.js.map +1 -0
- package/dist/linters/placeholders.js +6 -4
- package/dist/linters/placeholders.js.map +1 -0
- package/dist/linters/project-integrity.js +1 -0
- package/dist/linters/project-integrity.js.map +1 -0
- package/dist/linters/readability.js +2 -3
- package/dist/linters/readability.js.map +1 -0
- package/dist/linters/technical-log.js +1 -0
- package/dist/linters/technical-log.js.map +1 -0
- package/dist/linters/workspaces.js +1 -0
- package/dist/linters/workspaces.js.map +1 -0
- package/dist/templates/WELCOME.md +12 -0
- package/dist/templates/index.md +2 -1
- package/dist/templates/logbook-client.js +29 -0
- package/dist/templates/styles.css +205 -32
- package/dist/utils/date.js +1 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +9 -0
- package/dist/utils/frontmatter.js +16 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs.d.ts +10 -0
- package/dist/utils/fs.js +112 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/id.js +1 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/log-timeline.d.ts +2 -1
- package/dist/utils/log-timeline.js +1 -0
- package/dist/utils/log-timeline.js.map +1 -0
- package/dist/utils/slug.js +1 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/string.js +1 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/utils/timeline-helpers.d.ts +2 -2
- package/dist/utils/timeline-helpers.js +5 -2
- package/dist/utils/timeline-helpers.js.map +1 -0
- package/dist/utils/validation.d.ts +5 -0
- package/dist/utils/validation.js +21 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +10 -4
- package/src/templates/WELCOME.md +12 -0
- package/src/templates/index.md +2 -1
- package/src/templates/logbook-client.js +29 -0
- package/src/templates/styles.css +205 -32
package/dist/lib/git-helpers.js
CHANGED
|
@@ -1,55 +1,6 @@
|
|
|
1
1
|
import { execSync } from 'node:child_process';
|
|
2
2
|
import { simpleGit } from 'simple-git';
|
|
3
|
-
|
|
4
|
-
* Clean the repository URL by removing trailing slashes and .git extensions.
|
|
5
|
-
*/
|
|
6
|
-
export function cleanRepositoryUrl(url) {
|
|
7
|
-
let cleaned = url.trim();
|
|
8
|
-
if (cleaned.endsWith('/')) {
|
|
9
|
-
cleaned = cleaned.slice(0, -1);
|
|
10
|
-
}
|
|
11
|
-
if (cleaned.endsWith('.git')) {
|
|
12
|
-
cleaned = cleaned.slice(0, -4);
|
|
13
|
-
}
|
|
14
|
-
if (cleaned.endsWith('/')) {
|
|
15
|
-
cleaned = cleaned.slice(0, -1);
|
|
16
|
-
}
|
|
17
|
-
return cleaned;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Generate a URL to view a specific commit in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
21
|
-
*/
|
|
22
|
-
export function getCommitUrl(repositoryUrl, sha) {
|
|
23
|
-
if (!repositoryUrl)
|
|
24
|
-
return undefined;
|
|
25
|
-
const baseUrl = cleanRepositoryUrl(repositoryUrl);
|
|
26
|
-
const lowerUrl = baseUrl.toLowerCase();
|
|
27
|
-
if (lowerUrl.includes('gitlab')) {
|
|
28
|
-
return `${baseUrl}/-/commit/${sha}`;
|
|
29
|
-
}
|
|
30
|
-
if (lowerUrl.includes('bitbucket')) {
|
|
31
|
-
return `${baseUrl}/commits/${sha}`;
|
|
32
|
-
}
|
|
33
|
-
// Default to GitHub style
|
|
34
|
-
return `${baseUrl}/commit/${sha}`;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Generate a URL to view a specific tag in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
38
|
-
*/
|
|
39
|
-
export function getTagUrl(repositoryUrl, tag) {
|
|
40
|
-
if (!repositoryUrl)
|
|
41
|
-
return undefined;
|
|
42
|
-
const baseUrl = cleanRepositoryUrl(repositoryUrl);
|
|
43
|
-
const lowerUrl = baseUrl.toLowerCase();
|
|
44
|
-
if (lowerUrl.includes('gitlab')) {
|
|
45
|
-
return `${baseUrl}/-/tags/${tag}`;
|
|
46
|
-
}
|
|
47
|
-
if (lowerUrl.includes('bitbucket')) {
|
|
48
|
-
return `${baseUrl}/src/${tag}`;
|
|
49
|
-
}
|
|
50
|
-
// Default to GitHub style
|
|
51
|
-
return `${baseUrl}/releases/tag/${tag}`;
|
|
52
|
-
}
|
|
3
|
+
export { cleanRepositoryUrl, getCommitUrl, getTagUrl, parseRemoteUrlToWebUrl } from './git-url-helpers.js';
|
|
53
4
|
function getGit() {
|
|
54
5
|
return simpleGit(process.cwd());
|
|
55
6
|
}
|
|
@@ -142,31 +93,6 @@ export function getGitRemoteUrl(cwd = process.cwd()) {
|
|
|
142
93
|
return undefined;
|
|
143
94
|
}
|
|
144
95
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Parse a git remote URL (SSH or HTTPS) into a clean web/HTTP(S) repository homepage URL.
|
|
147
|
-
*/
|
|
148
|
-
export function parseRemoteUrlToWebUrl(remoteUrl) {
|
|
149
|
-
if (!remoteUrl)
|
|
150
|
-
return undefined;
|
|
151
|
-
let url = remoteUrl.trim();
|
|
152
|
-
// If it's already an HTTP/HTTPS URL, clean and return it
|
|
153
|
-
if (url.startsWith('https://') || url.startsWith('http://')) {
|
|
154
|
-
return cleanRepositoryUrl(url);
|
|
155
|
-
}
|
|
156
|
-
// Strip ssh:// scheme and git@ user if present
|
|
157
|
-
if (url.startsWith('ssh://')) {
|
|
158
|
-
url = url.slice(6);
|
|
159
|
-
}
|
|
160
|
-
if (url.startsWith('git@')) {
|
|
161
|
-
url = url.slice(4);
|
|
162
|
-
}
|
|
163
|
-
// Replace first colon with slash to map SSH path to web path (e.g. host:owner/repo -> host/owner/repo)
|
|
164
|
-
const firstColon = url.indexOf(':');
|
|
165
|
-
if (firstColon !== -1) {
|
|
166
|
-
url = url.slice(0, firstColon) + '/' + url.slice(firstColon + 1);
|
|
167
|
-
}
|
|
168
|
-
return `https://${cleanRepositoryUrl(url)}`;
|
|
169
|
-
}
|
|
170
96
|
/**
|
|
171
97
|
* Synchronous branch detection — used in session resolution (not the build pipeline).
|
|
172
98
|
* Kept synchronous intentionally; simple-git is used for the heavier async build operations.
|
|
@@ -183,19 +109,66 @@ export function getCurrentBranch(cwd = process.cwd()) {
|
|
|
183
109
|
return undefined;
|
|
184
110
|
}
|
|
185
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Dynamically detect the default branch (usually main or master).
|
|
114
|
+
*/
|
|
115
|
+
export function getDefaultBranch(cwd = process.cwd()) {
|
|
116
|
+
try {
|
|
117
|
+
// 1. Try checking the remote HEAD reference
|
|
118
|
+
const remoteHead = execSync('git symbolic-ref refs/remotes/origin/HEAD', {
|
|
119
|
+
encoding: 'utf8',
|
|
120
|
+
cwd,
|
|
121
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
122
|
+
}).trim();
|
|
123
|
+
if (remoteHead) {
|
|
124
|
+
const parts = remoteHead.split('/');
|
|
125
|
+
const branch = parts[parts.length - 1];
|
|
126
|
+
if (branch)
|
|
127
|
+
return branch;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Ignore and proceed
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
// 2. Check if local main branch exists
|
|
135
|
+
execSync('git show-ref --verify refs/heads/main', {
|
|
136
|
+
cwd,
|
|
137
|
+
stdio: 'ignore',
|
|
138
|
+
});
|
|
139
|
+
return 'main';
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Ignore and proceed
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
// 3. Check if local master branch exists
|
|
146
|
+
execSync('git show-ref --verify refs/heads/master', {
|
|
147
|
+
cwd,
|
|
148
|
+
stdio: 'ignore',
|
|
149
|
+
});
|
|
150
|
+
return 'master';
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Ignore and proceed
|
|
154
|
+
}
|
|
155
|
+
// 4. Ultimate fallback
|
|
156
|
+
return 'main';
|
|
157
|
+
}
|
|
186
158
|
/**
|
|
187
159
|
* Calculate the changed LOC (insertions + deletions) for the active branch or main working tree.
|
|
188
160
|
*/
|
|
189
161
|
export async function getChangedLOC(logbookDir, cwd = process.cwd()) {
|
|
190
162
|
try {
|
|
191
|
-
const
|
|
163
|
+
const defaultBranch = getDefaultBranch(cwd);
|
|
164
|
+
const branchName = getCurrentBranch(cwd) || defaultBranch;
|
|
192
165
|
const git = simpleGit(cwd);
|
|
193
166
|
let summary;
|
|
194
|
-
if (branchName ===
|
|
167
|
+
if (branchName === defaultBranch) {
|
|
195
168
|
summary = await git.diffSummary(['HEAD', '--', '.', `:!${logbookDir}`]);
|
|
196
169
|
}
|
|
197
170
|
else {
|
|
198
|
-
summary = await git.diffSummary([
|
|
171
|
+
summary = await git.diffSummary([`${defaultBranch}...HEAD`, '--', '.', `:!${logbookDir}`]);
|
|
199
172
|
}
|
|
200
173
|
return {
|
|
201
174
|
total: summary.insertions + summary.deletions,
|
|
@@ -207,3 +180,4 @@ export async function getChangedLOC(logbookDir, cwd = process.cwd()) {
|
|
|
207
180
|
return { total: 0, insertions: 0, deletions: 0 };
|
|
208
181
|
}
|
|
209
182
|
}
|
|
183
|
+
//# sourceMappingURL=git-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-helpers.js","sourceRoot":"","sources":["../../src/lib/git-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clean the repository URL by removing trailing slashes and .git extensions.
|
|
3
|
+
*/
|
|
4
|
+
export declare function cleanRepositoryUrl(url: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Generate a URL to view a specific commit in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
7
|
+
*/
|
|
8
|
+
export declare function getCommitUrl(repositoryUrl: string | undefined, sha: string): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Generate a URL to view a specific tag in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
11
|
+
*/
|
|
12
|
+
export declare function getTagUrl(repositoryUrl: string | undefined, tag: string): string | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Parse a git remote URL (SSH or HTTPS) into a clean web/HTTP(S) repository homepage URL.
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseRemoteUrlToWebUrl(remoteUrl: string | undefined): string | undefined;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clean the repository URL by removing trailing slashes and .git extensions.
|
|
3
|
+
*/
|
|
4
|
+
export function cleanRepositoryUrl(url) {
|
|
5
|
+
let cleaned = url.trim();
|
|
6
|
+
if (cleaned.endsWith('/')) {
|
|
7
|
+
cleaned = cleaned.slice(0, -1);
|
|
8
|
+
}
|
|
9
|
+
if (cleaned.endsWith('.git')) {
|
|
10
|
+
cleaned = cleaned.slice(0, -4);
|
|
11
|
+
}
|
|
12
|
+
if (cleaned.endsWith('/')) {
|
|
13
|
+
cleaned = cleaned.slice(0, -1);
|
|
14
|
+
}
|
|
15
|
+
return cleaned;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate a URL to view a specific commit in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
19
|
+
*/
|
|
20
|
+
export function getCommitUrl(repositoryUrl, sha) {
|
|
21
|
+
if (!repositoryUrl)
|
|
22
|
+
return undefined;
|
|
23
|
+
const baseUrl = cleanRepositoryUrl(repositoryUrl);
|
|
24
|
+
const lowerUrl = baseUrl.toLowerCase();
|
|
25
|
+
if (lowerUrl.includes('gitlab')) {
|
|
26
|
+
return `${baseUrl}/-/commit/${sha}`;
|
|
27
|
+
}
|
|
28
|
+
if (lowerUrl.includes('bitbucket')) {
|
|
29
|
+
return `${baseUrl}/commits/${sha}`;
|
|
30
|
+
}
|
|
31
|
+
// Default to GitHub style
|
|
32
|
+
return `${baseUrl}/commit/${sha}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generate a URL to view a specific tag in a web interface (GitHub, GitLab, Bitbucket, etc.).
|
|
36
|
+
*/
|
|
37
|
+
export function getTagUrl(repositoryUrl, tag) {
|
|
38
|
+
if (!repositoryUrl)
|
|
39
|
+
return undefined;
|
|
40
|
+
const baseUrl = cleanRepositoryUrl(repositoryUrl);
|
|
41
|
+
const lowerUrl = baseUrl.toLowerCase();
|
|
42
|
+
if (lowerUrl.includes('gitlab')) {
|
|
43
|
+
return `${baseUrl}/-/tags/${tag}`;
|
|
44
|
+
}
|
|
45
|
+
if (lowerUrl.includes('bitbucket')) {
|
|
46
|
+
return `${baseUrl}/src/${tag}`;
|
|
47
|
+
}
|
|
48
|
+
// Default to GitHub style
|
|
49
|
+
return `${baseUrl}/releases/tag/${tag}`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parse a git remote URL (SSH or HTTPS) into a clean web/HTTP(S) repository homepage URL.
|
|
53
|
+
*/
|
|
54
|
+
export function parseRemoteUrlToWebUrl(remoteUrl) {
|
|
55
|
+
if (!remoteUrl)
|
|
56
|
+
return undefined;
|
|
57
|
+
let url = remoteUrl.trim();
|
|
58
|
+
// If it's already an HTTP/HTTPS URL, clean and return it
|
|
59
|
+
if (url.startsWith('https://') || url.startsWith('http://')) {
|
|
60
|
+
return cleanRepositoryUrl(url);
|
|
61
|
+
}
|
|
62
|
+
// Strip ssh:// scheme and git@ user if present
|
|
63
|
+
if (url.startsWith('ssh://')) {
|
|
64
|
+
url = url.slice(6);
|
|
65
|
+
}
|
|
66
|
+
if (url.startsWith('git@')) {
|
|
67
|
+
url = url.slice(4);
|
|
68
|
+
}
|
|
69
|
+
// Replace first colon with slash to map SSH path to web path (e.g. host:owner/repo -> host/owner/repo)
|
|
70
|
+
const firstColon = url.indexOf(':');
|
|
71
|
+
if (firstColon !== -1) {
|
|
72
|
+
url = url.slice(0, firstColon) + '/' + url.slice(firstColon + 1);
|
|
73
|
+
}
|
|
74
|
+
return `https://${cleanRepositoryUrl(url)}`;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=git-url-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-url-helpers.js","sourceRoot":"","sources":["../../src/lib/git-url-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/hast-helpers.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hast-helpers.js","sourceRoot":"","sources":["../../src/lib/hast-helpers.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAoB,EACpB,QAA2B,EAC3B,OAAgC;IAEhC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE7E,SAAS,QAAQ,CAAC,CAAiB;QACjC,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;gBACD,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-attributes.js","sourceRoot":"","sources":["../../src/lib/html-attributes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAE1C,wCAAwC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC"}
|
package/dist/lib/html-escape.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-escape.js","sourceRoot":"","sources":["../../src/lib/html-escape.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,yDAAyD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChE,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -18,6 +18,11 @@ export function extractImagePathsFromMarkdown(content) {
|
|
|
18
18
|
}
|
|
19
19
|
return paths;
|
|
20
20
|
}
|
|
21
|
+
function isCandidateLocalSrc(src) {
|
|
22
|
+
if (typeof src !== 'string')
|
|
23
|
+
return false;
|
|
24
|
+
return !isExternalUrl(src) && !src.startsWith('data:');
|
|
25
|
+
}
|
|
21
26
|
/** ImageProcessor: tracks images encountered during markdown-to-html conversion */
|
|
22
27
|
class ImageProcessor {
|
|
23
28
|
images = [];
|
|
@@ -32,14 +37,9 @@ class ImageProcessor {
|
|
|
32
37
|
return (tree) => {
|
|
33
38
|
visitHastElements(tree, 'img', (node) => {
|
|
34
39
|
const src = node.properties?.src;
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (isExternalUrl(src))
|
|
39
|
-
return;
|
|
40
|
-
if (src.startsWith('data:'))
|
|
41
|
-
return;
|
|
42
|
-
this.images.push(src);
|
|
40
|
+
if (isCandidateLocalSrc(src)) {
|
|
41
|
+
this.images.push(src);
|
|
42
|
+
}
|
|
43
43
|
});
|
|
44
44
|
};
|
|
45
45
|
};
|
|
@@ -50,12 +50,7 @@ export const rehypeRewriteImagePaths = () => {
|
|
|
50
50
|
return (tree) => {
|
|
51
51
|
visitHastElements(tree, 'img', (node) => {
|
|
52
52
|
const src = node.properties?.src;
|
|
53
|
-
if (
|
|
54
|
-
return;
|
|
55
|
-
// Skip external URLs and data URIs
|
|
56
|
-
if (isExternalUrl(src))
|
|
57
|
-
return;
|
|
58
|
-
if (src.startsWith('data:'))
|
|
53
|
+
if (!isCandidateLocalSrc(src))
|
|
59
54
|
return;
|
|
60
55
|
// Skip already rewritten paths
|
|
61
56
|
if (src.startsWith('./images/') || src.startsWith('../images/'))
|
|
@@ -95,17 +90,11 @@ export async function copyImages(sourceDir, outputDir, imagePaths) {
|
|
|
95
90
|
processedPaths.add(imagePath);
|
|
96
91
|
let sourcePath = '';
|
|
97
92
|
let destRelPath = '';
|
|
98
|
-
//
|
|
93
|
+
// 1. Resolve paths
|
|
99
94
|
if (imagePath.startsWith('/')) {
|
|
100
95
|
// Absolute path like /static/screenshot.jpg -> copy from project root to public/static/
|
|
101
96
|
const relativeToProjectRoot = imagePath.substring(1); // Remove leading /
|
|
102
97
|
sourcePath = join(projectRoot, relativeToProjectRoot);
|
|
103
|
-
// Path traversal protection: ensure resolved path stays within project root
|
|
104
|
-
const resolvedSource = resolve(sourcePath);
|
|
105
|
-
if (!resolvedSource.startsWith(projectRoot + '/') && resolvedSource !== projectRoot) {
|
|
106
|
-
console.warn(warning(` Path traversal blocked: ${imagePath}`));
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
98
|
destRelPath = relativeToProjectRoot;
|
|
110
99
|
}
|
|
111
100
|
else {
|
|
@@ -116,21 +105,21 @@ export async function copyImages(sourceDir, outputDir, imagePaths) {
|
|
|
116
105
|
}
|
|
117
106
|
const fullPath = join(sourceDir, resolvedPath);
|
|
118
107
|
sourcePath = fullPath;
|
|
119
|
-
// Path traversal protection: ensure resolved path stays within source directory
|
|
120
|
-
const resolvedSource = resolve(sourcePath);
|
|
121
|
-
const resolvedSourceDir = resolve(sourceDir);
|
|
122
|
-
if (!resolvedSource.startsWith(resolvedSourceDir + '/') && resolvedSource !== resolvedSourceDir) {
|
|
123
|
-
console.warn(warning(` Path traversal blocked: ${imagePath}`));
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
// Get the relative path from source dir to maintain folder structure
|
|
127
108
|
destRelPath = relative(sourceDir, fullPath);
|
|
128
109
|
}
|
|
129
|
-
// Check if image exists
|
|
110
|
+
// 2. Check if image exists
|
|
130
111
|
if (!(await fs.pathExists(sourcePath))) {
|
|
131
112
|
console.warn(warning(` Image not found: ${sourcePath}`));
|
|
132
113
|
continue;
|
|
133
114
|
}
|
|
115
|
+
// 3. Path traversal protection: ensure resolved path stays within allowed root boundaries
|
|
116
|
+
const allowedRoot = imagePath.startsWith('/') ? projectRoot : sourceDir;
|
|
117
|
+
const resolvedSource = fs.realpathSync(sourcePath);
|
|
118
|
+
const resolvedRoot = fs.realpathSync(allowedRoot);
|
|
119
|
+
if (!resolvedSource.startsWith(resolvedRoot + '/') && resolvedSource !== resolvedRoot) {
|
|
120
|
+
console.warn(warning(` Path traversal blocked: ${imagePath}`));
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
134
123
|
const destPath = join(outputDir, destRelPath);
|
|
135
124
|
// Create destination directory if needed
|
|
136
125
|
await fs.mkdirp(dirname(destPath));
|
|
@@ -138,3 +127,4 @@ export async function copyImages(sourceDir, outputDir, imagePaths) {
|
|
|
138
127
|
await fs.copyFile(sourcePath, destPath);
|
|
139
128
|
}
|
|
140
129
|
}
|
|
130
|
+
//# sourceMappingURL=image-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-helpers.js","sourceRoot":"","sources":["../../src/lib/image-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/jira-helpers.js
CHANGED
|
@@ -3,3 +3,4 @@
|
|
|
3
3
|
* Only applied when both jiraBaseUrl and jiraPrefix are provided.
|
|
4
4
|
*/
|
|
5
5
|
export const linkJiraIds = (msg, base, prefix) => msg.replace(new RegExp(`(${prefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}-\\d+)`, 'g'), (m) => `<a href="${base}${m}" target="_blank" rel="noopener noreferrer" class="commit-jira-link">${m}</a>`);
|
|
6
|
+
//# sourceMappingURL=jira-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-helpers.js","sourceRoot":"","sources":["../../src/lib/jira-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,MAAc,EAAU,EAAE,CAC/E,GAAG,CAAC,OAAO,CACT,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAC1E,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,IAAI,GAAG,CAAC,wEAAwE,CAAC,MAAM,CAC3G,CAAC"}
|
package/dist/lib/lint-runner.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-runner.js","sourceRoot":"","sources":["../../src/lib/lint-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAsB;IACrD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC7E,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,SAAS,CAAC;AACpB,CAAC"}
|
package/dist/lib/lint-types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-types.js","sourceRoot":"","sources":["../../src/lib/lint-types.ts"],"names":[],"mappings":""}
|
package/dist/lib/lockfile.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/lib/lockfile.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logbook-client.js","sourceRoot":"","sources":["../../src/lib/logbook-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-processors.js","sourceRoot":"","sources":["../../src/lib/markdown-processors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAqB,GAAG,EAAE;IACzD,OAAO,CAAC,IAAU,EAAE,EAAE;QACpB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAa,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACnC,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO;YACrC,IAAI,qBAAqB,CAAC,IAAI,CAAC;gBAAE,OAAO;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,IAAI,cAAc,QAAQ,EAAE,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,UAA0C,EAAE;IAE5C,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE9E,yCAAyC;IACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC5C,oBAAsC;IAEtC,OAAO,uBAAuB,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,oBAAsC,EACtC,uBAAyC;IAEzC,OAAO,uBAAuB,CAAC,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAC5C,qBAAuC,EACvC,uBAAyC,EACzC,oBAAuC;IAEvC,MAAM,OAAO,GAAmC,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;IACjG,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/lib/migrations.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/lib/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAE1E,MAAM,UAAU,eAAe;IAC7B,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEhG,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QAE3C,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,cAAc,KAAK,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-version.js","sourceRoot":"","sources":["../../src/lib/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,4CAA4C;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,qEAAqE;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AAChC,CAAC"}
|
package/dist/lib/rss.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rss.js","sourceRoot":"","sources":["../../src/lib/rss.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/session.js
CHANGED
|
@@ -13,18 +13,7 @@ import { getLogbookEntries } from '../utils/fs.js';
|
|
|
13
13
|
export async function getActiveEntry(options = {}, cwd = process.cwd()) {
|
|
14
14
|
const config = getConfig(cwd);
|
|
15
15
|
const logbookDir = join(cwd, config.logbookDir);
|
|
16
|
-
// 1.
|
|
17
|
-
const lockfilePath = join(cwd, LOCKFILE_NAME);
|
|
18
|
-
if (await fs.pathExists(lockfilePath)) {
|
|
19
|
-
try {
|
|
20
|
-
const lock = await fs.readJson(lockfilePath);
|
|
21
|
-
return { slug: lock.slug, source: 'lockfile', startedAt: lock.startedAt, prompter: lock.prompter };
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
// ignore corrupt lockfile
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// 2. Load logbook entries
|
|
16
|
+
// 1. Load logbook entries
|
|
28
17
|
let entries = [];
|
|
29
18
|
try {
|
|
30
19
|
entries = await getLogbookEntries(logbookDir);
|
|
@@ -32,39 +21,61 @@ export async function getActiveEntry(options = {}, cwd = process.cwd()) {
|
|
|
32
21
|
catch {
|
|
33
22
|
entries = [];
|
|
34
23
|
}
|
|
35
|
-
|
|
36
|
-
// 1. Explicit ID flag
|
|
24
|
+
// 2. Explicit ID flag (takes absolute precedence)
|
|
37
25
|
if (options.id) {
|
|
38
|
-
const resolvedId = options.id;
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
26
|
+
const resolvedId = /^\d+(?:-.*)?$/.test(options.id) && config.jiraPrefix ? `${config.jiraPrefix}-${options.id}` : options.id;
|
|
27
|
+
// First Pass: Exact Ticket ID Match in Frontmatter
|
|
28
|
+
const exactMatch = entries.find((e) => {
|
|
29
|
+
const ticket = typeof e.data?.ticket === 'string' ? e.data.ticket.trim().toLowerCase() : '';
|
|
30
|
+
return ticket === resolvedId.toLowerCase();
|
|
31
|
+
});
|
|
32
|
+
if (exactMatch) {
|
|
33
|
+
return {
|
|
34
|
+
slug: exactMatch.slug,
|
|
35
|
+
source: 'flag',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Second Pass: Fallback Prefix Match on Folder Names
|
|
39
|
+
const prefixMatch = entries.find((e) => {
|
|
40
|
+
const prefix = e.slug.split('-').slice(0, resolvedId.split('-').length).join('-');
|
|
41
|
+
return prefix.toLowerCase() === resolvedId.toLowerCase();
|
|
45
42
|
});
|
|
46
|
-
if (
|
|
43
|
+
if (prefixMatch) {
|
|
47
44
|
return {
|
|
48
|
-
slug:
|
|
45
|
+
slug: prefixMatch.slug,
|
|
49
46
|
source: 'flag',
|
|
50
47
|
};
|
|
51
48
|
}
|
|
52
49
|
}
|
|
53
|
-
//
|
|
50
|
+
// 3. Lockfile check
|
|
51
|
+
const lockfilePath = join(cwd, LOCKFILE_NAME);
|
|
52
|
+
if (await fs.pathExists(lockfilePath)) {
|
|
53
|
+
try {
|
|
54
|
+
const lock = await fs.readJson(lockfilePath);
|
|
55
|
+
return { slug: lock.slug, source: 'lockfile', startedAt: lock.startedAt, prompter: lock.prompter };
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// ignore corrupt lockfile
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 4. Git Branch Resolution
|
|
54
62
|
const branchName = getCurrentBranch(cwd);
|
|
55
63
|
if (branchName) {
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
// Map entries to their respective ticket IDs (using frontmatter with fallback to first 2 parts of slug)
|
|
65
|
+
const candidates = entries.map((e) => {
|
|
66
|
+
const ticketId = typeof e.data?.ticket === 'string' && e.data.ticket.trim()
|
|
67
|
+
? e.data.ticket.trim()
|
|
68
|
+
: e.slug.split('-').slice(0, 2).join('-');
|
|
69
|
+
return { entry: e, ticketId };
|
|
70
|
+
});
|
|
71
|
+
// Sort by ticketId length descending to match the longest/most-specific ID first
|
|
72
|
+
candidates.sort((a, b) => b.ticketId.length - a.ticketId.length);
|
|
73
|
+
for (const { entry, ticketId } of candidates) {
|
|
74
|
+
const escapedId = ticketId.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
|
|
75
|
+
const boundaryRegex = new RegExp(`(?:^|[/\\-_])${escapedId}(?:$|[/\\-_])`, 'i');
|
|
76
|
+
if (boundaryRegex.test(branchName)) {
|
|
66
77
|
return {
|
|
67
|
-
slug:
|
|
78
|
+
slug: entry.slug,
|
|
68
79
|
source: 'branch',
|
|
69
80
|
};
|
|
70
81
|
}
|
|
@@ -72,3 +83,4 @@ export async function getActiveEntry(options = {}, cwd = process.cwd()) {
|
|
|
72
83
|
}
|
|
73
84
|
return undefined;
|
|
74
85
|
}
|
|
86
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"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"}
|