@atmaticai/agent-tools-core 1.0.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.
Files changed (142) hide show
  1. package/README.md +742 -0
  2. package/dist/archive/index.d.mts +1 -0
  3. package/dist/archive/index.d.ts +1 -0
  4. package/dist/archive/index.js +90 -0
  5. package/dist/archive/index.js.map +1 -0
  6. package/dist/archive/index.mjs +80 -0
  7. package/dist/archive/index.mjs.map +1 -0
  8. package/dist/color/index.d.mts +1 -0
  9. package/dist/color/index.d.ts +1 -0
  10. package/dist/color/index.js +347 -0
  11. package/dist/color/index.js.map +1 -0
  12. package/dist/color/index.mjs +336 -0
  13. package/dist/color/index.mjs.map +1 -0
  14. package/dist/crypto/index.d.mts +1 -0
  15. package/dist/crypto/index.d.ts +1 -0
  16. package/dist/crypto/index.js +116 -0
  17. package/dist/crypto/index.js.map +1 -0
  18. package/dist/crypto/index.mjs +108 -0
  19. package/dist/crypto/index.mjs.map +1 -0
  20. package/dist/csv/index.d.mts +1 -0
  21. package/dist/csv/index.d.ts +1 -0
  22. package/dist/csv/index.js +371 -0
  23. package/dist/csv/index.js.map +1 -0
  24. package/dist/csv/index.mjs +348 -0
  25. package/dist/csv/index.mjs.map +1 -0
  26. package/dist/datetime/index.d.mts +1 -0
  27. package/dist/datetime/index.d.ts +1 -0
  28. package/dist/datetime/index.js +234 -0
  29. package/dist/datetime/index.js.map +1 -0
  30. package/dist/datetime/index.mjs +224 -0
  31. package/dist/datetime/index.mjs.map +1 -0
  32. package/dist/diff/index.d.mts +2 -0
  33. package/dist/diff/index.d.ts +2 -0
  34. package/dist/diff/index.js +84 -0
  35. package/dist/diff/index.js.map +1 -0
  36. package/dist/diff/index.mjs +78 -0
  37. package/dist/diff/index.mjs.map +1 -0
  38. package/dist/excel/index.d.mts +1 -0
  39. package/dist/excel/index.d.ts +1 -0
  40. package/dist/excel/index.js +163 -0
  41. package/dist/excel/index.js.map +1 -0
  42. package/dist/excel/index.mjs +153 -0
  43. package/dist/excel/index.mjs.map +1 -0
  44. package/dist/image/index.d.mts +1 -0
  45. package/dist/image/index.d.ts +1 -0
  46. package/dist/image/index.js +123 -0
  47. package/dist/image/index.js.map +1 -0
  48. package/dist/image/index.mjs +107 -0
  49. package/dist/image/index.mjs.map +1 -0
  50. package/dist/index--vbnYfdE.d.mts +142 -0
  51. package/dist/index--vbnYfdE.d.ts +142 -0
  52. package/dist/index-7FZQloN-.d.mts +62 -0
  53. package/dist/index-7FZQloN-.d.ts +62 -0
  54. package/dist/index-7XgaTVH5.d.mts +93 -0
  55. package/dist/index-7XgaTVH5.d.ts +93 -0
  56. package/dist/index-7bvFmh45.d.mts +87 -0
  57. package/dist/index-7bvFmh45.d.ts +87 -0
  58. package/dist/index-BDZcIVCU.d.mts +53 -0
  59. package/dist/index-BDZcIVCU.d.ts +53 -0
  60. package/dist/index-BN00EnUU.d.mts +55 -0
  61. package/dist/index-BN00EnUU.d.ts +55 -0
  62. package/dist/index-CQ1EukC4.d.mts +59 -0
  63. package/dist/index-CQ1EukC4.d.ts +59 -0
  64. package/dist/index-CgRVnFOt.d.mts +91 -0
  65. package/dist/index-CgRVnFOt.d.ts +91 -0
  66. package/dist/index-DjBDZzuj.d.mts +54 -0
  67. package/dist/index-DjBDZzuj.d.ts +54 -0
  68. package/dist/index-FFrvmr-n.d.mts +50 -0
  69. package/dist/index-FFrvmr-n.d.ts +50 -0
  70. package/dist/index-QWC8yIgW.d.mts +106 -0
  71. package/dist/index-QWC8yIgW.d.ts +106 -0
  72. package/dist/index-RVqNunxE.d.mts +193 -0
  73. package/dist/index-RVqNunxE.d.ts +193 -0
  74. package/dist/index-fJD8SORm.d.mts +61 -0
  75. package/dist/index-fJD8SORm.d.ts +61 -0
  76. package/dist/index-pPy_XDQU.d.mts +56 -0
  77. package/dist/index-pPy_XDQU.d.ts +56 -0
  78. package/dist/index-rwh9hdD9.d.mts +68 -0
  79. package/dist/index-rwh9hdD9.d.ts +68 -0
  80. package/dist/index-uXdkAfea.d.mts +93 -0
  81. package/dist/index-uXdkAfea.d.ts +93 -0
  82. package/dist/index.d.mts +17 -0
  83. package/dist/index.d.ts +17 -0
  84. package/dist/index.js +3744 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/index.mjs +3694 -0
  87. package/dist/index.mjs.map +1 -0
  88. package/dist/json/index.d.mts +1 -0
  89. package/dist/json/index.d.ts +1 -0
  90. package/dist/json/index.js +599 -0
  91. package/dist/json/index.js.map +1 -0
  92. package/dist/json/index.mjs +552 -0
  93. package/dist/json/index.mjs.map +1 -0
  94. package/dist/markdown/index.d.mts +1 -0
  95. package/dist/markdown/index.d.ts +1 -0
  96. package/dist/markdown/index.js +151 -0
  97. package/dist/markdown/index.js.map +1 -0
  98. package/dist/markdown/index.mjs +139 -0
  99. package/dist/markdown/index.mjs.map +1 -0
  100. package/dist/math/index.d.mts +1 -0
  101. package/dist/math/index.d.ts +1 -0
  102. package/dist/math/index.js +247 -0
  103. package/dist/math/index.js.map +1 -0
  104. package/dist/math/index.mjs +240 -0
  105. package/dist/math/index.mjs.map +1 -0
  106. package/dist/pdf/index.d.mts +1 -0
  107. package/dist/pdf/index.d.ts +1 -0
  108. package/dist/pdf/index.js +546 -0
  109. package/dist/pdf/index.js.map +1 -0
  110. package/dist/pdf/index.mjs +518 -0
  111. package/dist/pdf/index.mjs.map +1 -0
  112. package/dist/regex/index.d.mts +1 -0
  113. package/dist/regex/index.d.ts +1 -0
  114. package/dist/regex/index.js +93 -0
  115. package/dist/regex/index.js.map +1 -0
  116. package/dist/regex/index.mjs +88 -0
  117. package/dist/regex/index.mjs.map +1 -0
  118. package/dist/settings/index.d.mts +41 -0
  119. package/dist/settings/index.d.ts +41 -0
  120. package/dist/settings/index.js +146 -0
  121. package/dist/settings/index.js.map +1 -0
  122. package/dist/settings/index.mjs +139 -0
  123. package/dist/settings/index.mjs.map +1 -0
  124. package/dist/sql/index.d.mts +1 -0
  125. package/dist/sql/index.d.ts +1 -0
  126. package/dist/sql/index.js +146 -0
  127. package/dist/sql/index.js.map +1 -0
  128. package/dist/sql/index.mjs +139 -0
  129. package/dist/sql/index.mjs.map +1 -0
  130. package/dist/text/index.d.mts +1 -0
  131. package/dist/text/index.d.ts +1 -0
  132. package/dist/text/index.js +250 -0
  133. package/dist/text/index.js.map +1 -0
  134. package/dist/text/index.mjs +242 -0
  135. package/dist/text/index.mjs.map +1 -0
  136. package/dist/xml/index.d.mts +1 -0
  137. package/dist/xml/index.d.ts +1 -0
  138. package/dist/xml/index.js +188 -0
  139. package/dist/xml/index.js.map +1 -0
  140. package/dist/xml/index.mjs +180 -0
  141. package/dist/xml/index.mjs.map +1 -0
  142. package/package.json +150 -0
@@ -0,0 +1,93 @@
1
+ 'use strict';
2
+
3
+ // src/regex/utils.ts
4
+ function buildFlags(options) {
5
+ let flags = options.flags ?? "";
6
+ if (options.global && !flags.includes("g")) flags += "g";
7
+ if (options.caseInsensitive && !flags.includes("i")) flags += "i";
8
+ if (options.multiline && !flags.includes("m")) flags += "m";
9
+ return flags;
10
+ }
11
+
12
+ // src/regex/test.ts
13
+ function test(input, pattern, options = {}) {
14
+ const flags = buildFlags(options);
15
+ const regex = new RegExp(pattern, flags.includes("g") ? flags : flags + "g");
16
+ const results = [];
17
+ let match;
18
+ while ((match = regex.exec(input)) !== null) {
19
+ results.push({
20
+ match: match[0],
21
+ index: match.index,
22
+ groups: match.groups ? { ...match.groups } : {}
23
+ });
24
+ if (!flags.includes("g")) break;
25
+ }
26
+ return {
27
+ matches: results.length > 0,
28
+ matchCount: results.length,
29
+ results
30
+ };
31
+ }
32
+
33
+ // src/regex/replace.ts
34
+ function replace(input, pattern, replacement, options = {}) {
35
+ const flags = buildFlags({ ...options, global: options.global ?? true });
36
+ const regex = new RegExp(pattern, flags);
37
+ let replacements = 0;
38
+ const output = input.replace(regex, (...args) => {
39
+ replacements++;
40
+ const groups = args[args.length - 1];
41
+ let result = replacement;
42
+ if (typeof groups === "object" && groups !== null) {
43
+ for (const [key, value] of Object.entries(groups)) {
44
+ result = result.replace(new RegExp(`\\$<${key}>`, "g"), String(value ?? ""));
45
+ }
46
+ }
47
+ for (let i = 1; i < args.length - 2; i++) {
48
+ result = result.replace(new RegExp(`\\$${i}`, "g"), args[i] ?? "");
49
+ }
50
+ return result;
51
+ });
52
+ return { output, replacements };
53
+ }
54
+
55
+ // src/regex/extract.ts
56
+ function extract(input, pattern, options = {}) {
57
+ const flags = buildFlags({ ...options, global: true });
58
+ const regex = new RegExp(pattern, flags);
59
+ const matches = [];
60
+ const groups = [];
61
+ let match;
62
+ while ((match = regex.exec(input)) !== null) {
63
+ matches.push(match[0]);
64
+ if (match.groups) {
65
+ groups.push({ ...match.groups });
66
+ }
67
+ }
68
+ return {
69
+ matches,
70
+ groups,
71
+ count: matches.length
72
+ };
73
+ }
74
+
75
+ // src/regex/validate.ts
76
+ function validate(pattern, flags) {
77
+ try {
78
+ new RegExp(pattern, flags);
79
+ return { valid: true };
80
+ } catch (e) {
81
+ return {
82
+ valid: false,
83
+ error: e.message
84
+ };
85
+ }
86
+ }
87
+
88
+ exports.extract = extract;
89
+ exports.replace = replace;
90
+ exports.test = test;
91
+ exports.validate = validate;
92
+ //# sourceMappingURL=index.js.map
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/regex/utils.ts","../../src/regex/test.ts","../../src/regex/replace.ts","../../src/regex/extract.ts","../../src/regex/validate.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { RegexOptions } from './types';\n\nexport function buildFlags(options: RegexOptions): string {\n let flags = options.flags ?? '';\n\n if (options.global && !flags.includes('g')) flags += 'g';\n if (options.caseInsensitive && !flags.includes('i')) flags += 'i';\n if (options.multiline && !flags.includes('m')) flags += 'm';\n\n return flags;\n}\n","import type { RegexTestResult, RegexMatch, RegexOptions } from './types';\nimport { buildFlags } from './utils';\n\nexport function test(\n input: string,\n pattern: string,\n options: RegexOptions = {}\n): RegexTestResult {\n const flags = buildFlags(options);\n const regex = new RegExp(pattern, flags.includes('g') ? flags : flags + 'g');\n const results: RegexMatch[] = [];\n let match;\n\n while ((match = regex.exec(input)) !== null) {\n results.push({\n match: match[0],\n index: match.index,\n groups: match.groups ? { ...match.groups } : {},\n });\n\n if (!flags.includes('g')) break;\n }\n\n return {\n matches: results.length > 0,\n matchCount: results.length,\n results,\n };\n}\n","import type { RegexReplaceResult, RegexOptions } from './types';\nimport { buildFlags } from './utils';\n\nexport function replace(\n input: string,\n pattern: string,\n replacement: string,\n options: RegexOptions = {}\n): RegexReplaceResult {\n const flags = buildFlags({ ...options, global: options.global ?? true });\n const regex = new RegExp(pattern, flags);\n\n let replacements = 0;\n const output = input.replace(regex, (...args) => {\n replacements++;\n const groups = args[args.length - 1];\n let result = replacement;\n\n if (typeof groups === 'object' && groups !== null) {\n for (const [key, value] of Object.entries(groups)) {\n result = result.replace(new RegExp(`\\\\$<${key}>`, 'g'), String(value ?? ''));\n }\n }\n\n for (let i = 1; i < args.length - 2; i++) {\n result = result.replace(new RegExp(`\\\\$${i}`, 'g'), args[i] ?? '');\n }\n\n return result;\n });\n\n return { output, replacements };\n}\n","import type { RegexExtractResult, RegexOptions } from './types';\nimport { buildFlags } from './utils';\n\nexport function extract(\n input: string,\n pattern: string,\n options: RegexOptions = {}\n): RegexExtractResult {\n const flags = buildFlags({ ...options, global: true });\n const regex = new RegExp(pattern, flags);\n const matches: string[] = [];\n const groups: Record<string, string>[] = [];\n let match;\n\n while ((match = regex.exec(input)) !== null) {\n matches.push(match[0]);\n if (match.groups) {\n groups.push({ ...match.groups });\n }\n }\n\n return {\n matches,\n groups,\n count: matches.length,\n };\n}\n","import type { RegexValidationResult } from './types';\n\nexport function validate(pattern: string, flags?: string): RegexValidationResult {\n try {\n new RegExp(pattern, flags);\n return { valid: true };\n } catch (e) {\n return {\n valid: false,\n error: (e as Error).message,\n };\n }\n}\n"]}
@@ -0,0 +1,88 @@
1
+ // src/regex/utils.ts
2
+ function buildFlags(options) {
3
+ let flags = options.flags ?? "";
4
+ if (options.global && !flags.includes("g")) flags += "g";
5
+ if (options.caseInsensitive && !flags.includes("i")) flags += "i";
6
+ if (options.multiline && !flags.includes("m")) flags += "m";
7
+ return flags;
8
+ }
9
+
10
+ // src/regex/test.ts
11
+ function test(input, pattern, options = {}) {
12
+ const flags = buildFlags(options);
13
+ const regex = new RegExp(pattern, flags.includes("g") ? flags : flags + "g");
14
+ const results = [];
15
+ let match;
16
+ while ((match = regex.exec(input)) !== null) {
17
+ results.push({
18
+ match: match[0],
19
+ index: match.index,
20
+ groups: match.groups ? { ...match.groups } : {}
21
+ });
22
+ if (!flags.includes("g")) break;
23
+ }
24
+ return {
25
+ matches: results.length > 0,
26
+ matchCount: results.length,
27
+ results
28
+ };
29
+ }
30
+
31
+ // src/regex/replace.ts
32
+ function replace(input, pattern, replacement, options = {}) {
33
+ const flags = buildFlags({ ...options, global: options.global ?? true });
34
+ const regex = new RegExp(pattern, flags);
35
+ let replacements = 0;
36
+ const output = input.replace(regex, (...args) => {
37
+ replacements++;
38
+ const groups = args[args.length - 1];
39
+ let result = replacement;
40
+ if (typeof groups === "object" && groups !== null) {
41
+ for (const [key, value] of Object.entries(groups)) {
42
+ result = result.replace(new RegExp(`\\$<${key}>`, "g"), String(value ?? ""));
43
+ }
44
+ }
45
+ for (let i = 1; i < args.length - 2; i++) {
46
+ result = result.replace(new RegExp(`\\$${i}`, "g"), args[i] ?? "");
47
+ }
48
+ return result;
49
+ });
50
+ return { output, replacements };
51
+ }
52
+
53
+ // src/regex/extract.ts
54
+ function extract(input, pattern, options = {}) {
55
+ const flags = buildFlags({ ...options, global: true });
56
+ const regex = new RegExp(pattern, flags);
57
+ const matches = [];
58
+ const groups = [];
59
+ let match;
60
+ while ((match = regex.exec(input)) !== null) {
61
+ matches.push(match[0]);
62
+ if (match.groups) {
63
+ groups.push({ ...match.groups });
64
+ }
65
+ }
66
+ return {
67
+ matches,
68
+ groups,
69
+ count: matches.length
70
+ };
71
+ }
72
+
73
+ // src/regex/validate.ts
74
+ function validate(pattern, flags) {
75
+ try {
76
+ new RegExp(pattern, flags);
77
+ return { valid: true };
78
+ } catch (e) {
79
+ return {
80
+ valid: false,
81
+ error: e.message
82
+ };
83
+ }
84
+ }
85
+
86
+ export { extract, replace, test, validate };
87
+ //# sourceMappingURL=index.mjs.map
88
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/regex/utils.ts","../../src/regex/test.ts","../../src/regex/replace.ts","../../src/regex/extract.ts","../../src/regex/validate.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { RegexOptions } from './types';\n\nexport function buildFlags(options: RegexOptions): string {\n let flags = options.flags ?? '';\n\n if (options.global && !flags.includes('g')) flags += 'g';\n if (options.caseInsensitive && !flags.includes('i')) flags += 'i';\n if (options.multiline && !flags.includes('m')) flags += 'm';\n\n return flags;\n}\n","import type { RegexTestResult, RegexMatch, RegexOptions } from './types';\nimport { buildFlags } from './utils';\n\nexport function test(\n input: string,\n pattern: string,\n options: RegexOptions = {}\n): RegexTestResult {\n const flags = buildFlags(options);\n const regex = new RegExp(pattern, flags.includes('g') ? flags : flags + 'g');\n const results: RegexMatch[] = [];\n let match;\n\n while ((match = regex.exec(input)) !== null) {\n results.push({\n match: match[0],\n index: match.index,\n groups: match.groups ? { ...match.groups } : {},\n });\n\n if (!flags.includes('g')) break;\n }\n\n return {\n matches: results.length > 0,\n matchCount: results.length,\n results,\n };\n}\n","import type { RegexReplaceResult, RegexOptions } from './types';\nimport { buildFlags } from './utils';\n\nexport function replace(\n input: string,\n pattern: string,\n replacement: string,\n options: RegexOptions = {}\n): RegexReplaceResult {\n const flags = buildFlags({ ...options, global: options.global ?? true });\n const regex = new RegExp(pattern, flags);\n\n let replacements = 0;\n const output = input.replace(regex, (...args) => {\n replacements++;\n const groups = args[args.length - 1];\n let result = replacement;\n\n if (typeof groups === 'object' && groups !== null) {\n for (const [key, value] of Object.entries(groups)) {\n result = result.replace(new RegExp(`\\\\$<${key}>`, 'g'), String(value ?? ''));\n }\n }\n\n for (let i = 1; i < args.length - 2; i++) {\n result = result.replace(new RegExp(`\\\\$${i}`, 'g'), args[i] ?? '');\n }\n\n return result;\n });\n\n return { output, replacements };\n}\n","import type { RegexExtractResult, RegexOptions } from './types';\nimport { buildFlags } from './utils';\n\nexport function extract(\n input: string,\n pattern: string,\n options: RegexOptions = {}\n): RegexExtractResult {\n const flags = buildFlags({ ...options, global: true });\n const regex = new RegExp(pattern, flags);\n const matches: string[] = [];\n const groups: Record<string, string>[] = [];\n let match;\n\n while ((match = regex.exec(input)) !== null) {\n matches.push(match[0]);\n if (match.groups) {\n groups.push({ ...match.groups });\n }\n }\n\n return {\n matches,\n groups,\n count: matches.length,\n };\n}\n","import type { RegexValidationResult } from './types';\n\nexport function validate(pattern: string, flags?: string): RegexValidationResult {\n try {\n new RegExp(pattern, flags);\n return { valid: true };\n } catch (e) {\n return {\n valid: false,\n error: (e as Error).message,\n };\n }\n}\n"]}
@@ -0,0 +1,41 @@
1
+ type ToolCategory = 'json' | 'csv' | 'pdf' | 'xml' | 'excel' | 'image' | 'markdown' | 'archive' | 'regex' | 'diff' | 'sql' | 'crypto' | 'datetime' | 'text' | 'math' | 'color';
2
+ interface ToolSettings {
3
+ enabled: Record<ToolCategory, boolean>;
4
+ version: number;
5
+ updatedAt: string;
6
+ }
7
+ interface SettingsRepository {
8
+ load(): Promise<ToolSettings>;
9
+ save(settings: ToolSettings): Promise<void>;
10
+ getDefaults(): ToolSettings;
11
+ }
12
+
13
+ declare const ALL_TOOL_CATEGORIES: ToolCategory[];
14
+ declare const TOOL_METADATA: {
15
+ id: ToolCategory;
16
+ name: string;
17
+ description: string;
18
+ }[];
19
+ declare const DEFAULT_SETTINGS: ToolSettings;
20
+
21
+ declare class FilesystemSettingsRepository implements SettingsRepository {
22
+ private readonly filePath;
23
+ constructor(dataDir?: string);
24
+ getDefaults(): ToolSettings;
25
+ load(): Promise<ToolSettings>;
26
+ save(settings: ToolSettings): Promise<void>;
27
+ }
28
+
29
+ declare class SettingsService {
30
+ private cache;
31
+ private cacheTimestamp;
32
+ private readonly repository;
33
+ constructor(repository?: SettingsRepository);
34
+ getSettings(): Promise<ToolSettings>;
35
+ updateSettings(enabled: Partial<Record<ToolCategory, boolean>>): Promise<ToolSettings>;
36
+ isToolEnabled(category: ToolCategory): Promise<boolean>;
37
+ invalidateCache(): void;
38
+ }
39
+ declare const settingsService: SettingsService;
40
+
41
+ export { ALL_TOOL_CATEGORIES, DEFAULT_SETTINGS, FilesystemSettingsRepository, type SettingsRepository, SettingsService, TOOL_METADATA, type ToolCategory, type ToolSettings, settingsService };
@@ -0,0 +1,41 @@
1
+ type ToolCategory = 'json' | 'csv' | 'pdf' | 'xml' | 'excel' | 'image' | 'markdown' | 'archive' | 'regex' | 'diff' | 'sql' | 'crypto' | 'datetime' | 'text' | 'math' | 'color';
2
+ interface ToolSettings {
3
+ enabled: Record<ToolCategory, boolean>;
4
+ version: number;
5
+ updatedAt: string;
6
+ }
7
+ interface SettingsRepository {
8
+ load(): Promise<ToolSettings>;
9
+ save(settings: ToolSettings): Promise<void>;
10
+ getDefaults(): ToolSettings;
11
+ }
12
+
13
+ declare const ALL_TOOL_CATEGORIES: ToolCategory[];
14
+ declare const TOOL_METADATA: {
15
+ id: ToolCategory;
16
+ name: string;
17
+ description: string;
18
+ }[];
19
+ declare const DEFAULT_SETTINGS: ToolSettings;
20
+
21
+ declare class FilesystemSettingsRepository implements SettingsRepository {
22
+ private readonly filePath;
23
+ constructor(dataDir?: string);
24
+ getDefaults(): ToolSettings;
25
+ load(): Promise<ToolSettings>;
26
+ save(settings: ToolSettings): Promise<void>;
27
+ }
28
+
29
+ declare class SettingsService {
30
+ private cache;
31
+ private cacheTimestamp;
32
+ private readonly repository;
33
+ constructor(repository?: SettingsRepository);
34
+ getSettings(): Promise<ToolSettings>;
35
+ updateSettings(enabled: Partial<Record<ToolCategory, boolean>>): Promise<ToolSettings>;
36
+ isToolEnabled(category: ToolCategory): Promise<boolean>;
37
+ invalidateCache(): void;
38
+ }
39
+ declare const settingsService: SettingsService;
40
+
41
+ export { ALL_TOOL_CATEGORIES, DEFAULT_SETTINGS, FilesystemSettingsRepository, type SettingsRepository, SettingsService, TOOL_METADATA, type ToolCategory, type ToolSettings, settingsService };
@@ -0,0 +1,146 @@
1
+ 'use strict';
2
+
3
+ var promises = require('fs/promises');
4
+ var path = require('path');
5
+ var fs = require('fs');
6
+
7
+ // src/settings/defaults.ts
8
+ var ALL_TOOL_CATEGORIES = [
9
+ "json",
10
+ "crypto",
11
+ "sql",
12
+ "regex",
13
+ "diff",
14
+ "csv",
15
+ "datetime",
16
+ "markdown",
17
+ "xml",
18
+ "pdf",
19
+ "excel",
20
+ "image",
21
+ "archive",
22
+ "text",
23
+ "math",
24
+ "color"
25
+ ];
26
+ var TOOL_METADATA = [
27
+ { id: "json", name: "JSON Studio", description: "Format, validate, query, convert, and diff JSON documents" },
28
+ { id: "crypto", name: "Crypto & Encoding", description: "Hash, encode, decode, and work with JWTs" },
29
+ { id: "sql", name: "SQL Studio", description: "Format, parse, and validate SQL queries" },
30
+ { id: "regex", name: "Regex Tester", description: "Test, replace, and extract with regular expressions" },
31
+ { id: "diff", name: "Diff & Patch", description: "Compare texts and apply unified diffs" },
32
+ { id: "csv", name: "CSV Viewer", description: "Parse, filter, convert, and analyze CSV data" },
33
+ { id: "datetime", name: "Date/Time Tools", description: "Parse, format, convert timezones, and analyze cron expressions" },
34
+ { id: "markdown", name: "Markdown Studio", description: "Convert, generate TOC, and analyze Markdown documents" },
35
+ { id: "xml", name: "XML Studio", description: "Parse, format, validate, and convert XML documents" },
36
+ { id: "pdf", name: "PDF Toolkit", description: "Merge, split, extract text, and generate PDFs" },
37
+ { id: "excel", name: "Excel Viewer", description: "Parse, convert, and analyze Excel workbooks" },
38
+ { id: "image", name: "Image Toolkit", description: "Resize, convert, and extract metadata from images" },
39
+ { id: "archive", name: "Archive Manager", description: "Create, extract, and list archive contents" },
40
+ { id: "text", name: "Text Utilities", description: "Case conversion, slugify, word count, similarity, and template interpolation" },
41
+ { id: "math", name: "Math Utilities", description: "Unit conversion, base conversion, statistics, and number formatting" },
42
+ { id: "color", name: "Color Utilities", description: "Color parsing, conversion, contrast checking, palette generation, and blending" }
43
+ ];
44
+ var DEFAULT_SETTINGS = {
45
+ enabled: Object.fromEntries(ALL_TOOL_CATEGORIES.map((c) => [c, true])),
46
+ version: 1,
47
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
48
+ };
49
+ var FilesystemSettingsRepository = class {
50
+ filePath;
51
+ constructor(dataDir) {
52
+ const dir = dataDir ?? path.join(process.cwd(), "data");
53
+ this.filePath = path.join(dir, "settings.json");
54
+ }
55
+ getDefaults() {
56
+ return {
57
+ ...DEFAULT_SETTINGS,
58
+ enabled: { ...DEFAULT_SETTINGS.enabled },
59
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
60
+ };
61
+ }
62
+ async load() {
63
+ try {
64
+ if (!fs.existsSync(this.filePath)) {
65
+ const defaults = this.getDefaults();
66
+ await this.save(defaults);
67
+ return defaults;
68
+ }
69
+ const raw = await promises.readFile(this.filePath, "utf-8");
70
+ const data = JSON.parse(raw);
71
+ const merged = {
72
+ version: data.version ?? DEFAULT_SETTINGS.version,
73
+ updatedAt: data.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
74
+ enabled: { ...DEFAULT_SETTINGS.enabled }
75
+ };
76
+ if (data.enabled) {
77
+ for (const category of ALL_TOOL_CATEGORIES) {
78
+ if (category in data.enabled) {
79
+ merged.enabled[category] = data.enabled[category];
80
+ }
81
+ }
82
+ }
83
+ return merged;
84
+ } catch {
85
+ return this.getDefaults();
86
+ }
87
+ }
88
+ async save(settings) {
89
+ const dir = path.join(this.filePath, "..");
90
+ if (!fs.existsSync(dir)) {
91
+ await promises.mkdir(dir, { recursive: true });
92
+ }
93
+ await promises.writeFile(this.filePath, JSON.stringify(settings, null, 2), "utf-8");
94
+ }
95
+ };
96
+
97
+ // src/settings/service.ts
98
+ var CACHE_TTL_MS = 5e3;
99
+ var SettingsService = class {
100
+ cache = null;
101
+ cacheTimestamp = 0;
102
+ repository;
103
+ constructor(repository) {
104
+ this.repository = repository ?? new FilesystemSettingsRepository();
105
+ }
106
+ async getSettings() {
107
+ const now = Date.now();
108
+ if (this.cache && now - this.cacheTimestamp < CACHE_TTL_MS) {
109
+ return this.cache;
110
+ }
111
+ const settings = await this.repository.load();
112
+ this.cache = settings;
113
+ this.cacheTimestamp = now;
114
+ return settings;
115
+ }
116
+ async updateSettings(enabled) {
117
+ const current = await this.repository.load();
118
+ const updated = {
119
+ ...current,
120
+ enabled: { ...current.enabled, ...enabled },
121
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
122
+ };
123
+ await this.repository.save(updated);
124
+ this.cache = updated;
125
+ this.cacheTimestamp = Date.now();
126
+ return updated;
127
+ }
128
+ async isToolEnabled(category) {
129
+ const settings = await this.getSettings();
130
+ return settings.enabled[category] ?? true;
131
+ }
132
+ invalidateCache() {
133
+ this.cache = null;
134
+ this.cacheTimestamp = 0;
135
+ }
136
+ };
137
+ var settingsService = new SettingsService();
138
+
139
+ exports.ALL_TOOL_CATEGORIES = ALL_TOOL_CATEGORIES;
140
+ exports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;
141
+ exports.FilesystemSettingsRepository = FilesystemSettingsRepository;
142
+ exports.SettingsService = SettingsService;
143
+ exports.TOOL_METADATA = TOOL_METADATA;
144
+ exports.settingsService = settingsService;
145
+ //# sourceMappingURL=index.js.map
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/settings/defaults.ts","../../src/settings/filesystem-repository.ts","../../src/settings/service.ts"],"names":["join","existsSync","readFile","mkdir","writeFile"],"mappings":"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","file":"index.js","sourcesContent":["import type { ToolCategory, ToolSettings } from './types';\n\nexport const ALL_TOOL_CATEGORIES: ToolCategory[] = [\n 'json',\n 'crypto',\n 'sql',\n 'regex',\n 'diff',\n 'csv',\n 'datetime',\n 'markdown',\n 'xml',\n 'pdf',\n 'excel',\n 'image',\n 'archive',\n 'text',\n 'math',\n 'color',\n];\n\nexport const TOOL_METADATA: { id: ToolCategory; name: string; description: string }[] = [\n { id: 'json', name: 'JSON Studio', description: 'Format, validate, query, convert, and diff JSON documents' },\n { id: 'crypto', name: 'Crypto & Encoding', description: 'Hash, encode, decode, and work with JWTs' },\n { id: 'sql', name: 'SQL Studio', description: 'Format, parse, and validate SQL queries' },\n { id: 'regex', name: 'Regex Tester', description: 'Test, replace, and extract with regular expressions' },\n { id: 'diff', name: 'Diff & Patch', description: 'Compare texts and apply unified diffs' },\n { id: 'csv', name: 'CSV Viewer', description: 'Parse, filter, convert, and analyze CSV data' },\n { id: 'datetime', name: 'Date/Time Tools', description: 'Parse, format, convert timezones, and analyze cron expressions' },\n { id: 'markdown', name: 'Markdown Studio', description: 'Convert, generate TOC, and analyze Markdown documents' },\n { id: 'xml', name: 'XML Studio', description: 'Parse, format, validate, and convert XML documents' },\n { id: 'pdf', name: 'PDF Toolkit', description: 'Merge, split, extract text, and generate PDFs' },\n { id: 'excel', name: 'Excel Viewer', description: 'Parse, convert, and analyze Excel workbooks' },\n { id: 'image', name: 'Image Toolkit', description: 'Resize, convert, and extract metadata from images' },\n { id: 'archive', name: 'Archive Manager', description: 'Create, extract, and list archive contents' },\n { id: 'text', name: 'Text Utilities', description: 'Case conversion, slugify, word count, similarity, and template interpolation' },\n { id: 'math', name: 'Math Utilities', description: 'Unit conversion, base conversion, statistics, and number formatting' },\n { id: 'color', name: 'Color Utilities', description: 'Color parsing, conversion, contrast checking, palette generation, and blending' },\n];\n\nexport const DEFAULT_SETTINGS: ToolSettings = {\n enabled: Object.fromEntries(ALL_TOOL_CATEGORIES.map((c) => [c, true])) as Record<ToolCategory, boolean>,\n version: 1,\n updatedAt: new Date().toISOString(),\n};\n","import { readFile, writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport type { ToolSettings, SettingsRepository, ToolCategory } from './types';\nimport { DEFAULT_SETTINGS, ALL_TOOL_CATEGORIES } from './defaults';\n\nexport class FilesystemSettingsRepository implements SettingsRepository {\n private readonly filePath: string;\n\n constructor(dataDir?: string) {\n const dir = dataDir ?? join(process.cwd(), 'data');\n this.filePath = join(dir, 'settings.json');\n }\n\n getDefaults(): ToolSettings {\n return {\n ...DEFAULT_SETTINGS,\n enabled: { ...DEFAULT_SETTINGS.enabled },\n updatedAt: new Date().toISOString(),\n };\n }\n\n async load(): Promise<ToolSettings> {\n try {\n if (!existsSync(this.filePath)) {\n const defaults = this.getDefaults();\n await this.save(defaults);\n return defaults;\n }\n\n const raw = await readFile(this.filePath, 'utf-8');\n const data = JSON.parse(raw) as Partial<ToolSettings>;\n\n // Merge with defaults to handle newly added tools\n const merged: ToolSettings = {\n version: data.version ?? DEFAULT_SETTINGS.version,\n updatedAt: data.updatedAt ?? new Date().toISOString(),\n enabled: { ...DEFAULT_SETTINGS.enabled },\n };\n\n if (data.enabled) {\n for (const category of ALL_TOOL_CATEGORIES) {\n if (category in data.enabled) {\n merged.enabled[category] = data.enabled[category as ToolCategory]!;\n }\n }\n }\n\n return merged;\n } catch {\n return this.getDefaults();\n }\n }\n\n async save(settings: ToolSettings): Promise<void> {\n const dir = join(this.filePath, '..');\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n await writeFile(this.filePath, JSON.stringify(settings, null, 2), 'utf-8');\n }\n}\n","import type { ToolCategory, ToolSettings, SettingsRepository } from './types';\nimport { FilesystemSettingsRepository } from './filesystem-repository';\n\nconst CACHE_TTL_MS = 5_000;\n\nexport class SettingsService {\n private cache: ToolSettings | null = null;\n private cacheTimestamp = 0;\n private readonly repository: SettingsRepository;\n\n constructor(repository?: SettingsRepository) {\n this.repository = repository ?? new FilesystemSettingsRepository();\n }\n\n async getSettings(): Promise<ToolSettings> {\n const now = Date.now();\n if (this.cache && now - this.cacheTimestamp < CACHE_TTL_MS) {\n return this.cache;\n }\n\n const settings = await this.repository.load();\n this.cache = settings;\n this.cacheTimestamp = now;\n return settings;\n }\n\n async updateSettings(enabled: Partial<Record<ToolCategory, boolean>>): Promise<ToolSettings> {\n const current = await this.repository.load();\n const updated: ToolSettings = {\n ...current,\n enabled: { ...current.enabled, ...enabled },\n updatedAt: new Date().toISOString(),\n };\n await this.repository.save(updated);\n this.cache = updated;\n this.cacheTimestamp = Date.now();\n return updated;\n }\n\n async isToolEnabled(category: ToolCategory): Promise<boolean> {\n const settings = await this.getSettings();\n return settings.enabled[category] ?? true;\n }\n\n invalidateCache(): void {\n this.cache = null;\n this.cacheTimestamp = 0;\n }\n}\n\nexport const settingsService = new SettingsService();\n"]}
@@ -0,0 +1,139 @@
1
+ import { readFile, mkdir, writeFile } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { existsSync } from 'fs';
4
+
5
+ // src/settings/defaults.ts
6
+ var ALL_TOOL_CATEGORIES = [
7
+ "json",
8
+ "crypto",
9
+ "sql",
10
+ "regex",
11
+ "diff",
12
+ "csv",
13
+ "datetime",
14
+ "markdown",
15
+ "xml",
16
+ "pdf",
17
+ "excel",
18
+ "image",
19
+ "archive",
20
+ "text",
21
+ "math",
22
+ "color"
23
+ ];
24
+ var TOOL_METADATA = [
25
+ { id: "json", name: "JSON Studio", description: "Format, validate, query, convert, and diff JSON documents" },
26
+ { id: "crypto", name: "Crypto & Encoding", description: "Hash, encode, decode, and work with JWTs" },
27
+ { id: "sql", name: "SQL Studio", description: "Format, parse, and validate SQL queries" },
28
+ { id: "regex", name: "Regex Tester", description: "Test, replace, and extract with regular expressions" },
29
+ { id: "diff", name: "Diff & Patch", description: "Compare texts and apply unified diffs" },
30
+ { id: "csv", name: "CSV Viewer", description: "Parse, filter, convert, and analyze CSV data" },
31
+ { id: "datetime", name: "Date/Time Tools", description: "Parse, format, convert timezones, and analyze cron expressions" },
32
+ { id: "markdown", name: "Markdown Studio", description: "Convert, generate TOC, and analyze Markdown documents" },
33
+ { id: "xml", name: "XML Studio", description: "Parse, format, validate, and convert XML documents" },
34
+ { id: "pdf", name: "PDF Toolkit", description: "Merge, split, extract text, and generate PDFs" },
35
+ { id: "excel", name: "Excel Viewer", description: "Parse, convert, and analyze Excel workbooks" },
36
+ { id: "image", name: "Image Toolkit", description: "Resize, convert, and extract metadata from images" },
37
+ { id: "archive", name: "Archive Manager", description: "Create, extract, and list archive contents" },
38
+ { id: "text", name: "Text Utilities", description: "Case conversion, slugify, word count, similarity, and template interpolation" },
39
+ { id: "math", name: "Math Utilities", description: "Unit conversion, base conversion, statistics, and number formatting" },
40
+ { id: "color", name: "Color Utilities", description: "Color parsing, conversion, contrast checking, palette generation, and blending" }
41
+ ];
42
+ var DEFAULT_SETTINGS = {
43
+ enabled: Object.fromEntries(ALL_TOOL_CATEGORIES.map((c) => [c, true])),
44
+ version: 1,
45
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
46
+ };
47
+ var FilesystemSettingsRepository = class {
48
+ filePath;
49
+ constructor(dataDir) {
50
+ const dir = dataDir ?? join(process.cwd(), "data");
51
+ this.filePath = join(dir, "settings.json");
52
+ }
53
+ getDefaults() {
54
+ return {
55
+ ...DEFAULT_SETTINGS,
56
+ enabled: { ...DEFAULT_SETTINGS.enabled },
57
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
58
+ };
59
+ }
60
+ async load() {
61
+ try {
62
+ if (!existsSync(this.filePath)) {
63
+ const defaults = this.getDefaults();
64
+ await this.save(defaults);
65
+ return defaults;
66
+ }
67
+ const raw = await readFile(this.filePath, "utf-8");
68
+ const data = JSON.parse(raw);
69
+ const merged = {
70
+ version: data.version ?? DEFAULT_SETTINGS.version,
71
+ updatedAt: data.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
72
+ enabled: { ...DEFAULT_SETTINGS.enabled }
73
+ };
74
+ if (data.enabled) {
75
+ for (const category of ALL_TOOL_CATEGORIES) {
76
+ if (category in data.enabled) {
77
+ merged.enabled[category] = data.enabled[category];
78
+ }
79
+ }
80
+ }
81
+ return merged;
82
+ } catch {
83
+ return this.getDefaults();
84
+ }
85
+ }
86
+ async save(settings) {
87
+ const dir = join(this.filePath, "..");
88
+ if (!existsSync(dir)) {
89
+ await mkdir(dir, { recursive: true });
90
+ }
91
+ await writeFile(this.filePath, JSON.stringify(settings, null, 2), "utf-8");
92
+ }
93
+ };
94
+
95
+ // src/settings/service.ts
96
+ var CACHE_TTL_MS = 5e3;
97
+ var SettingsService = class {
98
+ cache = null;
99
+ cacheTimestamp = 0;
100
+ repository;
101
+ constructor(repository) {
102
+ this.repository = repository ?? new FilesystemSettingsRepository();
103
+ }
104
+ async getSettings() {
105
+ const now = Date.now();
106
+ if (this.cache && now - this.cacheTimestamp < CACHE_TTL_MS) {
107
+ return this.cache;
108
+ }
109
+ const settings = await this.repository.load();
110
+ this.cache = settings;
111
+ this.cacheTimestamp = now;
112
+ return settings;
113
+ }
114
+ async updateSettings(enabled) {
115
+ const current = await this.repository.load();
116
+ const updated = {
117
+ ...current,
118
+ enabled: { ...current.enabled, ...enabled },
119
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
120
+ };
121
+ await this.repository.save(updated);
122
+ this.cache = updated;
123
+ this.cacheTimestamp = Date.now();
124
+ return updated;
125
+ }
126
+ async isToolEnabled(category) {
127
+ const settings = await this.getSettings();
128
+ return settings.enabled[category] ?? true;
129
+ }
130
+ invalidateCache() {
131
+ this.cache = null;
132
+ this.cacheTimestamp = 0;
133
+ }
134
+ };
135
+ var settingsService = new SettingsService();
136
+
137
+ export { ALL_TOOL_CATEGORIES, DEFAULT_SETTINGS, FilesystemSettingsRepository, SettingsService, TOOL_METADATA, settingsService };
138
+ //# sourceMappingURL=index.mjs.map
139
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/settings/defaults.ts","../../src/settings/filesystem-repository.ts","../../src/settings/service.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ToolCategory, ToolSettings } from './types';\n\nexport const ALL_TOOL_CATEGORIES: ToolCategory[] = [\n 'json',\n 'crypto',\n 'sql',\n 'regex',\n 'diff',\n 'csv',\n 'datetime',\n 'markdown',\n 'xml',\n 'pdf',\n 'excel',\n 'image',\n 'archive',\n 'text',\n 'math',\n 'color',\n];\n\nexport const TOOL_METADATA: { id: ToolCategory; name: string; description: string }[] = [\n { id: 'json', name: 'JSON Studio', description: 'Format, validate, query, convert, and diff JSON documents' },\n { id: 'crypto', name: 'Crypto & Encoding', description: 'Hash, encode, decode, and work with JWTs' },\n { id: 'sql', name: 'SQL Studio', description: 'Format, parse, and validate SQL queries' },\n { id: 'regex', name: 'Regex Tester', description: 'Test, replace, and extract with regular expressions' },\n { id: 'diff', name: 'Diff & Patch', description: 'Compare texts and apply unified diffs' },\n { id: 'csv', name: 'CSV Viewer', description: 'Parse, filter, convert, and analyze CSV data' },\n { id: 'datetime', name: 'Date/Time Tools', description: 'Parse, format, convert timezones, and analyze cron expressions' },\n { id: 'markdown', name: 'Markdown Studio', description: 'Convert, generate TOC, and analyze Markdown documents' },\n { id: 'xml', name: 'XML Studio', description: 'Parse, format, validate, and convert XML documents' },\n { id: 'pdf', name: 'PDF Toolkit', description: 'Merge, split, extract text, and generate PDFs' },\n { id: 'excel', name: 'Excel Viewer', description: 'Parse, convert, and analyze Excel workbooks' },\n { id: 'image', name: 'Image Toolkit', description: 'Resize, convert, and extract metadata from images' },\n { id: 'archive', name: 'Archive Manager', description: 'Create, extract, and list archive contents' },\n { id: 'text', name: 'Text Utilities', description: 'Case conversion, slugify, word count, similarity, and template interpolation' },\n { id: 'math', name: 'Math Utilities', description: 'Unit conversion, base conversion, statistics, and number formatting' },\n { id: 'color', name: 'Color Utilities', description: 'Color parsing, conversion, contrast checking, palette generation, and blending' },\n];\n\nexport const DEFAULT_SETTINGS: ToolSettings = {\n enabled: Object.fromEntries(ALL_TOOL_CATEGORIES.map((c) => [c, true])) as Record<ToolCategory, boolean>,\n version: 1,\n updatedAt: new Date().toISOString(),\n};\n","import { readFile, writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport type { ToolSettings, SettingsRepository, ToolCategory } from './types';\nimport { DEFAULT_SETTINGS, ALL_TOOL_CATEGORIES } from './defaults';\n\nexport class FilesystemSettingsRepository implements SettingsRepository {\n private readonly filePath: string;\n\n constructor(dataDir?: string) {\n const dir = dataDir ?? join(process.cwd(), 'data');\n this.filePath = join(dir, 'settings.json');\n }\n\n getDefaults(): ToolSettings {\n return {\n ...DEFAULT_SETTINGS,\n enabled: { ...DEFAULT_SETTINGS.enabled },\n updatedAt: new Date().toISOString(),\n };\n }\n\n async load(): Promise<ToolSettings> {\n try {\n if (!existsSync(this.filePath)) {\n const defaults = this.getDefaults();\n await this.save(defaults);\n return defaults;\n }\n\n const raw = await readFile(this.filePath, 'utf-8');\n const data = JSON.parse(raw) as Partial<ToolSettings>;\n\n // Merge with defaults to handle newly added tools\n const merged: ToolSettings = {\n version: data.version ?? DEFAULT_SETTINGS.version,\n updatedAt: data.updatedAt ?? new Date().toISOString(),\n enabled: { ...DEFAULT_SETTINGS.enabled },\n };\n\n if (data.enabled) {\n for (const category of ALL_TOOL_CATEGORIES) {\n if (category in data.enabled) {\n merged.enabled[category] = data.enabled[category as ToolCategory]!;\n }\n }\n }\n\n return merged;\n } catch {\n return this.getDefaults();\n }\n }\n\n async save(settings: ToolSettings): Promise<void> {\n const dir = join(this.filePath, '..');\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n await writeFile(this.filePath, JSON.stringify(settings, null, 2), 'utf-8');\n }\n}\n","import type { ToolCategory, ToolSettings, SettingsRepository } from './types';\nimport { FilesystemSettingsRepository } from './filesystem-repository';\n\nconst CACHE_TTL_MS = 5_000;\n\nexport class SettingsService {\n private cache: ToolSettings | null = null;\n private cacheTimestamp = 0;\n private readonly repository: SettingsRepository;\n\n constructor(repository?: SettingsRepository) {\n this.repository = repository ?? new FilesystemSettingsRepository();\n }\n\n async getSettings(): Promise<ToolSettings> {\n const now = Date.now();\n if (this.cache && now - this.cacheTimestamp < CACHE_TTL_MS) {\n return this.cache;\n }\n\n const settings = await this.repository.load();\n this.cache = settings;\n this.cacheTimestamp = now;\n return settings;\n }\n\n async updateSettings(enabled: Partial<Record<ToolCategory, boolean>>): Promise<ToolSettings> {\n const current = await this.repository.load();\n const updated: ToolSettings = {\n ...current,\n enabled: { ...current.enabled, ...enabled },\n updatedAt: new Date().toISOString(),\n };\n await this.repository.save(updated);\n this.cache = updated;\n this.cacheTimestamp = Date.now();\n return updated;\n }\n\n async isToolEnabled(category: ToolCategory): Promise<boolean> {\n const settings = await this.getSettings();\n return settings.enabled[category] ?? true;\n }\n\n invalidateCache(): void {\n this.cache = null;\n this.cacheTimestamp = 0;\n }\n}\n\nexport const settingsService = new SettingsService();\n"]}
@@ -0,0 +1 @@
1
+ export { S as SqlConvertOptions, a as SqlDialect, b as SqlFormatOptions, c as SqlParseResult, d as SqlStats, e as SqlValidationResult, f as convert, g as format, h as getStats, m as minify, p as parse, v as validate } from '../index-pPy_XDQU.mjs';
@@ -0,0 +1 @@
1
+ export { S as SqlConvertOptions, a as SqlDialect, b as SqlFormatOptions, c as SqlParseResult, d as SqlStats, e as SqlValidationResult, f as convert, g as format, h as getStats, m as minify, p as parse, v as validate } from '../index-pPy_XDQU.js';