spec-copy-selection 1.0.3 → 1.0.4
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.
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.shouldPrependSeparator = shouldPrependSeparator;
|
|
6
7
|
exports.readFileRange = readFileRange;
|
|
7
8
|
const node_fs_1 = require("node:fs");
|
|
8
9
|
const promises_1 = require("node:fs/promises");
|
|
@@ -10,14 +11,13 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
10
11
|
const node_readline_1 = require("node:readline");
|
|
11
12
|
const FILE_SIZE_THRESHOLD = 10 * 1024 * 1024;
|
|
12
13
|
function shouldPrependSeparator(filePath, startLine, linesBeforeStart) {
|
|
13
|
-
var _a;
|
|
14
14
|
if (!filePath.includes('backlog.md')) {
|
|
15
15
|
return false;
|
|
16
16
|
}
|
|
17
17
|
if (startLine === 1) {
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
|
-
return ((
|
|
20
|
+
return !linesBeforeStart.some((line) => line.trim() === '---');
|
|
21
21
|
}
|
|
22
22
|
async function insertSeparatorToFile(filePath, startLine, endLine, lines) {
|
|
23
23
|
const updatedLines = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readFileRange.js","sourceRoot":"","sources":["../../src/cli/readFileRange.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"readFileRange.js","sourceRoot":"","sources":["../../src/cli/readFileRange.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const bun_test_1 = require("bun:test");
|
|
4
|
+
const readFileRange_js_1 = require("./readFileRange.js");
|
|
5
|
+
(0, bun_test_1.describe)('shouldPrependSeparator', () => {
|
|
6
|
+
(0, bun_test_1.describe)('backlog.md file detection', () => {
|
|
7
|
+
(0, bun_test_1.test)('returns true for backlog.md files when conditions met', () => {
|
|
8
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 2, ['line1']);
|
|
9
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
10
|
+
});
|
|
11
|
+
(0, bun_test_1.test)('returns false for non-backlog.md files (requirements.md)', () => {
|
|
12
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/requirements.md', 2, ['line1']);
|
|
13
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
14
|
+
});
|
|
15
|
+
(0, bun_test_1.test)('returns false for non-backlog.md files (design.md)', () => {
|
|
16
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/design.md', 2, ['line1']);
|
|
17
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
18
|
+
});
|
|
19
|
+
(0, bun_test_1.test)('handles relative path to backlog.md', () => {
|
|
20
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('backlog.md', 2, ['line1']);
|
|
21
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
(0, bun_test_1.test)('handles absolute path to backlog.md', () => {
|
|
24
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('/home/user/project/specs/feature/backlog.md', 2, [
|
|
25
|
+
'line1',
|
|
26
|
+
]);
|
|
27
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
(0, bun_test_1.test)('handles Windows absolute path to backlog.md', () => {
|
|
30
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('D:\\projects\\specs\\feature\\backlog.md', 2, [
|
|
31
|
+
'line1',
|
|
32
|
+
]);
|
|
33
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
(0, bun_test_1.test)('handles nested path to backlog.md', () => {
|
|
36
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/deep/nested/feature/backlog.md', 2, ['line1']);
|
|
37
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
(0, bun_test_1.describe)('startLine validation', () => {
|
|
41
|
+
(0, bun_test_1.test)('returns false when startLine is 1 (first section)', () => {
|
|
42
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 1, []);
|
|
43
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
(0, bun_test_1.test)('returns true when startLine is 2 and no separator exists', () => {
|
|
46
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 2, ['line1']);
|
|
47
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
48
|
+
});
|
|
49
|
+
(0, bun_test_1.test)('returns true when startLine is 10 and no separator exists', () => {
|
|
50
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 10, [
|
|
51
|
+
'line1',
|
|
52
|
+
'line2',
|
|
53
|
+
'line3',
|
|
54
|
+
]);
|
|
55
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
(0, bun_test_1.describe)('separator detection', () => {
|
|
59
|
+
(0, bun_test_1.test)('returns false when "---" exists anywhere in linesBeforeStart', () => {
|
|
60
|
+
const linesBeforeStart = ['line1', '---', 'line3'];
|
|
61
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
62
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
(0, bun_test_1.test)('returns false when separator exists with empty lines around it (bug fix)', () => {
|
|
65
|
+
const linesBeforeStart = ['a', 'b', '', '---', ''];
|
|
66
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 6, linesBeforeStart);
|
|
67
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
(0, bun_test_1.test)('returns true when no "---" exists in any line', () => {
|
|
70
|
+
const linesBeforeStart = ['line1', 'line2', 'line3'];
|
|
71
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
72
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
(0, bun_test_1.test)('handles trimmed separators with leading whitespace', () => {
|
|
75
|
+
const linesBeforeStart = ['line1', ' ---', 'line3'];
|
|
76
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
77
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
(0, bun_test_1.test)('handles trimmed separators with trailing whitespace', () => {
|
|
80
|
+
const linesBeforeStart = ['line1', '--- ', 'line3'];
|
|
81
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
82
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
(0, bun_test_1.test)('handles trimmed separators with both leading and trailing whitespace', () => {
|
|
85
|
+
const linesBeforeStart = ['line1', ' --- ', 'line3'];
|
|
86
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
87
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
88
|
+
});
|
|
89
|
+
(0, bun_test_1.test)('does NOT match partial separators: "----"', () => {
|
|
90
|
+
const linesBeforeStart = ['line1', '----', 'line3'];
|
|
91
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
92
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
(0, bun_test_1.test)('does NOT match partial separators: "-- -"', () => {
|
|
95
|
+
const linesBeforeStart = ['line1', '-- -', 'line3'];
|
|
96
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
97
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
(0, bun_test_1.test)('does NOT match partial separators: "---text"', () => {
|
|
100
|
+
const linesBeforeStart = ['line1', '---text', 'line3'];
|
|
101
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
102
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
(0, bun_test_1.test)('does NOT match partial separators: "text---"', () => {
|
|
105
|
+
const linesBeforeStart = ['line1', 'text---', 'line3'];
|
|
106
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
107
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
108
|
+
});
|
|
109
|
+
(0, bun_test_1.test)('returns false when separator is at the beginning of linesBeforeStart', () => {
|
|
110
|
+
const linesBeforeStart = ['---', 'line2', 'line3'];
|
|
111
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
112
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
(0, bun_test_1.test)('returns false when separator is at the end of linesBeforeStart', () => {
|
|
115
|
+
const linesBeforeStart = ['line1', 'line2', '---'];
|
|
116
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
117
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
(0, bun_test_1.describe)('edge cases', () => {
|
|
121
|
+
(0, bun_test_1.test)('handles empty linesBeforeStart array', () => {
|
|
122
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 2, []);
|
|
123
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
124
|
+
});
|
|
125
|
+
(0, bun_test_1.test)('handles array with only empty strings', () => {
|
|
126
|
+
const linesBeforeStart = ['', '', ''];
|
|
127
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
128
|
+
(0, bun_test_1.expect)(result).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
(0, bun_test_1.test)('handles multiple separators in linesBeforeStart', () => {
|
|
131
|
+
const linesBeforeStart = ['line1', '---', 'line3', '---', 'line5'];
|
|
132
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 6, linesBeforeStart);
|
|
133
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
134
|
+
});
|
|
135
|
+
(0, bun_test_1.test)('handles separator with tabs', () => {
|
|
136
|
+
const linesBeforeStart = ['line1', '\t---\t', 'line3'];
|
|
137
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
138
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
(0, bun_test_1.describe)('combined conditions', () => {
|
|
142
|
+
(0, bun_test_1.test)('returns false when file is not backlog.md even if other conditions met', () => {
|
|
143
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/requirements.md', 2, ['line1']);
|
|
144
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
145
|
+
});
|
|
146
|
+
(0, bun_test_1.test)('returns false when startLine is 1 even if file is backlog.md', () => {
|
|
147
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 1, ['line1']);
|
|
148
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
149
|
+
});
|
|
150
|
+
(0, bun_test_1.test)('returns false when separator exists even if file is backlog.md and startLine > 1', () => {
|
|
151
|
+
const linesBeforeStart = ['line1', '---', 'line3'];
|
|
152
|
+
const result = (0, readFileRange_js_1.shouldPrependSeparator)('specs/feature/backlog.md', 4, linesBeforeStart);
|
|
153
|
+
(0, bun_test_1.expect)(result).toBe(false);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=readFileRange.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readFileRange.test.js","sourceRoot":"","sources":["../../src/cli/readFileRange.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spec-copy-selection",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "A CLI utility for copying text to clipboard",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"scripts": {
|
|
39
39
|
"dev": "bun run src/index.ts specs/cli-file-operations/backlog.md:69-70",
|
|
40
40
|
"build": "tsc",
|
|
41
|
-
"
|
|
41
|
+
"version:patch": "npm version patch --no-git-tag-version",
|
|
42
|
+
"prepublishOnly": "npm run version:patch && bun run check && bun run build",
|
|
42
43
|
"lint": "biome lint .",
|
|
43
44
|
"format": "biome format --write .",
|
|
44
45
|
"check": "biome check --write . && bunx tsc --noEmit",
|