@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.
Files changed (66) hide show
  1. package/dist/mcp/helpers/config.d.ts +1 -9
  2. package/dist/mcp/helpers/config.d.ts.map +1 -1
  3. package/dist/mcp/helpers/config.js +0 -62
  4. package/dist/mcp/helpers/config.js.map +1 -1
  5. package/dist/mcp/helpers/fields.d.ts +6 -25
  6. package/dist/mcp/helpers/fields.d.ts.map +1 -1
  7. package/dist/mcp/helpers/fields.js +35 -29
  8. package/dist/mcp/helpers/fields.js.map +1 -1
  9. package/dist/mcp/helpers/fileValidation.d.ts +0 -2
  10. package/dist/mcp/helpers/fileValidation.d.ts.map +1 -1
  11. package/dist/mcp/helpers/fileValidation.js +44 -82
  12. package/dist/mcp/helpers/fileValidation.js.map +1 -1
  13. package/dist/mcp/tools/collection/create.d.ts.map +1 -1
  14. package/dist/mcp/tools/collection/create.js +2 -25
  15. package/dist/mcp/tools/collection/create.js.map +1 -1
  16. package/dist/mcp/tools/collection/delete.d.ts.map +1 -1
  17. package/dist/mcp/tools/collection/delete.js +1 -12
  18. package/dist/mcp/tools/collection/delete.js.map +1 -1
  19. package/dist/mcp/tools/config/update.d.ts +1 -1
  20. package/dist/mcp/tools/config/update.d.ts.map +1 -1
  21. package/dist/mcp/tools/config/update.js +3 -3
  22. package/dist/mcp/tools/config/update.js.map +1 -1
  23. package/dist/mcp/tools/job/create.d.ts.map +1 -1
  24. package/dist/mcp/tools/job/create.js +3 -6
  25. package/dist/mcp/tools/job/create.js.map +1 -1
  26. package/dist/mcp/tools/job/run.d.ts +1 -1
  27. package/dist/mcp/tools/job/run.d.ts.map +1 -1
  28. package/dist/mcp/tools/job/run.js +5 -26
  29. package/dist/mcp/tools/job/run.js.map +1 -1
  30. package/dist/mcp/tools/job/update.d.ts.map +1 -1
  31. package/dist/mcp/tools/job/update.js +10 -38
  32. package/dist/mcp/tools/job/update.js.map +1 -1
  33. package/dist/mcp/tools/schemas.d.ts +0 -3
  34. package/dist/mcp/tools/schemas.d.ts.map +1 -1
  35. package/dist/mcp/tools/schemas.js +0 -1
  36. package/dist/mcp/tools/schemas.js.map +1 -1
  37. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.d.ts.map +1 -1
  38. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js +1 -2
  39. package/dist/utils/schemaConversion/convertCollectionSchemaToZod.js.map +1 -1
  40. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts +5 -0
  41. package/dist/utils/schemaConversion/sanitizeJsonSchema.d.ts.map +1 -1
  42. package/dist/utils/schemaConversion/sanitizeJsonSchema.js +38 -0
  43. package/dist/utils/schemaConversion/sanitizeJsonSchema.js.map +1 -1
  44. package/package.json +3 -3
  45. package/src/mcp/helpers/config.ts +1 -114
  46. package/src/mcp/helpers/fields.ts +46 -50
  47. package/src/mcp/helpers/fileValidation.ts +38 -93
  48. package/src/mcp/tools/collection/create.ts +2 -30
  49. package/src/mcp/tools/collection/delete.ts +1 -19
  50. package/src/mcp/tools/config/update.ts +0 -4
  51. package/src/mcp/tools/job/create.ts +5 -11
  52. package/src/mcp/tools/job/run.ts +14 -38
  53. package/src/mcp/tools/job/update.ts +29 -77
  54. package/src/mcp/tools/schemas.ts +0 -1
  55. package/src/utils/schemaConversion/convertCollectionSchemaToZod.ts +1 -3
  56. package/src/utils/schemaConversion/sanitizeJsonSchema.ts +41 -0
  57. package/dist/mcp/helpers/conversion.d.ts +0 -2
  58. package/dist/mcp/helpers/conversion.d.ts.map +0 -1
  59. package/dist/mcp/helpers/conversion.js +0 -5
  60. package/dist/mcp/helpers/conversion.js.map +0 -1
  61. package/dist/mcp/helpers/validation.d.ts +0 -9
  62. package/dist/mcp/helpers/validation.d.ts.map +0 -1
  63. package/dist/mcp/helpers/validation.js +0 -22
  64. package/dist/mcp/helpers/validation.js.map +0 -1
  65. package/src/mcp/helpers/conversion.ts +0 -3
  66. package/src/mcp/helpers/validation.ts +0 -32
@@ -1,4 +1,4 @@
1
- import type { AdminConfig, CollectionConfigUpdates, DatabaseConfig, GeneralConfig, PluginUpdates } from '../../types.js';
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,EACV,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,gBAAgB,CAAA;AAEvB;;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;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,CA+BzF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,uBAAuB,EAChC,cAAc,EAAE,MAAM,GACrB,MAAM,CA8DR"}
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":"AAEA;;CAEC,GACD,OAAO,SAASA,sBAAsBC,OAAe,EAAEC,cAAsB;IAC3E,MAAMC,kBAAkBD,eAAeE,MAAM,CAAC,GAAGC,WAAW,KAAKH,eAAeI,KAAK,CAAC;IAEtF,uBAAuB;IACvB,MAAMC,cAAc;IACpB,MAAMC,gBAAgBP,QAAQQ,KAAK,CAACF;IAEpC,IAAIC,iBAAiBA,cAAcE,MAAM,GAAG,GAAG;QAC7C,MAAMC,aAAaH,aAAa,CAACA,cAAcE,MAAM,GAAG,EAAE;QAC1D,MAAME,YAAY,CAAC,SAAS,EAAET,gBAAgB,uBAAuB,EAAEA,gBAAgB,CAAC,CAAC;QAEzF,iCAAiC;QACjC,IAAIQ,cAAc,CAACV,QAAQY,QAAQ,CAACD,YAAY;YAC9CX,UAAUA,QAAQa,OAAO,CAACH,YAAY,GAAGA,WAAW,EAAE,EAAEC,WAAW;QACrE;IACF,OAAO;QACL,oCAAoC;QACpC,MAAMG,oBAAoBd,QAAQe,OAAO,CAAC;QAC1C,IAAID,sBAAsB,CAAC,GAAG;YAC5B,MAAME,UAAUhB,QAAQe,OAAO,CAAC,MAAMD;YACtC,MAAMH,YAAY,CAAC,SAAS,EAAET,gBAAgB,uBAAuB,EAAEA,gBAAgB,CAAC,CAAC;YACzFF,UAAUA,QAAQK,KAAK,CAAC,GAAGW,UAAU,KAAKL,YAAY,OAAOX,QAAQK,KAAK,CAACW,UAAU;QACvF;IACF;IAEA,2BAA2B;IAC3B,MAAMC,mBAAmB;IACzB,MAAMC,mBAAmBlB,QAAQQ,KAAK,CAACS;IAEvC,IAAIC,oBAAoBA,gBAAgB,CAAC,EAAE,EAAE;QAC3C,MAAMC,qBAAqBD,gBAAgB,CAAC,EAAE,CAACE,IAAI;QACnD,IAAI,CAACD,mBAAmBP,QAAQ,CAACV,kBAAkB;YACjD,MAAMmB,iBAAiBF,qBACnB,GAAGA,mBAAmB,EAAE,EAAEjB,iBAAiB,GAC3CA;YACJF,UAAUA,QAAQa,OAAO,CAACI,kBAAkB,CAAC,cAAc,EAAEI,eAAe,CAAC,CAAC;QAChF;IACF;IAEA,OAAOrB;AACT;AAEA;;CAEC,GACD,OAAO,SAASsB,2BAA2BtB,OAAe,EAAEC,cAAsB;IAChF,MAAMC,kBAAkBD,eAAeE,MAAM,CAAC,GAAGC,WAAW,KAAKH,eAAeI,KAAK,CAAC;IAEtF,0BAA0B;IAC1B,MAAMC,cAAc,IAAIiB,OACtB,CAAC,eAAe,EAAErB,gBAAgB,qCAAqC,EAAEA,gBAAgB,YAAY,CAAC,EACtG;IAEFF,UAAUA,QAAQa,OAAO,CAACP,aAAa;IAEvC,gCAAgC;IAChC,MAAMW,mBAAmB;IACzB,MAAMC,mBAAmBlB,QAAQQ,KAAK,CAACS;IAEvC,IAAIC,oBAAoBA,gBAAgB,CAAC,EAAE,EAAE;QAC3C,IAAIC,qBAAqBD,gBAAgB,CAAC,EAAE;QAE5C,iDAAiD;QACjDC,qBAAqBA,mBAAmBN,OAAO,CAC7C,IAAIU,OAAO,CAAC,UAAU,EAAErB,gBAAgB,MAAM,CAAC,EAAE,MACjD;QAEFiB,qBAAqBA,mBAAmBN,OAAO,CAAC,UAAU,MAAK,uBAAuB;QACtFM,qBAAqBA,mBAAmBN,OAAO,CAAC,gBAAgB,KAAI,iCAAiC;QAErGb,UAAUA,QAAQa,OAAO,CAACI,kBAAkB,CAAC,cAAc,EAAEE,mBAAmB,CAAC,CAAC;IACpF;IAEA,oDAAoD;IACpDnB,UAAUA,QAAQa,OAAO,CAAC,WAAW;IAErC,OAAOb;AACT;AAEA;;CAEC,GACD,OAAO,SAASwB,kBAAkBxB,OAAe,EAAEyB,WAAwB;IACzE,MAAMC,aAAa;IACnB,MAAMC,aAAa3B,QAAQQ,KAAK,CAACkB;IAEjC,IAAIC,cAAcA,UAAU,CAAC,EAAE,EAAE;QAC/B,IAAIC,eAAeD,UAAU,CAAC,EAAE;QAEhC,mCAAmC;QACnC,IAAIF,YAAYI,IAAI,EAAE;YACpB,IAAID,aAAahB,QAAQ,CAAC,UAAU;gBAClCgB,eAAeA,aAAaf,OAAO,CAAC,eAAe,CAAC,MAAM,EAAEY,YAAYI,IAAI,CAAC,KAAK,CAAC;YACrF,OAAO;gBACLD,eAAe,CAAC,YAAY,EAAEH,YAAYI,IAAI,CAAC,MAAM,EAAED,cAAc;YACvE;QACF;QAEA,IAAIH,YAAYK,IAAI,EAAE;YACpB,MAAMC,aAAaC,OAAOC,OAAO,CAACR,YAAYK,IAAI,EAC/CI,GAAG,CAAC,CAAC,CAACC,KAAKC,MAAM,GAAK,CAAC,MAAM,EAAED,IAAI,GAAG,EAAEC,MAAM,CAAC,CAAC,EAChDC,IAAI,CAAC;YAER,IAAIT,aAAahB,QAAQ,CAAC,UAAU;gBAClCgB,eAAeA,aAAaf,OAAO,CAAC,qBAAqB,CAAC,SAAS,EAAEkB,WAAW,OAAO,CAAC;YAC1F,OAAO;gBACLH,eAAe,GAAGA,aAAa,eAAe,EAAEG,WAAW,QAAQ,CAAC;YACtE;QACF;QAEA/B,UAAUA,QAAQa,OAAO,CAACa,YAAY,CAAC,QAAQ,EAAEE,aAAa,KAAK,CAAC;IACtE,OAAO;QACL,uCAAuC;QACvC,MAAMU,qBAAqB,EAAE;QAE7B,IAAIb,YAAYI,IAAI,EAAE;YACpBS,mBAAmBC,IAAI,CAAC,CAAC,UAAU,EAAEd,YAAYI,IAAI,CAAC,KAAK,CAAC;QAC9D;QAEA,IAAIJ,YAAYK,IAAI,EAAE;YACpB,MAAMC,aAAaC,OAAOC,OAAO,CAACR,YAAYK,IAAI,EAC/CI,GAAG,CAAC,CAAC,CAACC,KAAKC,MAAM,GAAK,CAAC,MAAM,EAAED,IAAI,GAAG,EAAEC,MAAM,CAAC,CAAC,EAChDC,IAAI,CAAC;YACRC,mBAAmBC,IAAI,CAAC,CAAC,aAAa,EAAER,WAAW,OAAO,CAAC;QAC7D;QAEA,MAAMS,oBAAoB,CAAC,UAAU,EAAEF,mBAAmBD,IAAI,CAAC,OAAO,MAAM,CAAC;QAC7ErC,UAAUA,QAAQa,OAAO,CACvB,kCACA,CAAC,gCAAgC,EAAE2B,mBAAmB;IAE1D;IAEA,OAAOxC;AACT;AAEA;;CAEC,GACD,OAAO,SAASyC,qBAAqBzC,OAAe,EAAE0C,cAA8B;IAClF,IAAIA,eAAeC,IAAI,KAAK,WAAW;QACrC,4BAA4B;QAC5B,MAAMC,UAAU;QAChB,MAAMC,mBAAmB;QAEzB,IAAI,CAAC7C,QAAQQ,KAAK,CAACqC,mBAAmB;YACpC7C,UAAUA,QAAQa,OAAO,CACvB,+BACA,CAAC,4DAA4D,CAAC;QAElE;QAEA,MAAMiC,WAAW,CAAC,6DAA6D,EAAEJ,eAAeK,GAAG,IAAI,GAAG,QAAQ,CAAC;QACnH/C,UAAUA,QAAQa,OAAO,CAAC+B,SAAS,GAAGE,SAAS,CAAC,CAAC;IACnD;IAEA,OAAO9C;AACT;AAEA;;CAEC,GACD,OAAO,SAASgD,oBAAoBhD,OAAe,EAAEiD,aAA4B;IAC/E,qBAAqB;IACrB,IAAIA,cAAcC,GAAG,EAAE;QACrBD,cAAcC,GAAG,CAACC,OAAO,CAAC,CAACC;YACzB,IAAI,CAACpD,QAAQY,QAAQ,CAACwC,eAAe;gBACnCpD,UAAUA,QAAQa,OAAO,CAAC,+BAA+B,CAAC,EAAE,EAAEuC,aAAa,EAAE,CAAC;YAChF;QACF;IACF;IAEA,uBAAuB;IACvB,MAAMC,eAAe;IACrB,MAAMC,eAAetD,QAAQQ,KAAK,CAAC6C;IAEnC,IAAIC,gBAAgBA,YAAY,CAAC,EAAE,EAAE;QACnC,IAAIC,iBAAiBD,YAAY,CAAC,EAAE;QAEpC,iBAAiB;QACjB,IAAIL,cAAcO,MAAM,EAAE;YACxBP,cAAcO,MAAM,CAACL,OAAO,CAAC,CAACM;gBAC5B,MAAMC,cAAc,IAAInC,OAAO,CAAC,IAAI,EAAEkC,WAAW,YAAY,CAAC,EAAE;gBAChEF,iBAAiBA,eAAe1C,OAAO,CAAC6C,aAAa;YACvD;QACF;QAEA,cAAc;QACd,IAAIT,cAAcC,GAAG,EAAE;YACrBD,cAAcC,GAAG,CAACC,OAAO,CAAC,CAACC;gBACzB,qDAAqD;gBACrD,MAAM5C,QAAQ4C,aAAa5C,KAAK,CAAC;gBACjC,IAAIA,SAASA,KAAK,CAAC,EAAE,EAAE;oBACrB,MAAMiD,aAAajD,KAAK,CAAC,EAAE;oBAC3B,IAAI,CAAC+C,eAAe3C,QAAQ,CAAC,GAAG6C,WAAW,CAAC,CAAC,GAAG;wBAC9CF,iBAAiBA,eAAenC,IAAI,KAChC,GAAGmC,eAAe,MAAM,EAAEE,WAAW,GAAG,CAAC,GACzC,CAAC,MAAM,EAAEA,WAAW,GAAG,CAAC;oBAC9B;gBACF;YACF;QACF;QAEAzD,UAAUA,QAAQa,OAAO,CAACwC,cAAc,CAAC,UAAU,EAAEE,eAAe,KAAK,CAAC;IAC5E;IAEA,OAAOvD;AACT"}
@@ -1,27 +1,9 @@
1
- type FieldDefinition = {
2
- description?: string;
3
- name: string;
4
- options?: {
5
- label: string;
6
- value: string;
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,KAAK,eAAe,GAAG;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;QAC5C,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAuD3F;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
+ {"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
- // Generate new field definitions
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 = {\n description?: string\n name: string\n options?: { label: string; value: string }[]\n position?: 'main' | 'sidebar'\n required?: boolean\n type: string\n}\n\ntype FieldModification = {\n changes: {\n description?: string\n options?: { label: string; value: string }[]\n position?: 'main' | 'sidebar'\n required?: boolean\n type?: string\n }\n fieldName: string\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 // Generate new field definitions\n const newFieldDefinitions = newFields\n .map((field) => {\n const fieldConfig = []\n fieldConfig.push(` {`)\n fieldConfig.push(` name: '${field.name}',`)\n fieldConfig.push(` type: '${field.type}',`)\n\n if (field.required) {\n fieldConfig.push(` required: true,`)\n }\n\n if (field.description || field.position) {\n fieldConfig.push(` admin: {`)\n if (field.description) {\n fieldConfig.push(` description: '${field.description}',`)\n }\n if (field.position) {\n fieldConfig.push(` position: '${field.position}',`)\n }\n fieldConfig.push(` },`)\n }\n\n if (field.options && field.type === 'select') {\n fieldConfig.push(` options: [`)\n field.options.forEach((option: { label: string; value: string }) => {\n fieldConfig.push(` { label: '${option.label}', value: '${option.value}' },`)\n })\n fieldConfig.push(` ],`)\n }\n\n fieldConfig.push(` },`)\n return fieldConfig.join('\\n')\n })\n .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":["addFieldsToCollection","content","newFields","fieldsRegex","match","Error","newFieldDefinitions","map","field","fieldConfig","push","name","type","required","description","position","options","forEach","option","label","value","join","existingFields","hasTrailingComma","trim","endsWith","separator","replace","removeFieldsFromCollection","fieldNames","updatedContent","fieldName","fieldRegex","RegExp","modifyFieldsInCollection","modifications","mod","changes","fieldMatch","fieldDef","undefined","includes","adminRegex"],"mappings":"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"}
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":"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"}
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 && field.type) {
138
+ if (!('type' in field) || !field.type) {
139
139
  return {
140
- error: `Field at index ${i} has invalid type property`,
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
- // Validate schemas if present
180
- if (config.inputSchema && Array.isArray(config.inputSchema)) {
181
- for(let i = 0; i < config.inputSchema.length; i++){
182
- const field = config.inputSchema[i];
183
- if (!field) {
184
- return {
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
- if (config.outputSchema && Array.isArray(config.outputSchema)) {
204
- for(let i = 0; i < config.outputSchema.length; i++){
205
- const field = config.outputSchema[i];
206
- if (!field) {
207
- return {
208
- error: `Output schema field at index ${i} is not a valid object`,
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
- // Validate optional properties
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
- // Validate schema if present
266
- if (config.inputSchema && Array.isArray(config.inputSchema)) {
267
- for(let i = 0; i < config.inputSchema.length; i++){
268
- const field = config.inputSchema[i];
269
- if (!field) {
270
- return {
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