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.
- package/dist/src/handlers/projects.js +61 -2
- package/dist/src/services/file-search.d.ts +59 -0
- package/dist/src/services/file-search.js +269 -0
- package/frontend/dist/assets/{_basePickBy-BP5pqc-z.js → _basePickBy-DVcFyvUy.js} +1 -1
- package/frontend/dist/assets/{_baseUniq-C8JXpw9D.js → _baseUniq-BlaoUomR.js} +1 -1
- package/frontend/dist/assets/architecture-PBZL5I3N-BExHjBcm.js +1 -0
- package/frontend/dist/assets/{architectureDiagram-2XIMDMQ5-C2jiEUuG.js → architectureDiagram-2XIMDMQ5-BNx6-oUQ.js} +1 -1
- package/frontend/dist/assets/{blockDiagram-WCTKOSBZ-BwHBv5v8.js → blockDiagram-WCTKOSBZ-B4T4UcRa.js} +1 -1
- package/frontend/dist/assets/{chunk-7E7YKBS2-D0o-krG6.js → chunk-7E7YKBS2-NeXbzmbu.js} +1 -1
- package/frontend/dist/assets/{chunk-C72U2L5F-BJHsZQ3s.js → chunk-C72U2L5F-B8CSWPSJ.js} +1 -1
- package/frontend/dist/assets/{chunk-EGIJ26TM-IvGKaOpK.js → chunk-EGIJ26TM-CIih76L7.js} +1 -1
- package/frontend/dist/assets/{chunk-L3YUKLVL-kj7gDLqb.js → chunk-L3YUKLVL-ki-YiEHS.js} +1 -1
- package/frontend/dist/assets/{chunk-NQ4KR5QH-BPLxW_0V.js → chunk-NQ4KR5QH-CotGwnjL.js} +1 -1
- package/frontend/dist/assets/{chunk-OZEHJAEY-BvePHeeD.js → chunk-OZEHJAEY-BpNr8Rjz.js} +1 -1
- package/frontend/dist/assets/{chunk-R5LLSJPH-N_kzZPYS.js → chunk-R5LLSJPH-BijepqoK.js} +1 -1
- package/frontend/dist/assets/{chunk-WL4C6EOR-CzQbiss9.js → chunk-WL4C6EOR-pSm7LSvh.js} +1 -1
- package/frontend/dist/assets/{chunk-XIRO2GV7-Z9gqatVF.js → chunk-XIRO2GV7-DwBvqLWa.js} +1 -1
- package/frontend/dist/assets/{chunk-XZSTWKYB-BddvqxDB.js → chunk-XZSTWKYB-CBqjoIm6.js} +1 -1
- package/frontend/dist/assets/{classDiagram-VBA2DB6C-BUysImLJ.js → classDiagram-VBA2DB6C-BFFlfFWc.js} +1 -1
- package/frontend/dist/assets/{classDiagram-v2-RAHNMMFH-os3tUcXP.js → classDiagram-v2-RAHNMMFH-Zm4JHiZG.js} +1 -1
- package/frontend/dist/assets/clone-DTaWrNz3.js +1 -0
- package/frontend/dist/assets/{dagre-oxy3nsFM.js → dagre-DwFVI7Jd.js} +1 -1
- package/frontend/dist/assets/{dagre-KLK3FWXG-BGhxKTrS.js → dagre-KLK3FWXG-HvRFWYud.js} +1 -1
- package/frontend/dist/assets/{diagram-E7M64L7V-DKevl205.js → diagram-E7M64L7V-CQyHprzu.js} +1 -1
- package/frontend/dist/assets/{diagram-IFDJBPK2-KQaESDDI.js → diagram-IFDJBPK2-CqkOPpOt.js} +1 -1
- package/frontend/dist/assets/{diagram-P4PSJMXO-BrpIvkQv.js → diagram-P4PSJMXO-OpXCvbKg.js} +1 -1
- package/frontend/dist/assets/{erDiagram-INFDFZHY-B_SO_zDO.js → erDiagram-INFDFZHY-eQioynMC.js} +1 -1
- package/frontend/dist/assets/{flowDiagram-PKNHOUZH-vCrwouWP.js → flowDiagram-PKNHOUZH-hx7shOit.js} +1 -1
- package/frontend/dist/assets/gitGraph-HDMCJU4V-CcSU6vzN.js +1 -0
- package/frontend/dist/assets/{gitGraphDiagram-K3NZZRJ6-BjsXnLlp.js → gitGraphDiagram-K3NZZRJ6-BUC-llGK.js} +1 -1
- package/frontend/dist/assets/{graphlib-CXuPQLPN.js → graphlib-ChWzv2kY.js} +1 -1
- package/frontend/dist/assets/index-B71Ng0qa.css +1 -0
- package/frontend/dist/assets/index-B8EBg0hm.js +157 -0
- package/frontend/dist/assets/info-3K5VOQVL-B3MsAb_d.js +1 -0
- package/frontend/dist/assets/infoDiagram-LFFYTUFH-BMFFvbZ3.js +2 -0
- package/frontend/dist/assets/{ishikawaDiagram-PHBUUO56-DyeLXKpu.js → ishikawaDiagram-PHBUUO56-B80zFWUg.js} +1 -1
- package/frontend/dist/assets/{kanban-definition-K7BYSVSG-BktdlC34.js → kanban-definition-K7BYSVSG-wvVdN2XJ.js} +1 -1
- package/frontend/dist/assets/{mermaid-parser.core-CLD6OoQN.js → mermaid-parser.core-fDWeedvo.js} +2 -2
- package/frontend/dist/assets/{mindmap-definition-YRQLILUH-WGZwfAjA.js → mindmap-definition-YRQLILUH-COI6teLb.js} +1 -1
- package/frontend/dist/assets/packet-RMMSAZCW-AtnYULi6.js +1 -0
- package/frontend/dist/assets/pie-UPGHQEXC-Cm4Nnlh1.js +1 -0
- package/frontend/dist/assets/{pieDiagram-SKSYHLDU-8bBf71Ue.js → pieDiagram-SKSYHLDU-bjwLIsJh.js} +1 -1
- package/frontend/dist/assets/radar-KQ55EAFF-D5ioamgd.js +1 -0
- package/frontend/dist/assets/{requirementDiagram-Z7DCOOCP-EQHcxLB0.js → requirementDiagram-Z7DCOOCP-3UYkNoFC.js} +1 -1
- package/frontend/dist/assets/{sequenceDiagram-2WXFIKYE-BuXA25IP.js → sequenceDiagram-2WXFIKYE-DCXcXQoE.js} +1 -1
- package/frontend/dist/assets/{stateDiagram-RAJIS63D-ddkAWKhI.js → stateDiagram-RAJIS63D-DnpcJhHB.js} +1 -1
- package/frontend/dist/assets/{stateDiagram-v2-FVOUBMTO-BLVAwlfX.js → stateDiagram-v2-FVOUBMTO-Db77rn81.js} +1 -1
- package/frontend/dist/assets/treemap-KZPCXAKY-BJS2z0TG.js +1 -0
- package/frontend/dist/assets/{vennDiagram-LZ73GAT5-C6g8XU-E.js → vennDiagram-LZ73GAT5-DpZs8KCD.js} +1 -1
- package/frontend/dist/assets/{xychartDiagram-JWTSCODW-BEz425ew.js → xychartDiagram-JWTSCODW-CFVB_zoy.js} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/architecture-PBZL5I3N-Cm0ChR6S.js +0 -1
- package/frontend/dist/assets/clone-CjYMfESW.js +0 -1
- package/frontend/dist/assets/gitGraph-HDMCJU4V-CAmchn0S.js +0 -1
- package/frontend/dist/assets/index-CJrelq5A.css +0 -1
- package/frontend/dist/assets/index-CvDkr5VR.js +0 -157
- package/frontend/dist/assets/info-3K5VOQVL-w0fuf3Vz.js +0 -1
- package/frontend/dist/assets/infoDiagram-LFFYTUFH-CyQQoy2i.js +0 -2
- package/frontend/dist/assets/packet-RMMSAZCW-BziBZLJ6.js +0 -1
- package/frontend/dist/assets/pie-UPGHQEXC-vv-0ECOa.js +0 -1
- package/frontend/dist/assets/radar-KQ55EAFF-fJ4cC2Bt.js +0 -1
- 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
|
|
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 (!
|
|
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-
|
|
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};
|