@kodus/cli 0.1.0 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +7 -14
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +5 -8
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/auth/login.d.ts.map +1 -1
  6. package/dist/commands/auth/login.js +5 -22
  7. package/dist/commands/auth/login.js.map +1 -1
  8. package/dist/commands/auth/signup.d.ts.map +1 -1
  9. package/dist/commands/auth/signup.js +0 -15
  10. package/dist/commands/auth/signup.js.map +1 -1
  11. package/dist/commands/review.d.ts.map +1 -1
  12. package/dist/commands/review.js +10 -91
  13. package/dist/commands/review.js.map +1 -1
  14. package/dist/index.js +5 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/services/api/api.interface.d.ts +1 -5
  17. package/dist/services/api/api.interface.d.ts.map +1 -1
  18. package/dist/services/api/api.real.d.ts +1 -2
  19. package/dist/services/api/api.real.d.ts.map +1 -1
  20. package/dist/services/api/api.real.js +17 -18
  21. package/dist/services/api/api.real.js.map +1 -1
  22. package/dist/services/api/index.d.ts +3 -3
  23. package/dist/services/api/index.d.ts.map +1 -1
  24. package/dist/services/api/index.js +2 -8
  25. package/dist/services/api/index.js.map +1 -1
  26. package/dist/services/review.service.d.ts +5 -3
  27. package/dist/services/review.service.d.ts.map +1 -1
  28. package/dist/services/review.service.js +54 -25
  29. package/dist/services/review.service.js.map +1 -1
  30. package/dist/types/index.d.ts +33 -15
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/types/index.js.map +1 -1
  33. package/dist/ui/interactive.d.ts.map +1 -1
  34. package/dist/ui/interactive.js +7 -1
  35. package/dist/ui/interactive.js.map +1 -1
  36. package/package.json +3 -1
  37. package/dist/commands/config.d.ts +0 -3
  38. package/dist/commands/config.d.ts.map +0 -1
  39. package/dist/commands/config.js +0 -47
  40. package/dist/commands/config.js.map +0 -1
  41. package/dist/commands/telemetry.d.ts +0 -3
  42. package/dist/commands/telemetry.d.ts.map +0 -1
  43. package/dist/commands/telemetry.js +0 -76
  44. package/dist/commands/telemetry.js.map +0 -1
  45. package/dist/services/api/api.mock.d.ts +0 -8
  46. package/dist/services/api/api.mock.d.ts.map +0 -1
  47. package/dist/services/api/api.mock.js +0 -249
  48. package/dist/services/api/api.mock.js.map +0 -1
  49. package/dist/services/telemetry.service.d.ts +0 -73
  50. package/dist/services/telemetry.service.d.ts.map +0 -1
  51. package/dist/services/telemetry.service.js +0 -229
  52. package/dist/services/telemetry.service.js.map +0 -1
  53. package/dist/utils/review-loading.d.ts +0 -19
  54. package/dist/utils/review-loading.d.ts.map +0 -1
  55. package/dist/utils/review-loading.js +0 -140
  56. package/dist/utils/review-loading.js.map +0 -1
@@ -1,249 +0,0 @@
1
- import { ApiError } from '../../types/index.js';
2
- const MOCK_DELAY = 800;
3
- const trialUsage = new Map();
4
- function delay(ms) {
5
- return new Promise((resolve) => setTimeout(resolve, ms));
6
- }
7
- function generateMockToken() {
8
- return 'mock_' + Math.random().toString(36).substring(2) + '_' + Date.now();
9
- }
10
- const mockIssues = [
11
- {
12
- file: 'src/index.ts',
13
- line: 15,
14
- severity: 'warning',
15
- category: 'style',
16
- message: 'Consider using const instead of let for variables that are never reassigned',
17
- suggestion: 'const value = getData();',
18
- ruleId: 'prefer-const',
19
- },
20
- {
21
- file: 'src/utils.ts',
22
- line: 42,
23
- severity: 'error',
24
- category: 'bug',
25
- message: 'Potential null reference. Add null check before accessing property',
26
- suggestion: 'if (user?.name) { ... }',
27
- ruleId: 'null-safety',
28
- },
29
- {
30
- file: 'src/api.ts',
31
- line: 88,
32
- severity: 'info',
33
- category: 'best_practices',
34
- message: 'Consider adding error handling for this async operation',
35
- suggestion: 'try { await fetch(...) } catch (e) { handleError(e) }',
36
- ruleId: 'async-error-handling',
37
- },
38
- {
39
- file: 'src/components/Button.tsx',
40
- line: 23,
41
- severity: 'warning',
42
- category: 'performance',
43
- message: 'Missing dependency in useEffect hook',
44
- suggestion: 'useEffect(() => { ... }, [dependency])',
45
- ruleId: 'react-hooks/exhaustive-deps',
46
- },
47
- {
48
- file: 'src/services/auth.ts',
49
- line: 56,
50
- severity: 'error',
51
- category: 'security_vulnerability',
52
- message: 'Sensitive data should not be logged',
53
- suggestion: 'Remove console.log containing user credentials',
54
- ruleId: 'security/no-sensitive-logs',
55
- },
56
- ];
57
- class MockAuthApi {
58
- async login(email, password) {
59
- await delay(MOCK_DELAY);
60
- if (password.length < 6) {
61
- throw new ApiError(401, 'Invalid credentials');
62
- }
63
- return {
64
- accessToken: generateMockToken(),
65
- refreshToken: generateMockToken(),
66
- expiresIn: 3600,
67
- user: {
68
- id: 'user_' + Math.random().toString(36).substring(2),
69
- email,
70
- orgs: ['kodus', 'my-org'],
71
- },
72
- };
73
- }
74
- async signup(email, password) {
75
- await delay(MOCK_DELAY);
76
- if (password.length < 6) {
77
- throw new ApiError(400, 'Password must be at least 6 characters');
78
- }
79
- if (email === 'existing@example.com') {
80
- throw new ApiError(409, 'Email already registered');
81
- }
82
- return {
83
- accessToken: generateMockToken(),
84
- refreshToken: generateMockToken(),
85
- expiresIn: 3600,
86
- user: {
87
- id: 'user_' + Math.random().toString(36).substring(2),
88
- email,
89
- orgs: [],
90
- },
91
- };
92
- }
93
- async refresh(refreshToken) {
94
- await delay(MOCK_DELAY / 2);
95
- if (!refreshToken || !refreshToken.startsWith('mock_')) {
96
- throw new ApiError(401, 'Invalid refresh token');
97
- }
98
- return {
99
- accessToken: generateMockToken(),
100
- refreshToken: generateMockToken(),
101
- expiresIn: 3600,
102
- user: {
103
- id: 'user_mock',
104
- email: 'user@example.com',
105
- orgs: ['kodus'],
106
- },
107
- };
108
- }
109
- async logout(_accessToken) {
110
- await delay(MOCK_DELAY / 2);
111
- }
112
- async generateCIToken(_accessToken) {
113
- await delay(MOCK_DELAY);
114
- return 'kodus_ci_' + generateMockToken();
115
- }
116
- async verify(accessToken) {
117
- await delay(MOCK_DELAY / 2);
118
- if (!accessToken || !accessToken.startsWith('mock_')) {
119
- return { valid: false };
120
- }
121
- return {
122
- valid: true,
123
- user: {
124
- id: 'user_mock',
125
- email: 'test@kodus.io',
126
- orgs: ['kodus', 'my-org'],
127
- },
128
- };
129
- }
130
- }
131
- class MockReviewApi {
132
- async analyze(diff, _accessToken, _config) {
133
- await delay(MOCK_DELAY * 3);
134
- const fileCount = (diff.match(/diff --git/g) || []).length || 1;
135
- const issueCount = Math.min(Math.floor(Math.random() * 4) + 1, mockIssues.length);
136
- const selectedIssues = mockIssues.slice(0, issueCount);
137
- return {
138
- summary: `Found ${issueCount} issue${issueCount > 1 ? 's' : ''} in ${fileCount} file${fileCount > 1 ? 's' : ''}`,
139
- issues: selectedIssues,
140
- filesAnalyzed: fileCount,
141
- duration: Math.floor(Math.random() * 2000) + 1000,
142
- };
143
- }
144
- async analyzeWithMetrics(diff, accessToken, config, _metrics) {
145
- if (_metrics) {
146
- console.warn('Mocked analyzeWithMetrics call ignores provided metrics.');
147
- }
148
- return this.analyze(diff, accessToken, config);
149
- }
150
- async getPullRequestSuggestions(_accessToken, params) {
151
- await delay(MOCK_DELAY);
152
- if (!params.prUrl && !(params.prNumber && params.repositoryId)) {
153
- throw new ApiError(400, 'prUrl or prNumber + repositoryId are required');
154
- }
155
- const filterList = (value) => {
156
- if (!value)
157
- return undefined;
158
- return value.split(',').map((v) => v.trim()).filter(Boolean);
159
- };
160
- const severityFilters = filterList(params.severity);
161
- const categoryFilters = filterList(params.category);
162
- const filtered = mockIssues.filter((issue) => {
163
- const matchesSeverity = !severityFilters || severityFilters.includes(issue.severity);
164
- const matchesCategory = !categoryFilters || (issue.category && categoryFilters.includes(issue.category));
165
- return matchesSeverity && matchesCategory;
166
- });
167
- const suggestions = filtered.length > 0 ? filtered : mockIssues;
168
- const markdown = params.format === 'markdown'
169
- ? ['# Mocked pull request suggestions', ...suggestions.map((s) => `- (${s.severity}) ${s.file}:${s.line} ${s.message}`)].join('\n')
170
- : undefined;
171
- return {
172
- summary: 'Mocked pull request suggestions',
173
- suggestions,
174
- filesAnalyzed: 1,
175
- duration: MOCK_DELAY,
176
- markdown,
177
- deliveryStatus: 'sent',
178
- };
179
- }
180
- async trialAnalyze(diff, fingerprint) {
181
- await delay(MOCK_DELAY * 3);
182
- const now = Date.now();
183
- const resetTime = new Date();
184
- resetTime.setHours(24, 0, 0, 0);
185
- let usage = trialUsage.get(fingerprint);
186
- if (!usage || usage.resetAt < now) {
187
- usage = { count: 0, resetAt: resetTime.getTime() };
188
- }
189
- usage.count++;
190
- trialUsage.set(fingerprint, usage);
191
- const fileCount = (diff.match(/diff --git/g) || []).length || 1;
192
- const issueCount = Math.min(Math.floor(Math.random() * 3) + 1, 3);
193
- const selectedIssues = mockIssues.slice(0, issueCount);
194
- return {
195
- summary: `Found ${issueCount} issue${issueCount > 1 ? 's' : ''} in ${fileCount} file${fileCount > 1 ? 's' : ''}`,
196
- issues: selectedIssues,
197
- filesAnalyzed: fileCount,
198
- duration: Math.floor(Math.random() * 2000) + 1000,
199
- trialInfo: {
200
- reviewsUsed: usage.count,
201
- reviewsLimit: 5,
202
- resetsAt: new Date(usage.resetAt).toISOString(),
203
- },
204
- };
205
- }
206
- }
207
- class MockConfigApi {
208
- async get(_accessToken, org, _repo) {
209
- await delay(MOCK_DELAY / 2);
210
- return {
211
- language: 'en',
212
- severity: 'warning',
213
- rules: {
214
- security: true,
215
- performance: true,
216
- style: true,
217
- bestPractices: true,
218
- },
219
- ignore: ['node_modules/**', 'dist/**', '*.test.ts', '*.spec.ts'],
220
- llmProvider: org === 'enterprise' ? 'byok' : 'kodus',
221
- };
222
- }
223
- }
224
- class MockTrialApi {
225
- async getStatus(fingerprint) {
226
- await delay(MOCK_DELAY / 2);
227
- const now = Date.now();
228
- const resetTime = new Date();
229
- resetTime.setHours(24, 0, 0, 0);
230
- const usage = trialUsage.get(fingerprint);
231
- const count = usage && usage.resetAt > now ? usage.count : 0;
232
- return {
233
- fingerprint,
234
- reviewsUsed: count,
235
- reviewsLimit: 5,
236
- filesLimit: 10,
237
- linesLimit: 500,
238
- resetsAt: resetTime.toISOString(),
239
- isLimited: count >= 5,
240
- };
241
- }
242
- }
243
- export class MockApi {
244
- auth = new MockAuthApi();
245
- review = new MockReviewApi();
246
- config = new MockConfigApi();
247
- trial = new MockTrialApi();
248
- }
249
- //# sourceMappingURL=api.mock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.mock.js","sourceRoot":"","sources":["../../../src/services/api/api.mock.ts"],"names":[],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- /**
2
- * Telemetry Service - Analytics via Kodus API
3
- *
4
- * Security:
5
- * - Does NOT expose PostHog API key to users
6
- * - Sends events to Kodus API which forwards to PostHog
7
- * - API key stays secure on the server
8
- *
9
- * Features:
10
- * - User can opt-out via `kodus telemetry disable`
11
- * - Anonymous user ID (machine ID hash)
12
- * - No sensitive data (file names, code, etc)
13
- * - Graceful degradation (never breaks the CLI)
14
- */
15
- declare class TelemetryService {
16
- private userId;
17
- private enabled;
18
- private configPath;
19
- private apiUrl;
20
- constructor();
21
- private initialize;
22
- /**
23
- * Get anonymous user ID (machine ID)
24
- */
25
- private getUserId;
26
- /**
27
- * Check if telemetry is enabled
28
- */
29
- private isEnabled;
30
- /**
31
- * Read telemetry config
32
- */
33
- private readConfig;
34
- /**
35
- * Write telemetry config
36
- */
37
- private writeConfig;
38
- /**
39
- * Track an event
40
- */
41
- track(eventName: string, properties?: Record<string, any>): Promise<void>;
42
- /**
43
- * Send event to Kodus API
44
- */
45
- private sendEvent;
46
- /**
47
- * Sanitize properties to remove sensitive data
48
- */
49
- private sanitizeProperties;
50
- /**
51
- * Enable telemetry
52
- */
53
- enable(): Promise<void>;
54
- /**
55
- * Disable telemetry (opt-out)
56
- */
57
- disable(): Promise<void>;
58
- /**
59
- * Check if telemetry is currently enabled
60
- */
61
- status(): Promise<boolean>;
62
- /**
63
- * Identify user (when authenticated)
64
- */
65
- identify(userId: string, traits?: Record<string, any>): Promise<void>;
66
- /**
67
- * Shutdown (cleanup)
68
- */
69
- shutdown(): Promise<void>;
70
- }
71
- export declare const telemetryService: TelemetryService;
72
- export {};
73
- //# sourceMappingURL=telemetry.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.service.d.ts","sourceRoot":"","sources":["../../src/services/telemetry.service.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;GAaG;AACH,cAAM,gBAAgB;IACpB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;;YAQT,UAAU;IAiBxB;;OAEG;YACW,SAAS;IAWvB;;OAEG;YACW,SAAS;IAevB;;OAEG;YACW,UAAU;IASxB;;OAEG;YACW,WAAW;IAUzB;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B/E;;OAEG;YACW,SAAS;IA4BvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -1,229 +0,0 @@
1
- import machineId from 'node-machine-id';
2
- import fs from 'fs/promises';
3
- import path from 'path';
4
- import os from 'os';
5
- const { machineIdSync } = machineId;
6
- /**
7
- * Telemetry Service - Analytics via Kodus API
8
- *
9
- * Security:
10
- * - Does NOT expose PostHog API key to users
11
- * - Sends events to Kodus API which forwards to PostHog
12
- * - API key stays secure on the server
13
- *
14
- * Features:
15
- * - User can opt-out via `kodus telemetry disable`
16
- * - Anonymous user ID (machine ID hash)
17
- * - No sensitive data (file names, code, etc)
18
- * - Graceful degradation (never breaks the CLI)
19
- */
20
- class TelemetryService {
21
- userId = null;
22
- enabled = true;
23
- configPath;
24
- apiUrl;
25
- constructor() {
26
- this.configPath = path.join(os.homedir(), '.kodus', 'telemetry.json');
27
- this.apiUrl = process.env.KODUS_API_URL || 'https://api.kodus.io';
28
- this.initialize();
29
- }
30
- async initialize() {
31
- try {
32
- // Check if telemetry is enabled
33
- this.enabled = await this.isEnabled();
34
- if (!this.enabled) {
35
- return;
36
- }
37
- // Get or create anonymous user ID
38
- this.userId = await this.getUserId();
39
- }
40
- catch (error) {
41
- // Silent fail - telemetry should never break the CLI
42
- this.enabled = false;
43
- }
44
- }
45
- /**
46
- * Get anonymous user ID (machine ID)
47
- */
48
- async getUserId() {
49
- try {
50
- // Use machine ID for consistent anonymous tracking
51
- const machineId = machineIdSync();
52
- return `anon_${machineId}`;
53
- }
54
- catch {
55
- // Fallback to random ID
56
- return `anon_${Math.random().toString(36).substring(7)}`;
57
- }
58
- }
59
- /**
60
- * Check if telemetry is enabled
61
- */
62
- async isEnabled() {
63
- try {
64
- // Check env var first
65
- if (process.env.KODUS_TELEMETRY === 'false' || process.env.DO_NOT_TRACK === '1') {
66
- return false;
67
- }
68
- // Check config file
69
- const config = await this.readConfig();
70
- return config.enabled !== false; // Enabled by default
71
- }
72
- catch {
73
- return true; // Default to enabled
74
- }
75
- }
76
- /**
77
- * Read telemetry config
78
- */
79
- async readConfig() {
80
- try {
81
- const content = await fs.readFile(this.configPath, 'utf-8');
82
- return JSON.parse(content);
83
- }
84
- catch {
85
- return { enabled: true };
86
- }
87
- }
88
- /**
89
- * Write telemetry config
90
- */
91
- async writeConfig(config) {
92
- try {
93
- const dir = path.dirname(this.configPath);
94
- await fs.mkdir(dir, { recursive: true });
95
- await fs.writeFile(this.configPath, JSON.stringify(config, null, 2));
96
- }
97
- catch {
98
- // Silent fail
99
- }
100
- }
101
- /**
102
- * Track an event
103
- */
104
- async track(eventName, properties) {
105
- if (!this.enabled || !this.userId) {
106
- return;
107
- }
108
- try {
109
- // Add common properties
110
- const enrichedProperties = {
111
- ...properties,
112
- cli_version: '0.1.0',
113
- node_version: process.version,
114
- platform: process.platform,
115
- arch: process.arch,
116
- timestamp: new Date().toISOString(),
117
- };
118
- // Remove any potentially sensitive data
119
- const sanitized = this.sanitizeProperties(enrichedProperties);
120
- // Send to Kodus API (which forwards to PostHog securely)
121
- await this.sendEvent({
122
- distinctId: this.userId,
123
- event: eventName,
124
- properties: sanitized,
125
- });
126
- }
127
- catch {
128
- // Silent fail - telemetry should never break the CLI
129
- }
130
- }
131
- /**
132
- * Send event to Kodus API
133
- */
134
- async sendEvent(payload) {
135
- try {
136
- const response = await fetch(`${this.apiUrl}/v1/telemetry/events`, {
137
- method: 'POST',
138
- headers: {
139
- 'Content-Type': 'application/json',
140
- },
141
- body: JSON.stringify(payload),
142
- });
143
- // Don't throw on failure - telemetry is best-effort
144
- if (!response.ok) {
145
- if (process.env.KODUS_VERBOSE) {
146
- console.error('Telemetry event failed:', response.statusText);
147
- }
148
- }
149
- }
150
- catch (error) {
151
- // Silent fail
152
- if (process.env.KODUS_VERBOSE) {
153
- console.error('Telemetry error:', error);
154
- }
155
- }
156
- }
157
- /**
158
- * Sanitize properties to remove sensitive data
159
- */
160
- sanitizeProperties(properties) {
161
- const sanitized = {};
162
- for (const [key, value] of Object.entries(properties)) {
163
- // Skip potentially sensitive keys
164
- if (key.toLowerCase().includes('password') ||
165
- key.toLowerCase().includes('token') ||
166
- key.toLowerCase().includes('secret') ||
167
- key.toLowerCase().includes('key')) {
168
- continue;
169
- }
170
- // Sanitize file paths (keep only basename)
171
- if (typeof value === 'string' && (value.includes('/') || value.includes('\\'))) {
172
- sanitized[key] = path.basename(value);
173
- }
174
- else {
175
- sanitized[key] = value;
176
- }
177
- }
178
- return sanitized;
179
- }
180
- /**
181
- * Enable telemetry
182
- */
183
- async enable() {
184
- await this.writeConfig({ enabled: true });
185
- this.enabled = true;
186
- await this.initialize();
187
- }
188
- /**
189
- * Disable telemetry (opt-out)
190
- */
191
- async disable() {
192
- await this.writeConfig({ enabled: false });
193
- this.enabled = false;
194
- }
195
- /**
196
- * Check if telemetry is currently enabled
197
- */
198
- async status() {
199
- return this.enabled;
200
- }
201
- /**
202
- * Identify user (when authenticated)
203
- */
204
- async identify(userId, traits) {
205
- if (!this.enabled) {
206
- return;
207
- }
208
- try {
209
- await this.sendEvent({
210
- distinctId: userId,
211
- event: '$identify',
212
- properties: {
213
- $set: traits,
214
- },
215
- });
216
- }
217
- catch {
218
- // Silent fail
219
- }
220
- }
221
- /**
222
- * Shutdown (cleanup)
223
- */
224
- async shutdown() {
225
- // No cleanup needed with HTTP-based telemetry
226
- }
227
- }
228
- export const telemetryService = new TelemetryService();
229
- //# sourceMappingURL=telemetry.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.service.js","sourceRoot":"","sources":["../../src/services/telemetry.service.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import type { Ora } from 'ora';
2
- export interface DiffMetrics {
3
- files: number;
4
- lines: number;
5
- additions: number;
6
- deletions: number;
7
- chars: number;
8
- }
9
- export interface ReviewLoadingFlags {
10
- fast?: boolean;
11
- rulesOnly?: boolean;
12
- isTrial?: boolean;
13
- }
14
- export declare function getDiffMetrics(diff: string): DiffMetrics;
15
- export declare function startReviewLoadingMessages(spinner: Ora, metrics: DiffMetrics, flags: ReviewLoadingFlags, options?: {
16
- intervalMs?: number;
17
- initialMessage?: string;
18
- }): () => void;
19
- //# sourceMappingURL=review-loading.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review-loading.d.ts","sourceRoot":"","sources":["../../src/utils/review-loading.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2CD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CA6BxD;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,kBAAkB,EACzB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,MAAM,IAAI,CAkBZ"}