@payloadcms/figma 0.0.1-alpha.26 → 0.0.1-alpha.28
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/api/control-plane.d.ts +18 -0
- package/dist/api/control-plane.d.ts.map +1 -1
- package/dist/api/control-plane.js +39 -8
- package/dist/api/control-plane.js.map +1 -1
- package/dist/api/figma-api.d.ts.map +1 -1
- package/dist/api/figma-api.js +5 -2
- package/dist/api/figma-api.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +3 -18
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +59 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/config/oauth.js +2 -1
- package/dist/config/oauth.js.map +1 -1
- package/dist/db-content-api/generated/content-api-types.d.ts +3129 -0
- package/dist/db-content-api/generated/content-api-types.d.ts.map +1 -0
- package/dist/db-content-api/generated/content-api-types.js +7 -0
- package/dist/db-content-api/generated/content-api-types.js.map +1 -0
- package/dist/db-content-api/index.d.ts +31 -0
- package/dist/db-content-api/index.d.ts.map +1 -0
- package/dist/db-content-api/index.js +842 -0
- package/dist/db-content-api/index.js.map +1 -0
- package/dist/db-content-api/types.d.ts +31 -0
- package/dist/db-content-api/types.d.ts.map +1 -0
- package/dist/db-content-api/types.js +7 -0
- package/dist/db-content-api/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.js +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -1
- package/dist/oauth/strategy/index.d.ts.map +1 -1
- package/dist/oauth/strategy/index.js +4 -0
- package/dist/oauth/strategy/index.js.map +1 -1
- package/dist/plugin/build-config.d.ts.map +1 -1
- package/dist/plugin/build-config.js +35 -17
- package/dist/plugin/build-config.js.map +1 -1
- package/dist/utils/payload-config-ast.d.ts +5 -0
- package/dist/utils/payload-config-ast.d.ts.map +1 -1
- package/dist/utils/payload-config-ast.js +29 -2
- package/dist/utils/payload-config-ast.js.map +1 -1
- package/dist/utils/payload-config-modifier.d.ts.map +1 -1
- package/dist/utils/payload-config-modifier.js +4 -0
- package/dist/utils/payload-config-modifier.js.map +1 -1
- package/dist/utils/payload-package-check.d.ts +5 -0
- package/dist/utils/payload-package-check.d.ts.map +1 -1
- package/dist/utils/payload-package-check.js +41 -0
- package/dist/utils/payload-package-check.js.map +1 -1
- package/package.json +3 -1
- package/dist/db-adapter.d.ts +0 -17
- package/dist/db-adapter.d.ts.map +0 -1
- package/dist/db-adapter.js +0 -760
- package/dist/db-adapter.js.map +0 -1
|
@@ -112,6 +112,15 @@ import * as log from './log.js';
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
+
// Check for sharp property
|
|
116
|
+
const sharpProperty = configArg.getProperty('sharp');
|
|
117
|
+
if (sharpProperty) {
|
|
118
|
+
// Find the import source for sharp
|
|
119
|
+
const sharpImport = imports.find((imp)=>imp.getModuleSpecifierValue() === 'sharp' || imp.getNamedImports().some((ni)=>ni.getName() === 'sharp'));
|
|
120
|
+
result.sharpProperty = {
|
|
121
|
+
importSource: sharpImport?.getModuleSpecifierValue() || 'sharp'
|
|
122
|
+
};
|
|
123
|
+
}
|
|
115
124
|
// Check for figma property
|
|
116
125
|
const figmaProperty = configArg.getProperty('figma');
|
|
117
126
|
if (figmaProperty) {
|
|
@@ -243,7 +252,16 @@ import * as log from './log.js';
|
|
|
243
252
|
modified = true;
|
|
244
253
|
}
|
|
245
254
|
}
|
|
246
|
-
// 4.
|
|
255
|
+
// 4. Remove sharp property
|
|
256
|
+
if (detection.sharpProperty) {
|
|
257
|
+
const sharpProperty = configArg.getProperty('sharp');
|
|
258
|
+
if (sharpProperty) {
|
|
259
|
+
sharpProperty.remove();
|
|
260
|
+
changes.push('Removed sharp property');
|
|
261
|
+
modified = true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// 5. Update buildConfig import
|
|
247
265
|
if (detection.needsImportChange) {
|
|
248
266
|
if (payloadImport) {
|
|
249
267
|
if (detection.hasOtherPayloadImports) {
|
|
@@ -285,7 +303,7 @@ import * as log from './log.js';
|
|
|
285
303
|
modified = true;
|
|
286
304
|
}
|
|
287
305
|
}
|
|
288
|
-
//
|
|
306
|
+
// 6. Remove orphaned imports
|
|
289
307
|
// Re-fetch imports after each removal to avoid stale references
|
|
290
308
|
if (detection.dbProperty) {
|
|
291
309
|
const currentImports = sourceFile.getImportDeclarations();
|
|
@@ -305,6 +323,15 @@ import * as log from './log.js';
|
|
|
305
323
|
modified = true;
|
|
306
324
|
}
|
|
307
325
|
}
|
|
326
|
+
if (detection.sharpProperty) {
|
|
327
|
+
const currentImports = sourceFile.getImportDeclarations();
|
|
328
|
+
const sharpImport = currentImports.find((imp)=>imp.getModuleSpecifierValue() === 'sharp');
|
|
329
|
+
if (sharpImport) {
|
|
330
|
+
sharpImport.remove();
|
|
331
|
+
changes.push('Removed sharp import');
|
|
332
|
+
modified = true;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
308
335
|
return {
|
|
309
336
|
changes,
|
|
310
337
|
modified
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/payload-config-ast.ts"],"sourcesContent":["import type { SourceFile } from 'ts-morph'\n\nimport { Node, SyntaxKind } from 'ts-morph'\n\nimport * as log from './log.js'\n\n/**\n * Result of detecting what changes are needed in a payload config file\n */\nexport type DetectionResult = {\n /** Database adapter configuration if present */\n dbProperty?: {\n /** Name of the adapter function (e.g., 'mongooseAdapter', 'postgresAdapter') */\n adapter: string\n /** NPM package the adapter is imported from (e.g., '@payloadcms/db-mongodb') */\n importSource: string\n }\n /** Editor configuration if present */\n editorProperty?: {\n /** NPM package the editor is imported from (e.g., '@payloadcms/richtext-lexical') */\n importSource: string\n /** Whether this is a default editor with no custom configuration */\n isDefault: boolean\n }\n /** Whether the config already has a `figma` property */\n figmaObjectExists: boolean\n /** Whether buildConfig/buildFigmaConfig uses an import alias (e.g., 'buildConfig as createConfig') */\n hasAlias: boolean\n /** Whether a buildConfig or buildFigmaConfig call was found (undefined if not checked) */\n hasBuildConfig?: boolean\n /** Whether there are other imports from 'payload' besides buildConfig (e.g., types) */\n hasOtherPayloadImports: boolean\n /** Whether the import needs to be changed from 'payload' to '@payloadcms/figma' */\n needsImportChange: boolean\n /** Whether a `secret` property exists in the config */\n secretProperty?: boolean\n}\n\n/**\n * Detect what changes are needed in the payload config file\n */\nexport function detectRequiredChanges(sourceFile: SourceFile): DetectionResult {\n const result: DetectionResult = {\n figmaObjectExists: false,\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: false,\n }\n\n // Find buildConfig import\n const imports = sourceFile.getImportDeclarations()\n const payloadImport = imports.find(\n (imp) =>\n imp.getModuleSpecifierValue() === 'payload' ||\n imp.getModuleSpecifierValue() === '@payloadcms/figma',\n )\n\n if (!payloadImport) {\n log.debug('No payload or @payloadcms/figma import found')\n result.hasBuildConfig = false\n return result\n }\n\n log.debug(`Found import from: ${payloadImport.getModuleSpecifierValue()}`)\n\n const moduleSpecifier = payloadImport.getModuleSpecifierValue()\n const namedImports = payloadImport.getNamedImports()\n\n // Determine which function name to look for based on the import source\n // - From 'payload': look for buildConfig (needs migration)\n // - From '@payloadcms/figma': look for buildFigmaConfig (already migrated)\n const expectedFunctionName = moduleSpecifier === 'payload' ? 'buildConfig' : 'buildFigmaConfig'\n\n const buildConfigImport = namedImports.find((ni) => ni.getName() === expectedFunctionName)\n\n if (!buildConfigImport) {\n result.hasBuildConfig = false\n return result\n }\n\n // Check for alias and get the actual name used in code\n const aliasNode = buildConfigImport.getAliasNode()\n const buildConfigName = aliasNode ? aliasNode.getText() : expectedFunctionName\n if (aliasNode) {\n result.hasAlias = true\n }\n\n // Check if import needs change\n if (moduleSpecifier === 'payload') {\n result.needsImportChange = true\n\n // Check if there are other imports from payload\n if (namedImports.length > 1) {\n result.hasOtherPayloadImports = true\n }\n }\n\n // Find buildConfig call in export default\n // First try to find export default with the buildConfig call\n const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment)\n let buildConfigCall = null\n\n if (exportAssignment) {\n // Look for buildConfig call in the export default\n const callExpressions = exportAssignment.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n // If not found in export default, search all call expressions\n if (!buildConfigCall) {\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n if (!buildConfigCall) {\n result.hasBuildConfig = false\n return result\n }\n\n // Get config object\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n return result\n }\n\n // Check for db property\n const dbProperty = configArg.getProperty('db')\n if (dbProperty) {\n const dbValue = dbProperty.getChildrenOfKind(SyntaxKind.CallExpression)[0]\n if (dbValue) {\n const adapterName = dbValue.getExpression().getText()\n\n // Find the import source for this adapter\n const adapterImport = imports.find((imp) =>\n imp.getNamedImports().some((ni) => ni.getName() === adapterName),\n )\n\n if (adapterImport) {\n result.dbProperty = {\n adapter: adapterName,\n importSource: adapterImport.getModuleSpecifierValue(),\n }\n }\n }\n }\n\n // Check for secret property\n const secretProperty = configArg.getProperty('secret')\n if (secretProperty) {\n result.secretProperty = true\n }\n\n // Check for editor property\n const editorProperty = configArg.getProperty('editor')\n if (editorProperty) {\n const editorValue = editorProperty.getChildrenOfKind(SyntaxKind.CallExpression)[0]\n if (editorValue) {\n const editorName = editorValue.getExpression().getText()\n\n // Find the import source\n const editorImport = imports.find((imp) =>\n imp.getNamedImports().some((ni) => ni.getName() === editorName),\n )\n\n if (editorImport && editorName === 'lexicalEditor') {\n // Check if it has arguments\n const args = editorValue.getArguments()\n const isDefault = args.length === 0\n\n result.editorProperty = {\n importSource: editorImport.getModuleSpecifierValue(),\n isDefault,\n }\n }\n }\n }\n\n // Check for figma property\n const figmaProperty = configArg.getProperty('figma')\n if (figmaProperty) {\n result.figmaObjectExists = true\n }\n\n return result\n}\n\nexport type ASTModificationResult = {\n changes: string[]\n modified: boolean\n}\n\n/**\n * Remove all comments\n * @returns true if any comments were removed\n */\nfunction removeAllComments(sourceFile: SourceFile): boolean {\n const ranges: Array<[number, number]> = []\n\n // Recursively collect comments from node and ALL children (including tokens)\n const collectComments = (node: Node) => {\n node.getLeadingCommentRanges().forEach((range) => {\n ranges.push([range.getPos(), range.getEnd()])\n })\n node.getTrailingCommentRanges().forEach((range) => {\n ranges.push([range.getPos(), range.getEnd()])\n })\n\n // Process ALL children including token nodes (commas, braces, etc.)\n node.getChildren().forEach(collectComments)\n }\n\n collectComments(sourceFile)\n\n if (ranges.length === 0) {\n return false\n }\n\n // Remove duplicates and sort in reverse order to avoid position shifts\n const uniqueRanges = Array.from(new Set(ranges.map((r) => JSON.stringify(r)))).map(\n (r) => JSON.parse(r) as [number, number],\n )\n uniqueRanges.sort((a, b) => b[0] - a[0])\n\n // Remove each comment range\n for (const [pos, end] of uniqueRanges) {\n sourceFile.removeText(pos, end)\n }\n\n return true\n}\n\n/**\n * Apply modifications to the source file based on detection result\n * Modifies the AST in memory - caller must call sourceFile.save()\n */\nexport function applyModifications(\n sourceFile: SourceFile,\n detection: DetectionResult,\n): ASTModificationResult {\n const changes: string[] = []\n let modified = false\n\n if (detection.hasBuildConfig === false || detection.hasAlias) {\n log.debug(\n `Skipping modifications: hasBuildConfig=${detection.hasBuildConfig}, hasAlias=${detection.hasAlias}`,\n )\n return { changes: [], modified: false }\n }\n\n // 1. Remove all comments FIRST (before AST modifications that might shift positions)\n const hadComments = removeAllComments(sourceFile)\n if (hadComments) {\n changes.push('Removed comments')\n modified = true\n }\n\n // Find the import declarations\n const imports = sourceFile.getImportDeclarations()\n const payloadImport = imports.find((imp) => imp.getModuleSpecifierValue() === 'payload')\n\n // Get the buildConfig name (could be aliased)\n let buildConfigName = 'buildConfig'\n if (payloadImport) {\n const buildConfigImport = payloadImport\n .getNamedImports()\n .find((ni) => ni.getName() === 'buildConfig')\n if (buildConfigImport) {\n const aliasNode = buildConfigImport.getAliasNode()\n buildConfigName = aliasNode ? aliasNode.getText() : 'buildConfig'\n }\n }\n\n // Find buildConfig call in export default (prefer export default)\n const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment)\n let buildConfigCall = null\n\n if (exportAssignment) {\n const callExpressions = exportAssignment.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n // If not found in export default, search all call expressions\n if (!buildConfigCall) {\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n if (!buildConfigCall) {\n return { changes: [], modified: false }\n }\n\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n return { changes: [], modified: false }\n }\n\n // 1. Remove db property\n if (detection.dbProperty) {\n const dbProperty = configArg.getProperty('db')\n if (dbProperty) {\n dbProperty.remove()\n changes.push('Removed db property')\n modified = true\n }\n }\n\n // 2. Remove secret property\n if (detection.secretProperty) {\n const secretProperty = configArg.getProperty('secret')\n if (secretProperty) {\n secretProperty.remove()\n changes.push('Removed secret property')\n modified = true\n }\n }\n\n // 3. Remove editor if default\n if (detection.editorProperty?.isDefault) {\n const editorProperty = configArg.getProperty('editor')\n if (editorProperty) {\n editorProperty.remove()\n changes.push('Removed default editor property')\n modified = true\n }\n }\n\n // 4. Update buildConfig import\n if (detection.needsImportChange) {\n if (payloadImport) {\n if (detection.hasOtherPayloadImports) {\n // Remove buildConfig from payload import, add new figma import\n const namedImports = payloadImport.getNamedImports()\n const buildConfigImport = namedImports.find((ni) => ni.getName() === 'buildConfig')\n if (buildConfigImport) {\n buildConfigImport.remove()\n\n // If payload import is now empty, remove it\n if (payloadImport.getNamedImports().length === 0) {\n payloadImport.remove()\n }\n }\n\n // Add new import at the top\n sourceFile.addImportDeclaration({\n moduleSpecifier: '@payloadcms/figma',\n namedImports: ['buildFigmaConfig'],\n })\n\n changes.push('Split buildConfig import to @payloadcms/figma')\n } else {\n // Replace entire import: change module specifier and rename all references\n const buildConfigImport = payloadImport\n .getNamedImports()\n .find((ni) => ni.getName() === 'buildConfig')\n if (buildConfigImport) {\n // Change the import name\n buildConfigImport.setName('buildFigmaConfig')\n\n // Find and rename all usages of 'buildConfig' in the file\n const identifiers = sourceFile.getDescendantsOfKind(SyntaxKind.Identifier)\n identifiers.forEach((identifier) => {\n if (identifier.getText() === 'buildConfig') {\n identifier.replaceWithText('buildFigmaConfig')\n }\n })\n }\n payloadImport.setModuleSpecifier('@payloadcms/figma')\n changes.push('Changed buildConfig import to @payloadcms/figma')\n }\n modified = true\n }\n }\n\n // 5. Remove orphaned imports\n // Re-fetch imports after each removal to avoid stale references\n if (detection.dbProperty) {\n const currentImports = sourceFile.getImportDeclarations()\n const dbImport = currentImports.find(\n (imp) => imp.getModuleSpecifierValue() === detection.dbProperty?.importSource,\n )\n if (dbImport) {\n dbImport.remove()\n changes.push(`Removed ${detection.dbProperty.adapter} import`)\n modified = true\n }\n }\n\n if (detection.editorProperty?.isDefault) {\n const currentImports = sourceFile.getImportDeclarations()\n const editorImport = currentImports.find(\n (imp) => imp.getModuleSpecifierValue() === detection.editorProperty?.importSource,\n )\n if (editorImport) {\n editorImport.remove()\n changes.push('Removed lexicalEditor import')\n modified = true\n }\n }\n\n return { changes, modified }\n}\n\nexport type FigmaPropertyConfig = {\n contentSystemId: string\n useContentSystem?: boolean\n}\n\n/**\n * Add figma property to buildConfig if it doesn't exist\n * Modifies the AST in memory - caller must call sourceFile.save()\n */\nexport function addFigmaProperty(\n sourceFile: SourceFile,\n config: FigmaPropertyConfig,\n): ASTModificationResult {\n const changes: string[] = []\n let modified = false\n\n // Find buildFigmaConfig call (this function is only used with Figma configs)\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n const buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n const text = expr.getText()\n return text === 'buildFigmaConfig' || text.endsWith('.buildFigmaConfig')\n })\n\n if (!buildConfigCall) {\n log.debug('No buildFigmaConfig call found')\n return { changes: [], modified: false }\n }\n\n // Get config object argument\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n log.debug('buildConfig argument is not an object literal')\n return { changes: [], modified: false }\n }\n\n // Check if figma property already exists\n const existingFigmaProperty = configArg.getProperty('figma')\n if (existingFigmaProperty) {\n log.debug('figma property already exists, skipping')\n return { changes: ['Skipped: figma property already exists'], modified: false }\n }\n\n // Add figma property\n // Note: useContentSystem is optional and defaults to true, so we don't generate it during init\n // contentSystemId is stored in .env file and referenced via process.env with non-null assertion\n const figmaObj =\n config.useContentSystem === false\n ? `{\n contentSystemId: process.env.FIGMA_CONTENT_SYSTEM_ID!,\n useContentSystem: false,\n }`\n : `{\n contentSystemId: process.env.FIGMA_CONTENT_SYSTEM_ID!,\n }`\n\n configArg.addPropertyAssignment({\n name: 'figma',\n initializer: figmaObj,\n })\n\n changes.push(`Added figma property (contentSystemId: ${config.contentSystemId})`)\n modified = true\n\n return { changes, modified }\n}\n\n/**\n * Read figma configuration from payload.config.ts\n * Returns the figma object if it exists, null otherwise\n */\nexport function readFigmaConfig(sourceFile: SourceFile): FigmaPropertyConfig | null {\n // Find buildFigmaConfig call (this function is only used with Figma configs)\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n const buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n const text = expr.getText()\n return text === 'buildFigmaConfig' || text.endsWith('.buildFigmaConfig')\n })\n\n if (!buildConfigCall) {\n log.debug('No buildFigmaConfig call found')\n return null\n }\n\n // Get config object argument\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n log.debug('buildConfig argument is not an object literal')\n return null\n }\n\n // Find figma property\n const figmaProperty = configArg.getProperty('figma')\n if (!figmaProperty || !Node.isPropertyAssignment(figmaProperty)) {\n log.debug('No figma property found in buildConfig')\n return null\n }\n\n // Get initializer (the object value)\n const initializer = figmaProperty.getInitializer()\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n log.debug('figma property is not an object literal')\n return null\n }\n\n // Extract values\n const contentSystemIdProp = initializer.getProperty('contentSystemId')\n const useContentSystemProp = initializer.getProperty('useContentSystem')\n\n if (!contentSystemIdProp) {\n log.debug('Missing required figma property: contentSystemId')\n return null\n }\n\n // Extract contentSystemId - support both literal strings and env var references\n let contentSystemId: string | undefined\n if (Node.isPropertyAssignment(contentSystemIdProp)) {\n const initializer = contentSystemIdProp.getInitializer()\n const text = initializer?.getText() || ''\n\n // Support both patterns:\n // 1. Literal string: 'cms_abc123' or \"cms_abc123\"\n // 2. Environment variable: process.env.FIGMA_CONTENT_SYSTEM_ID\n if (text.includes('process.env.FIGMA_CONTENT_SYSTEM_ID')) {\n // For env var reference, return a marker that indicates it's from env\n // The actual value will be read at runtime\n contentSystemId = 'process.env.FIGMA_CONTENT_SYSTEM_ID'\n } else {\n // Remove quotes for literal strings\n contentSystemId = text.replace(/['\"]/g, '')\n }\n }\n\n const useContentSystem = Node.isPropertyAssignment(useContentSystemProp)\n ? useContentSystemProp.getInitializer()?.getText() === 'true'\n : undefined // Optional: undefined if not specified\n\n if (!contentSystemId) {\n log.debug('Could not extract contentSystemId value')\n return null\n }\n\n return {\n contentSystemId,\n useContentSystem,\n }\n}\n"],"names":["Node","SyntaxKind","log","detectRequiredChanges","sourceFile","result","figmaObjectExists","hasAlias","hasOtherPayloadImports","needsImportChange","imports","getImportDeclarations","payloadImport","find","imp","getModuleSpecifierValue","debug","hasBuildConfig","moduleSpecifier","namedImports","getNamedImports","expectedFunctionName","buildConfigImport","ni","getName","aliasNode","getAliasNode","buildConfigName","getText","length","exportAssignment","getFirstDescendantByKind","ExportAssignment","buildConfigCall","callExpressions","getDescendantsOfKind","CallExpression","ce","expr","getExpression","configArg","getArguments","isObjectLiteralExpression","dbProperty","getProperty","dbValue","getChildrenOfKind","adapterName","adapterImport","some","adapter","importSource","secretProperty","editorProperty","editorValue","editorName","editorImport","args","isDefault","figmaProperty","removeAllComments","ranges","collectComments","node","getLeadingCommentRanges","forEach","range","push","getPos","getEnd","getTrailingCommentRanges","getChildren","uniqueRanges","Array","from","Set","map","r","JSON","stringify","parse","sort","a","b","pos","end","removeText","applyModifications","detection","changes","modified","hadComments","remove","addImportDeclaration","setName","identifiers","Identifier","identifier","replaceWithText","setModuleSpecifier","currentImports","dbImport","addFigmaProperty","config","text","endsWith","existingFigmaProperty","figmaObj","useContentSystem","addPropertyAssignment","name","initializer","contentSystemId","readFigmaConfig","isPropertyAssignment","getInitializer","contentSystemIdProp","useContentSystemProp","includes","replace","undefined"],"mappings":"AAEA,SAASA,IAAI,EAAEC,UAAU,QAAQ,WAAU;AAE3C,YAAYC,SAAS,WAAU;AAkC/B;;CAEC,GACD,OAAO,SAASC,sBAAsBC,UAAsB;IAC1D,MAAMC,SAA0B;QAC9BC,mBAAmB;QACnBC,UAAU;QACVC,wBAAwB;QACxBC,mBAAmB;IACrB;IAEA,0BAA0B;IAC1B,MAAMC,UAAUN,WAAWO,qBAAqB;IAChD,MAAMC,gBAAgBF,QAAQG,IAAI,CAChC,CAACC,MACCA,IAAIC,uBAAuB,OAAO,aAClCD,IAAIC,uBAAuB,OAAO;IAGtC,IAAI,CAACH,eAAe;QAClBV,IAAIc,KAAK,CAAC;QACVX,OAAOY,cAAc,GAAG;QACxB,OAAOZ;IACT;IAEAH,IAAIc,KAAK,CAAC,CAAC,mBAAmB,EAAEJ,cAAcG,uBAAuB,IAAI;IAEzE,MAAMG,kBAAkBN,cAAcG,uBAAuB;IAC7D,MAAMI,eAAeP,cAAcQ,eAAe;IAElD,uEAAuE;IACvE,2DAA2D;IAC3D,2EAA2E;IAC3E,MAAMC,uBAAuBH,oBAAoB,YAAY,gBAAgB;IAE7E,MAAMI,oBAAoBH,aAAaN,IAAI,CAAC,CAACU,KAAOA,GAAGC,OAAO,OAAOH;IAErE,IAAI,CAACC,mBAAmB;QACtBjB,OAAOY,cAAc,GAAG;QACxB,OAAOZ;IACT;IAEA,uDAAuD;IACvD,MAAMoB,YAAYH,kBAAkBI,YAAY;IAChD,MAAMC,kBAAkBF,YAAYA,UAAUG,OAAO,KAAKP;IAC1D,IAAII,WAAW;QACbpB,OAAOE,QAAQ,GAAG;IACpB;IAEA,+BAA+B;IAC/B,IAAIW,oBAAoB,WAAW;QACjCb,OAAOI,iBAAiB,GAAG;QAE3B,gDAAgD;QAChD,IAAIU,aAAaU,MAAM,GAAG,GAAG;YAC3BxB,OAAOG,sBAAsB,GAAG;QAClC;IACF;IAEA,0CAA0C;IAC1C,6DAA6D;IAC7D,MAAMsB,mBAAmB1B,WAAW2B,wBAAwB,CAAC9B,WAAW+B,gBAAgB;IACxF,IAAIC,kBAAkB;IAEtB,IAAIH,kBAAkB;QACpB,kDAAkD;QAClD,MAAMI,kBAAkBJ,iBAAiBK,oBAAoB,CAAClC,WAAWmC,cAAc;QACvFH,kBAAkBC,gBAAgBrB,IAAI,CAAC,CAACwB;YACtC,MAAMC,OAAOD,GAAGE,aAAa;YAC7B,OAAOD,KAAKV,OAAO,OAAOD;QAC5B;IACF;IAEA,8DAA8D;IAC9D,IAAI,CAACM,iBAAiB;QACpB,MAAMC,kBAAkB9B,WAAW+B,oBAAoB,CAAClC,WAAWmC,cAAc;QACjFH,kBAAkBC,gBAAgBrB,IAAI,CAAC,CAACwB;YACtC,MAAMC,OAAOD,GAAGE,aAAa;YAC7B,OAAOD,KAAKV,OAAO,OAAOD;QAC5B;IACF;IAEA,IAAI,CAACM,iBAAiB;QACpB5B,OAAOY,cAAc,GAAG;QACxB,OAAOZ;IACT;IAEA,oBAAoB;IACpB,MAAMmC,YAAYP,gBAAgBQ,YAAY,EAAE,CAAC,EAAE;IACnD,IAAI,CAACD,aAAa,CAACxC,KAAK0C,yBAAyB,CAACF,YAAY;QAC5D,OAAOnC;IACT;IAEA,wBAAwB;IACxB,MAAMsC,aAAaH,UAAUI,WAAW,CAAC;IACzC,IAAID,YAAY;QACd,MAAME,UAAUF,WAAWG,iBAAiB,CAAC7C,WAAWmC,cAAc,CAAC,CAAC,EAAE;QAC1E,IAAIS,SAAS;YACX,MAAME,cAAcF,QAAQN,aAAa,GAAGX,OAAO;YAEnD,0CAA0C;YAC1C,MAAMoB,gBAAgBtC,QAAQG,IAAI,CAAC,CAACC,MAClCA,IAAIM,eAAe,GAAG6B,IAAI,CAAC,CAAC1B,KAAOA,GAAGC,OAAO,OAAOuB;YAGtD,IAAIC,eAAe;gBACjB3C,OAAOsC,UAAU,GAAG;oBAClBO,SAASH;oBACTI,cAAcH,cAAcjC,uBAAuB;gBACrD;YACF;QACF;IACF;IAEA,4BAA4B;IAC5B,MAAMqC,iBAAiBZ,UAAUI,WAAW,CAAC;IAC7C,IAAIQ,gBAAgB;QAClB/C,OAAO+C,cAAc,GAAG;IAC1B;IAEA,4BAA4B;IAC5B,MAAMC,iBAAiBb,UAAUI,WAAW,CAAC;IAC7C,IAAIS,gBAAgB;QAClB,MAAMC,cAAcD,eAAeP,iBAAiB,CAAC7C,WAAWmC,cAAc,CAAC,CAAC,EAAE;QAClF,IAAIkB,aAAa;YACf,MAAMC,aAAaD,YAAYf,aAAa,GAAGX,OAAO;YAEtD,yBAAyB;YACzB,MAAM4B,eAAe9C,QAAQG,IAAI,CAAC,CAACC,MACjCA,IAAIM,eAAe,GAAG6B,IAAI,CAAC,CAAC1B,KAAOA,GAAGC,OAAO,OAAO+B;YAGtD,IAAIC,gBAAgBD,eAAe,iBAAiB;gBAClD,4BAA4B;gBAC5B,MAAME,OAAOH,YAAYb,YAAY;gBACrC,MAAMiB,YAAYD,KAAK5B,MAAM,KAAK;gBAElCxB,OAAOgD,cAAc,GAAG;oBACtBF,cAAcK,aAAazC,uBAAuB;oBAClD2C;gBACF;YACF;QACF;IACF;IAEA,2BAA2B;IAC3B,MAAMC,gBAAgBnB,UAAUI,WAAW,CAAC;IAC5C,IAAIe,eAAe;QACjBtD,OAAOC,iBAAiB,GAAG;IAC7B;IAEA,OAAOD;AACT;AAOA;;;CAGC,GACD,SAASuD,kBAAkBxD,UAAsB;IAC/C,MAAMyD,SAAkC,EAAE;IAE1C,6EAA6E;IAC7E,MAAMC,kBAAkB,CAACC;QACvBA,KAAKC,uBAAuB,GAAGC,OAAO,CAAC,CAACC;YACtCL,OAAOM,IAAI,CAAC;gBAACD,MAAME,MAAM;gBAAIF,MAAMG,MAAM;aAAG;QAC9C;QACAN,KAAKO,wBAAwB,GAAGL,OAAO,CAAC,CAACC;YACvCL,OAAOM,IAAI,CAAC;gBAACD,MAAME,MAAM;gBAAIF,MAAMG,MAAM;aAAG;QAC9C;QAEA,oEAAoE;QACpEN,KAAKQ,WAAW,GAAGN,OAAO,CAACH;IAC7B;IAEAA,gBAAgB1D;IAEhB,IAAIyD,OAAOhC,MAAM,KAAK,GAAG;QACvB,OAAO;IACT;IAEA,uEAAuE;IACvE,MAAM2C,eAAeC,MAAMC,IAAI,CAAC,IAAIC,IAAId,OAAOe,GAAG,CAAC,CAACC,IAAMC,KAAKC,SAAS,CAACF,MAAMD,GAAG,CAChF,CAACC,IAAMC,KAAKE,KAAK,CAACH;IAEpBL,aAAaS,IAAI,CAAC,CAACC,GAAGC,IAAMA,CAAC,CAAC,EAAE,GAAGD,CAAC,CAAC,EAAE;IAEvC,4BAA4B;IAC5B,KAAK,MAAM,CAACE,KAAKC,IAAI,IAAIb,aAAc;QACrCpE,WAAWkF,UAAU,CAACF,KAAKC;IAC7B;IAEA,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,SAASE,mBACdnF,UAAsB,EACtBoF,SAA0B;IAE1B,MAAMC,UAAoB,EAAE;IAC5B,IAAIC,WAAW;IAEf,IAAIF,UAAUvE,cAAc,KAAK,SAASuE,UAAUjF,QAAQ,EAAE;QAC5DL,IAAIc,KAAK,CACP,CAAC,uCAAuC,EAAEwE,UAAUvE,cAAc,CAAC,WAAW,EAAEuE,UAAUjF,QAAQ,EAAE;QAEtG,OAAO;YAAEkF,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,qFAAqF;IACrF,MAAMC,cAAc/B,kBAAkBxD;IACtC,IAAIuF,aAAa;QACfF,QAAQtB,IAAI,CAAC;QACbuB,WAAW;IACb;IAEA,+BAA+B;IAC/B,MAAMhF,UAAUN,WAAWO,qBAAqB;IAChD,MAAMC,gBAAgBF,QAAQG,IAAI,CAAC,CAACC,MAAQA,IAAIC,uBAAuB,OAAO;IAE9E,8CAA8C;IAC9C,IAAIY,kBAAkB;IACtB,IAAIf,eAAe;QACjB,MAAMU,oBAAoBV,cACvBQ,eAAe,GACfP,IAAI,CAAC,CAACU,KAAOA,GAAGC,OAAO,OAAO;QACjC,IAAIF,mBAAmB;YACrB,MAAMG,YAAYH,kBAAkBI,YAAY;YAChDC,kBAAkBF,YAAYA,UAAUG,OAAO,KAAK;QACtD;IACF;IAEA,kEAAkE;IAClE,MAAME,mBAAmB1B,WAAW2B,wBAAwB,CAAC9B,WAAW+B,gBAAgB;IACxF,IAAIC,kBAAkB;IAEtB,IAAIH,kBAAkB;QACpB,MAAMI,kBAAkBJ,iBAAiBK,oBAAoB,CAAClC,WAAWmC,cAAc;QACvFH,kBAAkBC,gBAAgBrB,IAAI,CAAC,CAACwB;YACtC,MAAMC,OAAOD,GAAGE,aAAa;YAC7B,OAAOD,KAAKV,OAAO,OAAOD;QAC5B;IACF;IAEA,8DAA8D;IAC9D,IAAI,CAACM,iBAAiB;QACpB,MAAMC,kBAAkB9B,WAAW+B,oBAAoB,CAAClC,WAAWmC,cAAc;QACjFH,kBAAkBC,gBAAgBrB,IAAI,CAAC,CAACwB;YACtC,MAAMC,OAAOD,GAAGE,aAAa;YAC7B,OAAOD,KAAKV,OAAO,OAAOD;QAC5B;IACF;IAEA,IAAI,CAACM,iBAAiB;QACpB,OAAO;YAAEwD,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,MAAMlD,YAAYP,gBAAgBQ,YAAY,EAAE,CAAC,EAAE;IACnD,IAAI,CAACD,aAAa,CAACxC,KAAK0C,yBAAyB,CAACF,YAAY;QAC5D,OAAO;YAAEiD,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,wBAAwB;IACxB,IAAIF,UAAU7C,UAAU,EAAE;QACxB,MAAMA,aAAaH,UAAUI,WAAW,CAAC;QACzC,IAAID,YAAY;YACdA,WAAWiD,MAAM;YACjBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,4BAA4B;IAC5B,IAAIF,UAAUpC,cAAc,EAAE;QAC5B,MAAMA,iBAAiBZ,UAAUI,WAAW,CAAC;QAC7C,IAAIQ,gBAAgB;YAClBA,eAAewC,MAAM;YACrBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,8BAA8B;IAC9B,IAAIF,UAAUnC,cAAc,EAAEK,WAAW;QACvC,MAAML,iBAAiBb,UAAUI,WAAW,CAAC;QAC7C,IAAIS,gBAAgB;YAClBA,eAAeuC,MAAM;YACrBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,+BAA+B;IAC/B,IAAIF,UAAU/E,iBAAiB,EAAE;QAC/B,IAAIG,eAAe;YACjB,IAAI4E,UAAUhF,sBAAsB,EAAE;gBACpC,+DAA+D;gBAC/D,MAAMW,eAAeP,cAAcQ,eAAe;gBAClD,MAAME,oBAAoBH,aAAaN,IAAI,CAAC,CAACU,KAAOA,GAAGC,OAAO,OAAO;gBACrE,IAAIF,mBAAmB;oBACrBA,kBAAkBsE,MAAM;oBAExB,4CAA4C;oBAC5C,IAAIhF,cAAcQ,eAAe,GAAGS,MAAM,KAAK,GAAG;wBAChDjB,cAAcgF,MAAM;oBACtB;gBACF;gBAEA,4BAA4B;gBAC5BxF,WAAWyF,oBAAoB,CAAC;oBAC9B3E,iBAAiB;oBACjBC,cAAc;wBAAC;qBAAmB;gBACpC;gBAEAsE,QAAQtB,IAAI,CAAC;YACf,OAAO;gBACL,2EAA2E;gBAC3E,MAAM7C,oBAAoBV,cACvBQ,eAAe,GACfP,IAAI,CAAC,CAACU,KAAOA,GAAGC,OAAO,OAAO;gBACjC,IAAIF,mBAAmB;oBACrB,yBAAyB;oBACzBA,kBAAkBwE,OAAO,CAAC;oBAE1B,0DAA0D;oBAC1D,MAAMC,cAAc3F,WAAW+B,oBAAoB,CAAClC,WAAW+F,UAAU;oBACzED,YAAY9B,OAAO,CAAC,CAACgC;wBACnB,IAAIA,WAAWrE,OAAO,OAAO,eAAe;4BAC1CqE,WAAWC,eAAe,CAAC;wBAC7B;oBACF;gBACF;gBACAtF,cAAcuF,kBAAkB,CAAC;gBACjCV,QAAQtB,IAAI,CAAC;YACf;YACAuB,WAAW;QACb;IACF;IAEA,6BAA6B;IAC7B,gEAAgE;IAChE,IAAIF,UAAU7C,UAAU,EAAE;QACxB,MAAMyD,iBAAiBhG,WAAWO,qBAAqB;QACvD,MAAM0F,WAAWD,eAAevF,IAAI,CAClC,CAACC,MAAQA,IAAIC,uBAAuB,OAAOyE,UAAU7C,UAAU,EAAEQ;QAEnE,IAAIkD,UAAU;YACZA,SAAST,MAAM;YACfH,QAAQtB,IAAI,CAAC,CAAC,QAAQ,EAAEqB,UAAU7C,UAAU,CAACO,OAAO,CAAC,OAAO,CAAC;YAC7DwC,WAAW;QACb;IACF;IAEA,IAAIF,UAAUnC,cAAc,EAAEK,WAAW;QACvC,MAAM0C,iBAAiBhG,WAAWO,qBAAqB;QACvD,MAAM6C,eAAe4C,eAAevF,IAAI,CACtC,CAACC,MAAQA,IAAIC,uBAAuB,OAAOyE,UAAUnC,cAAc,EAAEF;QAEvE,IAAIK,cAAc;YAChBA,aAAaoC,MAAM;YACnBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,OAAO;QAAED;QAASC;IAAS;AAC7B;AAOA;;;CAGC,GACD,OAAO,SAASY,iBACdlG,UAAsB,EACtBmG,MAA2B;IAE3B,MAAMd,UAAoB,EAAE;IAC5B,IAAIC,WAAW;IAEf,6EAA6E;IAC7E,MAAMxD,kBAAkB9B,WAAW+B,oBAAoB,CAAClC,WAAWmC,cAAc;IACjF,MAAMH,kBAAkBC,gBAAgBrB,IAAI,CAAC,CAACwB;QAC5C,MAAMC,OAAOD,GAAGE,aAAa;QAC7B,MAAMiE,OAAOlE,KAAKV,OAAO;QACzB,OAAO4E,SAAS,sBAAsBA,KAAKC,QAAQ,CAAC;IACtD;IAEA,IAAI,CAACxE,iBAAiB;QACpB/B,IAAIc,KAAK,CAAC;QACV,OAAO;YAAEyE,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,6BAA6B;IAC7B,MAAMlD,YAAYP,gBAAgBQ,YAAY,EAAE,CAAC,EAAE;IACnD,IAAI,CAACD,aAAa,CAACxC,KAAK0C,yBAAyB,CAACF,YAAY;QAC5DtC,IAAIc,KAAK,CAAC;QACV,OAAO;YAAEyE,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,yCAAyC;IACzC,MAAMgB,wBAAwBlE,UAAUI,WAAW,CAAC;IACpD,IAAI8D,uBAAuB;QACzBxG,IAAIc,KAAK,CAAC;QACV,OAAO;YAAEyE,SAAS;gBAAC;aAAyC;YAAEC,UAAU;QAAM;IAChF;IAEA,qBAAqB;IACrB,+FAA+F;IAC/F,gGAAgG;IAChG,MAAMiB,WACJJ,OAAOK,gBAAgB,KAAK,QACxB,CAAC;;;GAGN,CAAC,GACI,CAAC;;GAEN,CAAC;IAEFpE,UAAUqE,qBAAqB,CAAC;QAC9BC,MAAM;QACNC,aAAaJ;IACf;IAEAlB,QAAQtB,IAAI,CAAC,CAAC,uCAAuC,EAAEoC,OAAOS,eAAe,CAAC,CAAC,CAAC;IAChFtB,WAAW;IAEX,OAAO;QAAED;QAASC;IAAS;AAC7B;AAEA;;;CAGC,GACD,OAAO,SAASuB,gBAAgB7G,UAAsB;IACpD,6EAA6E;IAC7E,MAAM8B,kBAAkB9B,WAAW+B,oBAAoB,CAAClC,WAAWmC,cAAc;IACjF,MAAMH,kBAAkBC,gBAAgBrB,IAAI,CAAC,CAACwB;QAC5C,MAAMC,OAAOD,GAAGE,aAAa;QAC7B,MAAMiE,OAAOlE,KAAKV,OAAO;QACzB,OAAO4E,SAAS,sBAAsBA,KAAKC,QAAQ,CAAC;IACtD;IAEA,IAAI,CAACxE,iBAAiB;QACpB/B,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,6BAA6B;IAC7B,MAAMwB,YAAYP,gBAAgBQ,YAAY,EAAE,CAAC,EAAE;IACnD,IAAI,CAACD,aAAa,CAACxC,KAAK0C,yBAAyB,CAACF,YAAY;QAC5DtC,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,sBAAsB;IACtB,MAAM2C,gBAAgBnB,UAAUI,WAAW,CAAC;IAC5C,IAAI,CAACe,iBAAiB,CAAC3D,KAAKkH,oBAAoB,CAACvD,gBAAgB;QAC/DzD,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,qCAAqC;IACrC,MAAM+F,cAAcpD,cAAcwD,cAAc;IAChD,IAAI,CAACJ,eAAe,CAAC/G,KAAK0C,yBAAyB,CAACqE,cAAc;QAChE7G,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,iBAAiB;IACjB,MAAMoG,sBAAsBL,YAAYnE,WAAW,CAAC;IACpD,MAAMyE,uBAAuBN,YAAYnE,WAAW,CAAC;IAErD,IAAI,CAACwE,qBAAqB;QACxBlH,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,gFAAgF;IAChF,IAAIgG;IACJ,IAAIhH,KAAKkH,oBAAoB,CAACE,sBAAsB;QAClD,MAAML,cAAcK,oBAAoBD,cAAc;QACtD,MAAMX,OAAOO,aAAanF,aAAa;QAEvC,yBAAyB;QACzB,kDAAkD;QAClD,+DAA+D;QAC/D,IAAI4E,KAAKc,QAAQ,CAAC,wCAAwC;YACxD,sEAAsE;YACtE,2CAA2C;YAC3CN,kBAAkB;QACpB,OAAO;YACL,oCAAoC;YACpCA,kBAAkBR,KAAKe,OAAO,CAAC,SAAS;QAC1C;IACF;IAEA,MAAMX,mBAAmB5G,KAAKkH,oBAAoB,CAACG,wBAC/CA,qBAAqBF,cAAc,IAAIvF,cAAc,SACrD4F,UAAU,uCAAuC;;IAErD,IAAI,CAACR,iBAAiB;QACpB9G,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,OAAO;QACLgG;QACAJ;IACF;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/payload-config-ast.ts"],"sourcesContent":["import type { SourceFile } from 'ts-morph'\n\nimport { Node, SyntaxKind } from 'ts-morph'\n\nimport * as log from './log.js'\n\n/**\n * Result of detecting what changes are needed in a payload config file\n */\nexport type DetectionResult = {\n /** Database adapter configuration if present */\n dbProperty?: {\n /** Name of the adapter function (e.g., 'mongooseAdapter', 'postgresAdapter') */\n adapter: string\n /** NPM package the adapter is imported from (e.g., '@payloadcms/db-mongodb') */\n importSource: string\n }\n /** Editor configuration if present */\n editorProperty?: {\n /** NPM package the editor is imported from (e.g., '@payloadcms/richtext-lexical') */\n importSource: string\n /** Whether this is a default editor with no custom configuration */\n isDefault: boolean\n }\n /** Whether the config already has a `figma` property */\n figmaObjectExists: boolean\n /** Whether buildConfig/buildFigmaConfig uses an import alias (e.g., 'buildConfig as createConfig') */\n hasAlias: boolean\n /** Whether a buildConfig or buildFigmaConfig call was found (undefined if not checked) */\n hasBuildConfig?: boolean\n /** Whether there are other imports from 'payload' besides buildConfig (e.g., types) */\n hasOtherPayloadImports: boolean\n /** Whether the import needs to be changed from 'payload' to '@payloadcms/figma' */\n needsImportChange: boolean\n /** Whether a `secret` property exists in the config */\n secretProperty?: boolean\n /** Sharp configuration if present */\n sharpProperty?: {\n /** NPM package sharp is imported from (always 'sharp') */\n importSource: string\n }\n}\n\n/**\n * Detect what changes are needed in the payload config file\n */\nexport function detectRequiredChanges(sourceFile: SourceFile): DetectionResult {\n const result: DetectionResult = {\n figmaObjectExists: false,\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: false,\n }\n\n // Find buildConfig import\n const imports = sourceFile.getImportDeclarations()\n const payloadImport = imports.find(\n (imp) =>\n imp.getModuleSpecifierValue() === 'payload' ||\n imp.getModuleSpecifierValue() === '@payloadcms/figma',\n )\n\n if (!payloadImport) {\n log.debug('No payload or @payloadcms/figma import found')\n result.hasBuildConfig = false\n return result\n }\n\n log.debug(`Found import from: ${payloadImport.getModuleSpecifierValue()}`)\n\n const moduleSpecifier = payloadImport.getModuleSpecifierValue()\n const namedImports = payloadImport.getNamedImports()\n\n // Determine which function name to look for based on the import source\n // - From 'payload': look for buildConfig (needs migration)\n // - From '@payloadcms/figma': look for buildFigmaConfig (already migrated)\n const expectedFunctionName = moduleSpecifier === 'payload' ? 'buildConfig' : 'buildFigmaConfig'\n\n const buildConfigImport = namedImports.find((ni) => ni.getName() === expectedFunctionName)\n\n if (!buildConfigImport) {\n result.hasBuildConfig = false\n return result\n }\n\n // Check for alias and get the actual name used in code\n const aliasNode = buildConfigImport.getAliasNode()\n const buildConfigName = aliasNode ? aliasNode.getText() : expectedFunctionName\n if (aliasNode) {\n result.hasAlias = true\n }\n\n // Check if import needs change\n if (moduleSpecifier === 'payload') {\n result.needsImportChange = true\n\n // Check if there are other imports from payload\n if (namedImports.length > 1) {\n result.hasOtherPayloadImports = true\n }\n }\n\n // Find buildConfig call in export default\n // First try to find export default with the buildConfig call\n const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment)\n let buildConfigCall = null\n\n if (exportAssignment) {\n // Look for buildConfig call in the export default\n const callExpressions = exportAssignment.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n // If not found in export default, search all call expressions\n if (!buildConfigCall) {\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n if (!buildConfigCall) {\n result.hasBuildConfig = false\n return result\n }\n\n // Get config object\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n return result\n }\n\n // Check for db property\n const dbProperty = configArg.getProperty('db')\n if (dbProperty) {\n const dbValue = dbProperty.getChildrenOfKind(SyntaxKind.CallExpression)[0]\n if (dbValue) {\n const adapterName = dbValue.getExpression().getText()\n\n // Find the import source for this adapter\n const adapterImport = imports.find((imp) =>\n imp.getNamedImports().some((ni) => ni.getName() === adapterName),\n )\n\n if (adapterImport) {\n result.dbProperty = {\n adapter: adapterName,\n importSource: adapterImport.getModuleSpecifierValue(),\n }\n }\n }\n }\n\n // Check for secret property\n const secretProperty = configArg.getProperty('secret')\n if (secretProperty) {\n result.secretProperty = true\n }\n\n // Check for editor property\n const editorProperty = configArg.getProperty('editor')\n if (editorProperty) {\n const editorValue = editorProperty.getChildrenOfKind(SyntaxKind.CallExpression)[0]\n if (editorValue) {\n const editorName = editorValue.getExpression().getText()\n\n // Find the import source\n const editorImport = imports.find((imp) =>\n imp.getNamedImports().some((ni) => ni.getName() === editorName),\n )\n\n if (editorImport && editorName === 'lexicalEditor') {\n // Check if it has arguments\n const args = editorValue.getArguments()\n const isDefault = args.length === 0\n\n result.editorProperty = {\n importSource: editorImport.getModuleSpecifierValue(),\n isDefault,\n }\n }\n }\n }\n\n // Check for sharp property\n const sharpProperty = configArg.getProperty('sharp')\n if (sharpProperty) {\n // Find the import source for sharp\n const sharpImport = imports.find(\n (imp) =>\n imp.getModuleSpecifierValue() === 'sharp' ||\n imp.getNamedImports().some((ni) => ni.getName() === 'sharp'),\n )\n\n result.sharpProperty = {\n importSource: sharpImport?.getModuleSpecifierValue() || 'sharp',\n }\n }\n\n // Check for figma property\n const figmaProperty = configArg.getProperty('figma')\n if (figmaProperty) {\n result.figmaObjectExists = true\n }\n\n return result\n}\n\nexport type ASTModificationResult = {\n changes: string[]\n modified: boolean\n}\n\n/**\n * Remove all comments\n * @returns true if any comments were removed\n */\nfunction removeAllComments(sourceFile: SourceFile): boolean {\n const ranges: Array<[number, number]> = []\n\n // Recursively collect comments from node and ALL children (including tokens)\n const collectComments = (node: Node) => {\n node.getLeadingCommentRanges().forEach((range) => {\n ranges.push([range.getPos(), range.getEnd()])\n })\n node.getTrailingCommentRanges().forEach((range) => {\n ranges.push([range.getPos(), range.getEnd()])\n })\n\n // Process ALL children including token nodes (commas, braces, etc.)\n node.getChildren().forEach(collectComments)\n }\n\n collectComments(sourceFile)\n\n if (ranges.length === 0) {\n return false\n }\n\n // Remove duplicates and sort in reverse order to avoid position shifts\n const uniqueRanges = Array.from(new Set(ranges.map((r) => JSON.stringify(r)))).map(\n (r) => JSON.parse(r) as [number, number],\n )\n uniqueRanges.sort((a, b) => b[0] - a[0])\n\n // Remove each comment range\n for (const [pos, end] of uniqueRanges) {\n sourceFile.removeText(pos, end)\n }\n\n return true\n}\n\n/**\n * Apply modifications to the source file based on detection result\n * Modifies the AST in memory - caller must call sourceFile.save()\n */\nexport function applyModifications(\n sourceFile: SourceFile,\n detection: DetectionResult,\n): ASTModificationResult {\n const changes: string[] = []\n let modified = false\n\n if (detection.hasBuildConfig === false || detection.hasAlias) {\n log.debug(\n `Skipping modifications: hasBuildConfig=${detection.hasBuildConfig}, hasAlias=${detection.hasAlias}`,\n )\n return { changes: [], modified: false }\n }\n\n // 1. Remove all comments FIRST (before AST modifications that might shift positions)\n const hadComments = removeAllComments(sourceFile)\n if (hadComments) {\n changes.push('Removed comments')\n modified = true\n }\n\n // Find the import declarations\n const imports = sourceFile.getImportDeclarations()\n const payloadImport = imports.find((imp) => imp.getModuleSpecifierValue() === 'payload')\n\n // Get the buildConfig name (could be aliased)\n let buildConfigName = 'buildConfig'\n if (payloadImport) {\n const buildConfigImport = payloadImport\n .getNamedImports()\n .find((ni) => ni.getName() === 'buildConfig')\n if (buildConfigImport) {\n const aliasNode = buildConfigImport.getAliasNode()\n buildConfigName = aliasNode ? aliasNode.getText() : 'buildConfig'\n }\n }\n\n // Find buildConfig call in export default (prefer export default)\n const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment)\n let buildConfigCall = null\n\n if (exportAssignment) {\n const callExpressions = exportAssignment.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n // If not found in export default, search all call expressions\n if (!buildConfigCall) {\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n return expr.getText() === buildConfigName\n })\n }\n\n if (!buildConfigCall) {\n return { changes: [], modified: false }\n }\n\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n return { changes: [], modified: false }\n }\n\n // 1. Remove db property\n if (detection.dbProperty) {\n const dbProperty = configArg.getProperty('db')\n if (dbProperty) {\n dbProperty.remove()\n changes.push('Removed db property')\n modified = true\n }\n }\n\n // 2. Remove secret property\n if (detection.secretProperty) {\n const secretProperty = configArg.getProperty('secret')\n if (secretProperty) {\n secretProperty.remove()\n changes.push('Removed secret property')\n modified = true\n }\n }\n\n // 3. Remove editor if default\n if (detection.editorProperty?.isDefault) {\n const editorProperty = configArg.getProperty('editor')\n if (editorProperty) {\n editorProperty.remove()\n changes.push('Removed default editor property')\n modified = true\n }\n }\n\n // 4. Remove sharp property\n if (detection.sharpProperty) {\n const sharpProperty = configArg.getProperty('sharp')\n if (sharpProperty) {\n sharpProperty.remove()\n changes.push('Removed sharp property')\n modified = true\n }\n }\n\n // 5. Update buildConfig import\n if (detection.needsImportChange) {\n if (payloadImport) {\n if (detection.hasOtherPayloadImports) {\n // Remove buildConfig from payload import, add new figma import\n const namedImports = payloadImport.getNamedImports()\n const buildConfigImport = namedImports.find((ni) => ni.getName() === 'buildConfig')\n if (buildConfigImport) {\n buildConfigImport.remove()\n\n // If payload import is now empty, remove it\n if (payloadImport.getNamedImports().length === 0) {\n payloadImport.remove()\n }\n }\n\n // Add new import at the top\n sourceFile.addImportDeclaration({\n moduleSpecifier: '@payloadcms/figma',\n namedImports: ['buildFigmaConfig'],\n })\n\n changes.push('Split buildConfig import to @payloadcms/figma')\n } else {\n // Replace entire import: change module specifier and rename all references\n const buildConfigImport = payloadImport\n .getNamedImports()\n .find((ni) => ni.getName() === 'buildConfig')\n if (buildConfigImport) {\n // Change the import name\n buildConfigImport.setName('buildFigmaConfig')\n\n // Find and rename all usages of 'buildConfig' in the file\n const identifiers = sourceFile.getDescendantsOfKind(SyntaxKind.Identifier)\n identifiers.forEach((identifier) => {\n if (identifier.getText() === 'buildConfig') {\n identifier.replaceWithText('buildFigmaConfig')\n }\n })\n }\n payloadImport.setModuleSpecifier('@payloadcms/figma')\n changes.push('Changed buildConfig import to @payloadcms/figma')\n }\n modified = true\n }\n }\n\n // 6. Remove orphaned imports\n // Re-fetch imports after each removal to avoid stale references\n if (detection.dbProperty) {\n const currentImports = sourceFile.getImportDeclarations()\n const dbImport = currentImports.find(\n (imp) => imp.getModuleSpecifierValue() === detection.dbProperty?.importSource,\n )\n if (dbImport) {\n dbImport.remove()\n changes.push(`Removed ${detection.dbProperty.adapter} import`)\n modified = true\n }\n }\n\n if (detection.editorProperty?.isDefault) {\n const currentImports = sourceFile.getImportDeclarations()\n const editorImport = currentImports.find(\n (imp) => imp.getModuleSpecifierValue() === detection.editorProperty?.importSource,\n )\n if (editorImport) {\n editorImport.remove()\n changes.push('Removed lexicalEditor import')\n modified = true\n }\n }\n\n if (detection.sharpProperty) {\n const currentImports = sourceFile.getImportDeclarations()\n const sharpImport = currentImports.find((imp) => imp.getModuleSpecifierValue() === 'sharp')\n if (sharpImport) {\n sharpImport.remove()\n changes.push('Removed sharp import')\n modified = true\n }\n }\n\n return { changes, modified }\n}\n\nexport type FigmaPropertyConfig = {\n contentSystemId: string\n useContentSystem?: boolean\n}\n\n/**\n * Add figma property to buildConfig if it doesn't exist\n * Modifies the AST in memory - caller must call sourceFile.save()\n */\nexport function addFigmaProperty(\n sourceFile: SourceFile,\n config: FigmaPropertyConfig,\n): ASTModificationResult {\n const changes: string[] = []\n let modified = false\n\n // Find buildFigmaConfig call (this function is only used with Figma configs)\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n const buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n const text = expr.getText()\n return text === 'buildFigmaConfig' || text.endsWith('.buildFigmaConfig')\n })\n\n if (!buildConfigCall) {\n log.debug('No buildFigmaConfig call found')\n return { changes: [], modified: false }\n }\n\n // Get config object argument\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n log.debug('buildConfig argument is not an object literal')\n return { changes: [], modified: false }\n }\n\n // Check if figma property already exists\n const existingFigmaProperty = configArg.getProperty('figma')\n if (existingFigmaProperty) {\n log.debug('figma property already exists, skipping')\n return { changes: ['Skipped: figma property already exists'], modified: false }\n }\n\n // Add figma property\n // Note: useContentSystem is optional and defaults to true, so we don't generate it during init\n // contentSystemId is stored in .env file and referenced via process.env with non-null assertion\n const figmaObj =\n config.useContentSystem === false\n ? `{\n contentSystemId: process.env.FIGMA_CONTENT_SYSTEM_ID!,\n useContentSystem: false,\n }`\n : `{\n contentSystemId: process.env.FIGMA_CONTENT_SYSTEM_ID!,\n }`\n\n configArg.addPropertyAssignment({\n name: 'figma',\n initializer: figmaObj,\n })\n\n changes.push(`Added figma property (contentSystemId: ${config.contentSystemId})`)\n modified = true\n\n return { changes, modified }\n}\n\n/**\n * Read figma configuration from payload.config.ts\n * Returns the figma object if it exists, null otherwise\n */\nexport function readFigmaConfig(sourceFile: SourceFile): FigmaPropertyConfig | null {\n // Find buildFigmaConfig call (this function is only used with Figma configs)\n const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)\n const buildConfigCall = callExpressions.find((ce) => {\n const expr = ce.getExpression()\n const text = expr.getText()\n return text === 'buildFigmaConfig' || text.endsWith('.buildFigmaConfig')\n })\n\n if (!buildConfigCall) {\n log.debug('No buildFigmaConfig call found')\n return null\n }\n\n // Get config object argument\n const configArg = buildConfigCall.getArguments()[0]\n if (!configArg || !Node.isObjectLiteralExpression(configArg)) {\n log.debug('buildConfig argument is not an object literal')\n return null\n }\n\n // Find figma property\n const figmaProperty = configArg.getProperty('figma')\n if (!figmaProperty || !Node.isPropertyAssignment(figmaProperty)) {\n log.debug('No figma property found in buildConfig')\n return null\n }\n\n // Get initializer (the object value)\n const initializer = figmaProperty.getInitializer()\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n log.debug('figma property is not an object literal')\n return null\n }\n\n // Extract values\n const contentSystemIdProp = initializer.getProperty('contentSystemId')\n const useContentSystemProp = initializer.getProperty('useContentSystem')\n\n if (!contentSystemIdProp) {\n log.debug('Missing required figma property: contentSystemId')\n return null\n }\n\n // Extract contentSystemId - support both literal strings and env var references\n let contentSystemId: string | undefined\n if (Node.isPropertyAssignment(contentSystemIdProp)) {\n const initializer = contentSystemIdProp.getInitializer()\n const text = initializer?.getText() || ''\n\n // Support both patterns:\n // 1. Literal string: 'cms_abc123' or \"cms_abc123\"\n // 2. Environment variable: process.env.FIGMA_CONTENT_SYSTEM_ID\n if (text.includes('process.env.FIGMA_CONTENT_SYSTEM_ID')) {\n // For env var reference, return a marker that indicates it's from env\n // The actual value will be read at runtime\n contentSystemId = 'process.env.FIGMA_CONTENT_SYSTEM_ID'\n } else {\n // Remove quotes for literal strings\n contentSystemId = text.replace(/['\"]/g, '')\n }\n }\n\n const useContentSystem = Node.isPropertyAssignment(useContentSystemProp)\n ? useContentSystemProp.getInitializer()?.getText() === 'true'\n : undefined // Optional: undefined if not specified\n\n if (!contentSystemId) {\n log.debug('Could not extract contentSystemId value')\n return null\n }\n\n return {\n contentSystemId,\n useContentSystem,\n }\n}\n"],"names":["Node","SyntaxKind","log","detectRequiredChanges","sourceFile","result","figmaObjectExists","hasAlias","hasOtherPayloadImports","needsImportChange","imports","getImportDeclarations","payloadImport","find","imp","getModuleSpecifierValue","debug","hasBuildConfig","moduleSpecifier","namedImports","getNamedImports","expectedFunctionName","buildConfigImport","ni","getName","aliasNode","getAliasNode","buildConfigName","getText","length","exportAssignment","getFirstDescendantByKind","ExportAssignment","buildConfigCall","callExpressions","getDescendantsOfKind","CallExpression","ce","expr","getExpression","configArg","getArguments","isObjectLiteralExpression","dbProperty","getProperty","dbValue","getChildrenOfKind","adapterName","adapterImport","some","adapter","importSource","secretProperty","editorProperty","editorValue","editorName","editorImport","args","isDefault","sharpProperty","sharpImport","figmaProperty","removeAllComments","ranges","collectComments","node","getLeadingCommentRanges","forEach","range","push","getPos","getEnd","getTrailingCommentRanges","getChildren","uniqueRanges","Array","from","Set","map","r","JSON","stringify","parse","sort","a","b","pos","end","removeText","applyModifications","detection","changes","modified","hadComments","remove","addImportDeclaration","setName","identifiers","Identifier","identifier","replaceWithText","setModuleSpecifier","currentImports","dbImport","addFigmaProperty","config","text","endsWith","existingFigmaProperty","figmaObj","useContentSystem","addPropertyAssignment","name","initializer","contentSystemId","readFigmaConfig","isPropertyAssignment","getInitializer","contentSystemIdProp","useContentSystemProp","includes","replace","undefined"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-config-modifier.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-modifier.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAA;AAKhC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAC9B,WAAW,CAAC,EAAE,mBAAmB,GAChC,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"payload-config-modifier.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-modifier.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAA;AAKhC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAC9B,WAAW,CAAC,EAAE,mBAAmB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CA4N7B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAwC9D"}
|
|
@@ -109,6 +109,10 @@ import { runTypeScriptCheck } from './typescript-validator.js';
|
|
|
109
109
|
if (detection.dbProperty) {
|
|
110
110
|
packagesToUninstall.push(detection.dbProperty.importSource);
|
|
111
111
|
}
|
|
112
|
+
// Uninstall sharp (Figma infrastructure handles image processing)
|
|
113
|
+
if (detection.sharpProperty) {
|
|
114
|
+
packagesToUninstall.push('sharp');
|
|
115
|
+
}
|
|
112
116
|
// Ensure lexical is installed if user doesn't have a custom editor
|
|
113
117
|
// (buildFigmaConfig uses lexicalEditor() as default)
|
|
114
118
|
if (!detection.editorProperty) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/payload-config-modifier.ts"],"sourcesContent":["import pc from 'picocolors'\nimport { Project } from 'ts-morph'\n\nimport type { PackageManager } from './package-manager.js'\n\nimport { formatFile } from './formatter.js'\nimport * as log from './log.js'\nimport {\n addFigmaProperty,\n applyModifications,\n detectRequiredChanges,\n type FigmaPropertyConfig,\n} from './payload-config-ast.js'\nimport { findPayloadConfig } from './payload-config-finder.js'\nimport { checkPackageInstalled, installPackage, uninstallPackage } from './payload-package-check.js'\nimport { runTypeScriptCheck } from './typescript-validator.js'\n\nexport type ModificationResult = {\n changes: string[]\n error?: string\n modified: boolean\n success: boolean\n warnings?: string[]\n}\n\n/**\n * Main orchestrator for payload config modification\n * Checks package, detects needed changes, applies modifications\n */\nexport async function ensurePayloadFigmaConfig(\n projectPath: string,\n packageManager: PackageManager,\n figmaConfig?: FigmaPropertyConfig,\n): Promise<ModificationResult> {\n const changes: string[] = []\n const warnings: string[] = []\n let modified = false\n\n try {\n log.debug(`Starting payload config modification for: ${projectPath}`)\n\n // 1. Find config file\n const configPath = await findPayloadConfig(projectPath)\n if (!configPath) {\n log.debug(`Config file not found in: ${projectPath}`)\n return {\n changes: [],\n error: 'payload.config.ts not found in project',\n modified: false,\n success: false,\n }\n }\n\n log.debug(`Found config file: ${configPath}`)\n\n // 2. Check/install @payloadcms/figma package\n const isInstalled = await checkPackageInstalled(projectPath, '@payloadcms/figma')\n if (!isInstalled) {\n log.debug('@payloadcms/figma not installed, attempting installation...')\n try {\n await installPackage(projectPath, '@payloadcms/figma', packageManager)\n changes.push('Installed @payloadcms/figma')\n modified = true\n log.debug('@payloadcms/figma installed successfully')\n } catch (error) {\n log.debug(\n `Failed to install @payloadcms/figma: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n return {\n changes: [],\n error: 'Failed to install @payloadcms/figma',\n modified: false,\n success: false,\n }\n }\n } else {\n log.debug('@payloadcms/figma already installed')\n }\n\n // 3. Parse config with ts-morph\n log.debug('Parsing config file with ts-morph...')\n const project = new Project({\n skipAddingFilesFromTsConfig: true,\n })\n const sourceFile = project.addSourceFileAtPath(configPath)\n\n // 4. Detect required changes\n log.debug('Detecting required changes...')\n const detection = detectRequiredChanges(sourceFile)\n\n log.debug(\n `Detection results: needsImportChange=${detection.needsImportChange}, hasAlias=${detection.hasAlias}, hasBuildConfig=${detection.hasBuildConfig}`,\n )\n\n // Handle failure modes\n if (detection.hasAlias) {\n log.debug('Config uses import alias (e.g., buildConfig as X)')\n return {\n changes,\n error: 'Config uses import alias - manual modification required',\n modified,\n success: false,\n }\n }\n\n if (detection.hasBuildConfig === false) {\n log.debug('No buildConfig call found in config file')\n return {\n changes,\n error: 'Config structure not recognized (no buildConfig call found)',\n modified,\n success: false,\n }\n }\n\n // 5. Apply modifications\n log.debug('Applying modifications...')\n const modResult = applyModifications(sourceFile, detection)\n if (modResult.modified) {\n changes.push(...modResult.changes)\n modified = true\n\n log.debug(`Applied ${modResult.changes.length} modifications`)\n }\n\n // 6. Add figma property if config provided and doesn't exist\n if (figmaConfig && !detection.figmaObjectExists) {\n log.debug('Adding figma property to buildConfig...')\n const figmaResult = addFigmaProperty(sourceFile, figmaConfig)\n if (figmaResult.modified) {\n changes.push(...figmaResult.changes)\n modified = true\n log.debug(`Added figma property`)\n } else {\n log.debug('Figma property not added (may already exist)')\n }\n } else if (detection.figmaObjectExists) {\n log.debug('Figma property already exists, skipping')\n }\n\n // Save file if any modifications were made\n if (modified) {\n await sourceFile.save()\n log.debug('Config file saved')\n\n // 7. Handle package management\n const packagesToUninstall: string[] = []\n\n // Uninstall db adapter (buildFigmaConfig provides its own)\n if (detection.dbProperty) {\n packagesToUninstall.push(detection.dbProperty.importSource)\n }\n\n // Ensure lexical is installed if user doesn't have a custom editor\n // (buildFigmaConfig uses lexicalEditor() as default)\n if (!detection.editorProperty) {\n log.debug(\n 'No editor property detected - will ensure lexical is installed for default editor',\n )\n } else if (detection.editorProperty.isDefault) {\n log.debug('Default lexicalEditor() detected - will ensure lexical is installed')\n } else {\n log.debug(\n `Custom editor detected (${detection.editorProperty.importSource}) - skipping lexical installation`,\n )\n }\n\n if (!detection.editorProperty || detection.editorProperty.isDefault) {\n log.debug('Checking if @payloadcms/richtext-lexical is installed...')\n const hasLexical = await checkPackageInstalled(projectPath, '@payloadcms/richtext-lexical')\n if (!hasLexical) {\n log.debug('@payloadcms/richtext-lexical not found, installing...')\n try {\n await installPackage(projectPath, '@payloadcms/richtext-lexical', packageManager)\n changes.push('Installed @payloadcms/richtext-lexical (default editor)')\n log.debug('Successfully installed @payloadcms/richtext-lexical')\n } catch (error) {\n log.debug(\n `Failed to install @payloadcms/richtext-lexical: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n // Don't fail on install error - user can install manually if needed\n warnings.push(\n 'Could not install @payloadcms/richtext-lexical - you may need to install it manually',\n )\n }\n } else {\n log.debug('@payloadcms/richtext-lexical already installed, skipping')\n }\n }\n\n if (packagesToUninstall.length > 0) {\n log.debug(`Uninstalling ${packagesToUninstall.length} orphaned packages...`)\n }\n\n for (const pkg of packagesToUninstall) {\n try {\n await uninstallPackage(projectPath, pkg, packageManager)\n changes.push(`Uninstalled ${pkg}`)\n log.debug(`Uninstalled ${pkg}`)\n } catch (error) {\n log.debug(\n `Failed to uninstall ${pkg}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n // Don't fail on uninstall errors - orphaned package is better than broken config\n }\n }\n\n // 8. Format file\n log.debug('Formatting config file...')\n const formatResult = await formatFile(configPath, packageManager)\n if (!formatResult.success && formatResult.warning) {\n warnings.push(formatResult.warning)\n log.debug(`Formatting warning: ${formatResult.warning}`)\n }\n\n // 9. Run TypeScript validation\n log.debug('Running TypeScript validation...')\n const tsResult = await runTypeScriptCheck(projectPath, packageManager)\n if (!tsResult.success && tsResult.errors.length > 0) {\n warnings.push(\"TypeScript validation found issues - run 'pnpm build' for details\")\n log.debug(`TypeScript validation found ${tsResult.errors.length} issues`)\n }\n } else {\n log.debug('No modifications needed - config already correct')\n }\n\n log.debug('Payload config modification completed successfully')\n\n return {\n changes,\n modified,\n success: true,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n } catch (error) {\n log.debug(\n `Unexpected error in ensurePayloadFigmaConfig: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n if (error instanceof Error && error.stack) {\n log.debug(`Stack trace: ${error.stack}`)\n }\n return {\n changes,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n modified,\n success: false,\n }\n }\n}\n\n/**\n * Display manual configuration instructions\n */\nexport function displayManualInstructions(reason: string): void {\n const leftLineWrap = (message: string): string => {\n // Add '┌ ' prefix to first line, '│ ' to subsequent lines, and '└ ' to last line\n return message\n .split('\\n')\n .map((line, index, arr) => {\n if (index === 0) {\n return `${pc.dim('┌ ')}${line}`\n } else if (index === arr.length - 1) {\n return `${pc.dim('└ ')}${line}`\n } else {\n return `${pc.dim('│ ')}${line}`\n }\n })\n .join('\\n')\n }\n\n const message = leftLineWrap(`${pc.cyan(pc.bold('Manual Configuration Required'))}\n\nUnable to automatically modify payload.config.ts\nReason: ${pc.yellow(reason)}\n\n${pc.bold('Required changes:')}\n\n1. Replace buildConfig import:\n ${pc.dim('- FROM: ')}${pc.cyan(\"import { buildConfig } from 'payload'\")}\n ${pc.dim('- TO: ')}${pc.cyan(\"import { buildFigmaConfig } from '@payloadcms/figma'\")}\n\n2. Remove these properties from buildConfig():\n • db\n • secret\n • editor (if using default lexicalEditor())\n\n3. Install package:\n ${pc.cyan('pnpm add @payloadcms/figma')}\n\nThen run: ${pc.cyan('npx @payloadcms/figma init')}`)\n\n // eslint-disable-next-line no-console\n console.log(message)\n}\n"],"names":["pc","Project","formatFile","log","addFigmaProperty","applyModifications","detectRequiredChanges","findPayloadConfig","checkPackageInstalled","installPackage","uninstallPackage","runTypeScriptCheck","ensurePayloadFigmaConfig","projectPath","packageManager","figmaConfig","changes","warnings","modified","debug","configPath","error","success","isInstalled","push","Error","message","project","skipAddingFilesFromTsConfig","sourceFile","addSourceFileAtPath","detection","needsImportChange","hasAlias","hasBuildConfig","modResult","length","figmaObjectExists","figmaResult","save","packagesToUninstall","dbProperty","importSource","editorProperty","isDefault","hasLexical","pkg","formatResult","warning","tsResult","errors","undefined","stack","displayManualInstructions","reason","leftLineWrap","split","map","line","index","arr","dim","join","cyan","bold","yellow","console"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/payload-config-modifier.ts"],"sourcesContent":["import pc from 'picocolors'\nimport { Project } from 'ts-morph'\n\nimport type { PackageManager } from './package-manager.js'\n\nimport { formatFile } from './formatter.js'\nimport * as log from './log.js'\nimport {\n addFigmaProperty,\n applyModifications,\n detectRequiredChanges,\n type FigmaPropertyConfig,\n} from './payload-config-ast.js'\nimport { findPayloadConfig } from './payload-config-finder.js'\nimport { checkPackageInstalled, installPackage, uninstallPackage } from './payload-package-check.js'\nimport { runTypeScriptCheck } from './typescript-validator.js'\n\nexport type ModificationResult = {\n changes: string[]\n error?: string\n modified: boolean\n success: boolean\n warnings?: string[]\n}\n\n/**\n * Main orchestrator for payload config modification\n * Checks package, detects needed changes, applies modifications\n */\nexport async function ensurePayloadFigmaConfig(\n projectPath: string,\n packageManager: PackageManager,\n figmaConfig?: FigmaPropertyConfig,\n): Promise<ModificationResult> {\n const changes: string[] = []\n const warnings: string[] = []\n let modified = false\n\n try {\n log.debug(`Starting payload config modification for: ${projectPath}`)\n\n // 1. Find config file\n const configPath = await findPayloadConfig(projectPath)\n if (!configPath) {\n log.debug(`Config file not found in: ${projectPath}`)\n return {\n changes: [],\n error: 'payload.config.ts not found in project',\n modified: false,\n success: false,\n }\n }\n\n log.debug(`Found config file: ${configPath}`)\n\n // 2. Check/install @payloadcms/figma package\n const isInstalled = await checkPackageInstalled(projectPath, '@payloadcms/figma')\n if (!isInstalled) {\n log.debug('@payloadcms/figma not installed, attempting installation...')\n try {\n await installPackage(projectPath, '@payloadcms/figma', packageManager)\n changes.push('Installed @payloadcms/figma')\n modified = true\n log.debug('@payloadcms/figma installed successfully')\n } catch (error) {\n log.debug(\n `Failed to install @payloadcms/figma: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n return {\n changes: [],\n error: 'Failed to install @payloadcms/figma',\n modified: false,\n success: false,\n }\n }\n } else {\n log.debug('@payloadcms/figma already installed')\n }\n\n // 3. Parse config with ts-morph\n log.debug('Parsing config file with ts-morph...')\n const project = new Project({\n skipAddingFilesFromTsConfig: true,\n })\n const sourceFile = project.addSourceFileAtPath(configPath)\n\n // 4. Detect required changes\n log.debug('Detecting required changes...')\n const detection = detectRequiredChanges(sourceFile)\n\n log.debug(\n `Detection results: needsImportChange=${detection.needsImportChange}, hasAlias=${detection.hasAlias}, hasBuildConfig=${detection.hasBuildConfig}`,\n )\n\n // Handle failure modes\n if (detection.hasAlias) {\n log.debug('Config uses import alias (e.g., buildConfig as X)')\n return {\n changes,\n error: 'Config uses import alias - manual modification required',\n modified,\n success: false,\n }\n }\n\n if (detection.hasBuildConfig === false) {\n log.debug('No buildConfig call found in config file')\n return {\n changes,\n error: 'Config structure not recognized (no buildConfig call found)',\n modified,\n success: false,\n }\n }\n\n // 5. Apply modifications\n log.debug('Applying modifications...')\n const modResult = applyModifications(sourceFile, detection)\n if (modResult.modified) {\n changes.push(...modResult.changes)\n modified = true\n\n log.debug(`Applied ${modResult.changes.length} modifications`)\n }\n\n // 6. Add figma property if config provided and doesn't exist\n if (figmaConfig && !detection.figmaObjectExists) {\n log.debug('Adding figma property to buildConfig...')\n const figmaResult = addFigmaProperty(sourceFile, figmaConfig)\n if (figmaResult.modified) {\n changes.push(...figmaResult.changes)\n modified = true\n log.debug(`Added figma property`)\n } else {\n log.debug('Figma property not added (may already exist)')\n }\n } else if (detection.figmaObjectExists) {\n log.debug('Figma property already exists, skipping')\n }\n\n // Save file if any modifications were made\n if (modified) {\n await sourceFile.save()\n log.debug('Config file saved')\n\n // 7. Handle package management\n const packagesToUninstall: string[] = []\n\n // Uninstall db adapter (buildFigmaConfig provides its own)\n if (detection.dbProperty) {\n packagesToUninstall.push(detection.dbProperty.importSource)\n }\n\n // Uninstall sharp (Figma infrastructure handles image processing)\n if (detection.sharpProperty) {\n packagesToUninstall.push('sharp')\n }\n\n // Ensure lexical is installed if user doesn't have a custom editor\n // (buildFigmaConfig uses lexicalEditor() as default)\n if (!detection.editorProperty) {\n log.debug(\n 'No editor property detected - will ensure lexical is installed for default editor',\n )\n } else if (detection.editorProperty.isDefault) {\n log.debug('Default lexicalEditor() detected - will ensure lexical is installed')\n } else {\n log.debug(\n `Custom editor detected (${detection.editorProperty.importSource}) - skipping lexical installation`,\n )\n }\n\n if (!detection.editorProperty || detection.editorProperty.isDefault) {\n log.debug('Checking if @payloadcms/richtext-lexical is installed...')\n const hasLexical = await checkPackageInstalled(projectPath, '@payloadcms/richtext-lexical')\n if (!hasLexical) {\n log.debug('@payloadcms/richtext-lexical not found, installing...')\n try {\n await installPackage(projectPath, '@payloadcms/richtext-lexical', packageManager)\n changes.push('Installed @payloadcms/richtext-lexical (default editor)')\n log.debug('Successfully installed @payloadcms/richtext-lexical')\n } catch (error) {\n log.debug(\n `Failed to install @payloadcms/richtext-lexical: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n // Don't fail on install error - user can install manually if needed\n warnings.push(\n 'Could not install @payloadcms/richtext-lexical - you may need to install it manually',\n )\n }\n } else {\n log.debug('@payloadcms/richtext-lexical already installed, skipping')\n }\n }\n\n if (packagesToUninstall.length > 0) {\n log.debug(`Uninstalling ${packagesToUninstall.length} orphaned packages...`)\n }\n\n for (const pkg of packagesToUninstall) {\n try {\n await uninstallPackage(projectPath, pkg, packageManager)\n changes.push(`Uninstalled ${pkg}`)\n log.debug(`Uninstalled ${pkg}`)\n } catch (error) {\n log.debug(\n `Failed to uninstall ${pkg}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n // Don't fail on uninstall errors - orphaned package is better than broken config\n }\n }\n\n // 8. Format file\n log.debug('Formatting config file...')\n const formatResult = await formatFile(configPath, packageManager)\n if (!formatResult.success && formatResult.warning) {\n warnings.push(formatResult.warning)\n log.debug(`Formatting warning: ${formatResult.warning}`)\n }\n\n // 9. Run TypeScript validation\n log.debug('Running TypeScript validation...')\n const tsResult = await runTypeScriptCheck(projectPath, packageManager)\n if (!tsResult.success && tsResult.errors.length > 0) {\n warnings.push(\"TypeScript validation found issues - run 'pnpm build' for details\")\n log.debug(`TypeScript validation found ${tsResult.errors.length} issues`)\n }\n } else {\n log.debug('No modifications needed - config already correct')\n }\n\n log.debug('Payload config modification completed successfully')\n\n return {\n changes,\n modified,\n success: true,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n } catch (error) {\n log.debug(\n `Unexpected error in ensurePayloadFigmaConfig: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n if (error instanceof Error && error.stack) {\n log.debug(`Stack trace: ${error.stack}`)\n }\n return {\n changes,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n modified,\n success: false,\n }\n }\n}\n\n/**\n * Display manual configuration instructions\n */\nexport function displayManualInstructions(reason: string): void {\n const leftLineWrap = (message: string): string => {\n // Add '┌ ' prefix to first line, '│ ' to subsequent lines, and '└ ' to last line\n return message\n .split('\\n')\n .map((line, index, arr) => {\n if (index === 0) {\n return `${pc.dim('┌ ')}${line}`\n } else if (index === arr.length - 1) {\n return `${pc.dim('└ ')}${line}`\n } else {\n return `${pc.dim('│ ')}${line}`\n }\n })\n .join('\\n')\n }\n\n const message = leftLineWrap(`${pc.cyan(pc.bold('Manual Configuration Required'))}\n\nUnable to automatically modify payload.config.ts\nReason: ${pc.yellow(reason)}\n\n${pc.bold('Required changes:')}\n\n1. Replace buildConfig import:\n ${pc.dim('- FROM: ')}${pc.cyan(\"import { buildConfig } from 'payload'\")}\n ${pc.dim('- TO: ')}${pc.cyan(\"import { buildFigmaConfig } from '@payloadcms/figma'\")}\n\n2. Remove these properties from buildConfig():\n • db\n • secret\n • editor (if using default lexicalEditor())\n\n3. Install package:\n ${pc.cyan('pnpm add @payloadcms/figma')}\n\nThen run: ${pc.cyan('npx @payloadcms/figma init')}`)\n\n // eslint-disable-next-line no-console\n console.log(message)\n}\n"],"names":["pc","Project","formatFile","log","addFigmaProperty","applyModifications","detectRequiredChanges","findPayloadConfig","checkPackageInstalled","installPackage","uninstallPackage","runTypeScriptCheck","ensurePayloadFigmaConfig","projectPath","packageManager","figmaConfig","changes","warnings","modified","debug","configPath","error","success","isInstalled","push","Error","message","project","skipAddingFilesFromTsConfig","sourceFile","addSourceFileAtPath","detection","needsImportChange","hasAlias","hasBuildConfig","modResult","length","figmaObjectExists","figmaResult","save","packagesToUninstall","dbProperty","importSource","sharpProperty","editorProperty","isDefault","hasLexical","pkg","formatResult","warning","tsResult","errors","undefined","stack","displayManualInstructions","reason","leftLineWrap","split","map","line","index","arr","dim","join","cyan","bold","yellow","console"],"mappings":"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"}
|
|
@@ -12,4 +12,9 @@ export declare function installPackage(projectPath: string, packageName: string,
|
|
|
12
12
|
* Does not throw on failure - orphaned package is better than broken config
|
|
13
13
|
*/
|
|
14
14
|
export declare function uninstallPackage(projectPath: string, packageName: string, packageManager: PackageManager): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Run an npm script from package.json
|
|
17
|
+
* Does not throw on failure - logs warning and continues
|
|
18
|
+
*/
|
|
19
|
+
export declare function runScript(projectPath: string, scriptName: string, packageManager: PackageManager): Promise<boolean>;
|
|
15
20
|
//# sourceMappingURL=payload-package-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-package-check.d.ts","sourceRoot":"","sources":["../../src/utils/payload-package-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
1
|
+
{"version":3,"file":"payload-package-check.d.ts","sourceRoot":"","sources":["../../src/utils/payload-package-check.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC,CAwClB"}
|
|
@@ -93,5 +93,46 @@ import * as log from './log.js';
|
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Run an npm script from package.json
|
|
98
|
+
* Does not throw on failure - logs warning and continues
|
|
99
|
+
*/ export async function runScript(projectPath, scriptName, packageManager) {
|
|
100
|
+
return new Promise((resolve)=>{
|
|
101
|
+
const command = packageManager;
|
|
102
|
+
// yarn doesn't need 'run' prefix, but it works with it too
|
|
103
|
+
const args = [
|
|
104
|
+
'run',
|
|
105
|
+
scriptName
|
|
106
|
+
];
|
|
107
|
+
log.debug(`Running script: ${command} ${args.join(' ')} in ${projectPath}`);
|
|
108
|
+
let stderr = '';
|
|
109
|
+
const child = spawn(command, args, {
|
|
110
|
+
cwd: projectPath,
|
|
111
|
+
shell: true,
|
|
112
|
+
stdio: 'pipe'
|
|
113
|
+
});
|
|
114
|
+
if (child.stderr) {
|
|
115
|
+
child.stderr.on('data', (data)=>{
|
|
116
|
+
stderr += data.toString();
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
child.on('error', (error)=>{
|
|
120
|
+
log.debug(`Failed to run script ${scriptName}: ${error.message}`);
|
|
121
|
+
resolve(false);
|
|
122
|
+
});
|
|
123
|
+
child.on('close', (code)=>{
|
|
124
|
+
if (code === 0) {
|
|
125
|
+
log.debug(`Successfully ran script: ${scriptName}`);
|
|
126
|
+
resolve(true);
|
|
127
|
+
} else {
|
|
128
|
+
log.debug(`Script ${scriptName} failed (exit code: ${code})`);
|
|
129
|
+
if (stderr) {
|
|
130
|
+
log.debug(`stderr: ${stderr}`);
|
|
131
|
+
}
|
|
132
|
+
resolve(false);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
96
137
|
|
|
97
138
|
//# sourceMappingURL=payload-package-check.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/payload-package-check.ts"],"sourcesContent":["import { spawn } from 'child_process'\nimport fs from 'fs/promises'\nimport path from 'path'\n\nimport type { PackageManager } from './package-manager.js'\n\nimport * as log from './log.js'\n\n/**\n * Check if a package is installed in dependencies (not devDependencies)\n */\nexport async function checkPackageInstalled(\n projectPath: string,\n packageName: string,\n): Promise<boolean> {\n try {\n const pkgJsonPath = path.join(projectPath, 'package.json')\n log.debug(`Checking if ${packageName} is installed in: ${pkgJsonPath}`)\n const pkgJsonContent = await fs.readFile(pkgJsonPath, 'utf-8')\n const pkgJson = JSON.parse(pkgJsonContent)\n const isInstalled = !!pkgJson.dependencies?.[packageName]\n log.debug(`${packageName} is ${isInstalled ? 'installed' : 'not installed'}`)\n return isInstalled\n } catch (error) {\n log.debug(\n `Error checking package installation: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n return false\n }\n}\n\n/**\n * Install a package as a production dependency\n */\nexport async function installPackage(\n projectPath: string,\n packageName: string,\n packageManager: PackageManager,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const command = packageManager\n const args = ['add', packageName]\n\n // npm uses 'install' instead of 'add'\n if (packageManager === 'npm') {\n args[0] = 'install'\n }\n\n log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`)\n\n let stderr = ''\n\n const child = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n stdio: 'pipe',\n })\n\n // Capture stderr for debug logging\n if (child.stderr) {\n child.stderr.on('data', (data) => {\n stderr += data.toString()\n })\n }\n\n child.on('error', (error) => {\n log.debug(`Spawn error for ${command}: ${error.message}`)\n reject(new Error(`Failed to spawn ${command}: ${error.message}`))\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n log.debug(`Successfully installed ${packageName}`)\n resolve()\n } else {\n log.debug(`Failed to install ${packageName} (exit code: ${code})`)\n if (stderr) {\n log.debug(`stderr: ${stderr}`)\n }\n reject(new Error(`Failed to install ${packageName}`))\n }\n })\n })\n}\n\n/**\n * Uninstall a package\n * Does not throw on failure - orphaned package is better than broken config\n */\nexport async function uninstallPackage(\n projectPath: string,\n packageName: string,\n packageManager: PackageManager,\n): Promise<void> {\n return new Promise((resolve) => {\n const command = packageManager\n const args = ['remove', packageName]\n\n // npm uses 'uninstall' instead of 'remove'\n if (packageManager === 'npm') {\n args[0] = 'uninstall'\n }\n\n log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`)\n\n const child = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n stdio: 'pipe',\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n log.debug(`Successfully uninstalled ${packageName}`)\n } else {\n log.debug(`Failed to uninstall ${packageName} (exit code: ${code}), continuing anyway`)\n }\n // Always resolve, even on error\n resolve()\n })\n })\n}\n"],"names":["spawn","fs","path","log","checkPackageInstalled","projectPath","packageName","pkgJsonPath","join","debug","pkgJsonContent","readFile","pkgJson","JSON","parse","isInstalled","dependencies","error","Error","message","installPackage","packageManager","Promise","resolve","reject","command","args","stderr","child","cwd","shell","stdio","on","data","toString","code","uninstallPackage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/payload-package-check.ts"],"sourcesContent":["import { spawn } from 'child_process'\nimport fs from 'fs/promises'\nimport path from 'path'\n\nimport type { PackageManager } from './package-manager.js'\n\nimport * as log from './log.js'\n\n/**\n * Check if a package is installed in dependencies (not devDependencies)\n */\nexport async function checkPackageInstalled(\n projectPath: string,\n packageName: string,\n): Promise<boolean> {\n try {\n const pkgJsonPath = path.join(projectPath, 'package.json')\n log.debug(`Checking if ${packageName} is installed in: ${pkgJsonPath}`)\n const pkgJsonContent = await fs.readFile(pkgJsonPath, 'utf-8')\n const pkgJson = JSON.parse(pkgJsonContent)\n const isInstalled = !!pkgJson.dependencies?.[packageName]\n log.debug(`${packageName} is ${isInstalled ? 'installed' : 'not installed'}`)\n return isInstalled\n } catch (error) {\n log.debug(\n `Error checking package installation: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n return false\n }\n}\n\n/**\n * Install a package as a production dependency\n */\nexport async function installPackage(\n projectPath: string,\n packageName: string,\n packageManager: PackageManager,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const command = packageManager\n const args = ['add', packageName]\n\n // npm uses 'install' instead of 'add'\n if (packageManager === 'npm') {\n args[0] = 'install'\n }\n\n log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`)\n\n let stderr = ''\n\n const child = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n stdio: 'pipe',\n })\n\n // Capture stderr for debug logging\n if (child.stderr) {\n child.stderr.on('data', (data) => {\n stderr += data.toString()\n })\n }\n\n child.on('error', (error) => {\n log.debug(`Spawn error for ${command}: ${error.message}`)\n reject(new Error(`Failed to spawn ${command}: ${error.message}`))\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n log.debug(`Successfully installed ${packageName}`)\n resolve()\n } else {\n log.debug(`Failed to install ${packageName} (exit code: ${code})`)\n if (stderr) {\n log.debug(`stderr: ${stderr}`)\n }\n reject(new Error(`Failed to install ${packageName}`))\n }\n })\n })\n}\n\n/**\n * Uninstall a package\n * Does not throw on failure - orphaned package is better than broken config\n */\nexport async function uninstallPackage(\n projectPath: string,\n packageName: string,\n packageManager: PackageManager,\n): Promise<void> {\n return new Promise((resolve) => {\n const command = packageManager\n const args = ['remove', packageName]\n\n // npm uses 'uninstall' instead of 'remove'\n if (packageManager === 'npm') {\n args[0] = 'uninstall'\n }\n\n log.debug(`Running: ${command} ${args.join(' ')} in ${projectPath}`)\n\n const child = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n stdio: 'pipe',\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n log.debug(`Successfully uninstalled ${packageName}`)\n } else {\n log.debug(`Failed to uninstall ${packageName} (exit code: ${code}), continuing anyway`)\n }\n // Always resolve, even on error\n resolve()\n })\n })\n}\n\n/**\n * Run an npm script from package.json\n * Does not throw on failure - logs warning and continues\n */\nexport async function runScript(\n projectPath: string,\n scriptName: string,\n packageManager: PackageManager,\n): Promise<boolean> {\n return new Promise((resolve) => {\n const command = packageManager\n // yarn doesn't need 'run' prefix, but it works with it too\n const args = ['run', scriptName]\n\n log.debug(`Running script: ${command} ${args.join(' ')} in ${projectPath}`)\n\n let stderr = ''\n\n const child = spawn(command, args, {\n cwd: projectPath,\n shell: true,\n stdio: 'pipe',\n })\n\n if (child.stderr) {\n child.stderr.on('data', (data) => {\n stderr += data.toString()\n })\n }\n\n child.on('error', (error) => {\n log.debug(`Failed to run script ${scriptName}: ${error.message}`)\n resolve(false)\n })\n\n child.on('close', (code) => {\n if (code === 0) {\n log.debug(`Successfully ran script: ${scriptName}`)\n resolve(true)\n } else {\n log.debug(`Script ${scriptName} failed (exit code: ${code})`)\n if (stderr) {\n log.debug(`stderr: ${stderr}`)\n }\n resolve(false)\n }\n })\n })\n}\n"],"names":["spawn","fs","path","log","checkPackageInstalled","projectPath","packageName","pkgJsonPath","join","debug","pkgJsonContent","readFile","pkgJson","JSON","parse","isInstalled","dependencies","error","Error","message","installPackage","packageManager","Promise","resolve","reject","command","args","stderr","child","cwd","shell","stdio","on","data","toString","code","uninstallPackage","runScript","scriptName"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/figma",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.28",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/node": "22.12.0",
|
|
46
|
+
"openapi-typescript": "^7.10.1",
|
|
46
47
|
"tsx": "4.20.6",
|
|
47
48
|
"typescript": "5.9.3",
|
|
48
49
|
"vitest": "3.2.4"
|
|
@@ -72,6 +73,7 @@
|
|
|
72
73
|
"debug:refresh-token": "tsx scripts/refresh-token.ts",
|
|
73
74
|
"debug:tokens": "tsx scripts/debug-tokens.ts",
|
|
74
75
|
"debug:write-token": "tsx scripts/write-token.ts",
|
|
76
|
+
"generate:types": "tsx scripts/generate-types.ts",
|
|
75
77
|
"lint": "eslint .",
|
|
76
78
|
"lint:fix": "eslint . --fix",
|
|
77
79
|
"start": "pnpm build && node ./bin/cli.js",
|
package/dist/db-adapter.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { BaseDatabaseAdapter, DatabaseAdapterObj } from 'payload';
|
|
2
|
-
interface ContentAPIDatabaseAdapterOptions {
|
|
3
|
-
contentApiKey: string;
|
|
4
|
-
contentApiUrl: string;
|
|
5
|
-
contentSystemId: string;
|
|
6
|
-
projectToken: string;
|
|
7
|
-
}
|
|
8
|
-
export type ContentAPIAdapter = {
|
|
9
|
-
contentApiKey: string;
|
|
10
|
-
contentApiUrl: string;
|
|
11
|
-
contentSystemId: string;
|
|
12
|
-
projectToken: string;
|
|
13
|
-
request<T = any>(path: string, body?: any): Promise<T>;
|
|
14
|
-
} & BaseDatabaseAdapter;
|
|
15
|
-
export declare const contentAPIAdapter: (opts: ContentAPIDatabaseAdapterOptions) => DatabaseAdapterObj;
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=db-adapter.d.ts.map
|
package/dist/db-adapter.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db-adapter.d.ts","sourceRoot":"","sources":["../src/db-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EAanB,kBAAkB,EAqBnB,MAAM,SAAS,CAAA;AAchB,UAAU,gCAAgC;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACvD,GAAG,mBAAmB,CAAA;AAqzBvB,eAAO,MAAM,iBAAiB,SAAU,gCAAgC,KAAG,kBA6C1E,CAAA"}
|