@polka-codes/cli-shared 0.10.22 → 0.10.24

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 (47) hide show
  1. package/dist/index.js +1913 -7
  2. package/package.json +3 -3
  3. package/dist/config.js +0 -202
  4. package/dist/config.js.map +0 -1
  5. package/dist/config.parameters.test.js +0 -240
  6. package/dist/config.parameters.test.js.map +0 -1
  7. package/dist/config.rules.test.js +0 -92
  8. package/dist/config.rules.test.js.map +0 -1
  9. package/dist/config.test.js +0 -311
  10. package/dist/config.test.js.map +0 -1
  11. package/dist/index.js.map +0 -1
  12. package/dist/memory-manager.js +0 -76
  13. package/dist/memory-manager.js.map +0 -1
  14. package/dist/project-scope.js +0 -67
  15. package/dist/project-scope.js.map +0 -1
  16. package/dist/provider.js +0 -366
  17. package/dist/provider.js.map +0 -1
  18. package/dist/provider.test.js +0 -21
  19. package/dist/provider.test.js.map +0 -1
  20. package/dist/sqlite-memory-store.js +0 -911
  21. package/dist/sqlite-memory-store.js.map +0 -1
  22. package/dist/sqlite-memory-store.test.js +0 -661
  23. package/dist/sqlite-memory-store.test.js.map +0 -1
  24. package/dist/utils/__tests__/parameterSimplifier.test.js +0 -137
  25. package/dist/utils/__tests__/parameterSimplifier.test.js.map +0 -1
  26. package/dist/utils/checkRipgrep.js +0 -22
  27. package/dist/utils/checkRipgrep.js.map +0 -1
  28. package/dist/utils/eventHandler.js +0 -199
  29. package/dist/utils/eventHandler.js.map +0 -1
  30. package/dist/utils/eventHandler.test.js +0 -50
  31. package/dist/utils/eventHandler.test.js.map +0 -1
  32. package/dist/utils/index.js +0 -7
  33. package/dist/utils/index.js.map +0 -1
  34. package/dist/utils/listFiles.js +0 -136
  35. package/dist/utils/listFiles.js.map +0 -1
  36. package/dist/utils/listFiles.test.js +0 -64
  37. package/dist/utils/listFiles.test.js.map +0 -1
  38. package/dist/utils/parameterSimplifier.js +0 -65
  39. package/dist/utils/parameterSimplifier.js.map +0 -1
  40. package/dist/utils/readMultiline.js +0 -19
  41. package/dist/utils/readMultiline.js.map +0 -1
  42. package/dist/utils/search.constants.js +0 -8
  43. package/dist/utils/search.constants.js.map +0 -1
  44. package/dist/utils/searchFiles.js +0 -72
  45. package/dist/utils/searchFiles.js.map +0 -1
  46. package/dist/utils/searchFiles.test.js +0 -140
  47. package/dist/utils/searchFiles.test.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polka-codes/cli-shared",
3
- "version": "0.10.22",
3
+ "version": "0.10.24",
4
4
  "license": "AGPL-3.0",
5
5
  "author": "github@polka.codes",
6
6
  "repository": {
@@ -22,7 +22,7 @@
22
22
  "access": "public"
23
23
  },
24
24
  "scripts": {
25
- "build": "tsc --build && tsup src/index.ts --format esm && bun run build:copy-wasm",
25
+ "build": "tsc --build && tsup src/index.ts --format esm --no-splitting && bun run build:copy-wasm",
26
26
  "build:copy-wasm": "mkdir -p dist && cp ../../node_modules/sql.js/dist/sql-wasm.wasm dist/"
27
27
  },
28
28
  "dependencies": {
@@ -30,7 +30,7 @@
30
30
  "@ai-sdk/provider": "^3.0.8",
31
31
  "@ai-sdk/provider-utils": "^4.0.21",
32
32
  "@inquirer/prompts": "^8.3.2",
33
- "@polka-codes/core": "^0.10.22",
33
+ "@polka-codes/core": "^0.10.24",
34
34
  "ai": "^6.0.142",
35
35
  "chalk": "^5.6.2",
36
36
  "ignore": "^7.0.5",
package/dist/config.js DELETED
@@ -1,202 +0,0 @@
1
- // Generated by polka.codes
2
- import { existsSync, readFileSync } from 'node:fs';
3
- import { readFile } from 'node:fs/promises';
4
- import { homedir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { configSchema } from '@polka-codes/core';
7
- import { merge } from 'lodash-es';
8
- import { parse } from 'yaml';
9
- import { ZodError } from 'zod';
10
- export { configSchema };
11
- export function getGlobalConfigPath(home = homedir()) {
12
- return join(home, '.config', 'polkacodes', 'config.yml');
13
- }
14
- export function loadConfigAtPath(path) {
15
- try {
16
- return readConfig(path);
17
- }
18
- catch (error) {
19
- // Log debug message - this function is used to check if config exists, so undefined is acceptable
20
- if (error instanceof ZodError) {
21
- // Validation errors should be logged as warnings
22
- console.warn(`Config validation failed for ${path}: ${error.message}`);
23
- }
24
- return undefined;
25
- }
26
- }
27
- export const localConfigFileName = '.polkacodes.yml';
28
- const mergeArray = (a, b) => {
29
- if (!a && !b) {
30
- return undefined;
31
- }
32
- if (!a) {
33
- return b;
34
- }
35
- if (!b) {
36
- return a;
37
- }
38
- return [...a, ...b];
39
- };
40
- export function mergeConfigs(configs) {
41
- if (configs.length === 0) {
42
- return {};
43
- }
44
- const mergedConfig = configs.reduce((acc, config) => {
45
- const merged = merge({}, acc, config);
46
- // Special handling for rules array
47
- const accRules = acc.rules ? (Array.isArray(acc.rules) ? acc.rules : [acc.rules]) : undefined;
48
- const configRules = config.rules ? (Array.isArray(config.rules) ? config.rules : [config.rules]) : undefined;
49
- merged.rules = mergeArray(accRules, configRules);
50
- // Special handling for excludeFiles array
51
- merged.excludeFiles = mergeArray(acc.excludeFiles, config.excludeFiles);
52
- return merged;
53
- }, {}); // Add initial value to prevent potential errors with empty arrays
54
- return mergedConfig;
55
- }
56
- export async function resolveRules(rules) {
57
- if (!rules) {
58
- return undefined;
59
- }
60
- if (typeof rules === 'string') {
61
- return rules;
62
- }
63
- const resolvedRules = await Promise.all(rules.map(async (rule) => {
64
- if (typeof rule === 'string') {
65
- return rule;
66
- }
67
- if ('url' in rule) {
68
- try {
69
- const controller = new AbortController();
70
- const timeoutId = setTimeout(() => controller.abort(), 30000); // 30 second timeout
71
- const response = await fetch(rule.url, { signal: controller.signal });
72
- clearTimeout(timeoutId);
73
- if (response.ok) {
74
- return await response.text();
75
- }
76
- console.warn(`Failed to fetch rule from ${rule.url}: ${response.statusText}`);
77
- }
78
- catch (error) {
79
- if (error instanceof Error && error.name === 'AbortError') {
80
- console.warn(`Timeout fetching rule from ${rule.url} (30s)`);
81
- }
82
- else {
83
- console.warn(`Error fetching rule from ${rule.url}: ${error}`);
84
- }
85
- }
86
- }
87
- else if ('repo' in rule) {
88
- const ref = rule.commit ?? rule.tag ?? rule.branch ?? 'main';
89
- const url = `https://raw.githubusercontent.com/${rule.repo}/${ref}/${rule.path}`;
90
- try {
91
- const controller = new AbortController();
92
- const timeoutId = setTimeout(() => controller.abort(), 30000); // 30 second timeout
93
- const response = await fetch(url, { signal: controller.signal });
94
- clearTimeout(timeoutId);
95
- if (response.ok) {
96
- return await response.text();
97
- }
98
- console.warn(`Failed to fetch rule from ${url}: ${response.statusText}`);
99
- }
100
- catch (error) {
101
- if (error instanceof Error && error.name === 'AbortError') {
102
- console.warn(`Timeout fetching rule from ${url} (30s)`);
103
- }
104
- else {
105
- console.warn(`Error fetching rule from ${url}: ${error}`);
106
- }
107
- }
108
- }
109
- else if ('path' in rule) {
110
- if (existsSync(rule.path)) {
111
- return await readFile(rule.path, 'utf-8');
112
- }
113
- console.warn(`Rule file not found: ${rule.path}`);
114
- }
115
- return undefined;
116
- }));
117
- return resolvedRules.filter((rule) => rule !== undefined).join('\n\n');
118
- }
119
- export async function loadConfig(paths, cwd = process.cwd(), home = homedir()) {
120
- const configs = [];
121
- // Load global config if exists
122
- const globalConfigPath = getGlobalConfigPath(home);
123
- if (existsSync(globalConfigPath)) {
124
- try {
125
- const globalConfig = readConfig(globalConfigPath);
126
- configs.push(globalConfig);
127
- }
128
- catch (error) {
129
- console.warn(`Error loading global config file: ${globalConfigPath}\n${error}`);
130
- }
131
- }
132
- // Load project configs
133
- if (paths && paths.length > 0) {
134
- const configPaths = Array.isArray(paths) ? paths : [paths];
135
- for (const path of configPaths) {
136
- try {
137
- const config = readConfig(path);
138
- configs.push(config);
139
- }
140
- catch (error) {
141
- // Check for ENOENT (file not found) - silently skip these
142
- const errorCode = error?.code;
143
- if (errorCode === 'ENOENT') {
144
- // File not found is not an error
145
- continue;
146
- }
147
- // All other errors should be reported (YAML parse errors, validation errors, etc)
148
- console.error(`Error loading config file: ${path}\n${error}`);
149
- throw error;
150
- }
151
- }
152
- }
153
- else {
154
- const configPath = join(cwd, localConfigFileName);
155
- try {
156
- const projectConfig = readConfig(configPath);
157
- configs.push(projectConfig);
158
- }
159
- catch (error) {
160
- if (error instanceof ZodError) {
161
- console.error(`Error in config file: ${configPath}\n${error}`);
162
- throw error;
163
- }
164
- }
165
- }
166
- const mergedConfig = configs.length > 0 ? mergeConfigs(configs) : undefined;
167
- if (!mergedConfig) {
168
- return undefined;
169
- }
170
- const resolvedRules = await resolveRules(mergedConfig.rules);
171
- return {
172
- ...mergedConfig,
173
- rules: resolvedRules,
174
- };
175
- }
176
- export const readConfig = (path) => {
177
- const file = readFileSync(path, 'utf8');
178
- const config = parse(file);
179
- const result = configSchema.parse(config);
180
- if (result == null) {
181
- return {};
182
- }
183
- return result;
184
- };
185
- export const readLocalConfig = (path) => {
186
- try {
187
- return readConfig(path ?? localConfigFileName);
188
- }
189
- catch (error) {
190
- // Log debug message - this function is used to check if local config exists
191
- if (error instanceof ZodError) {
192
- // Validation errors should be logged as warnings
193
- console.warn(`Local config validation failed for ${path ?? localConfigFileName}: ${error.message}`);
194
- }
195
- else {
196
- // Other errors (file not found, parse errors) are expected
197
- console.debug(`Could not load local config from ${path ?? localConfigFileName}: ${error instanceof Error ? error.message : String(error)}`);
198
- }
199
- return undefined;
200
- }
201
- };
202
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,240 +0,0 @@
1
- // Generated by polka.codes
2
- import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test } from 'bun:test';
3
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
4
- import { tmpdir } from 'node:os';
5
- import { join } from 'node:path';
6
- import { loadConfig, mergeConfigs } from './config';
7
- describe('config parameters', () => {
8
- let testDir;
9
- let testSubDir;
10
- let testHomeDir;
11
- beforeAll(() => {
12
- testDir = mkdtempSync(join(tmpdir(), 'polkacodes-test-'));
13
- });
14
- beforeEach(() => {
15
- testSubDir = mkdtempSync(join(testDir, `sub-test-${Math.random()}`));
16
- testHomeDir = mkdtempSync(join(testDir, `home-test-${Math.random()}`));
17
- mkdirSync(join(testHomeDir, '.config', 'polkacodes'), { recursive: true });
18
- });
19
- afterEach(() => {
20
- rmSync(testSubDir, { recursive: true, force: true });
21
- rmSync(testHomeDir, { recursive: true, force: true });
22
- });
23
- afterAll(() => {
24
- rmSync(testDir, { recursive: true, force: true });
25
- });
26
- test('loads root level defaultParameters', async () => {
27
- const configPath = join(testSubDir, 'params-config.yml');
28
- writeFileSync(configPath, `
29
- defaultProvider: anthropic
30
- defaultParameters:
31
- temperature: 0.7
32
- top_p: 0.9
33
- max_tokens: 4000
34
- `);
35
- const config = await loadConfig(configPath, testSubDir, testHomeDir);
36
- expect(config?.defaultParameters).toMatchSnapshot();
37
- });
38
- test('loads provider defaultParameters', async () => {
39
- const configPath = join(testSubDir, 'provider-params-config.yml');
40
- writeFileSync(configPath, `
41
- providers:
42
- anthropic:
43
- apiKey: test-key
44
- defaultModel: claude-3-opus
45
- defaultParameters:
46
- temperature: 0.5
47
- max_tokens: 3000
48
- openai:
49
- apiKey: test-key-openai
50
- defaultParameters:
51
- temperature: 0.8
52
- presence_penalty: 0.2
53
- `);
54
- const config = await loadConfig(configPath, testSubDir, testHomeDir);
55
- expect(config?.providers?.anthropic?.defaultParameters).toMatchSnapshot();
56
- expect(config?.providers?.openai?.defaultParameters).toMatchSnapshot();
57
- });
58
- test('loads command parameters', async () => {
59
- const configPath = join(testSubDir, 'command-params-config.yml');
60
- writeFileSync(configPath, `
61
- commands:
62
- default:
63
- provider: anthropic
64
- model: claude-3-opus
65
- parameters:
66
- temperature: 0.7
67
- max_tokens: 4000
68
- task:
69
- model: claude-3-sonnet
70
- parameters:
71
- temperature: 0.8
72
- top_p: 0.9
73
- `);
74
- const config = await loadConfig(configPath, testSubDir, testHomeDir);
75
- expect(config?.commands?.default?.parameters).toMatchSnapshot();
76
- expect(config?.commands?.task?.parameters).toMatchSnapshot();
77
- });
78
- test('merges parameters from multiple configs', () => {
79
- const configs = [
80
- {
81
- defaultParameters: {
82
- temperature: 0.7,
83
- top_p: 0.9,
84
- },
85
- providers: {
86
- anthropic: {
87
- defaultParameters: {
88
- temperature: 0.5,
89
- max_tokens: 2000,
90
- },
91
- },
92
- },
93
- },
94
- {
95
- defaultParameters: {
96
- max_tokens: 4000,
97
- presence_penalty: 0.1,
98
- },
99
- providers: {
100
- anthropic: {
101
- defaultParameters: {
102
- temperature: 0.6,
103
- frequency_penalty: 0.2,
104
- },
105
- },
106
- },
107
- },
108
- ];
109
- const merged = mergeConfigs(configs);
110
- expect(merged.defaultParameters).toMatchSnapshot();
111
- expect(merged.providers?.anthropic?.defaultParameters).toMatchSnapshot();
112
- });
113
- test('merges global and local parameters with local precedence', async () => {
114
- const globalConfigPath = join(testHomeDir, '.config', 'polkacodes', 'config.yml');
115
- const localConfigPath = join(testSubDir, '.polkacodes.yml');
116
- writeFileSync(globalConfigPath, `
117
- defaultParameters:
118
- temperature: 0.7
119
- top_p: 0.9
120
- providers:
121
- anthropic:
122
- defaultParameters:
123
- temperature: 0.5
124
- max_tokens: 2000
125
- `);
126
- writeFileSync(localConfigPath, `
127
- defaultParameters:
128
- temperature: 0.6
129
- presence_penalty: 0.1
130
- providers:
131
- anthropic:
132
- defaultParameters:
133
- temperature: 0.4
134
- top_k: 50
135
- `);
136
- const config = await loadConfig(localConfigPath, testSubDir, testHomeDir);
137
- expect(config?.defaultParameters).toMatchSnapshot();
138
- expect(config?.providers?.anthropic?.defaultParameters).toMatchSnapshot();
139
- });
140
- describe('mergeConfigs edge cases', () => {
141
- test('handles empty array', () => {
142
- const merged = mergeConfigs([]);
143
- expect(merged).toEqual({});
144
- });
145
- test('handles single config', () => {
146
- const config = {
147
- defaultParameters: { temperature: 0.7 },
148
- };
149
- const merged = mergeConfigs([config]);
150
- expect(merged).toEqual(config);
151
- });
152
- test('deep merges nested objects', () => {
153
- const configs = [
154
- {
155
- providers: {
156
- anthropic: {
157
- apiKey: 'key1',
158
- defaultParameters: {
159
- temperature: 0.5,
160
- max_tokens: 2000,
161
- },
162
- },
163
- },
164
- },
165
- {
166
- providers: {
167
- anthropic: {
168
- defaultParameters: {
169
- temperature: 0.6,
170
- top_p: 0.9,
171
- },
172
- },
173
- },
174
- },
175
- ];
176
- const merged = mergeConfigs(configs);
177
- expect(merged.providers?.anthropic).toMatchSnapshot();
178
- expect(merged.providers?.anthropic?.apiKey).toBe('key1');
179
- expect(merged.providers?.anthropic?.defaultParameters?.temperature).toBe(0.6);
180
- expect(merged.providers?.anthropic?.defaultParameters?.max_tokens).toBe(2000);
181
- expect(merged.providers?.anthropic?.defaultParameters?.top_p).toBe(0.9);
182
- });
183
- test('merges arrays with concat', () => {
184
- const configs = [
185
- {
186
- excludeFiles: ['node_modules', '.git'],
187
- },
188
- {
189
- excludeFiles: ['dist', 'build'],
190
- },
191
- ];
192
- const merged = mergeConfigs(configs);
193
- expect(merged.excludeFiles).toEqual(['node_modules', '.git', 'dist', 'build']);
194
- });
195
- test('handles missing arrays', () => {
196
- const configs = [
197
- {
198
- excludeFiles: ['node_modules'],
199
- },
200
- {
201
- defaultParameters: { temperature: 0.7 },
202
- },
203
- ];
204
- const merged = mergeConfigs(configs);
205
- expect(merged.excludeFiles).toEqual(['node_modules']);
206
- expect(merged.defaultParameters).toEqual({ temperature: 0.7 });
207
- });
208
- });
209
- describe('loadConfig edge cases', () => {
210
- test('returns undefined on missing config file', async () => {
211
- const configPath = join(testSubDir, 'nonexistent.yml');
212
- const result = await loadConfig(configPath, testSubDir, testHomeDir);
213
- // Missing config files should not throw - they should return undefined
214
- expect(result).toBeUndefined();
215
- });
216
- test('throws on invalid YAML', async () => {
217
- const configPath = join(testSubDir, 'invalid.yml');
218
- writeFileSync(configPath, '{ invalid yaml content');
219
- await expect(loadConfig(configPath, testSubDir, testHomeDir)).rejects.toThrow();
220
- });
221
- test('prioritizes local config over global config', async () => {
222
- const globalConfigPath = join(testHomeDir, '.config', 'polkacodes', 'config.yml');
223
- const localConfigPath = join(testSubDir, '.polkacodes.yml');
224
- writeFileSync(globalConfigPath, `
225
- defaultProvider: openai
226
- defaultParameters:
227
- temperature: 0.5
228
- `);
229
- writeFileSync(localConfigPath, `
230
- defaultProvider: anthropic
231
- defaultParameters:
232
- temperature: 0.7
233
- `);
234
- const config = await loadConfig(localConfigPath, testSubDir, testHomeDir);
235
- expect(config?.defaultProvider).toBe('anthropic');
236
- expect(config?.defaultParameters?.temperature).toBe(0.7);
237
- });
238
- });
239
- });
240
- //# sourceMappingURL=config.parameters.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.parameters.test.js","sourceRoot":"","sources":["../src/config.parameters.test.ts"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, spyOn, test } from 'bun:test';
2
- import { resolveRules } from './config';
3
- describe('resolveRules', () => {
4
- let fetchSpy;
5
- beforeEach(() => {
6
- fetchSpy = spyOn(global, 'fetch').mockImplementation((() => Promise.resolve(new Response('rule content'))));
7
- });
8
- afterEach(() => {
9
- fetchSpy.mockRestore();
10
- });
11
- test('resolves repo rule with default branch', async () => {
12
- const rules = [
13
- {
14
- repo: 'owner/repo',
15
- path: 'rules/rule.md',
16
- },
17
- ];
18
- await resolveRules(rules);
19
- expect(fetchSpy).toHaveBeenCalledWith('https://raw.githubusercontent.com/owner/repo/main/rules/rule.md', expect.objectContaining({
20
- signal: expect.any(AbortSignal),
21
- }));
22
- });
23
- test('resolves repo rule with tag', async () => {
24
- const rules = [
25
- {
26
- repo: 'owner/repo',
27
- path: 'rules/rule.md',
28
- tag: 'v1.0.0',
29
- },
30
- ];
31
- await resolveRules(rules);
32
- expect(fetchSpy).toHaveBeenCalledWith('https://raw.githubusercontent.com/owner/repo/v1.0.0/rules/rule.md', expect.objectContaining({
33
- signal: expect.any(AbortSignal),
34
- }));
35
- });
36
- test('resolves repo rule with branch', async () => {
37
- const rules = [
38
- {
39
- repo: 'owner/repo',
40
- path: 'rules/rule.md',
41
- branch: 'develop',
42
- },
43
- ];
44
- await resolveRules(rules);
45
- expect(fetchSpy).toHaveBeenCalledWith('https://raw.githubusercontent.com/owner/repo/develop/rules/rule.md', expect.objectContaining({
46
- signal: expect.any(AbortSignal),
47
- }));
48
- });
49
- test('resolves repo rule with commit', async () => {
50
- const rules = [
51
- {
52
- repo: 'owner/repo',
53
- path: 'rules/rule.md',
54
- commit: 'sha123',
55
- },
56
- ];
57
- await resolveRules(rules);
58
- expect(fetchSpy).toHaveBeenCalledWith('https://raw.githubusercontent.com/owner/repo/sha123/rules/rule.md', expect.objectContaining({
59
- signal: expect.any(AbortSignal),
60
- }));
61
- });
62
- test('prioritizes commit over tag and branch', async () => {
63
- const rules = [
64
- {
65
- repo: 'owner/repo',
66
- path: 'rules/rule.md',
67
- commit: 'sha123',
68
- tag: 'v1.0.0',
69
- branch: 'develop',
70
- },
71
- ];
72
- await resolveRules(rules);
73
- expect(fetchSpy).toHaveBeenCalledWith('https://raw.githubusercontent.com/owner/repo/sha123/rules/rule.md', expect.objectContaining({
74
- signal: expect.any(AbortSignal),
75
- }));
76
- });
77
- test('prioritizes tag over branch', async () => {
78
- const rules = [
79
- {
80
- repo: 'owner/repo',
81
- path: 'rules/rule.md',
82
- tag: 'v1.0.0',
83
- branch: 'develop',
84
- },
85
- ];
86
- await resolveRules(rules);
87
- expect(fetchSpy).toHaveBeenCalledWith('https://raw.githubusercontent.com/owner/repo/v1.0.0/rules/rule.md', expect.objectContaining({
88
- signal: expect.any(AbortSignal),
89
- }));
90
- });
91
- });
92
- //# sourceMappingURL=config.rules.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.rules.test.js","sourceRoot":"","sources":["../src/config.rules.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,QAAkC,CAAA;IAEtC,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAQ,CAAC,CAAA;IACpH,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,WAAW,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,eAAe;aACtB;SACF,CAAA;QAED,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,iEAAiE,EACjE,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,eAAe;gBACrB,GAAG,EAAE,QAAQ;aACd;SACF,CAAA;QAED,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,mEAAmE,EACnE,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,SAAS;aAClB;SACF,CAAA;QAED,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,oEAAoE,EACpE,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAA;QAED,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,mEAAmE,EACnE,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,QAAQ;gBAChB,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,SAAS;aAClB;SACF,CAAA;QAED,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,mEAAmE,EACnE,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,eAAe;gBACrB,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,SAAS;aAClB;SACF,CAAA;QAED,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;QAEzB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,mEAAmE,EACnE,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;SAChC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}