@brightdata/cli 0.1.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 +624 -0
- package/dist/__tests__/commands/budget.test.d.ts +2 -0
- package/dist/__tests__/commands/budget.test.d.ts.map +1 -0
- package/dist/__tests__/commands/budget.test.js +199 -0
- package/dist/__tests__/commands/budget.test.js.map +1 -0
- package/dist/__tests__/commands/dataset.test.d.ts +2 -0
- package/dist/__tests__/commands/dataset.test.d.ts.map +1 -0
- package/dist/__tests__/commands/dataset.test.js +22 -0
- package/dist/__tests__/commands/dataset.test.js.map +1 -0
- package/dist/__tests__/commands/login.test.d.ts +2 -0
- package/dist/__tests__/commands/login.test.d.ts.map +1 -0
- package/dist/__tests__/commands/login.test.js +123 -0
- package/dist/__tests__/commands/login.test.js.map +1 -0
- package/dist/__tests__/commands/scrape.test.d.ts +2 -0
- package/dist/__tests__/commands/scrape.test.d.ts.map +1 -0
- package/dist/__tests__/commands/scrape.test.js +73 -0
- package/dist/__tests__/commands/scrape.test.js.map +1 -0
- package/dist/__tests__/commands/search.test.d.ts +2 -0
- package/dist/__tests__/commands/search.test.d.ts.map +1 -0
- package/dist/__tests__/commands/search.test.js +95 -0
- package/dist/__tests__/commands/search.test.js.map +1 -0
- package/dist/__tests__/commands/skill-add.test.d.ts +2 -0
- package/dist/__tests__/commands/skill-add.test.d.ts.map +1 -0
- package/dist/__tests__/commands/skill-add.test.js +177 -0
- package/dist/__tests__/commands/skill-add.test.js.map +1 -0
- package/dist/__tests__/commands/skill.test.d.ts +2 -0
- package/dist/__tests__/commands/skill.test.d.ts.map +1 -0
- package/dist/__tests__/commands/skill.test.js +58 -0
- package/dist/__tests__/commands/skill.test.js.map +1 -0
- package/dist/__tests__/commands/status.test.d.ts +2 -0
- package/dist/__tests__/commands/status.test.d.ts.map +1 -0
- package/dist/__tests__/commands/status.test.js +71 -0
- package/dist/__tests__/commands/status.test.js.map +1 -0
- package/dist/__tests__/commands/version.test.d.ts +2 -0
- package/dist/__tests__/commands/version.test.d.ts.map +1 -0
- package/dist/__tests__/commands/version.test.js +41 -0
- package/dist/__tests__/commands/version.test.js.map +1 -0
- package/dist/__tests__/utils/browser_auth.test.d.ts +2 -0
- package/dist/__tests__/utils/browser_auth.test.d.ts.map +1 -0
- package/dist/__tests__/utils/browser_auth.test.js +38 -0
- package/dist/__tests__/utils/browser_auth.test.js.map +1 -0
- package/dist/__tests__/utils/config.test.d.ts +2 -0
- package/dist/__tests__/utils/config.test.d.ts.map +1 -0
- package/dist/__tests__/utils/config.test.js +58 -0
- package/dist/__tests__/utils/config.test.js.map +1 -0
- package/dist/__tests__/utils/polling.test.d.ts +2 -0
- package/dist/__tests__/utils/polling.test.d.ts.map +1 -0
- package/dist/__tests__/utils/polling.test.js +65 -0
- package/dist/__tests__/utils/polling.test.js.map +1 -0
- package/dist/commands/budget.d.ts +15 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +217 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/config.d.ts +12 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +60 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dataset.d.ts +6 -0
- package/dist/commands/dataset.d.ts.map +1 -0
- package/dist/commands/dataset.js +250 -0
- package/dist/commands/dataset.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +247 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +10 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +98 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +5 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +20 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/scrape.d.ts +6 -0
- package/dist/commands/scrape.d.ts.map +1 -0
- package/dist/commands/scrape.js +79 -0
- package/dist/commands/scrape.js.map +1 -0
- package/dist/commands/search.d.ts +6 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +179 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/skill-add.d.ts +3 -0
- package/dist/commands/skill-add.d.ts.map +1 -0
- package/dist/commands/skill-add.js +285 -0
- package/dist/commands/skill-add.js.map +1 -0
- package/dist/commands/skill.d.ts +5 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +31 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/status.d.ts +14 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +99 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/version.d.ts +18 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +35 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/zones.d.ts +13 -0
- package/dist/commands/zones.d.ts.map +1 -0
- package/dist/commands/zones.js +70 -0
- package/dist/commands/zones.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/types/dataset.d.ts +19 -0
- package/dist/types/dataset.d.ts.map +1 -0
- package/dist/types/dataset.js +3 -0
- package/dist/types/dataset.js.map +1 -0
- package/dist/types/scrape.d.ts +31 -0
- package/dist/types/scrape.d.ts.map +1 -0
- package/dist/types/scrape.js +3 -0
- package/dist/types/scrape.js.map +1 -0
- package/dist/types/search.d.ts +47 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/search.js +3 -0
- package/dist/types/search.js.map +1 -0
- package/dist/utils/auth.d.ts +6 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +44 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/auth_pages.d.ts +3 -0
- package/dist/utils/auth_pages.d.ts.map +1 -0
- package/dist/utils/auth_pages.js +316 -0
- package/dist/utils/auth_pages.js.map +1 -0
- package/dist/utils/browser_auth.d.ts +21 -0
- package/dist/utils/browser_auth.d.ts.map +1 -0
- package/dist/utils/browser_auth.js +290 -0
- package/dist/utils/browser_auth.js.map +1 -0
- package/dist/utils/client.d.ts +17 -0
- package/dist/utils/client.d.ts.map +1 -0
- package/dist/utils/client.js +95 -0
- package/dist/utils/client.js.map +1 -0
- package/dist/utils/config.d.ts +16 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +65 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.d.ts +11 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +52 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/output.d.ts +23 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +89 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/polling.d.ts +26 -0
- package/dist/utils/polling.d.ts.map +1 -0
- package/dist/utils/polling.js +46 -0
- package/dist/utils/polling.js.map +1 -0
- package/dist/utils/skill-installer/agents.d.ts +19 -0
- package/dist/utils/skill-installer/agents.d.ts.map +1 -0
- package/dist/utils/skill-installer/agents.js +345 -0
- package/dist/utils/skill-installer/agents.js.map +1 -0
- package/dist/utils/skill-installer/brightdata-skills.d.ts +11 -0
- package/dist/utils/skill-installer/brightdata-skills.d.ts.map +1 -0
- package/dist/utils/skill-installer/brightdata-skills.js +52 -0
- package/dist/utils/skill-installer/brightdata-skills.js.map +1 -0
- package/dist/utils/skill-installer/installer.d.ts +34 -0
- package/dist/utils/skill-installer/installer.d.ts.map +1 -0
- package/dist/utils/skill-installer/installer.js +240 -0
- package/dist/utils/skill-installer/installer.js.map +1 -0
- package/dist/utils/skill-installer/prompts/search-multiselect.d.ts +22 -0
- package/dist/utils/skill-installer/prompts/search-multiselect.d.ts.map +1 -0
- package/dist/utils/skill-installer/prompts/search-multiselect.js +251 -0
- package/dist/utils/skill-installer/prompts/search-multiselect.js.map +1 -0
- package/dist/utils/spinner.d.ts +7 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +27 -0
- package/dist/utils/spinner.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const mocks = vitest_1.vi.hoisted(() => ({
|
|
5
|
+
ensure_authenticated: vitest_1.vi.fn(),
|
|
6
|
+
get: vitest_1.vi.fn(),
|
|
7
|
+
stop: vitest_1.vi.fn(),
|
|
8
|
+
start: vitest_1.vi.fn(),
|
|
9
|
+
print: vitest_1.vi.fn(),
|
|
10
|
+
print_table: vitest_1.vi.fn(),
|
|
11
|
+
dim: vitest_1.vi.fn((msg) => msg),
|
|
12
|
+
green: vitest_1.vi.fn((msg) => msg),
|
|
13
|
+
yellow: vitest_1.vi.fn((msg) => msg),
|
|
14
|
+
}));
|
|
15
|
+
vitest_1.vi.mock('../../utils/auth', () => ({
|
|
16
|
+
ensure_authenticated: mocks.ensure_authenticated,
|
|
17
|
+
}));
|
|
18
|
+
vitest_1.vi.mock('../../utils/client', () => ({
|
|
19
|
+
get: mocks.get,
|
|
20
|
+
}));
|
|
21
|
+
vitest_1.vi.mock('../../utils/spinner', () => ({
|
|
22
|
+
start: mocks.start,
|
|
23
|
+
}));
|
|
24
|
+
vitest_1.vi.mock('../../utils/output', () => ({
|
|
25
|
+
dim: mocks.dim,
|
|
26
|
+
green: mocks.green,
|
|
27
|
+
print: mocks.print,
|
|
28
|
+
print_table: mocks.print_table,
|
|
29
|
+
yellow: mocks.yellow,
|
|
30
|
+
}));
|
|
31
|
+
const budget_1 = require("../../commands/budget");
|
|
32
|
+
(0, vitest_1.describe)('commands/budget', () => {
|
|
33
|
+
(0, vitest_1.beforeEach)(() => {
|
|
34
|
+
vitest_1.vi.clearAllMocks();
|
|
35
|
+
mocks.ensure_authenticated.mockReturnValue('api_key');
|
|
36
|
+
mocks.start.mockReturnValue({ stop: mocks.stop });
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.afterEach)(() => {
|
|
39
|
+
vitest_1.vi.restoreAllMocks();
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)('prints a human-readable balance summary by default', async () => {
|
|
42
|
+
let output = '';
|
|
43
|
+
vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(text => {
|
|
44
|
+
output += String(text);
|
|
45
|
+
return true;
|
|
46
|
+
});
|
|
47
|
+
mocks.get.mockResolvedValue({
|
|
48
|
+
balance: 456,
|
|
49
|
+
pending_balance: 123,
|
|
50
|
+
});
|
|
51
|
+
await (0, budget_1.handle_budget_balance)({});
|
|
52
|
+
(0, vitest_1.expect)(mocks.ensure_authenticated).toHaveBeenCalledWith(undefined);
|
|
53
|
+
(0, vitest_1.expect)(mocks.get).toHaveBeenCalledWith('api_key', '/customer/balance', { timing: undefined });
|
|
54
|
+
(0, vitest_1.expect)(mocks.green).toHaveBeenCalledWith('$456.00');
|
|
55
|
+
(0, vitest_1.expect)(mocks.print).not.toHaveBeenCalled();
|
|
56
|
+
(0, vitest_1.expect)(output).toBe('Balance $456.00\n'
|
|
57
|
+
+ 'Pending charge $123.00\n');
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('prints balance JSON when --json is used', async () => {
|
|
60
|
+
mocks.get.mockResolvedValue({
|
|
61
|
+
balance: 10,
|
|
62
|
+
pending_balance: 1.5,
|
|
63
|
+
});
|
|
64
|
+
await (0, budget_1.handle_budget_balance)({ json: true });
|
|
65
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ balance: 10, pending_balance: 1.5 }, { json: true, pretty: undefined });
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('prints a dimmed message when no active zones exist', async () => {
|
|
68
|
+
const console_log = vitest_1.vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
69
|
+
mocks.get.mockResolvedValue([]);
|
|
70
|
+
await (0, budget_1.handle_budget_zones)({});
|
|
71
|
+
(0, vitest_1.expect)(mocks.get).toHaveBeenCalledWith('api_key', '/zone/get_active_zones', { timing: undefined });
|
|
72
|
+
(0, vitest_1.expect)(console_log).toHaveBeenCalledWith('No active zones found.');
|
|
73
|
+
(0, vitest_1.expect)(mocks.print_table).not.toHaveBeenCalled();
|
|
74
|
+
});
|
|
75
|
+
(0, vitest_1.it)('aggregates zone costs and prints a table with totals', async () => {
|
|
76
|
+
mocks.get
|
|
77
|
+
.mockResolvedValueOnce([
|
|
78
|
+
{ name: 'zone-a' },
|
|
79
|
+
{ name: 'zone-b' },
|
|
80
|
+
])
|
|
81
|
+
.mockResolvedValueOnce({
|
|
82
|
+
this_month: {
|
|
83
|
+
back_m1: { bw: 1024, cost: 1.25 },
|
|
84
|
+
back_m2: { bw: 512, cost: 0.75 },
|
|
85
|
+
},
|
|
86
|
+
prior_month: {
|
|
87
|
+
back_m1: { bw: 1024 ** 2, cost: 2 },
|
|
88
|
+
},
|
|
89
|
+
})
|
|
90
|
+
.mockResolvedValueOnce({
|
|
91
|
+
this_month: {
|
|
92
|
+
back_m1: { bw: 2048, cost: 3.5 },
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
await (0, budget_1.handle_budget_zones)({
|
|
96
|
+
from: '2026-03-01',
|
|
97
|
+
to: '2026-03-31',
|
|
98
|
+
});
|
|
99
|
+
(0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(1, 'api_key', '/zone/get_active_zones', { timing: undefined });
|
|
100
|
+
(0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(2, 'api_key', '/zone/cost?zone=zone-a&from=2026-03-01&to=2026-03-31', { timing: undefined });
|
|
101
|
+
(0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(3, 'api_key', '/zone/cost?zone=zone-b&from=2026-03-01&to=2026-03-31', { timing: undefined });
|
|
102
|
+
(0, vitest_1.expect)(mocks.print_table).toHaveBeenCalledWith([
|
|
103
|
+
{
|
|
104
|
+
zone: 'zone-a',
|
|
105
|
+
'cost ($)': '$4.00',
|
|
106
|
+
bandwidth: '1.0 MB',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
zone: 'zone-b',
|
|
110
|
+
'cost ($)': '$3.50',
|
|
111
|
+
bandwidth: '2.0 KB',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
zone: 'TOTAL',
|
|
115
|
+
'cost ($)': '$7.50',
|
|
116
|
+
bandwidth: '1.0 MB',
|
|
117
|
+
},
|
|
118
|
+
], ['zone', 'cost ($)', 'bandwidth']);
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.it)('prints aggregated zone rows as JSON when requested', async () => {
|
|
121
|
+
mocks.get
|
|
122
|
+
.mockResolvedValueOnce([{ name: 'zone-a' }])
|
|
123
|
+
.mockResolvedValueOnce({
|
|
124
|
+
this_month: {
|
|
125
|
+
back_m1: { bw: 500, cost: 2.25 },
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
await (0, budget_1.handle_budget_zones)({ pretty: true });
|
|
129
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith([
|
|
130
|
+
{
|
|
131
|
+
zone: 'zone-a',
|
|
132
|
+
cost: 2.25,
|
|
133
|
+
bw: 500,
|
|
134
|
+
},
|
|
135
|
+
], { json: undefined, pretty: true });
|
|
136
|
+
});
|
|
137
|
+
(0, vitest_1.it)('prints a human-readable zone detail view', async () => {
|
|
138
|
+
let output = '';
|
|
139
|
+
vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(text => {
|
|
140
|
+
output += String(text);
|
|
141
|
+
return true;
|
|
142
|
+
});
|
|
143
|
+
mocks.get
|
|
144
|
+
.mockResolvedValueOnce({
|
|
145
|
+
plan: {
|
|
146
|
+
product: 'dc',
|
|
147
|
+
type: 'static',
|
|
148
|
+
bandwidth: 'unlimited',
|
|
149
|
+
},
|
|
150
|
+
})
|
|
151
|
+
.mockResolvedValueOnce({
|
|
152
|
+
this_month: {
|
|
153
|
+
back_m1: { bw: 2048, cost: 12.34 },
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
await (0, budget_1.handle_budget_zone)('my-zone', {});
|
|
157
|
+
(0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(1, 'api_key', '/zone?zone=my-zone', { timing: undefined });
|
|
158
|
+
(0, vitest_1.expect)(mocks.get).toHaveBeenNthCalledWith(2, 'api_key', '/zone/cost?zone=my-zone', { timing: undefined });
|
|
159
|
+
(0, vitest_1.expect)(output).toMatch(/Zone:\s+my-zone/);
|
|
160
|
+
(0, vitest_1.expect)(output).toMatch(/Type:\s+dc \/ static/);
|
|
161
|
+
(0, vitest_1.expect)(output).toMatch(/Plan bandwidth:\s+unlimited/);
|
|
162
|
+
(0, vitest_1.expect)(output).toMatch(/Cost \(this month\):\s+\$12\.34/);
|
|
163
|
+
(0, vitest_1.expect)(output).toMatch(/Bandwidth used:\s+2\.0 KB/);
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.it)('prints zone detail JSON when requested', async () => {
|
|
166
|
+
mocks.get
|
|
167
|
+
.mockResolvedValueOnce({
|
|
168
|
+
plan: {
|
|
169
|
+
product: 'res',
|
|
170
|
+
bandwidth: 'metered',
|
|
171
|
+
},
|
|
172
|
+
})
|
|
173
|
+
.mockResolvedValueOnce({
|
|
174
|
+
this_month: {
|
|
175
|
+
back_m1: { bw: 4096, cost: 9.5 },
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
await (0, budget_1.handle_budget_zone)('zone-json', { json: true });
|
|
179
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({
|
|
180
|
+
zone: 'zone-json',
|
|
181
|
+
info: {
|
|
182
|
+
plan: {
|
|
183
|
+
product: 'res',
|
|
184
|
+
bandwidth: 'metered',
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
cost: {
|
|
188
|
+
this_month: {
|
|
189
|
+
back_m1: { bw: 4096, cost: 9.5 },
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
totals: {
|
|
193
|
+
bw: 4096,
|
|
194
|
+
cost: 9.5,
|
|
195
|
+
},
|
|
196
|
+
}, { json: true, pretty: undefined });
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
//# sourceMappingURL=budget.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/budget.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/dataset.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const dataset_1 = require("../../commands/dataset");
|
|
5
|
+
(0, vitest_1.describe)('commands/pipelines list', () => {
|
|
6
|
+
(0, vitest_1.afterEach)(() => {
|
|
7
|
+
vitest_1.vi.restoreAllMocks();
|
|
8
|
+
});
|
|
9
|
+
(0, vitest_1.it)('prints available pipeline dataset types', async () => {
|
|
10
|
+
let output = '';
|
|
11
|
+
const write = vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(text => {
|
|
12
|
+
output += String(text);
|
|
13
|
+
return true;
|
|
14
|
+
});
|
|
15
|
+
await (0, dataset_1.handle_pipelines)('list', [], {});
|
|
16
|
+
(0, vitest_1.expect)(write).toHaveBeenCalled();
|
|
17
|
+
(0, vitest_1.expect)(output.includes('amazon_product')).toBe(true);
|
|
18
|
+
(0, vitest_1.expect)(output.includes('linkedin_person_profile')).toBe(true);
|
|
19
|
+
(0, vitest_1.expect)(output.includes('youtube_comments')).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=dataset.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/dataset.test.ts"],"names":[],"mappings":";;AAAA,mCAA2D;AAC3D,oDAAwD;AAExD,IAAA,iBAAQ,EAAC,yBAAyB,EAAE,GAAE,EAAE;IACpC,IAAA,kBAAS,EAAC,GAAE,EAAE;QACV,WAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yCAAyC,EAAE,KAAK,IAAE,EAAE;QACnD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAC9D,IAAI,CAAA,EAAE;YACF,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC,CACJ,CAAC;QACF,MAAM,IAAA,0BAAgB,EAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACjC,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAA,eAAM,EAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/login.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const mocks = vitest_1.vi.hoisted(() => ({
|
|
5
|
+
save: vitest_1.vi.fn(),
|
|
6
|
+
validate_key: vitest_1.vi.fn(),
|
|
7
|
+
mask_key: vitest_1.vi.fn((key) => `masked:${key}`),
|
|
8
|
+
get_config: vitest_1.vi.fn(),
|
|
9
|
+
set_config: vitest_1.vi.fn(),
|
|
10
|
+
client_get: vitest_1.vi.fn(),
|
|
11
|
+
client_post: vitest_1.vi.fn(),
|
|
12
|
+
loopback_flow: vitest_1.vi.fn(),
|
|
13
|
+
device_flow: vitest_1.vi.fn(),
|
|
14
|
+
}));
|
|
15
|
+
vitest_1.vi.mock('../../utils/credentials', () => ({
|
|
16
|
+
save: mocks.save,
|
|
17
|
+
}));
|
|
18
|
+
vitest_1.vi.mock('../../utils/auth', () => ({
|
|
19
|
+
validate_key: mocks.validate_key,
|
|
20
|
+
mask_key: mocks.mask_key,
|
|
21
|
+
}));
|
|
22
|
+
vitest_1.vi.mock('../../utils/config', () => ({
|
|
23
|
+
get: mocks.get_config,
|
|
24
|
+
set: mocks.set_config,
|
|
25
|
+
}));
|
|
26
|
+
vitest_1.vi.mock('../../utils/client', () => ({
|
|
27
|
+
get: mocks.client_get,
|
|
28
|
+
post: mocks.client_post,
|
|
29
|
+
}));
|
|
30
|
+
vitest_1.vi.mock('../../utils/browser_auth', () => ({
|
|
31
|
+
loopback_flow: mocks.loopback_flow,
|
|
32
|
+
device_flow: mocks.device_flow,
|
|
33
|
+
}));
|
|
34
|
+
const login_1 = require("../../commands/login");
|
|
35
|
+
(0, vitest_1.describe)('commands/login', () => {
|
|
36
|
+
const original_customer_id = process.env['BRIGHTDATA_CUSTOMER_ID'];
|
|
37
|
+
(0, vitest_1.beforeEach)(() => {
|
|
38
|
+
vitest_1.vi.clearAllMocks();
|
|
39
|
+
if (original_customer_id === undefined)
|
|
40
|
+
delete process.env['BRIGHTDATA_CUSTOMER_ID'];
|
|
41
|
+
else
|
|
42
|
+
process.env['BRIGHTDATA_CUSTOMER_ID'] = original_customer_id;
|
|
43
|
+
mocks.mask_key.mockImplementation((key) => `masked:${key}`);
|
|
44
|
+
mocks.get_config.mockReturnValue(undefined);
|
|
45
|
+
mocks.client_get.mockResolvedValue([
|
|
46
|
+
{ name: 'cli_unlocker', type: 'unblocker' },
|
|
47
|
+
{ name: 'cli_browser', type: 'browser_api' },
|
|
48
|
+
]);
|
|
49
|
+
mocks.validate_key.mockResolvedValue(true);
|
|
50
|
+
mocks.loopback_flow.mockResolvedValue('oauth_key');
|
|
51
|
+
mocks.device_flow.mockResolvedValue('device_key');
|
|
52
|
+
vitest_1.vi.spyOn(console, 'error').mockImplementation(() => undefined);
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.afterEach)(() => {
|
|
55
|
+
vitest_1.vi.restoreAllMocks();
|
|
56
|
+
if (original_customer_id === undefined)
|
|
57
|
+
delete process.env['BRIGHTDATA_CUSTOMER_ID'];
|
|
58
|
+
else
|
|
59
|
+
process.env['BRIGHTDATA_CUSTOMER_ID'] = original_customer_id;
|
|
60
|
+
});
|
|
61
|
+
(0, vitest_1.it)('uses loopback flow by default and saves the returned key', async () => {
|
|
62
|
+
await (0, login_1.handle_login)({});
|
|
63
|
+
(0, vitest_1.expect)(mocks.loopback_flow).toHaveBeenCalledWith({
|
|
64
|
+
customer_id: undefined,
|
|
65
|
+
});
|
|
66
|
+
(0, vitest_1.expect)(mocks.device_flow).not.toHaveBeenCalled();
|
|
67
|
+
(0, vitest_1.expect)(mocks.validate_key).not.toHaveBeenCalled();
|
|
68
|
+
(0, vitest_1.expect)(mocks.save).toHaveBeenCalledWith({ api_key: 'oauth_key' });
|
|
69
|
+
(0, vitest_1.expect)(mocks.client_get).toHaveBeenCalledWith('oauth_key', '/zone/get_active_zones');
|
|
70
|
+
(0, vitest_1.expect)(mocks.client_post).not.toHaveBeenCalled();
|
|
71
|
+
(0, vitest_1.expect)(mocks.set_config).toHaveBeenCalledWith('default_zone_unlocker', 'cli_unlocker');
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.it)('uses device flow without requiring a customer id and creates missing zones', async () => {
|
|
74
|
+
mocks.get_config.mockReturnValue('existing_zone');
|
|
75
|
+
mocks.client_get.mockResolvedValue([]);
|
|
76
|
+
await (0, login_1.handle_login)({ device: true });
|
|
77
|
+
(0, vitest_1.expect)(mocks.device_flow).toHaveBeenCalledWith({
|
|
78
|
+
customer_id: undefined,
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.expect)(mocks.loopback_flow).not.toHaveBeenCalled();
|
|
81
|
+
(0, vitest_1.expect)(mocks.client_post).toHaveBeenNthCalledWith(1, 'device_key', '/zone', {
|
|
82
|
+
zone: { name: 'cli_unlocker', type: 'unblocker' },
|
|
83
|
+
plan: { type: 'unblocker' },
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.expect)(mocks.client_post).toHaveBeenNthCalledWith(2, 'device_key', '/zone', {
|
|
86
|
+
zone: { name: 'cli_browser', type: 'browser_api' },
|
|
87
|
+
plan: { type: 'browser_api' },
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.expect)(mocks.set_config).not.toHaveBeenCalled();
|
|
90
|
+
});
|
|
91
|
+
(0, vitest_1.it)('validates a direct API key before saving it', async () => {
|
|
92
|
+
await (0, login_1.handle_login)({ apiKey: ' raw_api_key ' });
|
|
93
|
+
(0, vitest_1.expect)(mocks.validate_key).toHaveBeenCalledWith('raw_api_key');
|
|
94
|
+
(0, vitest_1.expect)(mocks.loopback_flow).not.toHaveBeenCalled();
|
|
95
|
+
(0, vitest_1.expect)(mocks.device_flow).not.toHaveBeenCalled();
|
|
96
|
+
(0, vitest_1.expect)(mocks.save).toHaveBeenCalledWith({ api_key: 'raw_api_key' });
|
|
97
|
+
(0, vitest_1.expect)(mocks.client_get).toHaveBeenCalledWith('raw_api_key', '/zone/get_active_zones');
|
|
98
|
+
});
|
|
99
|
+
(0, vitest_1.it)('forwards an optional customer id from the flag', async () => {
|
|
100
|
+
await (0, login_1.handle_login)({ customerId: ' hl_prompt ' });
|
|
101
|
+
(0, vitest_1.expect)(mocks.loopback_flow).toHaveBeenCalledWith({
|
|
102
|
+
customer_id: 'hl_prompt',
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
(0, vitest_1.it)('forwards an optional customer id from the environment', async () => {
|
|
106
|
+
process.env['BRIGHTDATA_CUSTOMER_ID'] = ' hl_env ';
|
|
107
|
+
await (0, login_1.handle_login)({});
|
|
108
|
+
(0, vitest_1.expect)(mocks.loopback_flow).toHaveBeenCalledWith({
|
|
109
|
+
customer_id: 'hl_env',
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
(0, vitest_1.it)('exits when a direct API key is invalid', async () => {
|
|
113
|
+
mocks.validate_key.mockResolvedValue(false);
|
|
114
|
+
vitest_1.vi.spyOn(process, 'exit').mockImplementation(((code) => {
|
|
115
|
+
throw new Error(`exit:${code}`);
|
|
116
|
+
}));
|
|
117
|
+
await (0, vitest_1.expect)((0, login_1.handle_login)({ apiKey: 'bad_key' }))
|
|
118
|
+
.rejects.toThrow('exit:1');
|
|
119
|
+
(0, vitest_1.expect)(mocks.save).not.toHaveBeenCalled();
|
|
120
|
+
(0, vitest_1.expect)(mocks.client_get).not.toHaveBeenCalled();
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=login.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/login.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrape.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/scrape.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const mocks = vitest_1.vi.hoisted(() => ({
|
|
5
|
+
post: vitest_1.vi.fn(),
|
|
6
|
+
ensure_authenticated: vitest_1.vi.fn(),
|
|
7
|
+
resolve: vitest_1.vi.fn(),
|
|
8
|
+
stop: vitest_1.vi.fn(),
|
|
9
|
+
start: vitest_1.vi.fn(),
|
|
10
|
+
print: vitest_1.vi.fn(),
|
|
11
|
+
success: vitest_1.vi.fn(),
|
|
12
|
+
fail: vitest_1.vi.fn((msg) => { throw new Error(`fail:${msg}`); }),
|
|
13
|
+
}));
|
|
14
|
+
vitest_1.vi.mock('../../utils/client', () => ({
|
|
15
|
+
post: mocks.post,
|
|
16
|
+
}));
|
|
17
|
+
vitest_1.vi.mock('../../utils/auth', () => ({
|
|
18
|
+
ensure_authenticated: mocks.ensure_authenticated,
|
|
19
|
+
}));
|
|
20
|
+
vitest_1.vi.mock('../../utils/config', () => ({
|
|
21
|
+
resolve: mocks.resolve,
|
|
22
|
+
}));
|
|
23
|
+
vitest_1.vi.mock('../../utils/spinner', () => ({
|
|
24
|
+
start: mocks.start,
|
|
25
|
+
}));
|
|
26
|
+
vitest_1.vi.mock('../../utils/output', () => ({
|
|
27
|
+
print: mocks.print,
|
|
28
|
+
success: mocks.success,
|
|
29
|
+
fail: mocks.fail,
|
|
30
|
+
}));
|
|
31
|
+
const scrape_1 = require("../../commands/scrape");
|
|
32
|
+
(0, vitest_1.describe)('commands/scrape', () => {
|
|
33
|
+
(0, vitest_1.beforeEach)(() => {
|
|
34
|
+
vitest_1.vi.clearAllMocks();
|
|
35
|
+
mocks.ensure_authenticated.mockReturnValue('api_key');
|
|
36
|
+
mocks.resolve.mockReturnValue('cli_unlocker');
|
|
37
|
+
mocks.start.mockReturnValue({ stop: mocks.stop });
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.it)('fails when no zone is resolved', async () => {
|
|
40
|
+
mocks.resolve.mockReturnValue(undefined);
|
|
41
|
+
await (0, vitest_1.expect)((0, scrape_1.handle_scrape)('https://example.com', {}))
|
|
42
|
+
.rejects.toThrow('fail:No Web Unlocker zone specified.');
|
|
43
|
+
(0, vitest_1.expect)(mocks.post).not.toHaveBeenCalled();
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('submits markdown scrape request by default and prints text response', async () => {
|
|
46
|
+
mocks.post.mockResolvedValue('# hello');
|
|
47
|
+
await (0, scrape_1.handle_scrape)('https://example.com', {});
|
|
48
|
+
(0, vitest_1.expect)(mocks.post).toHaveBeenCalledWith('api_key', '/request', {
|
|
49
|
+
zone: 'cli_unlocker',
|
|
50
|
+
url: 'https://example.com',
|
|
51
|
+
format: 'raw',
|
|
52
|
+
data_format: 'markdown',
|
|
53
|
+
}, { timing: undefined });
|
|
54
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith('# hello', { json: undefined, pretty: undefined, output: undefined });
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.it)('submits json scrape request and prints json response', async () => {
|
|
57
|
+
mocks.post.mockResolvedValue({ status: 200, body: '{}', headers: {} });
|
|
58
|
+
await (0, scrape_1.handle_scrape)('https://example.com', { format: 'json' });
|
|
59
|
+
(0, vitest_1.expect)(mocks.post).toHaveBeenCalledWith('api_key', '/request', {
|
|
60
|
+
zone: 'cli_unlocker',
|
|
61
|
+
url: 'https://example.com',
|
|
62
|
+
format: 'json',
|
|
63
|
+
}, { timing: undefined });
|
|
64
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ status: 200, body: '{}', headers: {} }, { json: undefined, pretty: undefined, output: undefined });
|
|
65
|
+
});
|
|
66
|
+
(0, vitest_1.it)('handles async scrape mode with success message', async () => {
|
|
67
|
+
mocks.post.mockResolvedValue({ response_id: 'resp_123' });
|
|
68
|
+
await (0, scrape_1.handle_scrape)('https://example.com', { async: true });
|
|
69
|
+
(0, vitest_1.expect)(mocks.success).toHaveBeenCalledWith('Async job submitted. Response ID: resp_123');
|
|
70
|
+
(0, vitest_1.expect)(mocks.print).not.toHaveBeenCalled();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=scrape.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrape.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/scrape.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/search.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const mocks = vitest_1.vi.hoisted(() => ({
|
|
5
|
+
post: vitest_1.vi.fn(),
|
|
6
|
+
ensure_authenticated: vitest_1.vi.fn(),
|
|
7
|
+
resolve: vitest_1.vi.fn(),
|
|
8
|
+
stop: vitest_1.vi.fn(),
|
|
9
|
+
start: vitest_1.vi.fn(),
|
|
10
|
+
print: vitest_1.vi.fn(),
|
|
11
|
+
print_table: vitest_1.vi.fn(),
|
|
12
|
+
fail: vitest_1.vi.fn((msg) => { throw new Error(`fail:${msg}`); }),
|
|
13
|
+
dim: vitest_1.vi.fn((msg) => msg),
|
|
14
|
+
}));
|
|
15
|
+
vitest_1.vi.mock('../../utils/client', () => ({
|
|
16
|
+
post: mocks.post,
|
|
17
|
+
}));
|
|
18
|
+
vitest_1.vi.mock('../../utils/auth', () => ({
|
|
19
|
+
ensure_authenticated: mocks.ensure_authenticated,
|
|
20
|
+
}));
|
|
21
|
+
vitest_1.vi.mock('../../utils/config', () => ({
|
|
22
|
+
resolve: mocks.resolve,
|
|
23
|
+
}));
|
|
24
|
+
vitest_1.vi.mock('../../utils/spinner', () => ({
|
|
25
|
+
start: mocks.start,
|
|
26
|
+
}));
|
|
27
|
+
vitest_1.vi.mock('../../utils/output', () => ({
|
|
28
|
+
print: mocks.print,
|
|
29
|
+
print_table: mocks.print_table,
|
|
30
|
+
fail: mocks.fail,
|
|
31
|
+
dim: mocks.dim,
|
|
32
|
+
}));
|
|
33
|
+
const search_1 = require("../../commands/search");
|
|
34
|
+
(0, vitest_1.describe)('commands/search', () => {
|
|
35
|
+
(0, vitest_1.beforeEach)(() => {
|
|
36
|
+
vitest_1.vi.clearAllMocks();
|
|
37
|
+
mocks.ensure_authenticated.mockReturnValue('api_key');
|
|
38
|
+
mocks.resolve.mockReturnValue('cli_serp');
|
|
39
|
+
mocks.start.mockReturnValue({ stop: mocks.stop });
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)('fails when no zone is resolved', async () => {
|
|
42
|
+
mocks.resolve.mockReturnValue(undefined);
|
|
43
|
+
await (0, vitest_1.expect)((0, search_1.handle_search)('hello', {}))
|
|
44
|
+
.rejects.toThrow('fail:No zone specified.');
|
|
45
|
+
(0, vitest_1.expect)(mocks.post).not.toHaveBeenCalled();
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)('renders google default output as table', async () => {
|
|
48
|
+
mocks.post.mockResolvedValue({
|
|
49
|
+
organic: [
|
|
50
|
+
{
|
|
51
|
+
rank: 1,
|
|
52
|
+
title: 'Result One',
|
|
53
|
+
link: 'https://example.com/one',
|
|
54
|
+
description: 'Description',
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
await (0, search_1.handle_search)('hello world', {});
|
|
59
|
+
(0, vitest_1.expect)(mocks.post).toHaveBeenCalledWith('api_key', '/request', {
|
|
60
|
+
zone: 'cli_serp',
|
|
61
|
+
url: 'https://www.google.com/search?q=hello+world&brd_json=1',
|
|
62
|
+
format: 'raw',
|
|
63
|
+
}, { timing: undefined });
|
|
64
|
+
(0, vitest_1.expect)(mocks.print_table).toHaveBeenCalledTimes(1);
|
|
65
|
+
(0, vitest_1.expect)(mocks.print).not.toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('prints markdown when google output file is provided', async () => {
|
|
68
|
+
mocks.post.mockResolvedValue({
|
|
69
|
+
general: { search_engine: 'google', results_cnt: 1000 },
|
|
70
|
+
organic: [
|
|
71
|
+
{
|
|
72
|
+
rank: 1,
|
|
73
|
+
title: 'Title',
|
|
74
|
+
link: 'https://example.com',
|
|
75
|
+
description: 'Desc',
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
await (0, search_1.handle_search)('query', { output: 'out.md' });
|
|
80
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledTimes(1);
|
|
81
|
+
const printed = mocks.print.mock.calls[0][0];
|
|
82
|
+
(0, vitest_1.expect)(printed.includes('# google results for "query"')).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)('prints raw result for non-google engines', async () => {
|
|
85
|
+
mocks.post.mockResolvedValue('raw bing markdown');
|
|
86
|
+
await (0, search_1.handle_search)('query', { engine: 'bing' });
|
|
87
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith('raw bing markdown', { json: undefined, pretty: undefined, output: undefined });
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.it)('prints json result when --json is used', async () => {
|
|
90
|
+
mocks.post.mockResolvedValue({ organic: [] });
|
|
91
|
+
await (0, search_1.handle_search)('query', { json: true });
|
|
92
|
+
(0, vitest_1.expect)(mocks.print).toHaveBeenCalledWith({ organic: [] }, { json: true, pretty: undefined, output: undefined });
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=search.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/search.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-add.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/skill-add.test.ts"],"names":[],"mappings":""}
|