atoo-studio 0.0.3 → 0.0.4

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 (63) hide show
  1. package/dist/src/handlers/projects.js +61 -2
  2. package/dist/src/services/file-search.d.ts +59 -0
  3. package/dist/src/services/file-search.js +269 -0
  4. package/frontend/dist/assets/{_basePickBy-BP5pqc-z.js → _basePickBy-DVcFyvUy.js} +1 -1
  5. package/frontend/dist/assets/{_baseUniq-C8JXpw9D.js → _baseUniq-BlaoUomR.js} +1 -1
  6. package/frontend/dist/assets/architecture-PBZL5I3N-BExHjBcm.js +1 -0
  7. package/frontend/dist/assets/{architectureDiagram-2XIMDMQ5-C2jiEUuG.js → architectureDiagram-2XIMDMQ5-BNx6-oUQ.js} +1 -1
  8. package/frontend/dist/assets/{blockDiagram-WCTKOSBZ-BwHBv5v8.js → blockDiagram-WCTKOSBZ-B4T4UcRa.js} +1 -1
  9. package/frontend/dist/assets/{chunk-7E7YKBS2-D0o-krG6.js → chunk-7E7YKBS2-NeXbzmbu.js} +1 -1
  10. package/frontend/dist/assets/{chunk-C72U2L5F-BJHsZQ3s.js → chunk-C72U2L5F-B8CSWPSJ.js} +1 -1
  11. package/frontend/dist/assets/{chunk-EGIJ26TM-IvGKaOpK.js → chunk-EGIJ26TM-CIih76L7.js} +1 -1
  12. package/frontend/dist/assets/{chunk-L3YUKLVL-kj7gDLqb.js → chunk-L3YUKLVL-ki-YiEHS.js} +1 -1
  13. package/frontend/dist/assets/{chunk-NQ4KR5QH-BPLxW_0V.js → chunk-NQ4KR5QH-CotGwnjL.js} +1 -1
  14. package/frontend/dist/assets/{chunk-OZEHJAEY-BvePHeeD.js → chunk-OZEHJAEY-BpNr8Rjz.js} +1 -1
  15. package/frontend/dist/assets/{chunk-R5LLSJPH-N_kzZPYS.js → chunk-R5LLSJPH-BijepqoK.js} +1 -1
  16. package/frontend/dist/assets/{chunk-WL4C6EOR-CzQbiss9.js → chunk-WL4C6EOR-pSm7LSvh.js} +1 -1
  17. package/frontend/dist/assets/{chunk-XIRO2GV7-Z9gqatVF.js → chunk-XIRO2GV7-DwBvqLWa.js} +1 -1
  18. package/frontend/dist/assets/{chunk-XZSTWKYB-BddvqxDB.js → chunk-XZSTWKYB-CBqjoIm6.js} +1 -1
  19. package/frontend/dist/assets/{classDiagram-VBA2DB6C-BUysImLJ.js → classDiagram-VBA2DB6C-BFFlfFWc.js} +1 -1
  20. package/frontend/dist/assets/{classDiagram-v2-RAHNMMFH-os3tUcXP.js → classDiagram-v2-RAHNMMFH-Zm4JHiZG.js} +1 -1
  21. package/frontend/dist/assets/clone-DTaWrNz3.js +1 -0
  22. package/frontend/dist/assets/{dagre-oxy3nsFM.js → dagre-DwFVI7Jd.js} +1 -1
  23. package/frontend/dist/assets/{dagre-KLK3FWXG-BGhxKTrS.js → dagre-KLK3FWXG-HvRFWYud.js} +1 -1
  24. package/frontend/dist/assets/{diagram-E7M64L7V-DKevl205.js → diagram-E7M64L7V-CQyHprzu.js} +1 -1
  25. package/frontend/dist/assets/{diagram-IFDJBPK2-KQaESDDI.js → diagram-IFDJBPK2-CqkOPpOt.js} +1 -1
  26. package/frontend/dist/assets/{diagram-P4PSJMXO-BrpIvkQv.js → diagram-P4PSJMXO-OpXCvbKg.js} +1 -1
  27. package/frontend/dist/assets/{erDiagram-INFDFZHY-B_SO_zDO.js → erDiagram-INFDFZHY-eQioynMC.js} +1 -1
  28. package/frontend/dist/assets/{flowDiagram-PKNHOUZH-vCrwouWP.js → flowDiagram-PKNHOUZH-hx7shOit.js} +1 -1
  29. package/frontend/dist/assets/gitGraph-HDMCJU4V-CcSU6vzN.js +1 -0
  30. package/frontend/dist/assets/{gitGraphDiagram-K3NZZRJ6-BjsXnLlp.js → gitGraphDiagram-K3NZZRJ6-BUC-llGK.js} +1 -1
  31. package/frontend/dist/assets/{graphlib-CXuPQLPN.js → graphlib-ChWzv2kY.js} +1 -1
  32. package/frontend/dist/assets/index-B71Ng0qa.css +1 -0
  33. package/frontend/dist/assets/index-B8EBg0hm.js +157 -0
  34. package/frontend/dist/assets/info-3K5VOQVL-B3MsAb_d.js +1 -0
  35. package/frontend/dist/assets/infoDiagram-LFFYTUFH-BMFFvbZ3.js +2 -0
  36. package/frontend/dist/assets/{ishikawaDiagram-PHBUUO56-DyeLXKpu.js → ishikawaDiagram-PHBUUO56-B80zFWUg.js} +1 -1
  37. package/frontend/dist/assets/{kanban-definition-K7BYSVSG-BktdlC34.js → kanban-definition-K7BYSVSG-wvVdN2XJ.js} +1 -1
  38. package/frontend/dist/assets/{mermaid-parser.core-CLD6OoQN.js → mermaid-parser.core-fDWeedvo.js} +2 -2
  39. package/frontend/dist/assets/{mindmap-definition-YRQLILUH-WGZwfAjA.js → mindmap-definition-YRQLILUH-COI6teLb.js} +1 -1
  40. package/frontend/dist/assets/packet-RMMSAZCW-AtnYULi6.js +1 -0
  41. package/frontend/dist/assets/pie-UPGHQEXC-Cm4Nnlh1.js +1 -0
  42. package/frontend/dist/assets/{pieDiagram-SKSYHLDU-8bBf71Ue.js → pieDiagram-SKSYHLDU-bjwLIsJh.js} +1 -1
  43. package/frontend/dist/assets/radar-KQ55EAFF-D5ioamgd.js +1 -0
  44. package/frontend/dist/assets/{requirementDiagram-Z7DCOOCP-EQHcxLB0.js → requirementDiagram-Z7DCOOCP-3UYkNoFC.js} +1 -1
  45. package/frontend/dist/assets/{sequenceDiagram-2WXFIKYE-BuXA25IP.js → sequenceDiagram-2WXFIKYE-DCXcXQoE.js} +1 -1
  46. package/frontend/dist/assets/{stateDiagram-RAJIS63D-ddkAWKhI.js → stateDiagram-RAJIS63D-DnpcJhHB.js} +1 -1
  47. package/frontend/dist/assets/{stateDiagram-v2-FVOUBMTO-BLVAwlfX.js → stateDiagram-v2-FVOUBMTO-Db77rn81.js} +1 -1
  48. package/frontend/dist/assets/treemap-KZPCXAKY-BJS2z0TG.js +1 -0
  49. package/frontend/dist/assets/{vennDiagram-LZ73GAT5-C6g8XU-E.js → vennDiagram-LZ73GAT5-DpZs8KCD.js} +1 -1
  50. package/frontend/dist/assets/{xychartDiagram-JWTSCODW-BEz425ew.js → xychartDiagram-JWTSCODW-CFVB_zoy.js} +1 -1
  51. package/frontend/dist/index.html +2 -2
  52. package/package.json +1 -1
  53. package/frontend/dist/assets/architecture-PBZL5I3N-Cm0ChR6S.js +0 -1
  54. package/frontend/dist/assets/clone-CjYMfESW.js +0 -1
  55. package/frontend/dist/assets/gitGraph-HDMCJU4V-CAmchn0S.js +0 -1
  56. package/frontend/dist/assets/index-CJrelq5A.css +0 -1
  57. package/frontend/dist/assets/index-CvDkr5VR.js +0 -157
  58. package/frontend/dist/assets/info-3K5VOQVL-w0fuf3Vz.js +0 -1
  59. package/frontend/dist/assets/infoDiagram-LFFYTUFH-CyQQoy2i.js +0 -2
  60. package/frontend/dist/assets/packet-RMMSAZCW-BziBZLJ6.js +0 -1
  61. package/frontend/dist/assets/pie-UPGHQEXC-vv-0ECOa.js +0 -1
  62. package/frontend/dist/assets/radar-KQ55EAFF-fJ4cC2Bt.js +0 -1
  63. package/frontend/dist/assets/treemap-KZPCXAKY-FonqU4zC.js +0 -1
@@ -9,6 +9,7 @@ import { getRemoteFileTree, readRemoteFileContent } from '../services/remote-fs-
9
9
  import * as gitOps from '../services/git-ops.js';
10
10
  import * as remoteGitOps from '../services/remote-git-ops.js';
11
11
  import { sshManager } from '../services/ssh-manager.js';
12
+ import { searchFiles, replaceInFiles, replaceInSingleFile } from '../services/file-search.js';
12
13
  import { watchProject, unwatchProject, reconcileWorktrees } from '../services/project-watcher.js';
13
14
  export const projectsRouter = Router();
14
15
  // Helper: get project context (local or remote)
@@ -67,7 +68,10 @@ projectsRouter.get('/api/projects/:id/files', async (req, res) => {
67
68
  if (!ctx)
68
69
  return res.status(404).json({ error: 'Project not found' });
69
70
  try {
70
- const rootPath = req.query.rootPath || ctx.cwd;
71
+ const requestedRootPath = req.query.rootPath;
72
+ const rootPath = requestedRootPath
73
+ ? (path.isAbsolute(requestedRootPath) ? requestedRootPath : path.join(ctx.cwd, requestedRootPath))
74
+ : ctx.cwd;
71
75
  const showHidden = req.query.showHidden === 'true';
72
76
  const maxDepth = req.query.maxDepth != null ? parseInt(req.query.maxDepth, 10) : undefined;
73
77
  if (ctx.connectionId) {
@@ -78,7 +82,7 @@ projectsRouter.get('/api/projects/:id/files', async (req, res) => {
78
82
  const tree = await getFileTree(rootPath, 0, showHidden, maxDepth);
79
83
  res.json(tree);
80
84
  // Start watching when project root is first accessed (lazy — avoids watching all projects on startup)
81
- if (!req.query.rootPath && !ctx.connectionId) {
85
+ if (!requestedRootPath && !ctx.connectionId) {
82
86
  setImmediate(() => watchProject(req.params.id, ctx.cwd));
83
87
  }
84
88
  }
@@ -230,6 +234,61 @@ projectsRouter.post('/api/files/raw/search', (req, res) => {
230
234
  res.status(500).json({ error: err.message });
231
235
  }
232
236
  });
237
+ // Search in project files (content search)
238
+ projectsRouter.post('/api/projects/:id/search', async (req, res) => {
239
+ const ctx = getProjectContext(req.params.id);
240
+ if (!ctx)
241
+ return res.status(404).json({ error: 'Project not found' });
242
+ if (!req.body.query)
243
+ return res.status(400).json({ error: 'query is required' });
244
+ try {
245
+ const result = await searchFiles(ctx.cwd, { ...req.body, showHidden: req.body.showHidden });
246
+ res.json(result);
247
+ }
248
+ catch (err) {
249
+ if (err instanceof SyntaxError || err.message?.includes('Invalid regular expression')) {
250
+ return res.status(400).json({ error: `Invalid regex: ${err.message}` });
251
+ }
252
+ res.status(500).json({ error: err.message });
253
+ }
254
+ });
255
+ // Replace in project files
256
+ projectsRouter.post('/api/projects/:id/replace-all', async (req, res) => {
257
+ const ctx = getProjectContext(req.params.id);
258
+ if (!ctx)
259
+ return res.status(404).json({ error: 'Project not found' });
260
+ if (!req.body.query || req.body.replacement == null)
261
+ return res.status(400).json({ error: 'query and replacement are required' });
262
+ try {
263
+ const result = await replaceInFiles(ctx.cwd, { ...req.body, showHidden: req.body.showHidden });
264
+ res.json(result);
265
+ }
266
+ catch (err) {
267
+ if (err instanceof SyntaxError || err.message?.includes('Invalid regular expression')) {
268
+ return res.status(400).json({ error: `Invalid regex: ${err.message}` });
269
+ }
270
+ res.status(500).json({ error: err.message });
271
+ }
272
+ });
273
+ // Replace in a single file (optionally specific lines)
274
+ projectsRouter.post('/api/projects/:id/replace-in-file', async (req, res) => {
275
+ const ctx = getProjectContext(req.params.id);
276
+ if (!ctx)
277
+ return res.status(404).json({ error: 'Project not found' });
278
+ const { file, query, replacement, lines, ...opts } = req.body;
279
+ if (!file || !query || replacement == null)
280
+ return res.status(400).json({ error: 'file, query and replacement are required' });
281
+ try {
282
+ const result = await replaceInSingleFile(ctx.cwd, file, { query, replacement, lines, ...opts });
283
+ res.json(result);
284
+ }
285
+ catch (err) {
286
+ if (err.message?.includes('Invalid regular expression')) {
287
+ return res.status(400).json({ error: `Invalid regex: ${err.message}` });
288
+ }
289
+ res.status(500).json({ error: err.message });
290
+ }
291
+ });
233
292
  projectsRouter.put('/api/files', async (req, res) => {
234
293
  const { path: filePath, content, ssh_connection_id } = req.body;
235
294
  if (!filePath || typeof content !== 'string') {
@@ -0,0 +1,59 @@
1
+ export interface SearchMatch {
2
+ line: number;
3
+ column: number;
4
+ length: number;
5
+ lineContent: string;
6
+ }
7
+ export interface SearchFileResult {
8
+ file: string;
9
+ matches: SearchMatch[];
10
+ filenameMatch?: boolean;
11
+ }
12
+ export interface SearchRequest {
13
+ query: string;
14
+ isRegex?: boolean;
15
+ matchCase?: boolean;
16
+ matchWholeWord?: boolean;
17
+ includeFilenames?: boolean;
18
+ includeFilter?: string;
19
+ excludeFilter?: string;
20
+ includeFilterIsRegex?: boolean;
21
+ excludeFilterIsRegex?: boolean;
22
+ openFilesOnly?: string[];
23
+ showHidden?: boolean;
24
+ maxResults?: number;
25
+ }
26
+ export interface SearchResponse {
27
+ results: SearchFileResult[];
28
+ truncated: boolean;
29
+ totalFiles: number;
30
+ totalMatches: number;
31
+ }
32
+ export interface ReplaceRequest extends SearchRequest {
33
+ replacement: string;
34
+ preserveCase?: boolean;
35
+ renameFiles?: boolean;
36
+ }
37
+ export interface ReplaceResponse {
38
+ filesModified: number;
39
+ totalReplacements: number;
40
+ filesRenamed: number;
41
+ errors: Array<{
42
+ file: string;
43
+ error: string;
44
+ }>;
45
+ }
46
+ export declare function searchFiles(rootPath: string, req: SearchRequest): Promise<SearchResponse>;
47
+ export declare function replaceInFiles(rootPath: string, req: ReplaceRequest): Promise<ReplaceResponse>;
48
+ export declare function replaceInSingleFile(rootPath: string, relFile: string, req: {
49
+ query: string;
50
+ replacement: string;
51
+ isRegex?: boolean;
52
+ matchCase?: boolean;
53
+ matchWholeWord?: boolean;
54
+ preserveCase?: boolean;
55
+ lines?: number[];
56
+ }): Promise<{
57
+ replacements: number;
58
+ error?: string;
59
+ }>;
@@ -0,0 +1,269 @@
1
+ import fsp from 'fs/promises';
2
+ import path from 'path';
3
+ import { isBinaryFile } from './fs-browser.js';
4
+ const SKIP_NAMES = new Set(['.git', '.atoo-studio', 'node_modules', '.next', '.nuxt', 'dist', 'build', '__pycache__', '.venv', 'venv', '.cache', '.parcel-cache', 'coverage', '.svn', '.hg']);
5
+ const MAX_FILE_SIZE = 2 * 1024 * 1024; // 2MB
6
+ function buildSearchRegex(query, opts) {
7
+ let pattern = opts.isRegex ? query : query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
8
+ if (opts.matchWholeWord)
9
+ pattern = `\\b${pattern}\\b`;
10
+ const flags = opts.matchCase ? 'g' : 'gi';
11
+ return new RegExp(pattern, flags);
12
+ }
13
+ function globToRegex(glob) {
14
+ // Simple glob-to-regex: * → [^/]*, ** → .*, ? → .
15
+ return glob
16
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
17
+ .replace(/\*\*/g, '{{DOUBLESTAR}}')
18
+ .replace(/\*/g, '[^/]*')
19
+ .replace(/\?/g, '.')
20
+ .replace(/\{\{DOUBLESTAR\}\}/g, '.*');
21
+ }
22
+ function buildFilterRegex(filter, isRegex) {
23
+ if (!filter.trim())
24
+ return null;
25
+ if (isRegex) {
26
+ return new RegExp(filter, 'i');
27
+ }
28
+ // Comma-separated globs
29
+ const parts = filter.split(',').map(s => s.trim()).filter(Boolean);
30
+ if (parts.length === 0)
31
+ return null;
32
+ const regexParts = parts.map(globToRegex);
33
+ return new RegExp(`^(${regexParts.join('|')})$`, 'i');
34
+ }
35
+ function matchesFilter(relPath, filter) {
36
+ const fileName = path.basename(relPath);
37
+ // Match against both the full relative path and just the filename
38
+ return filter.test(relPath) || filter.test(fileName);
39
+ }
40
+ function preserveCaseReplace(match, replacement) {
41
+ if (match === match.toUpperCase())
42
+ return replacement.toUpperCase();
43
+ if (match === match.toLowerCase())
44
+ return replacement.toLowerCase();
45
+ if (match[0] === match[0].toUpperCase() && match.slice(1) === match.slice(1).toLowerCase()) {
46
+ return replacement[0].toUpperCase() + replacement.slice(1).toLowerCase();
47
+ }
48
+ return replacement;
49
+ }
50
+ async function walkFiles(dirPath, rootPath, showHidden, includeRe, excludeRe, openFilesSet, callback) {
51
+ let entries;
52
+ try {
53
+ entries = await fsp.readdir(dirPath, { withFileTypes: true });
54
+ }
55
+ catch {
56
+ return;
57
+ }
58
+ let fileCount = 0;
59
+ for (const entry of entries) {
60
+ if (!showHidden && SKIP_NAMES.has(entry.name))
61
+ continue;
62
+ const absPath = path.join(dirPath, entry.name);
63
+ const relPath = path.relative(rootPath, absPath);
64
+ if (entry.isDirectory()) {
65
+ await walkFiles(absPath, rootPath, showHidden, includeRe, excludeRe, openFilesSet, callback);
66
+ }
67
+ else if (entry.isFile() || entry.isSymbolicLink()) {
68
+ // Filter by open files
69
+ if (openFilesSet && !openFilesSet.has(absPath))
70
+ continue;
71
+ // Apply include/exclude filters
72
+ if (includeRe && !matchesFilter(relPath, includeRe))
73
+ continue;
74
+ if (excludeRe && matchesFilter(relPath, excludeRe))
75
+ continue;
76
+ // Skip binary files
77
+ if (isBinaryFile(absPath))
78
+ continue;
79
+ // Skip large files
80
+ try {
81
+ const stat = await fsp.stat(absPath);
82
+ if (stat.size > MAX_FILE_SIZE)
83
+ continue;
84
+ }
85
+ catch {
86
+ continue;
87
+ }
88
+ const shouldContinue = await callback(absPath, relPath);
89
+ if (!shouldContinue)
90
+ return;
91
+ // Yield every 50 files
92
+ fileCount++;
93
+ if (fileCount % 50 === 0) {
94
+ await new Promise(resolve => setImmediate(resolve));
95
+ }
96
+ }
97
+ }
98
+ }
99
+ export async function searchFiles(rootPath, req) {
100
+ const maxResults = req.maxResults || 500;
101
+ const regex = buildSearchRegex(req.query, req);
102
+ const includeRe = buildFilterRegex(req.includeFilter || '', req.includeFilterIsRegex || false);
103
+ const excludeRe = buildFilterRegex(req.excludeFilter || '', req.excludeFilterIsRegex || false);
104
+ const openFilesSet = req.openFilesOnly ? new Set(req.openFilesOnly.map(f => path.resolve(f))) : null;
105
+ const results = [];
106
+ let totalMatches = 0;
107
+ let totalFiles = 0;
108
+ let truncated = false;
109
+ await walkFiles(rootPath, rootPath, req.showHidden || false, includeRe, excludeRe, openFilesSet, async (absPath, relPath) => {
110
+ totalFiles++;
111
+ const fileResult = { file: relPath, matches: [] };
112
+ // Check filename match
113
+ if (req.includeFilenames) {
114
+ const fnRegex = buildSearchRegex(req.query, req);
115
+ if (fnRegex.test(relPath)) {
116
+ fileResult.filenameMatch = true;
117
+ }
118
+ }
119
+ // Search file contents
120
+ let content;
121
+ try {
122
+ content = await fsp.readFile(absPath, 'utf-8');
123
+ }
124
+ catch {
125
+ return true;
126
+ }
127
+ const lines = content.split('\n');
128
+ for (let i = 0; i < lines.length; i++) {
129
+ const line = lines[i];
130
+ // Reset regex lastIndex for each line
131
+ const lineRegex = buildSearchRegex(req.query, req);
132
+ let m;
133
+ while ((m = lineRegex.exec(line)) !== null) {
134
+ fileResult.matches.push({
135
+ line: i + 1,
136
+ column: m.index,
137
+ length: m[0].length,
138
+ lineContent: line.length > 500 ? line.substring(0, 500) : line,
139
+ });
140
+ totalMatches++;
141
+ if (totalMatches >= maxResults) {
142
+ truncated = true;
143
+ break;
144
+ }
145
+ // Prevent infinite loop on zero-length matches
146
+ if (m[0].length === 0)
147
+ lineRegex.lastIndex++;
148
+ }
149
+ if (truncated)
150
+ break;
151
+ }
152
+ if (fileResult.matches.length > 0 || fileResult.filenameMatch) {
153
+ results.push(fileResult);
154
+ }
155
+ return !truncated;
156
+ });
157
+ return { results, truncated, totalFiles, totalMatches };
158
+ }
159
+ export async function replaceInFiles(rootPath, req) {
160
+ const regex = buildSearchRegex(req.query, req);
161
+ const includeRe = buildFilterRegex(req.includeFilter || '', req.includeFilterIsRegex || false);
162
+ const excludeRe = buildFilterRegex(req.excludeFilter || '', req.excludeFilterIsRegex || false);
163
+ const openFilesSet = req.openFilesOnly ? new Set(req.openFilesOnly.map(f => path.resolve(f))) : null;
164
+ let filesModified = 0;
165
+ let totalReplacements = 0;
166
+ let filesRenamed = 0;
167
+ const errors = [];
168
+ // Collect files to process (for rename, we need all paths first)
169
+ const filesToProcess = [];
170
+ await walkFiles(rootPath, rootPath, req.showHidden || false, includeRe, excludeRe, openFilesSet, async (absPath, relPath) => {
171
+ filesToProcess.push({ absPath, relPath });
172
+ return true;
173
+ });
174
+ // Replace contents
175
+ for (const { absPath, relPath } of filesToProcess) {
176
+ try {
177
+ const content = await fsp.readFile(absPath, 'utf-8');
178
+ const replaceRegex = buildSearchRegex(req.query, req);
179
+ let newContent;
180
+ let count = 0;
181
+ if (req.preserveCase) {
182
+ newContent = content.replace(replaceRegex, (match) => {
183
+ count++;
184
+ return preserveCaseReplace(match, req.replacement);
185
+ });
186
+ }
187
+ else {
188
+ newContent = content.replace(replaceRegex, () => {
189
+ count++;
190
+ return req.replacement;
191
+ });
192
+ }
193
+ if (count > 0) {
194
+ await fsp.writeFile(absPath, newContent, 'utf-8');
195
+ filesModified++;
196
+ totalReplacements += count;
197
+ }
198
+ }
199
+ catch (err) {
200
+ errors.push({ file: relPath, error: err.message });
201
+ }
202
+ }
203
+ // Rename files if requested
204
+ if (req.renameFiles && req.includeFilenames) {
205
+ for (const { absPath, relPath } of filesToProcess) {
206
+ const fileName = path.basename(absPath);
207
+ const renameRegex = buildSearchRegex(req.query, req);
208
+ let newName;
209
+ if (req.preserveCase) {
210
+ newName = fileName.replace(renameRegex, (match) => preserveCaseReplace(match, req.replacement));
211
+ }
212
+ else {
213
+ newName = fileName.replace(renameRegex, req.replacement);
214
+ }
215
+ if (newName !== fileName) {
216
+ const newPath = path.join(path.dirname(absPath), newName);
217
+ try {
218
+ await fsp.rename(absPath, newPath);
219
+ filesRenamed++;
220
+ }
221
+ catch (err) {
222
+ errors.push({ file: relPath, error: `Rename failed: ${err.message}` });
223
+ }
224
+ }
225
+ }
226
+ }
227
+ return { filesModified, totalReplacements, filesRenamed, errors };
228
+ }
229
+ // Replace in a single file, optionally restricted to specific lines
230
+ export async function replaceInSingleFile(rootPath, relFile, req) {
231
+ const absPath = path.join(rootPath, relFile);
232
+ try {
233
+ const content = await fsp.readFile(absPath, 'utf-8');
234
+ const lineSet = req.lines ? new Set(req.lines) : null;
235
+ if (lineSet) {
236
+ // Replace only on specific lines
237
+ const lines = content.split('\n');
238
+ let count = 0;
239
+ for (let i = 0; i < lines.length; i++) {
240
+ if (!lineSet.has(i + 1))
241
+ continue; // lines are 1-based
242
+ const lineRegex = buildSearchRegex(req.query, req);
243
+ const newLine = req.preserveCase
244
+ ? lines[i].replace(lineRegex, (match) => { count++; return preserveCaseReplace(match, req.replacement); })
245
+ : lines[i].replace(lineRegex, () => { count++; return req.replacement; });
246
+ lines[i] = newLine;
247
+ }
248
+ if (count > 0) {
249
+ await fsp.writeFile(absPath, lines.join('\n'), 'utf-8');
250
+ }
251
+ return { replacements: count };
252
+ }
253
+ else {
254
+ // Replace all in file
255
+ const replaceRegex = buildSearchRegex(req.query, req);
256
+ let count = 0;
257
+ const newContent = req.preserveCase
258
+ ? content.replace(replaceRegex, (match) => { count++; return preserveCaseReplace(match, req.replacement); })
259
+ : content.replace(replaceRegex, () => { count++; return req.replacement; });
260
+ if (count > 0) {
261
+ await fsp.writeFile(absPath, newContent, 'utf-8');
262
+ }
263
+ return { replacements: count };
264
+ }
265
+ }
266
+ catch (err) {
267
+ return { replacements: 0, error: err.message };
268
+ }
269
+ }
@@ -1 +1 @@
1
- import{H as e,R as t,S as n,U as r,b as i,c as a,f as o,n as s,r as c,s as l,u,v as d}from"./_createAssigner-ByDUqGii.js";import{A as f,C as p,D as m,M as h,N as g,S as _,T as v,f as y,h as b,u as x,w as S}from"./_baseUniq-C8JXpw9D.js";var C=/\s/;function w(e){for(var t=e.length;t--&&C.test(e.charAt(t)););return t}var ee=/^\s+/;function T(e){return e&&e.slice(0,w(e)+1).replace(ee,``)}var E=NaN,D=/^[-+]0x[0-9a-f]+$/i,O=/^0b[01]+$/i,k=/^0o[0-7]+$/i,A=parseInt;function j(t){if(typeof t==`number`)return t;if(g(t))return E;if(e(t)){var n=typeof t.valueOf==`function`?t.valueOf():t;t=e(n)?n+``:n}if(typeof t!=`string`)return t===0?t:+t;t=T(t);var r=O.test(t);return r||k.test(t)?A(t.slice(2),r?2:8):D.test(t)?E:+t}var M=1/0,N=17976931348623157e292;function P(e){return e?(e=j(e),e===M||e===-M?(e<0?-1:1)*N:e===e?e:0):e===0?e:0}function F(e){var t=P(e),n=t%1;return t===t?n?t-n:t:0}function I(e){return e!=null&&e.length?_(e,1):[]}var L=Object.prototype,R=L.hasOwnProperty,z=c(function(e,n){e=Object(e);var r=-1,i=n.length,o=i>2?n[2]:void 0;for(o&&s(n[0],n[1],o)&&(i=1);++r<i;)for(var c=n[r],l=a(c),u=-1,d=l.length;++u<d;){var f=l[u],p=e[f];(p===void 0||t(p,L[f])&&!R.call(e,f))&&(e[f]=c[f])}return e});function B(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function V(e){return function(t,n,r){var i=Object(t);if(!d(t)){var a=y(n,3);t=m(t),n=function(e){return a(i[e],e,i)}}var o=e(t,n,r);return o>-1?i[a?t[o]:o]:void 0}}var H=Math.max;function U(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var i=n==null?0:F(n);return i<0&&(i=H(r+i,0)),f(e,y(t,3),i)}var W=V(U);function G(e,t){var n=-1,r=d(e)?Array(e.length):[];return x(e,function(e,i,a){r[++n]=t(e,i,a)}),r}function K(e,t){return(i(e)?h:G)(e,y(t,3))}var q=Object.prototype.hasOwnProperty;function J(e,t){return e!=null&&q.call(e,t)}function Y(e,t){return e!=null&&b(e,t,J)}var X=`[object String]`;function Z(e){return typeof e==`string`||!i(e)&&n(e)&&r(e)==X}function Q(e,t){return e<t}function $(e,t,n){for(var r=-1,i=e.length;++r<i;){var a=e[r],o=t(a);if(o!=null&&(s===void 0?o===o&&!g(o):n(o,s)))var s=o,c=a}return c}function te(e){return e&&e.length?$(e,l,Q):void 0}function ne(t,n,r,i){if(!e(t))return t;n=v(n,t);for(var a=-1,s=n.length,c=s-1,l=t;l!=null&&++a<s;){var d=S(n[a]),f=r;if(d===`__proto__`||d===`constructor`||d===`prototype`)return t;if(a!=c){var p=l[d];f=i?i(p,d,l):void 0,f===void 0&&(f=e(p)?p:u(n[a+1])?[]:{})}o(l,d,f),l=l[d]}return t}function re(e,t,n){for(var r=-1,i=t.length,a={};++r<i;){var o=t[r],s=p(e,o);n(s,o)&&ne(a,v(o,e),s)}return a}export{Z as a,G as c,z as d,I as f,Q as i,W as l,P as m,te as n,Y as o,F as p,$ as r,K as s,re as t,B as u};
1
+ import{H as e,R as t,S as n,U as r,b as i,c as a,f as o,n as s,r as c,s as l,u,v as d}from"./_createAssigner-ByDUqGii.js";import{A as f,C as p,D as m,M as h,N as g,S as _,T as v,f as y,h as b,u as x,w as S}from"./_baseUniq-BlaoUomR.js";var C=/\s/;function w(e){for(var t=e.length;t--&&C.test(e.charAt(t)););return t}var ee=/^\s+/;function T(e){return e&&e.slice(0,w(e)+1).replace(ee,``)}var E=NaN,D=/^[-+]0x[0-9a-f]+$/i,O=/^0b[01]+$/i,k=/^0o[0-7]+$/i,A=parseInt;function j(t){if(typeof t==`number`)return t;if(g(t))return E;if(e(t)){var n=typeof t.valueOf==`function`?t.valueOf():t;t=e(n)?n+``:n}if(typeof t!=`string`)return t===0?t:+t;t=T(t);var r=O.test(t);return r||k.test(t)?A(t.slice(2),r?2:8):D.test(t)?E:+t}var M=1/0,N=17976931348623157e292;function P(e){return e?(e=j(e),e===M||e===-M?(e<0?-1:1)*N:e===e?e:0):e===0?e:0}function F(e){var t=P(e),n=t%1;return t===t?n?t-n:t:0}function I(e){return e!=null&&e.length?_(e,1):[]}var L=Object.prototype,R=L.hasOwnProperty,z=c(function(e,n){e=Object(e);var r=-1,i=n.length,o=i>2?n[2]:void 0;for(o&&s(n[0],n[1],o)&&(i=1);++r<i;)for(var c=n[r],l=a(c),u=-1,d=l.length;++u<d;){var f=l[u],p=e[f];(p===void 0||t(p,L[f])&&!R.call(e,f))&&(e[f]=c[f])}return e});function B(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function V(e){return function(t,n,r){var i=Object(t);if(!d(t)){var a=y(n,3);t=m(t),n=function(e){return a(i[e],e,i)}}var o=e(t,n,r);return o>-1?i[a?t[o]:o]:void 0}}var H=Math.max;function U(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var i=n==null?0:F(n);return i<0&&(i=H(r+i,0)),f(e,y(t,3),i)}var W=V(U);function G(e,t){var n=-1,r=d(e)?Array(e.length):[];return x(e,function(e,i,a){r[++n]=t(e,i,a)}),r}function K(e,t){return(i(e)?h:G)(e,y(t,3))}var q=Object.prototype.hasOwnProperty;function J(e,t){return e!=null&&q.call(e,t)}function Y(e,t){return e!=null&&b(e,t,J)}var X=`[object String]`;function Z(e){return typeof e==`string`||!i(e)&&n(e)&&r(e)==X}function Q(e,t){return e<t}function $(e,t,n){for(var r=-1,i=e.length;++r<i;){var a=e[r],o=t(a);if(o!=null&&(s===void 0?o===o&&!g(o):n(o,s)))var s=o,c=a}return c}function te(e){return e&&e.length?$(e,l,Q):void 0}function ne(t,n,r,i){if(!e(t))return t;n=v(n,t);for(var a=-1,s=n.length,c=s-1,l=t;l!=null&&++a<s;){var d=S(n[a]),f=r;if(d===`__proto__`||d===`constructor`||d===`prototype`)return t;if(a!=c){var p=l[d];f=i?i(p,d,l):void 0,f===void 0&&(f=e(p)?p:u(n[a+1])?[]:{})}o(l,d,f),l=l[d]}return t}function re(e,t,n){for(var r=-1,i=t.length,a={};++r<i;){var o=t[r],s=p(e,o);n(s,o)&&ne(a,v(o,e),s)}return a}export{Z as a,G as c,z as d,I as f,Q as i,W as l,P as m,te as n,Y as o,F as p,$ as r,K as s,re as t,B as u};
@@ -1 +1 @@
1
- import{A as e,C as t,D as n,F as r,H as i,I as a,M as o,O as s,P as c,R as l,S as u,T as d,U as f,W as p,b as m,c as h,d as g,f as _,g as v,h as y,j as ee,k as b,l as x,m as S,p as te,s as C,u as ne,v as re,x as w,y as ie}from"./_createAssigner-ByDUqGii.js";import{i as ae,n as T,r as E}from"./index-CvDkr5VR.js";var oe=`[object Symbol]`;function D(e){return typeof e==`symbol`||u(e)&&f(e)==oe}function O(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var se=1/0,ce=p?p.prototype:void 0,le=ce?ce.toString:void 0;function ue(e){if(typeof e==`string`)return e;if(m(e))return O(e,ue)+``;if(D(e))return le?le.call(e):``;var t=e+``;return t==`0`&&1/e==-se?`-0`:t}function de(){}function fe(e,t){for(var n=-1,r=e==null?0:e.length;++n<r&&t(e[n],n,e)!==!1;);return e}function pe(e,t,n,r){for(var i=e.length,a=n+(r?1:-1);r?a--:++a<i;)if(t(e[a],a,e))return a;return-1}function me(e){return e!==e}function he(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}function ge(e,t,n){return t===t?he(e,t,n):pe(e,me,n)}function _e(e,t){return!!(e!=null&&e.length)&&ge(e,t,0)>-1}function k(e){return re(e)?x(e):ae(e)}var ve=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ye=/^\w*$/;function A(e,t){if(m(e))return!1;var n=typeof e;return n==`number`||n==`symbol`||n==`boolean`||e==null||D(e)?!0:ye.test(e)||!ve.test(e)||t!=null&&e in Object(t)}var be=500;function xe(e){var t=r(e,function(e){return n.size===be&&n.clear(),e}),n=t.cache;return t}var Se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ce=/\\(\\)?/g,we=xe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(Se,function(e,n,r,i){t.push(r?i.replace(Ce,`$1`):n||e)}),t});function j(e){return e==null?``:ue(e)}function M(e,t){return m(e)?e:A(e,t)?[e]:we(j(e))}var Te=1/0;function N(e){if(typeof e==`string`||D(e))return e;var t=e+``;return t==`0`&&1/e==-Te?`-0`:t}function P(e,t){t=M(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[N(t[n++])];return n&&n==r?e:void 0}function Ee(e,t,n){var r=e==null?void 0:P(e,t);return r===void 0?n:r}function F(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}var I=p?p.isConcatSpreadable:void 0;function De(e){return m(e)||w(e)||!!(I&&e&&e[I])}function L(e,t,n,r,i){var a=-1,o=e.length;for(n||=De,i||=[];++a<o;){var s=e[a];t>0&&n(s)?t>1?L(s,t-1,n,r,i):F(i,s):r||(i[i.length]=s)}return i}function Oe(e,t,n,r){var i=-1,a=e==null?0:e.length;for(r&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}function ke(e,t){return e&&g(t,k(t),e)}function Ae(e,t){return e&&g(t,h(t),e)}function R(e,t){for(var n=-1,r=e==null?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}function z(){return[]}var je=Object.prototype.propertyIsEnumerable,B=Object.getOwnPropertySymbols,V=B?function(e){return e==null?[]:(e=Object(e),R(B(e),function(t){return je.call(e,t)}))}:z;function Me(e,t){return g(e,V(e),t)}var Ne=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)F(t,V(e)),e=d(e);return t}:z;function Pe(e,t){return g(e,Ne(e),t)}function Fe(e,t,n){var r=t(e);return m(e)?r:F(r,n(e))}function H(e){return Fe(e,k,V)}function Ie(e){return Fe(e,h,Ne)}var Le=Object.prototype.hasOwnProperty;function Re(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==`string`&&Le.call(e,`index`)&&(n.index=e.index,n.input=e.input),n}function ze(e,t){var n=t?b(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}var Be=/\w*$/;function Ve(e){var t=new e.constructor(e.source,Be.exec(e));return t.lastIndex=e.lastIndex,t}var He=p?p.prototype:void 0,Ue=He?He.valueOf:void 0;function We(e){return Ue?Object(Ue.call(e)):{}}var Ge=`[object Boolean]`,Ke=`[object Date]`,qe=`[object Map]`,Je=`[object Number]`,Ye=`[object RegExp]`,Xe=`[object Set]`,Ze=`[object String]`,Qe=`[object Symbol]`,$e=`[object ArrayBuffer]`,et=`[object DataView]`,tt=`[object Float32Array]`,nt=`[object Float64Array]`,rt=`[object Int8Array]`,it=`[object Int16Array]`,at=`[object Int32Array]`,ot=`[object Uint8Array]`,st=`[object Uint8ClampedArray]`,ct=`[object Uint16Array]`,lt=`[object Uint32Array]`;function ut(e,t,n){var r=e.constructor;switch(t){case $e:return b(e);case Ge:case Ke:return new r(+e);case et:return ze(e,n);case tt:case nt:case rt:case it:case at:case ot:case st:case ct:case lt:return s(e,n);case qe:return new r;case Je:case Ze:return new r(e);case Ye:return Ve(e);case Xe:return new r;case Qe:return We(e)}}var dt=`[object Map]`;function ft(e){return u(e)&&T(e)==dt}var pt=S&&S.isMap,mt=pt?y(pt):ft,ht=`[object Set]`;function gt(e){return u(e)&&T(e)==ht}var _t=S&&S.isSet,vt=_t?y(_t):gt,yt=1,bt=2,xt=4,St=`[object Arguments]`,Ct=`[object Array]`,wt=`[object Boolean]`,Tt=`[object Date]`,Et=`[object Error]`,Dt=`[object Function]`,Ot=`[object GeneratorFunction]`,kt=`[object Map]`,At=`[object Number]`,jt=`[object Object]`,Mt=`[object RegExp]`,Nt=`[object Set]`,Pt=`[object String]`,Ft=`[object Symbol]`,It=`[object WeakMap]`,Lt=`[object ArrayBuffer]`,Rt=`[object DataView]`,zt=`[object Float32Array]`,Bt=`[object Float64Array]`,Vt=`[object Int8Array]`,Ht=`[object Int16Array]`,Ut=`[object Int32Array]`,Wt=`[object Uint8Array]`,Gt=`[object Uint8ClampedArray]`,Kt=`[object Uint16Array]`,qt=`[object Uint32Array]`,U={};U[St]=U[Ct]=U[Lt]=U[Rt]=U[wt]=U[Tt]=U[zt]=U[Bt]=U[Vt]=U[Ht]=U[Ut]=U[kt]=U[At]=U[jt]=U[Mt]=U[Nt]=U[Pt]=U[Ft]=U[Wt]=U[Gt]=U[Kt]=U[qt]=!0,U[Et]=U[Dt]=U[It]=!1;function W(e,r,a,o,s,l){var u,d=r&yt,f=r&bt,p=r&xt;if(a&&(u=s?a(e,o,s,l):a(e)),u!==void 0)return u;if(!i(e))return e;var g=m(e);if(g){if(u=Re(e),!d)return n(e,u)}else{var y=T(e),b=y==Dt||y==Ot;if(v(e))return ee(e,d);if(y==jt||y==St||b&&!s){if(u=f||b?{}:t(e),!d)return f?Pe(e,Ae(u,e)):Me(e,ke(u,e))}else{if(!U[y])return s?e:{};u=ut(e,y,d)}}l||=new c;var x=l.get(e);if(x)return x;l.set(e,u),vt(e)?e.forEach(function(t){u.add(W(t,r,a,t,e,l))}):mt(e)&&e.forEach(function(t,n){u.set(n,W(t,r,a,n,e,l))});var S=g?void 0:(p?f?Ie:H:f?h:k)(e);return fe(S||e,function(t,n){S&&(n=t,t=e[n]),_(u,n,W(t,r,a,n,e,l))}),u}var Jt=`__lodash_hash_undefined__`;function Yt(e){return this.__data__.set(e,Jt),this}function Xt(e){return this.__data__.has(e)}function G(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new a;++t<n;)this.add(e[t])}G.prototype.add=G.prototype.push=Yt,G.prototype.has=Xt;function Zt(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}function K(e,t){return e.has(t)}var Qt=1,$t=2;function en(e,t,n,r,i,a){var o=n&Qt,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=a.get(e),u=a.get(t);if(l&&u)return l==t&&u==e;var d=-1,f=!0,p=n&$t?new G:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var m=e[d],h=t[d];if(r)var g=o?r(h,m,d,t,e,a):r(m,h,d,e,t,a);if(g!==void 0){if(g)continue;f=!1;break}if(p){if(!Zt(t,function(e,t){if(!K(p,t)&&(m===e||i(m,e,n,r,a)))return p.push(t)})){f=!1;break}}else if(!(m===h||i(m,h,n,r,a))){f=!1;break}}return a.delete(e),a.delete(t),f}function tn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function q(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}var nn=1,rn=2,an=`[object Boolean]`,on=`[object Date]`,sn=`[object Error]`,cn=`[object Map]`,ln=`[object Number]`,un=`[object RegExp]`,dn=`[object Set]`,fn=`[object String]`,pn=`[object Symbol]`,mn=`[object ArrayBuffer]`,hn=`[object DataView]`,gn=p?p.prototype:void 0,J=gn?gn.valueOf:void 0;function _n(t,n,r,i,a,o,s){switch(r){case hn:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case mn:return!(t.byteLength!=n.byteLength||!o(new e(t),new e(n)));case an:case on:case ln:return l(+t,+n);case sn:return t.name==n.name&&t.message==n.message;case un:case fn:return t==n+``;case cn:var c=tn;case dn:var u=i&nn;if(c||=q,t.size!=n.size&&!u)return!1;var d=s.get(t);if(d)return d==n;i|=rn,s.set(t,n);var f=en(c(t),c(n),i,a,o,s);return s.delete(t),f;case pn:if(J)return J.call(t)==J.call(n)}return!1}var vn=1,yn=Object.prototype.hasOwnProperty;function bn(e,t,n,r,i,a){var o=n&vn,s=H(e),c=s.length;if(c!=H(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:yn.call(t,u)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var p=!0;a.set(e,t),a.set(t,e);for(var m=o;++l<c;){u=s[l];var h=e[u],g=t[u];if(r)var _=o?r(g,h,u,t,e,a):r(h,g,u,e,t,a);if(!(_===void 0?h===g||i(h,g,n,r,a):_)){p=!1;break}m||=u==`constructor`}if(p&&!m){var v=e.constructor,y=t.constructor;v!=y&&`constructor`in e&&`constructor`in t&&!(typeof v==`function`&&v instanceof v&&typeof y==`function`&&y instanceof y)&&(p=!1)}return a.delete(e),a.delete(t),p}var xn=1,Sn=`[object Arguments]`,Cn=`[object Array]`,Y=`[object Object]`,wn=Object.prototype.hasOwnProperty;function Tn(e,t,n,r,i,a){var o=m(e),s=m(t),l=o?Cn:T(e),u=s?Cn:T(t);l=l==Sn?Y:l,u=u==Sn?Y:u;var d=l==Y,f=u==Y,p=l==u;if(p&&v(e)){if(!v(t))return!1;o=!0,d=!1}if(p&&!d)return a||=new c,o||te(e)?en(e,t,n,r,i,a):_n(e,t,l,n,r,i,a);if(!(n&xn)){var h=d&&wn.call(e,`__wrapped__`),g=f&&wn.call(t,`__wrapped__`);if(h||g){var _=h?e.value():e,y=g?t.value():t;return a||=new c,i(_,y,n,r,a)}}return p?(a||=new c,bn(e,t,n,r,i,a)):!1}function X(e,t,n,r,i){return e===t?!0:e==null||t==null||!u(e)&&!u(t)?e!==e&&t!==t:Tn(e,t,n,r,X,i)}var En=1,Dn=2;function On(e,t,n,r){var i=n.length,a=i,o=!r;if(e==null)return!a;for(e=Object(e);i--;){var s=n[i];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++i<a;){s=n[i];var l=s[0],u=e[l],d=s[1];if(o&&s[2]){if(u===void 0&&!(l in e))return!1}else{var f=new c;if(r)var p=r(u,d,l,e,t,f);if(!(p===void 0?X(d,u,En|Dn,r,f):p))return!1}}return!0}function kn(e){return e===e&&!i(e)}function An(e){for(var t=k(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,kn(i)]}return t}function Z(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}function jn(e){var t=An(e);return t.length==1&&t[0][2]?Z(t[0][0],t[0][1]):function(n){return n===e||On(n,e,t)}}function Mn(e,t){return e!=null&&t in Object(e)}function Nn(e,t,n){t=M(t,e);for(var r=-1,i=t.length,a=!1;++r<i;){var o=N(t[r]);if(!(a=e!=null&&n(e,o)))break;e=e[o]}return a||++r!=i?a:(i=e==null?0:e.length,!!i&&ie(i)&&ne(o,i)&&(m(e)||w(e)))}function Pn(e,t){return e!=null&&Nn(e,t,Mn)}var Fn=1,In=2;function Ln(e,t){return A(e)&&kn(t)?Z(N(e),t):function(n){var r=Ee(n,e);return r===void 0&&r===t?Pn(n,e):X(t,r,Fn|In)}}function Rn(e){return function(t){return t?.[e]}}function zn(e){return function(t){return P(t,e)}}function Bn(e){return A(e)?Rn(N(e)):zn(e)}function Q(e){return typeof e==`function`?e:e==null?C:typeof e==`object`?m(e)?Ln(e[0],e[1]):jn(e):Bn(e)}function Vn(e,t){return e&&o(e,t,k)}function Hn(e,t){return function(n,r){if(n==null)return n;if(!re(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++a<i)&&r(o[a],a,o)!==!1;);return n}}var $=Hn(Vn);function Un(e,t,n){for(var r=-1,i=e==null?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function Wn(e){return typeof e==`function`?e:C}function Gn(e,t){return(m(e)?fe:$)(e,Wn(t))}function Kn(e,t){var n=[];return $(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function qn(e,t){return(m(e)?R:Kn)(e,Q(t,3))}function Jn(e,t){return O(t,function(t){return e[t]})}function Yn(e){return e==null?[]:Jn(e,k(e))}function Xn(e){return e===void 0}function Zn(e,t,n,r,i){return i(e,function(e,i,a){n=r?(r=!1,e):t(n,e,i,a)}),n}function Qn(e,t,n){var r=m(e)?Oe:Zn,i=arguments.length<3;return r(e,Q(t,4),n,i,$)}var $n=E&&1/q(new E([,-0]))[1]==1/0?function(e){return new E(e)}:de,er=200;function tr(e,t,n){var r=-1,i=_e,a=e.length,o=!0,s=[],c=s;if(n)o=!1,i=Un;else if(a>=er){var l=t?null:$n(e);if(l)return q(l);o=!1,i=K,c=new G}else c=t?[]:s;outer:for(;++r<a;){var u=e[r],d=t?t(u):u;if(u=n||u!==0?u:0,o&&d===d){for(var f=c.length;f--;)if(c[f]===d)continue outer;t&&c.push(d),s.push(u)}else i(c,d,n)||(c!==s&&c.push(d),s.push(u))}return s}export{pe as A,P as C,k as D,j as E,O as M,D as N,_e as O,L as S,M as T,Zt as _,qn as a,Ie as b,Wn as c,Vn as d,Q as f,K as g,Nn as h,Yn as i,de as j,ge as k,Un as l,Pn as m,Qn as n,Kn as o,Rn as p,Xn as r,Gn as s,tr as t,$ as u,G as v,N as w,R as x,W as y};
1
+ import{A as e,C as t,D as n,F as r,H as i,I as a,M as o,O as s,P as c,R as l,S as u,T as d,U as f,W as p,b as m,c as h,d as g,f as _,g as v,h as y,j as ee,k as b,l as x,m as S,p as te,s as C,u as ne,v as re,x as w,y as ie}from"./_createAssigner-ByDUqGii.js";import{i as ae,n as T,r as E}from"./index-B8EBg0hm.js";var oe=`[object Symbol]`;function D(e){return typeof e==`symbol`||u(e)&&f(e)==oe}function O(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var se=1/0,ce=p?p.prototype:void 0,le=ce?ce.toString:void 0;function ue(e){if(typeof e==`string`)return e;if(m(e))return O(e,ue)+``;if(D(e))return le?le.call(e):``;var t=e+``;return t==`0`&&1/e==-se?`-0`:t}function de(){}function fe(e,t){for(var n=-1,r=e==null?0:e.length;++n<r&&t(e[n],n,e)!==!1;);return e}function pe(e,t,n,r){for(var i=e.length,a=n+(r?1:-1);r?a--:++a<i;)if(t(e[a],a,e))return a;return-1}function me(e){return e!==e}function he(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}function ge(e,t,n){return t===t?he(e,t,n):pe(e,me,n)}function _e(e,t){return!!(e!=null&&e.length)&&ge(e,t,0)>-1}function k(e){return re(e)?x(e):ae(e)}var ve=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ye=/^\w*$/;function A(e,t){if(m(e))return!1;var n=typeof e;return n==`number`||n==`symbol`||n==`boolean`||e==null||D(e)?!0:ye.test(e)||!ve.test(e)||t!=null&&e in Object(t)}var be=500;function xe(e){var t=r(e,function(e){return n.size===be&&n.clear(),e}),n=t.cache;return t}var Se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ce=/\\(\\)?/g,we=xe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(Se,function(e,n,r,i){t.push(r?i.replace(Ce,`$1`):n||e)}),t});function j(e){return e==null?``:ue(e)}function M(e,t){return m(e)?e:A(e,t)?[e]:we(j(e))}var Te=1/0;function N(e){if(typeof e==`string`||D(e))return e;var t=e+``;return t==`0`&&1/e==-Te?`-0`:t}function P(e,t){t=M(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[N(t[n++])];return n&&n==r?e:void 0}function Ee(e,t,n){var r=e==null?void 0:P(e,t);return r===void 0?n:r}function F(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}var I=p?p.isConcatSpreadable:void 0;function De(e){return m(e)||w(e)||!!(I&&e&&e[I])}function L(e,t,n,r,i){var a=-1,o=e.length;for(n||=De,i||=[];++a<o;){var s=e[a];t>0&&n(s)?t>1?L(s,t-1,n,r,i):F(i,s):r||(i[i.length]=s)}return i}function Oe(e,t,n,r){var i=-1,a=e==null?0:e.length;for(r&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}function ke(e,t){return e&&g(t,k(t),e)}function Ae(e,t){return e&&g(t,h(t),e)}function R(e,t){for(var n=-1,r=e==null?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}function z(){return[]}var je=Object.prototype.propertyIsEnumerable,B=Object.getOwnPropertySymbols,V=B?function(e){return e==null?[]:(e=Object(e),R(B(e),function(t){return je.call(e,t)}))}:z;function Me(e,t){return g(e,V(e),t)}var Ne=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)F(t,V(e)),e=d(e);return t}:z;function Pe(e,t){return g(e,Ne(e),t)}function Fe(e,t,n){var r=t(e);return m(e)?r:F(r,n(e))}function H(e){return Fe(e,k,V)}function Ie(e){return Fe(e,h,Ne)}var Le=Object.prototype.hasOwnProperty;function Re(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==`string`&&Le.call(e,`index`)&&(n.index=e.index,n.input=e.input),n}function ze(e,t){var n=t?b(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}var Be=/\w*$/;function Ve(e){var t=new e.constructor(e.source,Be.exec(e));return t.lastIndex=e.lastIndex,t}var He=p?p.prototype:void 0,Ue=He?He.valueOf:void 0;function We(e){return Ue?Object(Ue.call(e)):{}}var Ge=`[object Boolean]`,Ke=`[object Date]`,qe=`[object Map]`,Je=`[object Number]`,Ye=`[object RegExp]`,Xe=`[object Set]`,Ze=`[object String]`,Qe=`[object Symbol]`,$e=`[object ArrayBuffer]`,et=`[object DataView]`,tt=`[object Float32Array]`,nt=`[object Float64Array]`,rt=`[object Int8Array]`,it=`[object Int16Array]`,at=`[object Int32Array]`,ot=`[object Uint8Array]`,st=`[object Uint8ClampedArray]`,ct=`[object Uint16Array]`,lt=`[object Uint32Array]`;function ut(e,t,n){var r=e.constructor;switch(t){case $e:return b(e);case Ge:case Ke:return new r(+e);case et:return ze(e,n);case tt:case nt:case rt:case it:case at:case ot:case st:case ct:case lt:return s(e,n);case qe:return new r;case Je:case Ze:return new r(e);case Ye:return Ve(e);case Xe:return new r;case Qe:return We(e)}}var dt=`[object Map]`;function ft(e){return u(e)&&T(e)==dt}var pt=S&&S.isMap,mt=pt?y(pt):ft,ht=`[object Set]`;function gt(e){return u(e)&&T(e)==ht}var _t=S&&S.isSet,vt=_t?y(_t):gt,yt=1,bt=2,xt=4,St=`[object Arguments]`,Ct=`[object Array]`,wt=`[object Boolean]`,Tt=`[object Date]`,Et=`[object Error]`,Dt=`[object Function]`,Ot=`[object GeneratorFunction]`,kt=`[object Map]`,At=`[object Number]`,jt=`[object Object]`,Mt=`[object RegExp]`,Nt=`[object Set]`,Pt=`[object String]`,Ft=`[object Symbol]`,It=`[object WeakMap]`,Lt=`[object ArrayBuffer]`,Rt=`[object DataView]`,zt=`[object Float32Array]`,Bt=`[object Float64Array]`,Vt=`[object Int8Array]`,Ht=`[object Int16Array]`,Ut=`[object Int32Array]`,Wt=`[object Uint8Array]`,Gt=`[object Uint8ClampedArray]`,Kt=`[object Uint16Array]`,qt=`[object Uint32Array]`,U={};U[St]=U[Ct]=U[Lt]=U[Rt]=U[wt]=U[Tt]=U[zt]=U[Bt]=U[Vt]=U[Ht]=U[Ut]=U[kt]=U[At]=U[jt]=U[Mt]=U[Nt]=U[Pt]=U[Ft]=U[Wt]=U[Gt]=U[Kt]=U[qt]=!0,U[Et]=U[Dt]=U[It]=!1;function W(e,r,a,o,s,l){var u,d=r&yt,f=r&bt,p=r&xt;if(a&&(u=s?a(e,o,s,l):a(e)),u!==void 0)return u;if(!i(e))return e;var g=m(e);if(g){if(u=Re(e),!d)return n(e,u)}else{var y=T(e),b=y==Dt||y==Ot;if(v(e))return ee(e,d);if(y==jt||y==St||b&&!s){if(u=f||b?{}:t(e),!d)return f?Pe(e,Ae(u,e)):Me(e,ke(u,e))}else{if(!U[y])return s?e:{};u=ut(e,y,d)}}l||=new c;var x=l.get(e);if(x)return x;l.set(e,u),vt(e)?e.forEach(function(t){u.add(W(t,r,a,t,e,l))}):mt(e)&&e.forEach(function(t,n){u.set(n,W(t,r,a,n,e,l))});var S=g?void 0:(p?f?Ie:H:f?h:k)(e);return fe(S||e,function(t,n){S&&(n=t,t=e[n]),_(u,n,W(t,r,a,n,e,l))}),u}var Jt=`__lodash_hash_undefined__`;function Yt(e){return this.__data__.set(e,Jt),this}function Xt(e){return this.__data__.has(e)}function G(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new a;++t<n;)this.add(e[t])}G.prototype.add=G.prototype.push=Yt,G.prototype.has=Xt;function Zt(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}function K(e,t){return e.has(t)}var Qt=1,$t=2;function en(e,t,n,r,i,a){var o=n&Qt,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=a.get(e),u=a.get(t);if(l&&u)return l==t&&u==e;var d=-1,f=!0,p=n&$t?new G:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var m=e[d],h=t[d];if(r)var g=o?r(h,m,d,t,e,a):r(m,h,d,e,t,a);if(g!==void 0){if(g)continue;f=!1;break}if(p){if(!Zt(t,function(e,t){if(!K(p,t)&&(m===e||i(m,e,n,r,a)))return p.push(t)})){f=!1;break}}else if(!(m===h||i(m,h,n,r,a))){f=!1;break}}return a.delete(e),a.delete(t),f}function tn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function q(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}var nn=1,rn=2,an=`[object Boolean]`,on=`[object Date]`,sn=`[object Error]`,cn=`[object Map]`,ln=`[object Number]`,un=`[object RegExp]`,dn=`[object Set]`,fn=`[object String]`,pn=`[object Symbol]`,mn=`[object ArrayBuffer]`,hn=`[object DataView]`,gn=p?p.prototype:void 0,J=gn?gn.valueOf:void 0;function _n(t,n,r,i,a,o,s){switch(r){case hn:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case mn:return!(t.byteLength!=n.byteLength||!o(new e(t),new e(n)));case an:case on:case ln:return l(+t,+n);case sn:return t.name==n.name&&t.message==n.message;case un:case fn:return t==n+``;case cn:var c=tn;case dn:var u=i&nn;if(c||=q,t.size!=n.size&&!u)return!1;var d=s.get(t);if(d)return d==n;i|=rn,s.set(t,n);var f=en(c(t),c(n),i,a,o,s);return s.delete(t),f;case pn:if(J)return J.call(t)==J.call(n)}return!1}var vn=1,yn=Object.prototype.hasOwnProperty;function bn(e,t,n,r,i,a){var o=n&vn,s=H(e),c=s.length;if(c!=H(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:yn.call(t,u)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var p=!0;a.set(e,t),a.set(t,e);for(var m=o;++l<c;){u=s[l];var h=e[u],g=t[u];if(r)var _=o?r(g,h,u,t,e,a):r(h,g,u,e,t,a);if(!(_===void 0?h===g||i(h,g,n,r,a):_)){p=!1;break}m||=u==`constructor`}if(p&&!m){var v=e.constructor,y=t.constructor;v!=y&&`constructor`in e&&`constructor`in t&&!(typeof v==`function`&&v instanceof v&&typeof y==`function`&&y instanceof y)&&(p=!1)}return a.delete(e),a.delete(t),p}var xn=1,Sn=`[object Arguments]`,Cn=`[object Array]`,Y=`[object Object]`,wn=Object.prototype.hasOwnProperty;function Tn(e,t,n,r,i,a){var o=m(e),s=m(t),l=o?Cn:T(e),u=s?Cn:T(t);l=l==Sn?Y:l,u=u==Sn?Y:u;var d=l==Y,f=u==Y,p=l==u;if(p&&v(e)){if(!v(t))return!1;o=!0,d=!1}if(p&&!d)return a||=new c,o||te(e)?en(e,t,n,r,i,a):_n(e,t,l,n,r,i,a);if(!(n&xn)){var h=d&&wn.call(e,`__wrapped__`),g=f&&wn.call(t,`__wrapped__`);if(h||g){var _=h?e.value():e,y=g?t.value():t;return a||=new c,i(_,y,n,r,a)}}return p?(a||=new c,bn(e,t,n,r,i,a)):!1}function X(e,t,n,r,i){return e===t?!0:e==null||t==null||!u(e)&&!u(t)?e!==e&&t!==t:Tn(e,t,n,r,X,i)}var En=1,Dn=2;function On(e,t,n,r){var i=n.length,a=i,o=!r;if(e==null)return!a;for(e=Object(e);i--;){var s=n[i];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++i<a;){s=n[i];var l=s[0],u=e[l],d=s[1];if(o&&s[2]){if(u===void 0&&!(l in e))return!1}else{var f=new c;if(r)var p=r(u,d,l,e,t,f);if(!(p===void 0?X(d,u,En|Dn,r,f):p))return!1}}return!0}function kn(e){return e===e&&!i(e)}function An(e){for(var t=k(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,kn(i)]}return t}function Z(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}function jn(e){var t=An(e);return t.length==1&&t[0][2]?Z(t[0][0],t[0][1]):function(n){return n===e||On(n,e,t)}}function Mn(e,t){return e!=null&&t in Object(e)}function Nn(e,t,n){t=M(t,e);for(var r=-1,i=t.length,a=!1;++r<i;){var o=N(t[r]);if(!(a=e!=null&&n(e,o)))break;e=e[o]}return a||++r!=i?a:(i=e==null?0:e.length,!!i&&ie(i)&&ne(o,i)&&(m(e)||w(e)))}function Pn(e,t){return e!=null&&Nn(e,t,Mn)}var Fn=1,In=2;function Ln(e,t){return A(e)&&kn(t)?Z(N(e),t):function(n){var r=Ee(n,e);return r===void 0&&r===t?Pn(n,e):X(t,r,Fn|In)}}function Rn(e){return function(t){return t?.[e]}}function zn(e){return function(t){return P(t,e)}}function Bn(e){return A(e)?Rn(N(e)):zn(e)}function Q(e){return typeof e==`function`?e:e==null?C:typeof e==`object`?m(e)?Ln(e[0],e[1]):jn(e):Bn(e)}function Vn(e,t){return e&&o(e,t,k)}function Hn(e,t){return function(n,r){if(n==null)return n;if(!re(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++a<i)&&r(o[a],a,o)!==!1;);return n}}var $=Hn(Vn);function Un(e,t,n){for(var r=-1,i=e==null?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function Wn(e){return typeof e==`function`?e:C}function Gn(e,t){return(m(e)?fe:$)(e,Wn(t))}function Kn(e,t){var n=[];return $(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function qn(e,t){return(m(e)?R:Kn)(e,Q(t,3))}function Jn(e,t){return O(t,function(t){return e[t]})}function Yn(e){return e==null?[]:Jn(e,k(e))}function Xn(e){return e===void 0}function Zn(e,t,n,r,i){return i(e,function(e,i,a){n=r?(r=!1,e):t(n,e,i,a)}),n}function Qn(e,t,n){var r=m(e)?Oe:Zn,i=arguments.length<3;return r(e,Q(t,4),n,i,$)}var $n=E&&1/q(new E([,-0]))[1]==1/0?function(e){return new E(e)}:de,er=200;function tr(e,t,n){var r=-1,i=_e,a=e.length,o=!0,s=[],c=s;if(n)o=!1,i=Un;else if(a>=er){var l=t?null:$n(e);if(l)return q(l);o=!1,i=K,c=new G}else c=t?[]:s;outer:for(;++r<a;){var u=e[r],d=t?t(u):u;if(u=n||u!==0?u:0,o&&d===d){for(var f=c.length;f--;)if(c[f]===d)continue outer;t&&c.push(d),s.push(u)}else i(c,d,n)||(c!==s&&c.push(d),s.push(u))}return s}export{pe as A,P as C,k as D,j as E,O as M,D as N,_e as O,L as S,M as T,Zt as _,qn as a,Ie as b,Wn as c,Vn as d,Q as f,K as g,Nn as h,Yn as i,de as j,ge as k,Un as l,Pn as m,Qn as n,Kn as o,Rn as p,Xn as r,Gn as s,tr as t,$ as u,G as v,N as w,R as x,W as y};
@@ -0,0 +1 @@
1
+ import"./chunk-XZSTWKYB-CBqjoIm6.js";import{n as e}from"./chunk-R5LLSJPH-BijepqoK.js";export{e as createArchitectureServices};