yargs-file-commands 1.1.0 → 1.1.2
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 +73 -2
- package/package.json +1 -9
- package/dist/lib/buildSegmentTree.test.d.ts +0 -1
- package/dist/lib/buildSegmentTree.test.js +0 -323
- package/dist/lib/buildSegmentTree.test.js.map +0 -1
- package/dist/lib/fileCommands.test.d.ts +0 -1
- package/dist/lib/fileCommands.test.js +0 -113
- package/dist/lib/fileCommands.test.js.map +0 -1
- package/dist/lib/fixtures/commands/$default.d.ts +0 -2
- package/dist/lib/fixtures/commands/$default.js +0 -5
- package/dist/lib/fixtures/commands/$default.js.map +0 -1
- package/dist/lib/fixtures/commands/create.d.ts +0 -3
- package/dist/lib/fixtures/commands/create.js +0 -6
- package/dist/lib/fixtures/commands/create.js.map +0 -1
- package/dist/lib/fixtures/commands/db/health.d.ts +0 -4
- package/dist/lib/fixtures/commands/db/health.js +0 -6
- package/dist/lib/fixtures/commands/db/health.js.map +0 -1
- package/dist/lib/fixtures/commands/db/migration/command.d.ts +0 -10
- package/dist/lib/fixtures/commands/db/migration/command.js +0 -9
- package/dist/lib/fixtures/commands/db/migration/command.js.map +0 -1
- package/dist/lib/importCommand.test.d.ts +0 -1
- package/dist/lib/importCommand.test.js +0 -165
- package/dist/lib/importCommand.test.js.map +0 -1
- package/dist/lib/scanDirectory.test.d.ts +0 -1
- package/dist/lib/scanDirectory.test.js +0 -169
- package/dist/lib/scanDirectory.test.js.map +0 -1
- package/dist/lib/segmentPath.test.d.ts +0 -1
- package/dist/lib/segmentPath.test.js +0 -33
- package/dist/lib/segmentPath.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -123,6 +123,75 @@ export const command = defineCommand({
|
|
|
123
123
|
});
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
+
### 4. Shared Options
|
|
127
|
+
|
|
128
|
+
To share options between commands while maintaining type safety, you can use either helper functions (recommended for correct type inference) or shared option objects.
|
|
129
|
+
|
|
130
|
+
**Approach 1: Helper Functions (Recommended)**
|
|
131
|
+
|
|
132
|
+
This approach uses function composition to chain option definitions, allowing TypeScript to correctly infer the resulting types.
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
// shared.ts
|
|
136
|
+
import type { Argv } from 'yargs';
|
|
137
|
+
|
|
138
|
+
export const withPagination = <T>(yargs: Argv<T>) => {
|
|
139
|
+
return yargs
|
|
140
|
+
.option('page', {
|
|
141
|
+
type: 'number',
|
|
142
|
+
default: 1,
|
|
143
|
+
describe: 'Page number'
|
|
144
|
+
})
|
|
145
|
+
.option('limit', {
|
|
146
|
+
type: 'number',
|
|
147
|
+
default: 10,
|
|
148
|
+
describe: 'Items per page'
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
// commands/users.ts
|
|
153
|
+
import { defineCommand } from 'yargs-file-commands';
|
|
154
|
+
import { withPagination } from '../shared.js';
|
|
155
|
+
|
|
156
|
+
export const command = defineCommand({
|
|
157
|
+
command: 'list',
|
|
158
|
+
builder: (yargs) => withPagination(yargs),
|
|
159
|
+
handler: async (argv) => {
|
|
160
|
+
// argv.page and argv.limit are correctly typed as number
|
|
161
|
+
console.log(`Page: ${argv.page}, Limit: ${argv.limit}`);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Approach 2: Shared Objects**
|
|
167
|
+
|
|
168
|
+
You can also define a common options object and spread it into your command definitions.
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
// shared.ts
|
|
172
|
+
export const commonOptions = {
|
|
173
|
+
verbose: {
|
|
174
|
+
alias: 'v',
|
|
175
|
+
type: 'boolean',
|
|
176
|
+
describe: 'Run with verbose logging',
|
|
177
|
+
default: false,
|
|
178
|
+
} as const
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
// commands/users.ts
|
|
182
|
+
import { defineCommand } from 'yargs-file-commands';
|
|
183
|
+
import { commonOptions } from '../shared.js';
|
|
184
|
+
|
|
185
|
+
export const command = defineCommand({
|
|
186
|
+
command: 'list',
|
|
187
|
+
builder: (yargs) => yargs.options(commonOptions),
|
|
188
|
+
handler: async (argv) => {
|
|
189
|
+
// argv.verbose is correctly typed
|
|
190
|
+
if (argv.verbose) console.log('Verbose mode');
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
```
|
|
194
|
+
|
|
126
195
|
## Options
|
|
127
196
|
|
|
128
197
|
The `fileCommands` method takes the following options:
|
|
@@ -159,7 +228,7 @@ pnpm install
|
|
|
159
228
|
pnpm run build
|
|
160
229
|
|
|
161
230
|
# biome
|
|
162
|
-
pnpm
|
|
231
|
+
pnpm biome check --write
|
|
163
232
|
|
|
164
233
|
# tests
|
|
165
234
|
pnpm vitest
|
|
@@ -169,9 +238,11 @@ pnpm clean
|
|
|
169
238
|
|
|
170
239
|
# run example cli
|
|
171
240
|
npx example-cli
|
|
241
|
+
|
|
242
|
+
# publish new release
|
|
243
|
+
pnpm make-release
|
|
172
244
|
```
|
|
173
245
|
|
|
174
|
-
Underneath the hood, we are using [NX](https://nx.dev) to manage the monorepo and shared scripts.
|
|
175
246
|
|
|
176
247
|
[npm]: https://img.shields.io/npm/v/yargs-file-commands
|
|
177
248
|
[npm-url]: https://www.npmjs.com/package/yargs-file-commands
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yargs-file-commands",
|
|
3
3
|
"description": "A yargs helper function that lets you define your commands structure via directory and file naming conventions.",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.2",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -31,14 +31,6 @@
|
|
|
31
31
|
"bugs": {
|
|
32
32
|
"url": "https://github.com/bhouston/yargs-file-commands/issues"
|
|
33
33
|
},
|
|
34
|
-
"files": [
|
|
35
|
-
"dist",
|
|
36
|
-
"src",
|
|
37
|
-
"package.json",
|
|
38
|
-
"README.md",
|
|
39
|
-
"LICENSE",
|
|
40
|
-
"CHANGELOG.md"
|
|
41
|
-
],
|
|
42
34
|
"peerDependencies": {
|
|
43
35
|
"yargs": "^17"
|
|
44
36
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { buildSegmentTree, createCommand, logCommandTree } from './buildSegmentTree.js';
|
|
3
|
-
describe('buildSegmentTree', () => {
|
|
4
|
-
it('should build correct tree structure', () => {
|
|
5
|
-
const commands = [
|
|
6
|
-
{
|
|
7
|
-
fullPath: '/commands/db/migration/command.js',
|
|
8
|
-
segments: ['db', 'migration'],
|
|
9
|
-
commandModule: {
|
|
10
|
-
command: 'migration',
|
|
11
|
-
describe: 'Migration command',
|
|
12
|
-
handler: async () => {
|
|
13
|
-
// Test handler
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
fullPath: '/commands/db/health.js',
|
|
19
|
-
segments: ['db', 'health'],
|
|
20
|
-
commandModule: {
|
|
21
|
-
command: 'health',
|
|
22
|
-
describe: 'Health command',
|
|
23
|
-
handler: async () => {
|
|
24
|
-
// Test handler
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
];
|
|
29
|
-
const tree = buildSegmentTree(commands);
|
|
30
|
-
expect(tree.length).toBe(1);
|
|
31
|
-
const rootNode = tree[0];
|
|
32
|
-
expect(rootNode).toBeDefined();
|
|
33
|
-
if (!rootNode) {
|
|
34
|
-
throw new Error('Root node should exist');
|
|
35
|
-
}
|
|
36
|
-
expect(rootNode.segmentName).toBe('db');
|
|
37
|
-
expect(rootNode.type).toBe('internal');
|
|
38
|
-
if (rootNode.type !== 'internal') {
|
|
39
|
-
throw new Error('Expected internal node');
|
|
40
|
-
}
|
|
41
|
-
expect(rootNode.children.length).toBe(2);
|
|
42
|
-
const childSegments = rootNode.children.map((child) => child.segmentName).sort();
|
|
43
|
-
expect(childSegments).toEqual(['health', 'migration']);
|
|
44
|
-
});
|
|
45
|
-
it('should handle empty input', () => {
|
|
46
|
-
const tree = buildSegmentTree([]);
|
|
47
|
-
expect(tree.length).toBe(0);
|
|
48
|
-
});
|
|
49
|
-
it('should handle single command', () => {
|
|
50
|
-
const commands = [
|
|
51
|
-
{
|
|
52
|
-
fullPath: '/commands/test.ts',
|
|
53
|
-
segments: ['test'],
|
|
54
|
-
commandModule: {
|
|
55
|
-
command: 'test',
|
|
56
|
-
describe: 'Test command',
|
|
57
|
-
handler: async () => {
|
|
58
|
-
// Test handler
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
];
|
|
63
|
-
const tree = buildSegmentTree(commands);
|
|
64
|
-
expect(tree.length).toBe(1);
|
|
65
|
-
const node = tree[0];
|
|
66
|
-
expect(node).toBeDefined();
|
|
67
|
-
if (!node) {
|
|
68
|
-
throw new Error('Node should exist');
|
|
69
|
-
}
|
|
70
|
-
expect(node.segmentName).toBe('test');
|
|
71
|
-
expect(node.type).toBe('leaf');
|
|
72
|
-
});
|
|
73
|
-
it('should throw error when directory conflicts with command name (directory first)', () => {
|
|
74
|
-
const commands = [
|
|
75
|
-
{
|
|
76
|
-
fullPath: '/commands/db/migration/command.js',
|
|
77
|
-
segments: ['db', 'migration'],
|
|
78
|
-
commandModule: {
|
|
79
|
-
command: 'migration',
|
|
80
|
-
describe: 'Migration command',
|
|
81
|
-
handler: async () => { },
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
fullPath: '/commands/db.js',
|
|
86
|
-
segments: ['db'],
|
|
87
|
-
commandModule: {
|
|
88
|
-
command: 'db',
|
|
89
|
-
describe: 'DB command',
|
|
90
|
-
handler: async () => { },
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
];
|
|
94
|
-
expect(() => buildSegmentTree(commands)).toThrow(/Conflict: db is both a directory and a command/);
|
|
95
|
-
});
|
|
96
|
-
it('should throw error when directory conflicts with command name (command first)', () => {
|
|
97
|
-
const commands = [
|
|
98
|
-
{
|
|
99
|
-
fullPath: '/commands/db.js',
|
|
100
|
-
segments: ['db'],
|
|
101
|
-
commandModule: {
|
|
102
|
-
command: 'db',
|
|
103
|
-
describe: 'DB command',
|
|
104
|
-
handler: async () => { },
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
fullPath: '/commands/db/migration/command.js',
|
|
109
|
-
segments: ['db', 'migration'],
|
|
110
|
-
commandModule: {
|
|
111
|
-
command: 'migration',
|
|
112
|
-
describe: 'Migration command',
|
|
113
|
-
handler: async () => { },
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
];
|
|
117
|
-
expect(() => buildSegmentTree(commands)).toThrow(/Conflict: db is both a directory and a command/);
|
|
118
|
-
});
|
|
119
|
-
it('should handle multiple root commands', () => {
|
|
120
|
-
const commands = [
|
|
121
|
-
{
|
|
122
|
-
fullPath: '/commands/hello.ts',
|
|
123
|
-
segments: ['hello'],
|
|
124
|
-
commandModule: {
|
|
125
|
-
command: 'hello',
|
|
126
|
-
describe: 'Hello command',
|
|
127
|
-
handler: async () => { },
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
fullPath: '/commands/world.ts',
|
|
132
|
-
segments: ['world'],
|
|
133
|
-
commandModule: {
|
|
134
|
-
command: 'world',
|
|
135
|
-
describe: 'World command',
|
|
136
|
-
handler: async () => { },
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
];
|
|
140
|
-
const tree = buildSegmentTree(commands);
|
|
141
|
-
expect(tree.length).toBe(2);
|
|
142
|
-
expect(tree.map((n) => n.segmentName).sort()).toEqual(['hello', 'world']);
|
|
143
|
-
});
|
|
144
|
-
it('should handle nested commands at different depths', () => {
|
|
145
|
-
const commands = [
|
|
146
|
-
{
|
|
147
|
-
fullPath: '/commands/a/b/c.ts',
|
|
148
|
-
segments: ['a', 'b', 'c'],
|
|
149
|
-
commandModule: {
|
|
150
|
-
command: 'c',
|
|
151
|
-
describe: 'C command',
|
|
152
|
-
handler: async () => { },
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
fullPath: '/commands/a/d.ts',
|
|
157
|
-
segments: ['a', 'd'],
|
|
158
|
-
commandModule: {
|
|
159
|
-
command: 'd',
|
|
160
|
-
describe: 'D command',
|
|
161
|
-
handler: async () => { },
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
];
|
|
165
|
-
const tree = buildSegmentTree(commands);
|
|
166
|
-
expect(tree.length).toBe(1);
|
|
167
|
-
expect(tree[0]?.segmentName).toBe('a');
|
|
168
|
-
if (tree[0]?.type === 'internal') {
|
|
169
|
-
expect(tree[0].children.length).toBe(2);
|
|
170
|
-
const childNames = tree[0].children.map((c) => c.segmentName).sort();
|
|
171
|
-
expect(childNames).toEqual(['b', 'd']);
|
|
172
|
-
const bNode = tree[0].children.find((c) => c.segmentName === 'b');
|
|
173
|
-
if (bNode?.type === 'internal') {
|
|
174
|
-
expect(bNode.children.length).toBe(1);
|
|
175
|
-
expect(bNode.children[0]?.segmentName).toBe('c');
|
|
176
|
-
expect(bNode.children[0]?.type).toBe('leaf');
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
describe('createCommand', () => {
|
|
182
|
-
it('should create command module from leaf node', () => {
|
|
183
|
-
const command = {
|
|
184
|
-
fullPath: '/commands/test.ts',
|
|
185
|
-
segments: ['test'],
|
|
186
|
-
commandModule: {
|
|
187
|
-
command: 'test',
|
|
188
|
-
describe: 'Test command',
|
|
189
|
-
handler: async () => {
|
|
190
|
-
// Test handler
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
};
|
|
194
|
-
const treeNode = {
|
|
195
|
-
type: 'leaf',
|
|
196
|
-
segmentName: 'test',
|
|
197
|
-
command,
|
|
198
|
-
};
|
|
199
|
-
const commandModule = createCommand(treeNode);
|
|
200
|
-
expect(commandModule.command).toBe('test');
|
|
201
|
-
expect(commandModule.describe).toBe('Test command');
|
|
202
|
-
expect(commandModule.handler).toBe(command.commandModule.handler);
|
|
203
|
-
});
|
|
204
|
-
it('should create command module from internal node with children', () => {
|
|
205
|
-
const childCommand = {
|
|
206
|
-
fullPath: '/commands/db/health.ts',
|
|
207
|
-
segments: ['db', 'health'],
|
|
208
|
-
commandModule: {
|
|
209
|
-
command: 'health',
|
|
210
|
-
describe: 'Health check',
|
|
211
|
-
handler: async () => { },
|
|
212
|
-
},
|
|
213
|
-
};
|
|
214
|
-
const childTreeNode = {
|
|
215
|
-
type: 'leaf',
|
|
216
|
-
segmentName: 'health',
|
|
217
|
-
command: childCommand,
|
|
218
|
-
};
|
|
219
|
-
const internalTreeNode = {
|
|
220
|
-
type: 'internal',
|
|
221
|
-
segmentName: 'db',
|
|
222
|
-
children: [childTreeNode],
|
|
223
|
-
};
|
|
224
|
-
const commandModule = createCommand(internalTreeNode);
|
|
225
|
-
expect(commandModule.command).toBe('db');
|
|
226
|
-
expect(commandModule.describe).toBe('db commands');
|
|
227
|
-
expect(commandModule.builder).toBeDefined();
|
|
228
|
-
expect(commandModule.handler).toBeDefined();
|
|
229
|
-
});
|
|
230
|
-
it('should create nested command structure with builder', () => {
|
|
231
|
-
const healthCommand = {
|
|
232
|
-
fullPath: '/commands/db/health.ts',
|
|
233
|
-
segments: ['db', 'health'],
|
|
234
|
-
commandModule: {
|
|
235
|
-
command: 'health',
|
|
236
|
-
describe: 'Health check',
|
|
237
|
-
handler: async () => { },
|
|
238
|
-
},
|
|
239
|
-
};
|
|
240
|
-
const migrationCommand = {
|
|
241
|
-
fullPath: '/commands/db/migration.ts',
|
|
242
|
-
segments: ['db', 'migration'],
|
|
243
|
-
commandModule: {
|
|
244
|
-
command: 'migration',
|
|
245
|
-
describe: 'Migration',
|
|
246
|
-
handler: async () => { },
|
|
247
|
-
},
|
|
248
|
-
};
|
|
249
|
-
const tree = buildSegmentTree([healthCommand, migrationCommand]);
|
|
250
|
-
const dbNode = tree[0];
|
|
251
|
-
if (!dbNode || dbNode.type !== 'internal') {
|
|
252
|
-
throw new Error('Expected internal node');
|
|
253
|
-
}
|
|
254
|
-
const commandModule = createCommand(dbNode);
|
|
255
|
-
expect(commandModule.command).toBe('db');
|
|
256
|
-
expect(commandModule.builder).toBeDefined();
|
|
257
|
-
// Test the builder function
|
|
258
|
-
if (commandModule.builder && typeof commandModule.builder === 'function') {
|
|
259
|
-
const mockYargs = {
|
|
260
|
-
command: vi.fn().mockReturnThis(),
|
|
261
|
-
demandCommand: vi.fn().mockReturnThis(),
|
|
262
|
-
};
|
|
263
|
-
commandModule.builder(mockYargs);
|
|
264
|
-
expect(mockYargs.command).toHaveBeenCalledTimes(1);
|
|
265
|
-
expect(mockYargs.demandCommand).toHaveBeenCalledWith(1, 'You must specify a db subcommand');
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
describe('logCommandTree', () => {
|
|
270
|
-
it('should log command tree structure', () => {
|
|
271
|
-
const consoleSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
272
|
-
const commands = [
|
|
273
|
-
{
|
|
274
|
-
fullPath: '/commands/db/health.ts',
|
|
275
|
-
segments: ['db', 'health'],
|
|
276
|
-
commandModule: {
|
|
277
|
-
command: 'health',
|
|
278
|
-
describe: 'Health',
|
|
279
|
-
handler: async () => { },
|
|
280
|
-
},
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
fullPath: '/commands/hello.ts',
|
|
284
|
-
segments: ['hello'],
|
|
285
|
-
commandModule: {
|
|
286
|
-
command: 'hello',
|
|
287
|
-
describe: 'Hello',
|
|
288
|
-
handler: async () => { },
|
|
289
|
-
},
|
|
290
|
-
},
|
|
291
|
-
];
|
|
292
|
-
const tree = buildSegmentTree(commands);
|
|
293
|
-
logCommandTree(tree);
|
|
294
|
-
expect(consoleSpy).toHaveBeenCalled();
|
|
295
|
-
const calls = consoleSpy.mock.calls.map((call) => call[0]);
|
|
296
|
-
expect(calls.some((call) => call.includes('db'))).toBe(true);
|
|
297
|
-
expect(calls.some((call) => call.includes('health'))).toBe(true);
|
|
298
|
-
expect(calls.some((call) => call.includes('hello'))).toBe(true);
|
|
299
|
-
consoleSpy.mockRestore();
|
|
300
|
-
});
|
|
301
|
-
it('should log command tree with correct indentation levels', () => {
|
|
302
|
-
const consoleSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
303
|
-
const commands = [
|
|
304
|
-
{
|
|
305
|
-
fullPath: '/commands/a/b/c.ts',
|
|
306
|
-
segments: ['a', 'b', 'c'],
|
|
307
|
-
commandModule: {
|
|
308
|
-
command: 'c',
|
|
309
|
-
describe: 'C',
|
|
310
|
-
handler: async () => { },
|
|
311
|
-
},
|
|
312
|
-
},
|
|
313
|
-
];
|
|
314
|
-
const tree = buildSegmentTree(commands);
|
|
315
|
-
logCommandTree(tree, 2);
|
|
316
|
-
expect(consoleSpy).toHaveBeenCalled();
|
|
317
|
-
const calls = consoleSpy.mock.calls.map((call) => call[0]);
|
|
318
|
-
// Check for indentation (initial level 2 = 4 spaces, then children add more)
|
|
319
|
-
expect(calls.length).toBeGreaterThan(0);
|
|
320
|
-
consoleSpy.mockRestore();
|
|
321
|
-
});
|
|
322
|
-
});
|
|
323
|
-
//# sourceMappingURL=buildSegmentTree.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildSegmentTree.test.js","sourceRoot":"","sources":["../../src/lib/buildSegmentTree.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { describe, expect, it } from 'vitest';
|
|
5
|
-
import { fileCommands } from './fileCommands.js';
|
|
6
|
-
// get __dirname in ESM style
|
|
7
|
-
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
8
|
-
describe('fileCommands', () => {
|
|
9
|
-
it('should load commands from directory structure', async () => {
|
|
10
|
-
const commands = await fileCommands({
|
|
11
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
|
|
12
|
-
logLevel: 'debug',
|
|
13
|
-
});
|
|
14
|
-
expect(commands.length).toBeGreaterThan(0);
|
|
15
|
-
});
|
|
16
|
-
it('should respect ignore patterns', async () => {
|
|
17
|
-
const commands = await fileCommands({
|
|
18
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
|
|
19
|
-
ignorePatterns: [/health/, /.d.ts/],
|
|
20
|
-
logLevel: 'debug',
|
|
21
|
-
});
|
|
22
|
-
expect(commands.length).toBeGreaterThan(0);
|
|
23
|
-
});
|
|
24
|
-
it('should handle explicit commands and default command', async () => {
|
|
25
|
-
const commands = await fileCommands({
|
|
26
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
|
|
27
|
-
logLevel: 'debug',
|
|
28
|
-
});
|
|
29
|
-
console.log('commands', JSON.stringify(commands.map((c) => c.command), null, 2));
|
|
30
|
-
// Find the explicit command
|
|
31
|
-
const explicitCommand = commands.find((cmd) => cmd.command?.toString().includes('create [name]'));
|
|
32
|
-
expect(explicitCommand).toBeDefined();
|
|
33
|
-
expect(explicitCommand?.describe).toBe('Create something with a name');
|
|
34
|
-
// Find the default command
|
|
35
|
-
const defaultCommand = commands.find((cmd) => cmd.command === '$0');
|
|
36
|
-
expect(defaultCommand).toBeDefined();
|
|
37
|
-
expect(defaultCommand?.describe).toBe('Default command');
|
|
38
|
-
});
|
|
39
|
-
it('should throw error for invalid extensions (missing dot)', async () => {
|
|
40
|
-
await expect(fileCommands({
|
|
41
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
|
|
42
|
-
extensions: ['js', 'ts'], // Missing dots
|
|
43
|
-
})).rejects.toThrow(/Invalid extensions provided, must start with a dot/);
|
|
44
|
-
});
|
|
45
|
-
it('should throw error for empty command directories', async () => {
|
|
46
|
-
await expect(fileCommands({
|
|
47
|
-
commandDirs: [],
|
|
48
|
-
})).rejects.toThrow(/No command directories provided/);
|
|
49
|
-
});
|
|
50
|
-
it('should throw error for non-absolute directory paths', async () => {
|
|
51
|
-
await expect(fileCommands({
|
|
52
|
-
commandDirs: ['relative/path'], // Relative path
|
|
53
|
-
})).rejects.toThrow(/Command directories must be absolute paths/);
|
|
54
|
-
});
|
|
55
|
-
it('should throw error for non-absolute directory paths (multiple)', async () => {
|
|
56
|
-
await expect(fileCommands({
|
|
57
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands'), 'relative/path', 'another/relative'],
|
|
58
|
-
})).rejects.toThrow(/Command directories must be absolute paths/);
|
|
59
|
-
await expect(fileCommands({
|
|
60
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands'), 'relative/path', 'another/relative'],
|
|
61
|
-
})).rejects.toThrow(/relative\/path, another\/relative/);
|
|
62
|
-
});
|
|
63
|
-
it('should throw error when no commands found', async () => {
|
|
64
|
-
// Create a temporary empty directory
|
|
65
|
-
// Use a unique timestamp to avoid collisions with other tests
|
|
66
|
-
const tempDir = path.join(tmpdir(), `yargs-empty-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
67
|
-
await mkdir(tempDir, { recursive: true });
|
|
68
|
-
try {
|
|
69
|
-
// Ensure directory is truly empty (system files like .DS_Store are automatically ignored)
|
|
70
|
-
await expect(fileCommands({
|
|
71
|
-
commandDirs: [tempDir],
|
|
72
|
-
extensions: ['.js', '.ts'], // Only look for JS/TS files
|
|
73
|
-
})).rejects.toThrow(/No commands found in specified directories/);
|
|
74
|
-
}
|
|
75
|
-
finally {
|
|
76
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
it('should handle multiple command directories', async () => {
|
|
80
|
-
const tempDir1 = path.join(tmpdir(), `yargs-test-1-${Date.now()}`);
|
|
81
|
-
const tempDir2 = path.join(tmpdir(), `yargs-test-2-${Date.now()}`);
|
|
82
|
-
await mkdir(tempDir1, { recursive: true });
|
|
83
|
-
await mkdir(tempDir2, { recursive: true });
|
|
84
|
-
try {
|
|
85
|
-
// Create a command file in each directory
|
|
86
|
-
await writeFile(path.join(tempDir1, 'cmd1.ts'), "export const describe = 'Command 1';\nexport const handler = async () => {};");
|
|
87
|
-
await writeFile(path.join(tempDir2, 'cmd2.ts'), "export const describe = 'Command 2';\nexport const handler = async () => {};");
|
|
88
|
-
const commands = await fileCommands({
|
|
89
|
-
commandDirs: [tempDir1, tempDir2],
|
|
90
|
-
});
|
|
91
|
-
expect(commands.length).toBeGreaterThanOrEqual(2);
|
|
92
|
-
}
|
|
93
|
-
finally {
|
|
94
|
-
await rm(tempDir1, { recursive: true, force: true });
|
|
95
|
-
await rm(tempDir2, { recursive: true, force: true });
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
it('should use default options when not provided', async () => {
|
|
99
|
-
const commands = await fileCommands({
|
|
100
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
|
|
101
|
-
// No other options provided - should use defaults
|
|
102
|
-
});
|
|
103
|
-
expect(commands.length).toBeGreaterThan(0);
|
|
104
|
-
});
|
|
105
|
-
it('should handle custom extensions', async () => {
|
|
106
|
-
const commands = await fileCommands({
|
|
107
|
-
commandDirs: [path.join(__dirname, 'fixtures', 'commands')],
|
|
108
|
-
extensions: ['.ts'], // Only TypeScript files
|
|
109
|
-
});
|
|
110
|
-
expect(commands.length).toBeGreaterThan(0);
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=fileCommands.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileCommands.test.js","sourceRoot":"","sources":["../../src/lib/fileCommands.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"$default.js","sourceRoot":"","sources":["../../../../src/lib/fixtures/commands/$default.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;IACjC,iCAAiC;AADC,CAEnC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/lib/fixtures/commands/create.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAEvD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;IACjC,gCAAgC;AADE,CAEnC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../../../src/lib/fixtures/commands/db/health.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AAEhD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAW,EAAE,EAAE,CAAC,KAAK,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAAA,CAC5C,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ArgumentsCamelCase, Argv } from 'yargs';
|
|
2
|
-
export declare const describe = "Database migration command";
|
|
3
|
-
export declare const builder: (yargs: Argv<{}>) => Argv<{
|
|
4
|
-
force: boolean | undefined;
|
|
5
|
-
}>;
|
|
6
|
-
type Options = {
|
|
7
|
-
force?: boolean;
|
|
8
|
-
};
|
|
9
|
-
export declare const handler: (_argv: ArgumentsCamelCase<Options>) => Promise<void>;
|
|
10
|
-
export {};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export const describe = 'Database migration command';
|
|
2
|
-
export const builder = (yargs) => yargs.option('force', {
|
|
3
|
-
type: 'boolean',
|
|
4
|
-
describe: 'Force migration',
|
|
5
|
-
});
|
|
6
|
-
export const handler = async (_argv) => {
|
|
7
|
-
console.log('Migration handler called');
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../../../src/lib/fixtures/commands/db/migration/command.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAErD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAW,EAAE,EAAE,CACrC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;IACpB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,iBAAiB;CAC5B,CAAC,CAAC;AAML,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,KAAkC,EAAE,EAAE,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAAA,CACzC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
5
|
-
import { importCommandFromFile } from './importCommand.js';
|
|
6
|
-
// get __dirname in ESM style
|
|
7
|
-
const __dirname = path.dirname(new URL(import.meta.url).pathname);
|
|
8
|
-
describe('importCommandFromFile', () => {
|
|
9
|
-
it('should import command module correctly', async () => {
|
|
10
|
-
const filePath = path.join(__dirname, 'fixtures', 'commands', 'db', 'health.ts');
|
|
11
|
-
const command = await importCommandFromFile(filePath, 'health', {
|
|
12
|
-
logLevel: 'info',
|
|
13
|
-
});
|
|
14
|
-
expect(command.describe).toBe('Database health check');
|
|
15
|
-
});
|
|
16
|
-
it('should handle non-existent files', async () => {
|
|
17
|
-
const filePath = path.join(__dirname, 'fixtures', 'commands', 'non-existent.ts');
|
|
18
|
-
await expect(importCommandFromFile(filePath, 'non-existent', {
|
|
19
|
-
logLevel: 'info',
|
|
20
|
-
})).rejects.toThrow(/Cannot import command from non-existent file path/);
|
|
21
|
-
});
|
|
22
|
-
it('should handle explicit command names', async () => {
|
|
23
|
-
const filePath = path.join(__dirname, 'fixtures', 'commands', 'create.ts');
|
|
24
|
-
const command = await importCommandFromFile(filePath, 'create', {
|
|
25
|
-
logLevel: 'info',
|
|
26
|
-
});
|
|
27
|
-
expect(command.command).toBe('create [name]');
|
|
28
|
-
expect(command.describe).toBe('Create something with a name');
|
|
29
|
-
});
|
|
30
|
-
it('should handle default commands', async () => {
|
|
31
|
-
const filePath = path.join(__dirname, 'fixtures', 'commands', '$default.ts');
|
|
32
|
-
const command = await importCommandFromFile(filePath, '$default', {
|
|
33
|
-
logLevel: 'info',
|
|
34
|
-
});
|
|
35
|
-
expect(command.command).toBe('$0');
|
|
36
|
-
expect(command.describe).toBe('Default command');
|
|
37
|
-
});
|
|
38
|
-
it('should handle CommandModule export style', async () => {
|
|
39
|
-
// Create a temporary command file with CommandModule export
|
|
40
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
41
|
-
await mkdir(tempDir, { recursive: true });
|
|
42
|
-
const filePath = path.resolve(path.join(tempDir, 'cmd.js')); // Use .js and ensure absolute path
|
|
43
|
-
try {
|
|
44
|
-
await writeFile(filePath, `export const command = {
|
|
45
|
-
command: 'testcmd',
|
|
46
|
-
describe: 'Test command',
|
|
47
|
-
handler: async () => {}
|
|
48
|
-
};`);
|
|
49
|
-
const command = await importCommandFromFile(filePath, 'testcmd', {
|
|
50
|
-
logLevel: 'info',
|
|
51
|
-
});
|
|
52
|
-
expect(command.command).toBe('testcmd');
|
|
53
|
-
expect(command.describe).toBe('Test command');
|
|
54
|
-
expect(command.handler).toBeDefined();
|
|
55
|
-
}
|
|
56
|
-
finally {
|
|
57
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
it('should handle CommandModule export with default command name', async () => {
|
|
61
|
-
// Create a temporary command file with CommandModule export for default
|
|
62
|
-
// Note: Using a simpler filename to avoid potential issues with $ character in file URLs
|
|
63
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
64
|
-
await mkdir(tempDir, { recursive: true });
|
|
65
|
-
const filePath = path.resolve(path.join(tempDir, 'default-cmd.js')); // Use simpler name
|
|
66
|
-
try {
|
|
67
|
-
await writeFile(filePath, `export const command = {
|
|
68
|
-
command: '$0',
|
|
69
|
-
describe: 'Default test',
|
|
70
|
-
handler: async () => {}
|
|
71
|
-
};`);
|
|
72
|
-
// Verify file exists
|
|
73
|
-
const fs = await import('node:fs');
|
|
74
|
-
if (!fs.existsSync(filePath)) {
|
|
75
|
-
throw new Error(`File was not created at ${filePath}`);
|
|
76
|
-
}
|
|
77
|
-
const command = await importCommandFromFile(filePath, '$default', {
|
|
78
|
-
logLevel: 'info',
|
|
79
|
-
});
|
|
80
|
-
expect(command.command).toBe('$0');
|
|
81
|
-
expect(command.describe).toBe('Default test');
|
|
82
|
-
}
|
|
83
|
-
finally {
|
|
84
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
it('should throw error for unsupported exports', async () => {
|
|
88
|
-
// Create a temporary command file with unsupported exports
|
|
89
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
90
|
-
await mkdir(tempDir, { recursive: true });
|
|
91
|
-
const filePath = path.resolve(path.join(tempDir, 'cmd.js')); // Use .js and ensure absolute path
|
|
92
|
-
try {
|
|
93
|
-
await writeFile(filePath, `export const describe = 'Test';
|
|
94
|
-
export const handler = async () => {};
|
|
95
|
-
export const unsupportedExport = 'should error';
|
|
96
|
-
export const anotherBadExport = 123;`);
|
|
97
|
-
// Verify file was written
|
|
98
|
-
const fs = await import('node:fs');
|
|
99
|
-
if (!fs.existsSync(filePath)) {
|
|
100
|
-
throw new Error(`File was not created at ${filePath}`);
|
|
101
|
-
}
|
|
102
|
-
await expect(importCommandFromFile(filePath, 'cmd', {
|
|
103
|
-
logLevel: 'info',
|
|
104
|
-
})).rejects.toThrow(/has some unsupported exports, probably a misspelling/);
|
|
105
|
-
}
|
|
106
|
-
finally {
|
|
107
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
it('should create null handler when handler is not provided', async () => {
|
|
111
|
-
// Create a temporary command file without handler
|
|
112
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
113
|
-
await mkdir(tempDir, { recursive: true });
|
|
114
|
-
const filePath = path.resolve(path.join(tempDir, 'cmd.js')); // Use .js and ensure absolute path
|
|
115
|
-
try {
|
|
116
|
-
await writeFile(filePath, `export const describe = 'Test without handler';
|
|
117
|
-
export const command = 'test';`);
|
|
118
|
-
const command = await importCommandFromFile(filePath, 'cmd', {
|
|
119
|
-
logLevel: 'info',
|
|
120
|
-
});
|
|
121
|
-
expect(command.handler).toBeDefined();
|
|
122
|
-
expect(typeof command.handler).toBe('function');
|
|
123
|
-
}
|
|
124
|
-
finally {
|
|
125
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
it('should handle command with aliases', async () => {
|
|
129
|
-
const filePath = path.join(__dirname, 'fixtures', 'commands', 'db', 'health.ts');
|
|
130
|
-
const command = await importCommandFromFile(filePath, 'health', {
|
|
131
|
-
logLevel: 'info',
|
|
132
|
-
});
|
|
133
|
-
// Health command doesn't have aliases, but let's verify the structure supports it
|
|
134
|
-
expect(command).toBeDefined();
|
|
135
|
-
expect(command.describe).toBe('Database health check');
|
|
136
|
-
});
|
|
137
|
-
it('should use filename as command name when not provided', async () => {
|
|
138
|
-
// Create a temporary command file without explicit command name
|
|
139
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
140
|
-
await mkdir(tempDir, { recursive: true });
|
|
141
|
-
const filePath = path.resolve(path.join(tempDir, 'mycommand.js')); // Use .js and ensure absolute path
|
|
142
|
-
try {
|
|
143
|
-
await writeFile(filePath, `export const describe = 'My command';
|
|
144
|
-
export const handler = async () => {};`);
|
|
145
|
-
const command = await importCommandFromFile(filePath, 'mycommand', {
|
|
146
|
-
logLevel: 'info',
|
|
147
|
-
});
|
|
148
|
-
expect(command.command).toBe('mycommand');
|
|
149
|
-
expect(command.describe).toBe('My command');
|
|
150
|
-
}
|
|
151
|
-
finally {
|
|
152
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
it('should handle debug log level', async () => {
|
|
156
|
-
const consoleSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
157
|
-
const filePath = path.join(__dirname, 'fixtures', 'commands', 'create.ts');
|
|
158
|
-
await importCommandFromFile(filePath, 'create', {
|
|
159
|
-
logLevel: 'debug',
|
|
160
|
-
});
|
|
161
|
-
expect(consoleSpy).toHaveBeenCalled();
|
|
162
|
-
consoleSpy.mockRestore();
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
//# sourceMappingURL=importCommand.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"importCommand.test.js","sourceRoot":"","sources":["../../src/lib/importCommand.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
6
|
-
import { scanDirectory } from '../lib/scanDirectory.js';
|
|
7
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
-
describe('scanDirectory', () => {
|
|
9
|
-
it('should find all command files in directory', async () => {
|
|
10
|
-
const commandsDir = path.join(__dirname, 'fixtures', 'commands');
|
|
11
|
-
console.log('Scan Directory: ', commandsDir);
|
|
12
|
-
const files = await scanDirectory(commandsDir, commandsDir, {
|
|
13
|
-
extensions: ['.ts'],
|
|
14
|
-
logLevel: 'debug',
|
|
15
|
-
});
|
|
16
|
-
expect(files.length).toBe(4);
|
|
17
|
-
expect(files.some((f) => f.includes('health.ts'))).toBe(true);
|
|
18
|
-
expect(files.some((f) => f.includes('command.ts'))).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
it('should respect ignore patterns', async () => {
|
|
21
|
-
const commandsDir = path.join(__dirname, 'fixtures', 'commands');
|
|
22
|
-
console.log('Scan Directory: ', commandsDir);
|
|
23
|
-
const files = await scanDirectory(commandsDir, commandsDir, {
|
|
24
|
-
extensions: ['.ts'],
|
|
25
|
-
ignorePatterns: [/health/, /\.d\.ts$/],
|
|
26
|
-
logLevel: 'debug',
|
|
27
|
-
});
|
|
28
|
-
expect(files.length).toBe(3);
|
|
29
|
-
expect(files.some((f) => f.includes('command.ts'))).toBe(true);
|
|
30
|
-
expect(files.some((f) => f.includes('health.ts'))).toBe(false);
|
|
31
|
-
});
|
|
32
|
-
it('should handle non-existent directories', async () => {
|
|
33
|
-
const nonExistentDir = path.join(__dirname, 'fixtures', 'non-existent');
|
|
34
|
-
await expect(scanDirectory(nonExistentDir, nonExistentDir, {
|
|
35
|
-
extensions: ['.ts'],
|
|
36
|
-
logLevel: 'debug',
|
|
37
|
-
})).rejects.toThrow(/ENOENT/);
|
|
38
|
-
});
|
|
39
|
-
it('should ignore files with non-matching extensions', async () => {
|
|
40
|
-
// Create a temporary directory with mixed file types
|
|
41
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
42
|
-
await mkdir(tempDir, { recursive: true });
|
|
43
|
-
try {
|
|
44
|
-
// Create files with different extensions
|
|
45
|
-
await writeFile(path.join(tempDir, 'valid.ts'), '// TS file');
|
|
46
|
-
await writeFile(path.join(tempDir, 'invalid.js'), '// JS file');
|
|
47
|
-
await writeFile(path.join(tempDir, 'invalid.txt'), '// TXT file');
|
|
48
|
-
const consoleSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
49
|
-
const files = await scanDirectory(tempDir, tempDir, {
|
|
50
|
-
extensions: ['.ts'], // Only .ts files
|
|
51
|
-
logLevel: 'debug',
|
|
52
|
-
});
|
|
53
|
-
// Should only find the .ts file
|
|
54
|
-
expect(files.length).toBe(1);
|
|
55
|
-
expect(files[0]).toContain('valid.ts');
|
|
56
|
-
expect(files.some((f) => f.includes('invalid.js'))).toBe(false);
|
|
57
|
-
expect(files.some((f) => f.includes('invalid.txt'))).toBe(false);
|
|
58
|
-
// Should log extension mismatch
|
|
59
|
-
const debugCalls = consoleSpy.mock.calls.map((call) => call[0]?.toString() || '');
|
|
60
|
-
expect(debugCalls.some((call) => call.includes("doesn't match required extension"))).toBe(true);
|
|
61
|
-
consoleSpy.mockRestore();
|
|
62
|
-
}
|
|
63
|
-
finally {
|
|
64
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
it('should handle custom extensions', async () => {
|
|
68
|
-
// Create a temporary directory with .js files
|
|
69
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
70
|
-
await mkdir(tempDir, { recursive: true });
|
|
71
|
-
try {
|
|
72
|
-
await writeFile(path.join(tempDir, 'cmd.js'), '// JS file');
|
|
73
|
-
await writeFile(path.join(tempDir, 'cmd.ts'), '// TS file');
|
|
74
|
-
const files = await scanDirectory(tempDir, tempDir, {
|
|
75
|
-
extensions: ['.js'], // Only .js files
|
|
76
|
-
});
|
|
77
|
-
expect(files.length).toBe(1);
|
|
78
|
-
expect(files[0]).toContain('cmd.js');
|
|
79
|
-
expect(files.some((f) => f.includes('cmd.ts'))).toBe(false);
|
|
80
|
-
}
|
|
81
|
-
finally {
|
|
82
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
it('should handle multiple extensions', async () => {
|
|
86
|
-
// Create a temporary directory with different file types
|
|
87
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
88
|
-
await mkdir(tempDir, { recursive: true });
|
|
89
|
-
try {
|
|
90
|
-
await writeFile(path.join(tempDir, 'cmd1.js'), '// JS file');
|
|
91
|
-
await writeFile(path.join(tempDir, 'cmd2.ts'), '// TS file');
|
|
92
|
-
await writeFile(path.join(tempDir, 'cmd3.txt'), '// TXT file');
|
|
93
|
-
const files = await scanDirectory(tempDir, tempDir, {
|
|
94
|
-
extensions: ['.js', '.ts'], // Both JS and TS files
|
|
95
|
-
// Note: Hidden files (starting with '.') are automatically ignored by system ignore patterns
|
|
96
|
-
});
|
|
97
|
-
// Should find exactly 2 files (cmd1.js and cmd2.ts)
|
|
98
|
-
const jsFiles = files.filter((f) => f.includes('cmd1.js'));
|
|
99
|
-
const tsFiles = files.filter((f) => f.includes('cmd2.ts'));
|
|
100
|
-
const txtFiles = files.filter((f) => f.includes('cmd3.txt'));
|
|
101
|
-
expect(jsFiles.length).toBe(1);
|
|
102
|
-
expect(tsFiles.length).toBe(1);
|
|
103
|
-
expect(txtFiles.length).toBe(0);
|
|
104
|
-
// Verify we have at least our expected files (there might be hidden files)
|
|
105
|
-
expect(files.some((f) => f.includes('cmd1.js'))).toBe(true);
|
|
106
|
-
expect(files.some((f) => f.includes('cmd2.ts'))).toBe(true);
|
|
107
|
-
expect(files.some((f) => f.includes('cmd3.txt'))).toBe(false);
|
|
108
|
-
}
|
|
109
|
-
finally {
|
|
110
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
it('should handle nested directories with extension filtering', async () => {
|
|
114
|
-
// Create a temporary directory structure
|
|
115
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
116
|
-
const subDir = path.join(tempDir, 'subdir');
|
|
117
|
-
await mkdir(subDir, { recursive: true });
|
|
118
|
-
try {
|
|
119
|
-
await writeFile(path.join(tempDir, 'root.ts'), '// Root TS file');
|
|
120
|
-
await writeFile(path.join(tempDir, 'root.js'), '// Root JS file');
|
|
121
|
-
await writeFile(path.join(subDir, 'nested.ts'), '// Nested TS file');
|
|
122
|
-
await writeFile(path.join(subDir, 'nested.js'), '// Nested JS file');
|
|
123
|
-
const files = await scanDirectory(tempDir, tempDir, {
|
|
124
|
-
extensions: ['.ts'],
|
|
125
|
-
// Note: Hidden files (starting with '.') are automatically ignored by system ignore patterns
|
|
126
|
-
});
|
|
127
|
-
// Should find exactly 2 files (root.ts and nested.ts)
|
|
128
|
-
const rootFiles = files.filter((f) => f.includes('root.ts'));
|
|
129
|
-
const nestedFiles = files.filter((f) => f.includes('nested.ts'));
|
|
130
|
-
const jsFiles = files.filter((f) => f.includes('.js'));
|
|
131
|
-
expect(rootFiles.length).toBe(1);
|
|
132
|
-
expect(nestedFiles.length).toBe(1);
|
|
133
|
-
expect(jsFiles.length).toBe(0);
|
|
134
|
-
expect(files.some((f) => f.includes('root.ts'))).toBe(true);
|
|
135
|
-
expect(files.some((f) => f.includes('nested.ts'))).toBe(true);
|
|
136
|
-
}
|
|
137
|
-
finally {
|
|
138
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
it('should use default options when not provided', async () => {
|
|
142
|
-
const commandsDir = path.join(__dirname, 'fixtures', 'commands');
|
|
143
|
-
const files = await scanDirectory(commandsDir, commandsDir);
|
|
144
|
-
// Should use default extensions (.js, .ts) and find files
|
|
145
|
-
expect(files.length).toBeGreaterThan(0);
|
|
146
|
-
});
|
|
147
|
-
it('should handle empty directories', async () => {
|
|
148
|
-
const tempDir = path.join(tmpdir(), `yargs-test-${Date.now()}`);
|
|
149
|
-
await mkdir(tempDir, { recursive: true });
|
|
150
|
-
try {
|
|
151
|
-
const files = await scanDirectory(tempDir, tempDir, {
|
|
152
|
-
extensions: ['.ts'],
|
|
153
|
-
// Note: Hidden files (starting with '.') are automatically ignored by system ignore patterns
|
|
154
|
-
});
|
|
155
|
-
expect(files.length).toBe(0);
|
|
156
|
-
}
|
|
157
|
-
finally {
|
|
158
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
it('should handle error with proper message formatting', async () => {
|
|
162
|
-
const nonExistentDir = path.join(__dirname, 'fixtures', 'non-existent');
|
|
163
|
-
await expect(scanDirectory(nonExistentDir, nonExistentDir, {
|
|
164
|
-
extensions: ['.ts'],
|
|
165
|
-
logPrefix: ' ',
|
|
166
|
-
})).rejects.toThrow(/Failed to scan directory/);
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
//# sourceMappingURL=scanDirectory.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scanDirectory.test.js","sourceRoot":"","sources":["../../src/lib/scanDirectory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC;IAC9B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE;YAC1D,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAA,CAChE,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE;YAC1D,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,cAAc,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;YACtC,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAAA,CAChE,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QACxE,MAAM,MAAM,CACV,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE;YAC5C,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,QAAQ,EAAE,OAAO;SAClB,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAA,CAC7B,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE,CAAC;QACjE,qDAAqD;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;YAChE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,aAAa,CAAC,CAAC;YAElE,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC;YAE3E,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE;gBAClD,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,iBAAiB;gBACtC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,gCAAgC;YAChC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEjE,gCAAgC;YAChC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEhG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IAAA,CACF,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE,CAAC;QAChD,8CAA8C;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;YAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;YAE5D,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE;gBAClD,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,iBAAiB;aACvC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IAAA,CACF,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE,CAAC;QAClD,yDAAyD;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;YAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;YAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;YAE/D,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE;gBAClD,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,uBAAuB;gBACnD,6FAA6F;aAC9F,CAAC,CAAC;YAEH,oDAAoD;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YAE7D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEhC,2EAA2E;YAC3E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IAAA,CACF,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE,CAAC;QAC1E,yCAAyC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAClE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAClE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAErE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE;gBAClD,UAAU,EAAE,CAAC,KAAK,CAAC;gBACnB,6FAA6F;aAC9F,CAAC,CAAC;YAEH,sDAAsD;YACtD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAEvD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IAAA,CACF,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAE5D,0DAA0D;QAC1D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAAA,CACzC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE;gBAClD,UAAU,EAAE,CAAC,KAAK,CAAC;gBACnB,6FAA6F;aAC9F,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IAAA,CACF,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE,CAAC;QACnE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QACxE,MAAM,MAAM,CACV,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE;YAC5C,UAAU,EAAE,CAAC,KAAK,CAAC;YACnB,SAAS,EAAE,IAAI;SAChB,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAAA,CAC/C,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { segmentPath } from './segmentPath.js';
|
|
3
|
-
describe('segmentPath', () => {
|
|
4
|
-
it('should segment a path correctly', () => {
|
|
5
|
-
const fullPath = '/Users/username/Coding/Personal/yargs-file-commands/packages/yargs-file-commands/src/lib/segmentPath.ts';
|
|
6
|
-
const baseDir = '/Users/username/Coding/Personal/yargs-file-commands/';
|
|
7
|
-
const expected = ['packages', 'yargs-file-commands', 'src', 'lib', 'segmentPath', 'ts'];
|
|
8
|
-
const result = segmentPath(fullPath, baseDir);
|
|
9
|
-
expect(result).toEqual(expected);
|
|
10
|
-
});
|
|
11
|
-
it('should handle paths with periods correctly', () => {
|
|
12
|
-
const fullPath = '/Users/username/Coding/Personal/yargs-file-commands/packages/yargs-file-commands/src/lib/segmentPath.test.ts';
|
|
13
|
-
const baseDir = '/Users/username/Coding/Personal/yargs-file-commands/';
|
|
14
|
-
const expected = ['packages', 'yargs-file-commands', 'src', 'lib', 'segmentPath', 'test', 'ts'];
|
|
15
|
-
const result = segmentPath(fullPath, baseDir);
|
|
16
|
-
expect(result).toEqual(expected);
|
|
17
|
-
});
|
|
18
|
-
it('should filter out "command" segments', () => {
|
|
19
|
-
const fullPath = '/Users/username/Coding/Personal/yargs-file-commands/packages/yargs-file-commands/src/lib/commandPath.ts';
|
|
20
|
-
const baseDir = '/Users/username/Coding/Personal/yargs-file-commands/';
|
|
21
|
-
const expected = ['packages', 'yargs-file-commands', 'src', 'lib', 'commandPath', 'ts'];
|
|
22
|
-
const result = segmentPath(fullPath, baseDir);
|
|
23
|
-
expect(result).toEqual(expected);
|
|
24
|
-
});
|
|
25
|
-
it('should handle empty segments correctly', () => {
|
|
26
|
-
const fullPath = '/Users/username/Coding/Personal/yargs-file-commands/packages/yargs-file-commands/src/lib/.hiddenFile';
|
|
27
|
-
const baseDir = '/Users/username/Coding/Personal/yargs-file-commands/';
|
|
28
|
-
const expected = ['packages', 'yargs-file-commands', 'src', 'lib', 'hiddenFile'];
|
|
29
|
-
const result = segmentPath(fullPath, baseDir);
|
|
30
|
-
expect(result).toEqual(expected);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
//# sourceMappingURL=segmentPath.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"segmentPath.test.js","sourceRoot":"","sources":["../../src/lib/segmentPath.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC;IAC5B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAAC;QAC1C,MAAM,QAAQ,GACZ,yGAAyG,CAAC;QAC5G,MAAM,OAAO,GAAG,sDAAsD,CAAC;QACvE,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAA,CAClC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE,CAAC;QACrD,MAAM,QAAQ,GACZ,8GAA8G,CAAC;QACjH,MAAM,OAAO,GAAG,sDAAsD,CAAC;QACvE,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChG,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAA,CAClC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE,CAAC;QAC/C,MAAM,QAAQ,GACZ,yGAAyG,CAAC;QAC5G,MAAM,OAAO,GAAG,sDAAsD,CAAC;QACvE,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAA,CAClC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC;QACjD,MAAM,QAAQ,GACZ,sGAAsG,CAAC;QACzG,MAAM,OAAO,GAAG,sDAAsD,CAAC;QACvE,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAAA,CAClC,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|