@payloadcms/plugin-mcp 3.78.0-canary.1 → 3.78.0-canary.2
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/mcp/helpers/config.d.ts +1 -9
- package/dist/mcp/helpers/config.d.ts.map +1 -1
- package/dist/mcp/helpers/config.js +0 -62
- package/dist/mcp/helpers/config.js.map +1 -1
- package/dist/mcp/helpers/fields.d.ts +6 -25
- package/dist/mcp/helpers/fields.d.ts.map +1 -1
- package/dist/mcp/helpers/fields.js +35 -29
- package/dist/mcp/helpers/fields.js.map +1 -1
- package/dist/mcp/helpers/fileValidation.d.ts +0 -2
- package/dist/mcp/helpers/fileValidation.d.ts.map +1 -1
- package/dist/mcp/helpers/fileValidation.js +44 -82
- package/dist/mcp/helpers/fileValidation.js.map +1 -1
- package/dist/mcp/tools/collection/create.d.ts.map +1 -1
- package/dist/mcp/tools/collection/create.js +2 -25
- package/dist/mcp/tools/collection/create.js.map +1 -1
- package/dist/mcp/tools/collection/delete.d.ts.map +1 -1
- package/dist/mcp/tools/collection/delete.js +1 -12
- package/dist/mcp/tools/collection/delete.js.map +1 -1
- package/dist/mcp/tools/config/update.d.ts +1 -1
- package/dist/mcp/tools/config/update.d.ts.map +1 -1
- package/dist/mcp/tools/config/update.js +3 -3
- package/dist/mcp/tools/config/update.js.map +1 -1
- package/dist/mcp/tools/job/create.d.ts.map +1 -1
- package/dist/mcp/tools/job/create.js +3 -6
- package/dist/mcp/tools/job/create.js.map +1 -1
- package/dist/mcp/tools/job/run.d.ts +1 -1
- package/dist/mcp/tools/job/run.d.ts.map +1 -1
- package/dist/mcp/tools/job/run.js +5 -26
- package/dist/mcp/tools/job/run.js.map +1 -1
- package/dist/mcp/tools/job/update.d.ts.map +1 -1
- package/dist/mcp/tools/job/update.js +10 -38
- package/dist/mcp/tools/job/update.js.map +1 -1
- package/dist/mcp/tools/schemas.d.ts +0 -3
- package/dist/mcp/tools/schemas.d.ts.map +1 -1
- package/dist/mcp/tools/schemas.js +0 -1
- package/dist/mcp/tools/schemas.js.map +1 -1
- package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +1 -1
- package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +1 -2
- package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +1 -1
- package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +5 -0
- package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +1 -1
- package/dist/utils/schemaConversion/sanitizeJsonSchema.js +38 -0
- package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +1 -1
- package/package.json +3 -3
- package/src/mcp/helpers/config.ts +1 -114
- package/src/mcp/helpers/fields.ts +46 -50
- package/src/mcp/helpers/fileValidation.ts +38 -93
- package/src/mcp/tools/collection/create.ts +2 -30
- package/src/mcp/tools/collection/delete.ts +1 -19
- package/src/mcp/tools/config/update.ts +0 -4
- package/src/mcp/tools/job/create.ts +5 -11
- package/src/mcp/tools/job/run.ts +14 -38
- package/src/mcp/tools/job/update.ts +29 -77
- package/src/mcp/tools/schemas.ts +0 -1
- package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +1 -3
- package/src/utils/schemaConversion/sanitizeJsonSchema.ts +41 -0
- package/dist/mcp/helpers/conversion.d.ts +0 -2
- package/dist/mcp/helpers/conversion.d.ts.map +0 -1
- package/dist/mcp/helpers/conversion.js +0 -5
- package/dist/mcp/helpers/conversion.js.map +0 -1
- package/dist/mcp/helpers/validation.d.ts +0 -9
- package/dist/mcp/helpers/validation.d.ts.map +0 -1
- package/dist/mcp/helpers/validation.js +0 -22
- package/dist/mcp/helpers/validation.js.map +0 -1
- package/src/mcp/helpers/conversion.ts +0 -3
- package/src/mcp/helpers/validation.ts +0 -32
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AdminConfig,
|
|
1
|
+
import type { AdminConfig, DatabaseConfig, PluginUpdates } from '../../types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Adds a collection to the payload.config.ts file
|
|
4
4
|
*/
|
|
@@ -19,12 +19,4 @@ export declare function updateDatabaseConfig(content: string, databaseConfig: Da
|
|
|
19
19
|
* Updates plugins configuration in payload.config.ts
|
|
20
20
|
*/
|
|
21
21
|
export declare function updatePluginsConfig(content: string, pluginUpdates: PluginUpdates): string;
|
|
22
|
-
/**
|
|
23
|
-
* Updates general configuration options in payload.config.ts
|
|
24
|
-
*/
|
|
25
|
-
export declare function updateGeneralConfig(content: string, generalConfig: GeneralConfig): string;
|
|
26
|
-
/**
|
|
27
|
-
* Updates collection-level configuration in a collection file
|
|
28
|
-
*/
|
|
29
|
-
export declare function updateCollectionConfig(content: string, updates: CollectionConfigUpdates, collectionName: string): string;
|
|
30
22
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/mcp/helpers/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/mcp/helpers/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEhF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAwCrF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAgC1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAoDnF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,CAkB5F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,CA6CzF"}
|
|
@@ -149,67 +149,5 @@
|
|
|
149
149
|
}
|
|
150
150
|
return content;
|
|
151
151
|
}
|
|
152
|
-
/**
|
|
153
|
-
* Updates general configuration options in payload.config.ts
|
|
154
|
-
*/ export function updateGeneralConfig(content, generalConfig) {
|
|
155
|
-
// Update various general configuration options
|
|
156
|
-
Object.entries(generalConfig).forEach(([key, value])=>{
|
|
157
|
-
if (value !== undefined && value !== null) {
|
|
158
|
-
const configRegex = new RegExp(`${key}:\\s*[^,}]*`, 'g');
|
|
159
|
-
if (content.match(configRegex)) {
|
|
160
|
-
if (typeof value === 'string') {
|
|
161
|
-
content = content.replace(configRegex, `${key}: '${value}'`);
|
|
162
|
-
} else if (typeof value === 'boolean') {
|
|
163
|
-
content = content.replace(configRegex, `${key}: ${value}`);
|
|
164
|
-
} else if (typeof value === 'object') {
|
|
165
|
-
content = content.replace(configRegex, `${key}: ${JSON.stringify(value, null, 2)}`);
|
|
166
|
-
}
|
|
167
|
-
} else {
|
|
168
|
-
// Add new config option
|
|
169
|
-
const configValue = typeof value === 'string' ? `'${value}'` : typeof value === 'object' ? JSON.stringify(value, null, 2) : value;
|
|
170
|
-
content = content.replace(/export default buildConfig\(\{/, `export default buildConfig({\n ${key}: ${configValue},`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
return content;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Updates collection-level configuration in a collection file
|
|
178
|
-
*/ export function updateCollectionConfig(content, updates, collectionName) {
|
|
179
|
-
let updatedContent = content;
|
|
180
|
-
if (updates.slug) {
|
|
181
|
-
updatedContent = updatedContent.replace(/slug:\s*'[^']*'/, `slug: '${updates.slug}'`);
|
|
182
|
-
}
|
|
183
|
-
if (updates.access) {
|
|
184
|
-
const accessRegex = /access:\s*\{[^}]*\}/;
|
|
185
|
-
if (updatedContent.match(accessRegex)) {
|
|
186
|
-
// Update existing access config
|
|
187
|
-
Object.entries(updates.access).forEach(([key, value])=>{
|
|
188
|
-
if (value !== undefined) {
|
|
189
|
-
updatedContent = updatedContent.replace(new RegExp(`${key}:\\s*[^,}]*`), `${key}: ${value}`);
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
} else {
|
|
193
|
-
// Add access config
|
|
194
|
-
const accessConfig = Object.entries(updates.access).filter(([, value])=>value !== undefined).map(([key, value])=>` ${key}: ${value}`).join(',\n');
|
|
195
|
-
updatedContent = updatedContent.replace(/slug:\s*'[^']*',/, `slug: '${collectionName}',\n access: {\n${accessConfig}\n },`);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
if (updates.timestamps !== undefined) {
|
|
199
|
-
if (updatedContent.includes('timestamps:')) {
|
|
200
|
-
updatedContent = updatedContent.replace(/timestamps:[^,}]*/, `timestamps: ${updates.timestamps}`);
|
|
201
|
-
} else {
|
|
202
|
-
updatedContent = updatedContent.replace(/fields:\s*\[/, `timestamps: ${updates.timestamps},\n fields: [`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
if (updates.versioning !== undefined) {
|
|
206
|
-
if (updatedContent.includes('versioning:')) {
|
|
207
|
-
updatedContent = updatedContent.replace(/versioning:[^,}]*/, `versioning: ${updates.versioning}`);
|
|
208
|
-
} else {
|
|
209
|
-
updatedContent = updatedContent.replace(/fields:\s*\[/, `versioning: ${updates.versioning},\n fields: [`);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return updatedContent;
|
|
213
|
-
}
|
|
214
152
|
|
|
215
153
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mcp/helpers/config.ts"],"sourcesContent":["import type {\n AdminConfig,\n CollectionConfigUpdates,\n DatabaseConfig,\n GeneralConfig,\n PluginUpdates,\n} from '../../types.js'\n\n/**\n * Adds a collection to the payload.config.ts file\n */\nexport function addCollectionToConfig(content: string, collectionName: string): string {\n const capitalizedName = collectionName.charAt(0).toUpperCase() + collectionName.slice(1)\n\n // Add import statement\n const importRegex = /import.*from\\s*['\"]\\.\\/collections\\/.*['\"]/g\n const importMatches = content.match(importRegex)\n\n if (importMatches && importMatches.length > 0) {\n const lastImport = importMatches[importMatches.length - 1]\n const newImport = `import { ${capitalizedName} } from './collections/${capitalizedName}'`\n\n // Check if import already exists\n if (lastImport && !content.includes(newImport)) {\n content = content.replace(lastImport, `${lastImport}\\n${newImport}`)\n }\n } else {\n // Add import after existing imports\n const importInsertPoint = content.indexOf(\"import sharp from 'sharp'\")\n if (importInsertPoint !== -1) {\n const lineEnd = content.indexOf('\\n', importInsertPoint)\n const newImport = `import { ${capitalizedName} } from './collections/${capitalizedName}'`\n content = content.slice(0, lineEnd + 1) + newImport + '\\n' + content.slice(lineEnd + 1)\n }\n }\n\n // Add to collections array\n const collectionsRegex = /collections:\\s*\\[([\\s\\S]*?)\\]/\n const collectionsMatch = content.match(collectionsRegex)\n\n if (collectionsMatch && collectionsMatch[1]) {\n const collectionsContent = collectionsMatch[1].trim()\n if (!collectionsContent.includes(capitalizedName)) {\n const newCollections = collectionsContent\n ? `${collectionsContent}, ${capitalizedName}`\n : capitalizedName\n content = content.replace(collectionsRegex, `collections: [${newCollections}]`)\n }\n }\n\n return content\n}\n\n/**\n * Removes a collection from the payload.config.ts file\n */\nexport function removeCollectionFromConfig(content: string, collectionName: string): string {\n const capitalizedName = collectionName.charAt(0).toUpperCase() + collectionName.slice(1)\n\n // Remove import statement\n const importRegex = new RegExp(\n `import\\\\s*{\\\\s*${capitalizedName}\\\\s*}\\\\s*from\\\\s*['\"]\\\\./collections/${capitalizedName}['\"]\\\\s*\\\\n?`,\n 'g',\n )\n content = content.replace(importRegex, '')\n\n // Remove from collections array\n const collectionsRegex = /collections:\\s*\\[([\\s\\S]*?)\\]/\n const collectionsMatch = content.match(collectionsRegex)\n\n if (collectionsMatch && collectionsMatch[1]) {\n let collectionsContent = collectionsMatch[1]\n\n // Remove the collection name and clean up commas\n collectionsContent = collectionsContent.replace(\n new RegExp(`\\\\s*,?\\\\s*${capitalizedName}\\\\s*,?`, 'g'),\n '',\n )\n collectionsContent = collectionsContent.replace(/,\\s*,/g, ',') // Remove double commas\n collectionsContent = collectionsContent.replace(/^\\s*,|,\\s*$/g, '') // Remove leading/trailing commas\n\n content = content.replace(collectionsRegex, `collections: [${collectionsContent}]`)\n }\n\n // Clean up any double newlines from removed imports\n content = content.replace(/\\n{3,}/g, '\\n\\n')\n\n return content\n}\n\n/**\n * Updates admin configuration in payload.config.ts\n */\nexport function updateAdminConfig(content: string, adminConfig: AdminConfig): string {\n const adminRegex = /admin:\\s*\\{([^}]*)\\}/\n const adminMatch = content.match(adminRegex)\n\n if (adminMatch && adminMatch[1]) {\n let adminContent = adminMatch[1]\n\n // Update specific admin properties\n if (adminConfig.user) {\n if (adminContent.includes('user:')) {\n adminContent = adminContent.replace(/user:[^,}]*/, `user: ${adminConfig.user}.slug`)\n } else {\n adminContent = `\\n user: ${adminConfig.user}.slug,${adminContent}`\n }\n }\n\n if (adminConfig.meta) {\n const metaConfig = Object.entries(adminConfig.meta)\n .map(([key, value]) => ` ${key}: '${value}'`)\n .join(',\\n')\n\n if (adminContent.includes('meta:')) {\n adminContent = adminContent.replace(/meta:\\s*\\{[^}]*\\}/, `meta: {\\n${metaConfig}\\n }`)\n } else {\n adminContent = `${adminContent}\\n meta: {\\n${metaConfig}\\n },`\n }\n }\n\n content = content.replace(adminRegex, `admin: {${adminContent}\\n }`)\n } else {\n // Add admin config if it doesn't exist\n const adminConfigEntries = []\n\n if (adminConfig.user) {\n adminConfigEntries.push(` user: ${adminConfig.user}.slug`)\n }\n\n if (adminConfig.meta) {\n const metaConfig = Object.entries(adminConfig.meta)\n .map(([key, value]) => ` ${key}: '${value}'`)\n .join(',\\n')\n adminConfigEntries.push(` meta: {\\n${metaConfig}\\n }`)\n }\n\n const adminConfigString = `admin: {\\n${adminConfigEntries.join(',\\n')}\\n },`\n content = content.replace(\n /export default buildConfig\\(\\{/,\n `export default buildConfig({\\n ${adminConfigString}`,\n )\n }\n\n return content\n}\n\n/**\n * Updates database configuration in payload.config.ts\n */\nexport function updateDatabaseConfig(content: string, databaseConfig: DatabaseConfig): string {\n if (databaseConfig.type === 'mongodb') {\n // Update to MongoDB adapter\n const dbRegex = /db:[^,}]*(?:,|\\})/\n const mongoImportRegex = /import.*mongooseAdapter.*from.*@payloadcms\\/db-mongodb.*/\n\n if (!content.match(mongoImportRegex)) {\n content = content.replace(\n /(import.*from.*payload.*\\n)/,\n `$1import { mongooseAdapter } from '@payloadcms/db-mongodb'\\n`,\n )\n }\n\n const dbConfig = `db: mongooseAdapter({\\n url: process.env.DATABASE_URL || '${databaseConfig.url || ''}',\\n })`\n content = content.replace(dbRegex, `${dbConfig},`)\n }\n\n return content\n}\n\n/**\n * Updates plugins configuration in payload.config.ts\n */\nexport function updatePluginsConfig(content: string, pluginUpdates: PluginUpdates): string {\n // Add plugin imports\n if (pluginUpdates.add) {\n pluginUpdates.add.forEach((pluginImport: string) => {\n if (!content.includes(pluginImport)) {\n content = content.replace(/(import.*from.*payload.*\\n)/, `$1${pluginImport}\\n`)\n }\n })\n }\n\n // Handle plugins array\n const pluginsRegex = /plugins:\\s*\\[([\\s\\S]*?)\\]/\n const pluginsMatch = content.match(pluginsRegex)\n\n if (pluginsMatch && pluginsMatch[1]) {\n let pluginsContent = pluginsMatch[1]\n\n // Remove plugins\n if (pluginUpdates.remove) {\n pluginUpdates.remove.forEach((pluginName: string) => {\n const pluginRegex = new RegExp(`\\\\s*${pluginName}\\\\(\\\\)\\\\s*,?`, 'g')\n pluginsContent = pluginsContent.replace(pluginRegex, '')\n })\n }\n\n // Add plugins\n if (pluginUpdates.add) {\n pluginUpdates.add.forEach((pluginImport: string) => {\n // This will match: import { PluginName } from '...';\n const match = pluginImport.match(/import\\s*\\{\\s*(\\w+)\\s*\\}/)\n if (match && match[1]) {\n const pluginName = match[1]\n if (!pluginsContent.includes(`${pluginName}(`)) {\n pluginsContent = pluginsContent.trim()\n ? `${pluginsContent}\\n ${pluginName}(),`\n : `\\n ${pluginName}(),`\n }\n }\n })\n }\n\n content = content.replace(pluginsRegex, `plugins: [${pluginsContent}\\n ]`)\n }\n\n return content\n}\n\n/**\n * Updates general configuration options in payload.config.ts\n */\nexport function updateGeneralConfig(content: string, generalConfig: GeneralConfig): string {\n // Update various general configuration options\n Object.entries(generalConfig).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n const configRegex = new RegExp(`${key}:\\\\s*[^,}]*`, 'g')\n\n if (content.match(configRegex)) {\n if (typeof value === 'string') {\n content = content.replace(configRegex, `${key}: '${value}'`)\n } else if (typeof value === 'boolean') {\n content = content.replace(configRegex, `${key}: ${value}`)\n } else if (typeof value === 'object') {\n content = content.replace(configRegex, `${key}: ${JSON.stringify(value, null, 2)}`)\n }\n } else {\n // Add new config option\n const configValue =\n typeof value === 'string'\n ? `'${value}'`\n : typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value\n content = content.replace(\n /export default buildConfig\\(\\{/,\n `export default buildConfig({\\n ${key}: ${configValue},`,\n )\n }\n }\n })\n\n return content\n}\n\n/**\n * Updates collection-level configuration in a collection file\n */\nexport function updateCollectionConfig(\n content: string,\n updates: CollectionConfigUpdates,\n collectionName: string,\n): string {\n let updatedContent = content\n\n if (updates.slug) {\n updatedContent = updatedContent.replace(/slug:\\s*'[^']*'/, `slug: '${updates.slug}'`)\n }\n\n if (updates.access) {\n const accessRegex = /access:\\s*\\{[^}]*\\}/\n if (updatedContent.match(accessRegex)) {\n // Update existing access config\n Object.entries(updates.access).forEach(([key, value]) => {\n if (value !== undefined) {\n updatedContent = updatedContent.replace(\n new RegExp(`${key}:\\\\s*[^,}]*`),\n `${key}: ${value}`,\n )\n }\n })\n } else {\n // Add access config\n const accessConfig = Object.entries(updates.access)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => ` ${key}: ${value}`)\n .join(',\\n')\n\n updatedContent = updatedContent.replace(\n /slug:\\s*'[^']*',/,\n `slug: '${collectionName}',\\n access: {\\n${accessConfig}\\n },`,\n )\n }\n }\n\n if (updates.timestamps !== undefined) {\n if (updatedContent.includes('timestamps:')) {\n updatedContent = updatedContent.replace(\n /timestamps:[^,}]*/,\n `timestamps: ${updates.timestamps}`,\n )\n } else {\n updatedContent = updatedContent.replace(\n /fields:\\s*\\[/,\n `timestamps: ${updates.timestamps},\\n fields: [`,\n )\n }\n }\n\n if (updates.versioning !== undefined) {\n if (updatedContent.includes('versioning:')) {\n updatedContent = updatedContent.replace(\n /versioning:[^,}]*/,\n `versioning: ${updates.versioning}`,\n )\n } else {\n updatedContent = updatedContent.replace(\n /fields:\\s*\\[/,\n `versioning: ${updates.versioning},\\n fields: [`,\n )\n }\n }\n\n return updatedContent\n}\n"],"names":["addCollectionToConfig","content","collectionName","capitalizedName","charAt","toUpperCase","slice","importRegex","importMatches","match","length","lastImport","newImport","includes","replace","importInsertPoint","indexOf","lineEnd","collectionsRegex","collectionsMatch","collectionsContent","trim","newCollections","removeCollectionFromConfig","RegExp","updateAdminConfig","adminConfig","adminRegex","adminMatch","adminContent","user","meta","metaConfig","Object","entries","map","key","value","join","adminConfigEntries","push","adminConfigString","updateDatabaseConfig","databaseConfig","type","dbRegex","mongoImportRegex","dbConfig","url","updatePluginsConfig","pluginUpdates","add","forEach","pluginImport","pluginsRegex","pluginsMatch","pluginsContent","remove","pluginName","pluginRegex","updateGeneralConfig","generalConfig","undefined","configRegex","JSON","stringify","configValue","updateCollectionConfig","updates","updatedContent","slug","access","accessRegex","accessConfig","filter","timestamps","versioning"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/mcp/helpers/config.ts"],"sourcesContent":["import type { AdminConfig, DatabaseConfig, PluginUpdates } from '../../types.js'\n\n/**\n * Adds a collection to the payload.config.ts file\n */\nexport function addCollectionToConfig(content: string, collectionName: string): string {\n const capitalizedName = collectionName.charAt(0).toUpperCase() + collectionName.slice(1)\n\n // Add import statement\n const importRegex = /import.*from\\s*['\"]\\.\\/collections\\/.*['\"]/g\n const importMatches = content.match(importRegex)\n\n if (importMatches && importMatches.length > 0) {\n const lastImport = importMatches[importMatches.length - 1]\n const newImport = `import { ${capitalizedName} } from './collections/${capitalizedName}'`\n\n // Check if import already exists\n if (lastImport && !content.includes(newImport)) {\n content = content.replace(lastImport, `${lastImport}\\n${newImport}`)\n }\n } else {\n // Add import after existing imports\n const importInsertPoint = content.indexOf(\"import sharp from 'sharp'\")\n if (importInsertPoint !== -1) {\n const lineEnd = content.indexOf('\\n', importInsertPoint)\n const newImport = `import { ${capitalizedName} } from './collections/${capitalizedName}'`\n content = content.slice(0, lineEnd + 1) + newImport + '\\n' + content.slice(lineEnd + 1)\n }\n }\n\n // Add to collections array\n const collectionsRegex = /collections:\\s*\\[([\\s\\S]*?)\\]/\n const collectionsMatch = content.match(collectionsRegex)\n\n if (collectionsMatch && collectionsMatch[1]) {\n const collectionsContent = collectionsMatch[1].trim()\n if (!collectionsContent.includes(capitalizedName)) {\n const newCollections = collectionsContent\n ? `${collectionsContent}, ${capitalizedName}`\n : capitalizedName\n content = content.replace(collectionsRegex, `collections: [${newCollections}]`)\n }\n }\n\n return content\n}\n\n/**\n * Removes a collection from the payload.config.ts file\n */\nexport function removeCollectionFromConfig(content: string, collectionName: string): string {\n const capitalizedName = collectionName.charAt(0).toUpperCase() + collectionName.slice(1)\n\n // Remove import statement\n const importRegex = new RegExp(\n `import\\\\s*{\\\\s*${capitalizedName}\\\\s*}\\\\s*from\\\\s*['\"]\\\\./collections/${capitalizedName}['\"]\\\\s*\\\\n?`,\n 'g',\n )\n content = content.replace(importRegex, '')\n\n // Remove from collections array\n const collectionsRegex = /collections:\\s*\\[([\\s\\S]*?)\\]/\n const collectionsMatch = content.match(collectionsRegex)\n\n if (collectionsMatch && collectionsMatch[1]) {\n let collectionsContent = collectionsMatch[1]\n\n // Remove the collection name and clean up commas\n collectionsContent = collectionsContent.replace(\n new RegExp(`\\\\s*,?\\\\s*${capitalizedName}\\\\s*,?`, 'g'),\n '',\n )\n collectionsContent = collectionsContent.replace(/,\\s*,/g, ',') // Remove double commas\n collectionsContent = collectionsContent.replace(/^\\s*,|,\\s*$/g, '') // Remove leading/trailing commas\n\n content = content.replace(collectionsRegex, `collections: [${collectionsContent}]`)\n }\n\n // Clean up any double newlines from removed imports\n content = content.replace(/\\n{3,}/g, '\\n\\n')\n\n return content\n}\n\n/**\n * Updates admin configuration in payload.config.ts\n */\nexport function updateAdminConfig(content: string, adminConfig: AdminConfig): string {\n const adminRegex = /admin:\\s*\\{([^}]*)\\}/\n const adminMatch = content.match(adminRegex)\n\n if (adminMatch && adminMatch[1]) {\n let adminContent = adminMatch[1]\n\n // Update specific admin properties\n if (adminConfig.user) {\n if (adminContent.includes('user:')) {\n adminContent = adminContent.replace(/user:[^,}]*/, `user: ${adminConfig.user}.slug`)\n } else {\n adminContent = `\\n user: ${adminConfig.user}.slug,${adminContent}`\n }\n }\n\n if (adminConfig.meta) {\n const metaConfig = Object.entries(adminConfig.meta)\n .map(([key, value]) => ` ${key}: '${value}'`)\n .join(',\\n')\n\n if (adminContent.includes('meta:')) {\n adminContent = adminContent.replace(/meta:\\s*\\{[^}]*\\}/, `meta: {\\n${metaConfig}\\n }`)\n } else {\n adminContent = `${adminContent}\\n meta: {\\n${metaConfig}\\n },`\n }\n }\n\n content = content.replace(adminRegex, `admin: {${adminContent}\\n }`)\n } else {\n // Add admin config if it doesn't exist\n const adminConfigEntries = []\n\n if (adminConfig.user) {\n adminConfigEntries.push(` user: ${adminConfig.user}.slug`)\n }\n\n if (adminConfig.meta) {\n const metaConfig = Object.entries(adminConfig.meta)\n .map(([key, value]) => ` ${key}: '${value}'`)\n .join(',\\n')\n adminConfigEntries.push(` meta: {\\n${metaConfig}\\n }`)\n }\n\n const adminConfigString = `admin: {\\n${adminConfigEntries.join(',\\n')}\\n },`\n content = content.replace(\n /export default buildConfig\\(\\{/,\n `export default buildConfig({\\n ${adminConfigString}`,\n )\n }\n\n return content\n}\n\n/**\n * Updates database configuration in payload.config.ts\n */\nexport function updateDatabaseConfig(content: string, databaseConfig: DatabaseConfig): string {\n if (databaseConfig.type === 'mongodb') {\n // Update to MongoDB adapter\n const dbRegex = /db:[^,}]*(?:,|\\})/\n const mongoImportRegex = /import.*mongooseAdapter.*from.*@payloadcms\\/db-mongodb.*/\n\n if (!content.match(mongoImportRegex)) {\n content = content.replace(\n /(import.*from.*payload.*\\n)/,\n `$1import { mongooseAdapter } from '@payloadcms/db-mongodb'\\n`,\n )\n }\n\n const dbConfig = `db: mongooseAdapter({\\n url: process.env.DATABASE_URL || '${databaseConfig.url || ''}',\\n })`\n content = content.replace(dbRegex, `${dbConfig},`)\n }\n\n return content\n}\n\n/**\n * Updates plugins configuration in payload.config.ts\n */\nexport function updatePluginsConfig(content: string, pluginUpdates: PluginUpdates): string {\n // Add plugin imports\n if (pluginUpdates.add) {\n pluginUpdates.add.forEach((pluginImport: string) => {\n if (!content.includes(pluginImport)) {\n content = content.replace(/(import.*from.*payload.*\\n)/, `$1${pluginImport}\\n`)\n }\n })\n }\n\n // Handle plugins array\n const pluginsRegex = /plugins:\\s*\\[([\\s\\S]*?)\\]/\n const pluginsMatch = content.match(pluginsRegex)\n\n if (pluginsMatch && pluginsMatch[1]) {\n let pluginsContent = pluginsMatch[1]\n\n // Remove plugins\n if (pluginUpdates.remove) {\n pluginUpdates.remove.forEach((pluginName: string) => {\n const pluginRegex = new RegExp(`\\\\s*${pluginName}\\\\(\\\\)\\\\s*,?`, 'g')\n pluginsContent = pluginsContent.replace(pluginRegex, '')\n })\n }\n\n // Add plugins\n if (pluginUpdates.add) {\n pluginUpdates.add.forEach((pluginImport: string) => {\n // This will match: import { PluginName } from '...';\n const match = pluginImport.match(/import\\s*\\{\\s*(\\w+)\\s*\\}/)\n if (match && match[1]) {\n const pluginName = match[1]\n if (!pluginsContent.includes(`${pluginName}(`)) {\n pluginsContent = pluginsContent.trim()\n ? `${pluginsContent}\\n ${pluginName}(),`\n : `\\n ${pluginName}(),`\n }\n }\n })\n }\n\n content = content.replace(pluginsRegex, `plugins: [${pluginsContent}\\n ]`)\n }\n\n return content\n}\n"],"names":["addCollectionToConfig","content","collectionName","capitalizedName","charAt","toUpperCase","slice","importRegex","importMatches","match","length","lastImport","newImport","includes","replace","importInsertPoint","indexOf","lineEnd","collectionsRegex","collectionsMatch","collectionsContent","trim","newCollections","removeCollectionFromConfig","RegExp","updateAdminConfig","adminConfig","adminRegex","adminMatch","adminContent","user","meta","metaConfig","Object","entries","map","key","value","join","adminConfigEntries","push","adminConfigString","updateDatabaseConfig","databaseConfig","type","dbRegex","mongoImportRegex","dbConfig","url","updatePluginsConfig","pluginUpdates","add","forEach","pluginImport","pluginsRegex","pluginsMatch","pluginsContent","remove","pluginName","pluginRegex"],"mappings":"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"}
|
|
@@ -1,27 +1,9 @@
|
|
|
1
|
-
type FieldDefinition
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}[];
|
|
8
|
-
position?: 'main' | 'sidebar';
|
|
9
|
-
required?: boolean;
|
|
10
|
-
type: string;
|
|
11
|
-
};
|
|
12
|
-
type FieldModification = {
|
|
13
|
-
changes: {
|
|
14
|
-
description?: string;
|
|
15
|
-
options?: {
|
|
16
|
-
label: string;
|
|
17
|
-
value: string;
|
|
18
|
-
}[];
|
|
19
|
-
position?: 'main' | 'sidebar';
|
|
20
|
-
required?: boolean;
|
|
21
|
-
type?: string;
|
|
22
|
-
};
|
|
23
|
-
fieldName: string;
|
|
24
|
-
};
|
|
1
|
+
import type { FieldDefinition, FieldModification } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the TypeScript source string for a single field definition block.
|
|
4
|
+
* Used when writing collection files to disk.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateFieldDefinitionString(field: FieldDefinition): string;
|
|
25
7
|
/**
|
|
26
8
|
* Adds new fields to a collection file content
|
|
27
9
|
*/
|
|
@@ -34,5 +16,4 @@ export declare function removeFieldsFromCollection(content: string, fieldNames:
|
|
|
34
16
|
* Modifies existing fields in a collection file content
|
|
35
17
|
*/
|
|
36
18
|
export declare function modifyFieldsInCollection(content: string, modifications: FieldModification[]): string;
|
|
37
|
-
export {};
|
|
38
19
|
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/mcp/helpers/fields.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/mcp/helpers/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAWxE;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAiC5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAqB3F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBxF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,iBAAiB,EAAE,GACjC,MAAM,CAiDR"}
|
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
/** Escapes a value for safe embedding inside a single-quoted TypeScript string literal. */ function escapeSingleQuotedString(value) {
|
|
2
|
+
return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\r/g, '\\r').replace(/\n/g, '\\n');
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Generates the TypeScript source string for a single field definition block.
|
|
6
|
+
* Used when writing collection files to disk.
|
|
7
|
+
*/ export function generateFieldDefinitionString(field) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push(` {`);
|
|
10
|
+
lines.push(` name: '${escapeSingleQuotedString(field.name)}',`);
|
|
11
|
+
lines.push(` type: '${escapeSingleQuotedString(field.type)}',`);
|
|
12
|
+
if (field.required) {
|
|
13
|
+
lines.push(` required: true,`);
|
|
14
|
+
}
|
|
15
|
+
if (field.description || field.position) {
|
|
16
|
+
lines.push(` admin: {`);
|
|
17
|
+
if (field.description) {
|
|
18
|
+
lines.push(` description: '${escapeSingleQuotedString(field.description)}',`);
|
|
19
|
+
}
|
|
20
|
+
if (field.position) {
|
|
21
|
+
lines.push(` position: '${escapeSingleQuotedString(field.position)}',`);
|
|
22
|
+
}
|
|
23
|
+
lines.push(` },`);
|
|
24
|
+
}
|
|
25
|
+
if (field.options && field.type === 'select') {
|
|
26
|
+
lines.push(` options: [`);
|
|
27
|
+
field.options.forEach((option)=>{
|
|
28
|
+
lines.push(` { label: '${escapeSingleQuotedString(option.label)}', value: '${escapeSingleQuotedString(option.value)}' },`);
|
|
29
|
+
});
|
|
30
|
+
lines.push(` ],`);
|
|
31
|
+
}
|
|
32
|
+
lines.push(` },`);
|
|
33
|
+
return lines.join('\n');
|
|
34
|
+
}
|
|
1
35
|
/**
|
|
2
36
|
* Adds new fields to a collection file content
|
|
3
37
|
*/ export function addFieldsToCollection(content, newFields) {
|
|
@@ -7,35 +41,7 @@
|
|
|
7
41
|
if (!match) {
|
|
8
42
|
throw new Error('Could not find fields array in collection file');
|
|
9
43
|
}
|
|
10
|
-
|
|
11
|
-
const newFieldDefinitions = newFields.map((field)=>{
|
|
12
|
-
const fieldConfig = [];
|
|
13
|
-
fieldConfig.push(` {`);
|
|
14
|
-
fieldConfig.push(` name: '${field.name}',`);
|
|
15
|
-
fieldConfig.push(` type: '${field.type}',`);
|
|
16
|
-
if (field.required) {
|
|
17
|
-
fieldConfig.push(` required: true,`);
|
|
18
|
-
}
|
|
19
|
-
if (field.description || field.position) {
|
|
20
|
-
fieldConfig.push(` admin: {`);
|
|
21
|
-
if (field.description) {
|
|
22
|
-
fieldConfig.push(` description: '${field.description}',`);
|
|
23
|
-
}
|
|
24
|
-
if (field.position) {
|
|
25
|
-
fieldConfig.push(` position: '${field.position}',`);
|
|
26
|
-
}
|
|
27
|
-
fieldConfig.push(` },`);
|
|
28
|
-
}
|
|
29
|
-
if (field.options && field.type === 'select') {
|
|
30
|
-
fieldConfig.push(` options: [`);
|
|
31
|
-
field.options.forEach((option)=>{
|
|
32
|
-
fieldConfig.push(` { label: '${option.label}', value: '${option.value}' },`);
|
|
33
|
-
});
|
|
34
|
-
fieldConfig.push(` ],`);
|
|
35
|
-
}
|
|
36
|
-
fieldConfig.push(` },`);
|
|
37
|
-
return fieldConfig.join('\n');
|
|
38
|
-
}).join('\n');
|
|
44
|
+
const newFieldDefinitions = newFields.map(generateFieldDefinitionString).join('\n');
|
|
39
45
|
// Add new fields before the closing bracket
|
|
40
46
|
const existingFields = match[1] || '';
|
|
41
47
|
const hasTrailingComma = existingFields.trim().endsWith(',');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mcp/helpers/fields.ts"],"sourcesContent":["type FieldDefinition
|
|
1
|
+
{"version":3,"sources":["../../../src/mcp/helpers/fields.ts"],"sourcesContent":["import type { FieldDefinition, FieldModification } from '../../types.js'\n\n/** Escapes a value for safe embedding inside a single-quoted TypeScript string literal. */\nfunction escapeSingleQuotedString(value: string): string {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\r/g, '\\\\r')\n .replace(/\\n/g, '\\\\n')\n}\n\n/**\n * Generates the TypeScript source string for a single field definition block.\n * Used when writing collection files to disk.\n */\nexport function generateFieldDefinitionString(field: FieldDefinition): string {\n const lines: string[] = []\n lines.push(` {`)\n lines.push(` name: '${escapeSingleQuotedString(field.name)}',`)\n lines.push(` type: '${escapeSingleQuotedString(field.type)}',`)\n\n if (field.required) {\n lines.push(` required: true,`)\n }\n\n if (field.description || field.position) {\n lines.push(` admin: {`)\n if (field.description) {\n lines.push(` description: '${escapeSingleQuotedString(field.description)}',`)\n }\n if (field.position) {\n lines.push(` position: '${escapeSingleQuotedString(field.position)}',`)\n }\n lines.push(` },`)\n }\n\n if (field.options && field.type === 'select') {\n lines.push(` options: [`)\n field.options.forEach((option) => {\n lines.push(\n ` { label: '${escapeSingleQuotedString(option.label)}', value: '${escapeSingleQuotedString(option.value)}' },`,\n )\n })\n lines.push(` ],`)\n }\n\n lines.push(` },`)\n return lines.join('\\n')\n}\n\n/**\n * Adds new fields to a collection file content\n */\nexport function addFieldsToCollection(content: string, newFields: FieldDefinition[]): string {\n // Find the fields array closing bracket\n const fieldsRegex = /fields:\\s*\\[([\\s\\S]*?)\\]\\s*(?:,\\s*)?\\}/\n const match = content.match(fieldsRegex)\n\n if (!match) {\n throw new Error('Could not find fields array in collection file')\n }\n\n const newFieldDefinitions = newFields.map(generateFieldDefinitionString).join('\\n')\n\n // Add new fields before the closing bracket\n const existingFields = match[1] || ''\n const hasTrailingComma = existingFields.trim().endsWith(',')\n const separator = hasTrailingComma ? '\\n' : ',\\n'\n\n return content.replace(\n fieldsRegex,\n `fields: [${existingFields}${separator}${newFieldDefinitions}\\n ],\n}`,\n )\n}\n\n/**\n * Removes fields from a collection file content\n */\nexport function removeFieldsFromCollection(content: string, fieldNames: string[]): string {\n let updatedContent = content\n\n fieldNames.forEach((fieldName) => {\n // Create regex to match the field definition\n const fieldRegex = new RegExp(\n `\\\\s*{[^}]*name:\\\\s*['\"]${fieldName}['\"][^}]*}[^}]*(?:},?|,?\\\\s*})`,\n 'gs',\n )\n updatedContent = updatedContent.replace(fieldRegex, '')\n })\n\n // Clean up any double commas or trailing commas\n updatedContent = updatedContent.replace(/,\\s*,/g, ',')\n updatedContent = updatedContent.replace(/,\\s*\\]/g, '\\n ]')\n\n return updatedContent\n}\n\n/**\n * Modifies existing fields in a collection file content\n */\nexport function modifyFieldsInCollection(\n content: string,\n modifications: FieldModification[],\n): string {\n let updatedContent = content\n\n modifications.forEach((mod) => {\n const { changes, fieldName } = mod\n\n // Find the field definition\n const fieldRegex = new RegExp(`({[^}]*name:\\\\s*['\"]${fieldName}['\"][^}]*})`, 'gs')\n const fieldMatch = updatedContent.match(fieldRegex)\n\n if (fieldMatch) {\n let fieldDef = fieldMatch[0]\n\n // Apply changes\n if (changes.type) {\n fieldDef = fieldDef.replace(/type:\\s*'[^']*'/, `type: '${changes.type}'`)\n }\n\n if (changes.required !== undefined) {\n if (fieldDef.includes('required:')) {\n fieldDef = fieldDef.replace(/required:[^,]*/, `required: ${changes.required}`)\n } else {\n fieldDef = fieldDef.replace(\n /type:\\s*'[^']*',/,\n `type: '${changes.type}',\\n required: ${changes.required},`,\n )\n }\n }\n\n if (changes.description) {\n const adminRegex = /admin:\\s*\\{[^}]*\\}/\n if (fieldDef.match(adminRegex)) {\n fieldDef = fieldDef.replace(\n /description:\\s*'[^']*'/,\n `description: '${changes.description}'`,\n )\n } else {\n fieldDef = fieldDef.replace(\n /\\},?\\s*$/,\n `,\\n admin: {\\n description: '${changes.description}',\\n },\\n }`,\n )\n }\n }\n\n updatedContent = updatedContent.replace(fieldRegex, fieldDef)\n }\n })\n\n return updatedContent\n}\n"],"names":["escapeSingleQuotedString","value","replace","generateFieldDefinitionString","field","lines","push","name","type","required","description","position","options","forEach","option","label","join","addFieldsToCollection","content","newFields","fieldsRegex","match","Error","newFieldDefinitions","map","existingFields","hasTrailingComma","trim","endsWith","separator","removeFieldsFromCollection","fieldNames","updatedContent","fieldName","fieldRegex","RegExp","modifyFieldsInCollection","modifications","mod","changes","fieldMatch","fieldDef","undefined","includes","adminRegex"],"mappings":"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"}
|
|
@@ -64,6 +64,4 @@ export interface WorkflowConfig {
|
|
|
64
64
|
*/
|
|
65
65
|
export declare const validatePayloadFile: <T = CollectionConfig | TaskConfig | WorkflowConfig>(fileName: string, type: ValidationType) => Promise<ValidationResult<T>>;
|
|
66
66
|
export declare const validateCollectionFile: (fileName: string) => Promise<ValidationResult<CollectionConfig>>;
|
|
67
|
-
export declare const validateTaskFile: (fileName: string) => Promise<ValidationResult<TaskConfig>>;
|
|
68
|
-
export declare const validateWorkflowFile: (fileName: string) => Promise<ValidationResult<WorkflowConfig>>;
|
|
69
67
|
//# sourceMappingURL=fileValidation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileValidation.d.ts","sourceRoot":"","sources":["../../../src/mcp/helpers/fileValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAK/C,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,CAAA;AAE/D,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,OAAO;IAC3C,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB;AAGD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;IACF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;IACF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAGD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,KAAK,IAAI,CAAA;IACV,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;IACF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAU,CAAC,6DAC/B,MAAM,QACV,cAAc,KACnB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAwE7B,CAAA;
|
|
1
|
+
{"version":3,"file":"fileValidation.d.ts","sourceRoot":"","sources":["../../../src/mcp/helpers/fileValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAK/C,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,CAAA;AAE/D,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,OAAO;IAC3C,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB;AAGD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;IACF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;IACF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAGD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,KAAK,IAAI,CAAA;IACV,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;IACF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAU,CAAC,6DAC/B,MAAM,QACV,cAAc,KACnB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAwE7B,CAAA;AAyND,eAAO,MAAM,sBAAsB,aACvB,MAAM,KACf,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAE5C,CAAA"}
|
|
@@ -128,16 +128,16 @@ import { join } from 'path';
|
|
|
128
128
|
if (config.fields) {
|
|
129
129
|
for(let i = 0; i < config.fields.length; i++){
|
|
130
130
|
const field = config.fields[i];
|
|
131
|
-
if (!field) {
|
|
131
|
+
if (!field || typeof field !== 'object') {
|
|
132
132
|
return {
|
|
133
133
|
error: `Field at index ${i} is not a valid object`,
|
|
134
134
|
success: false
|
|
135
135
|
};
|
|
136
136
|
}
|
|
137
137
|
// Check if field has type property
|
|
138
|
-
if ('type' in field
|
|
138
|
+
if (!('type' in field) || !field.type) {
|
|
139
139
|
return {
|
|
140
|
-
error: `Field at index ${i}
|
|
140
|
+
error: `Field at index ${i} is missing a valid type property`,
|
|
141
141
|
success: false
|
|
142
142
|
};
|
|
143
143
|
}
|
|
@@ -148,6 +148,27 @@ import { join } from 'path';
|
|
|
148
148
|
success: true
|
|
149
149
|
};
|
|
150
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Validates an array of schema fields (inputSchema / outputSchema).
|
|
153
|
+
* Returns an error string on the first invalid field, or null if all fields are valid.
|
|
154
|
+
*/ function validateSchemaFields(fields, label) {
|
|
155
|
+
if (!fields || !Array.isArray(fields)) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
for(let i = 0; i < fields.length; i++){
|
|
159
|
+
const field = fields[i];
|
|
160
|
+
if (!field) {
|
|
161
|
+
return `${label} field at index ${i} is not a valid object`;
|
|
162
|
+
}
|
|
163
|
+
if (!field.name) {
|
|
164
|
+
return `${label} field at index ${i} must have a valid name property`;
|
|
165
|
+
}
|
|
166
|
+
if (!field.type) {
|
|
167
|
+
return `${label} field at index ${i} must have a valid type property`;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
151
172
|
/**
|
|
152
173
|
* Validate task configuration structure
|
|
153
174
|
*/ function validateTaskConfig(config) {
|
|
@@ -169,59 +190,25 @@ import { join } from 'path';
|
|
|
169
190
|
success: false
|
|
170
191
|
};
|
|
171
192
|
}
|
|
172
|
-
// Validate optional properties
|
|
173
193
|
if (config.retries !== undefined && config.retries < 0) {
|
|
174
194
|
return {
|
|
175
195
|
error: 'Task config retries must be a non-negative number',
|
|
176
196
|
success: false
|
|
177
197
|
};
|
|
178
198
|
}
|
|
179
|
-
|
|
180
|
-
if (
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
error: `Input schema field at index ${i} is not a valid object`,
|
|
186
|
-
success: false
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
if (!field.name) {
|
|
190
|
-
return {
|
|
191
|
-
error: `Input schema field at index ${i} must have a valid name property`,
|
|
192
|
-
success: false
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
if (!field.type) {
|
|
196
|
-
return {
|
|
197
|
-
error: `Input schema field at index ${i} must have a valid type property`,
|
|
198
|
-
success: false
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
}
|
|
199
|
+
const inputError = validateSchemaFields(config.inputSchema, 'Input schema');
|
|
200
|
+
if (inputError) {
|
|
201
|
+
return {
|
|
202
|
+
error: inputError,
|
|
203
|
+
success: false
|
|
204
|
+
};
|
|
202
205
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
success: false
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
if (!field.name) {
|
|
213
|
-
return {
|
|
214
|
-
error: `Output schema field at index ${i} must have a valid name property`,
|
|
215
|
-
success: false
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
if (!field.type) {
|
|
219
|
-
return {
|
|
220
|
-
error: `Output schema field at index ${i} must have a valid type property`,
|
|
221
|
-
success: false
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
}
|
|
206
|
+
const outputError = validateSchemaFields(config.outputSchema, 'Output schema');
|
|
207
|
+
if (outputError) {
|
|
208
|
+
return {
|
|
209
|
+
error: outputError,
|
|
210
|
+
success: false
|
|
211
|
+
};
|
|
225
212
|
}
|
|
226
213
|
return {
|
|
227
214
|
config,
|
|
@@ -249,10 +236,9 @@ import { join } from 'path';
|
|
|
249
236
|
success: false
|
|
250
237
|
};
|
|
251
238
|
}
|
|
252
|
-
|
|
253
|
-
if (config.queue) {
|
|
239
|
+
if (config.queue !== undefined && typeof config.queue !== 'string') {
|
|
254
240
|
return {
|
|
255
|
-
error: 'Workflow config queue must be a string',
|
|
241
|
+
error: 'Workflow config queue must be a string if provided',
|
|
256
242
|
success: false
|
|
257
243
|
};
|
|
258
244
|
}
|
|
@@ -262,44 +248,20 @@ import { join } from 'path';
|
|
|
262
248
|
success: false
|
|
263
249
|
};
|
|
264
250
|
}
|
|
265
|
-
|
|
266
|
-
if (
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
error: `Input schema field at index ${i} is not a valid object`,
|
|
272
|
-
success: false
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
if (!field.name) {
|
|
276
|
-
return {
|
|
277
|
-
error: `Input schema field at index ${i} must have a valid name property`,
|
|
278
|
-
success: false
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
if (!field.type) {
|
|
282
|
-
return {
|
|
283
|
-
error: `Input schema field at index ${i} must have a valid type property`,
|
|
284
|
-
success: false
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
}
|
|
251
|
+
const inputError = validateSchemaFields(config.inputSchema, 'Input schema');
|
|
252
|
+
if (inputError) {
|
|
253
|
+
return {
|
|
254
|
+
error: inputError,
|
|
255
|
+
success: false
|
|
256
|
+
};
|
|
288
257
|
}
|
|
289
258
|
return {
|
|
290
259
|
config,
|
|
291
260
|
success: true
|
|
292
261
|
};
|
|
293
262
|
}
|
|
294
|
-
// Convenience functions for backward compatibility
|
|
295
263
|
export const validateCollectionFile = async (fileName)=>{
|
|
296
264
|
return validatePayloadFile(fileName, 'collection');
|
|
297
265
|
};
|
|
298
|
-
export const validateTaskFile = async (fileName)=>{
|
|
299
|
-
return validatePayloadFile(fileName, 'task');
|
|
300
|
-
};
|
|
301
|
-
export const validateWorkflowFile = async (fileName)=>{
|
|
302
|
-
return validatePayloadFile(fileName, 'workflow');
|
|
303
|
-
};
|
|
304
266
|
|
|
305
267
|
//# sourceMappingURL=fileValidation.js.map
|