@payloadcms/figma 0.0.1-alpha.28 → 0.0.1-alpha.3
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 +1 -19
- package/dist/api/control-plane.d.ts.map +1 -1
- package/dist/api/control-plane.js +13 -48
- 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 +12 -38
- package/dist/api/figma-api.js.map +1 -1
- package/dist/auth/crypto-utils.d.ts.map +1 -1
- package/dist/auth/crypto-utils.js +5 -5
- package/dist/auth/crypto-utils.js.map +1 -1
- package/dist/auth/oauth-flow.js +3 -3
- package/dist/auth/oauth-flow.js.map +1 -1
- package/dist/auth/project-token.d.ts.map +1 -1
- package/dist/auth/project-token.js +4 -9
- package/dist/auth/project-token.js.map +1 -1
- package/dist/auth/token-store.d.ts +0 -10
- package/dist/auth/token-store.d.ts.map +1 -1
- package/dist/auth/token-store.js +0 -20
- package/dist/auth/token-store.js.map +1 -1
- package/dist/cli.js +0 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/deploy.d.ts +0 -2
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +45 -12
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts +5 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +85 -90
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list-tokens.js +2 -2
- package/dist/commands/list-tokens.js.map +1 -1
- package/dist/commands/login.d.ts +1 -8
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +6 -12
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +2 -2
- package/dist/commands/logout.js.map +1 -1
- package/dist/config/oauth.d.ts.map +1 -1
- package/dist/config/oauth.js +3 -4
- package/dist/config/oauth.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/oauth/components/LoginButton/index.d.ts.map +1 -1
- package/dist/oauth/components/LoginButton/index.js +6 -50
- package/dist/oauth/components/LoginButton/index.js.map +1 -1
- package/dist/oauth/components/LoginButton/index.scss +3 -50
- package/dist/oauth/components/LogoutButton/index.d.ts.map +1 -1
- package/dist/oauth/components/LogoutButton/index.js +1 -0
- package/dist/oauth/components/LogoutButton/index.js.map +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.js +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -1
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +6 -30
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/strategy/index.d.ts.map +1 -1
- package/dist/oauth/strategy/index.js +0 -4
- package/dist/oauth/strategy/index.js.map +1 -1
- package/dist/oauth/types.d.ts +1 -1
- package/dist/oauth/types.d.ts.map +1 -1
- package/dist/oauth/types.js.map +1 -1
- package/dist/oauth/utilities/createCookieOptions.d.ts.map +1 -1
- package/dist/oauth/utilities/createCookieOptions.js.map +1 -1
- package/dist/oauth/utilities/refreshTokens.d.ts.map +1 -1
- package/dist/oauth/utilities/refreshTokens.js +1 -1
- package/dist/oauth/utilities/refreshTokens.js.map +1 -1
- package/dist/plugin/build-config.d.ts +4 -20
- package/dist/plugin/build-config.d.ts.map +1 -1
- package/dist/plugin/build-config.js +9 -51
- package/dist/plugin/build-config.js.map +1 -1
- package/dist/utils/env-management.d.ts +11 -4
- package/dist/utils/env-management.d.ts.map +1 -1
- package/dist/utils/env-management.js +79 -46
- package/dist/utils/env-management.js.map +1 -1
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +7 -5
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/payload-config-ast.d.ts +3 -22
- package/dist/utils/payload-config-ast.d.ts.map +1 -1
- package/dist/utils/payload-config-ast.js +31 -89
- package/dist/utils/payload-config-ast.js.map +1 -1
- package/dist/utils/payload-config-finder.d.ts +2 -2
- package/dist/utils/payload-config-finder.d.ts.map +1 -1
- package/dist/utils/payload-config-finder.js +9 -48
- package/dist/utils/payload-config-finder.js.map +1 -1
- package/dist/utils/payload-config-modifier.d.ts.map +1 -1
- package/dist/utils/payload-config-modifier.js +4 -33
- package/dist/utils/payload-config-modifier.js.map +1 -1
- package/dist/utils/payload-package-check.d.ts +0 -5
- package/dist/utils/payload-package-check.d.ts.map +1 -1
- package/dist/utils/payload-package-check.js +0 -41
- package/dist/utils/payload-package-check.js.map +1 -1
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +3 -1
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/s3-upload.d.ts +1 -0
- package/dist/utils/s3-upload.d.ts.map +1 -1
- package/dist/utils/s3-upload.js +3 -10
- package/dist/utils/s3-upload.js.map +1 -1
- package/dist/utils/token-display.d.ts.map +1 -1
- package/dist/utils/token-display.js +5 -11
- package/dist/utils/token-display.js.map +1 -1
- package/package.json +4 -18
- package/dist/db-content-api/generated/content-api-types.d.ts +0 -3129
- package/dist/db-content-api/generated/content-api-types.d.ts.map +0 -1
- package/dist/db-content-api/generated/content-api-types.js +0 -7
- package/dist/db-content-api/generated/content-api-types.js.map +0 -1
- package/dist/db-content-api/index.d.ts +0 -31
- package/dist/db-content-api/index.d.ts.map +0 -1
- package/dist/db-content-api/index.js +0 -842
- package/dist/db-content-api/index.js.map +0 -1
- package/dist/db-content-api/types.d.ts +0 -31
- package/dist/db-content-api/types.d.ts.map +0 -1
- package/dist/db-content-api/types.js +0 -7
- package/dist/db-content-api/types.js.map +0 -1
- package/dist/endpoints/health.d.ts +0 -3
- package/dist/endpoints/health.d.ts.map +0 -1
- package/dist/endpoints/health.js +0 -11
- package/dist/endpoints/health.js.map +0 -1
- package/dist/exports/client.d.ts +0 -3
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js +0 -4
- package/dist/exports/client.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAgB,WAAW,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/utils/messages.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAgB,WAAW,IAAI,IAAI,CA2ClC;AASD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,CAiBzF;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAgBpF;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/utils/messages.js
CHANGED
|
@@ -29,14 +29,16 @@ export function helpMessage() {
|
|
|
29
29
|
|
|
30
30
|
${pc.bold('INIT COMMAND')}
|
|
31
31
|
|
|
32
|
-
${pc.cyan('@payloadcms/figma init --id <
|
|
33
|
-
${pc.cyan('@payloadcms/figma init
|
|
34
|
-
${pc.cyan('@payloadcms/figma init --
|
|
32
|
+
${pc.cyan('@payloadcms/figma init --id <cms-id>')} Initialize project with CMS ID
|
|
33
|
+
${pc.cyan('@payloadcms/figma init')} Initialize (prompts for CMS ID)
|
|
34
|
+
${pc.cyan('@payloadcms/figma init --name my-cms')} Specify project name for new projects
|
|
35
|
+
${pc.cyan('@payloadcms/figma init --force')} Force reconfiguration of existing project
|
|
36
|
+
${pc.cyan('@payloadcms/figma init --skip-auth')} Skip authentication (testing only)
|
|
35
37
|
|
|
36
38
|
${pc.bold('DEPLOY COMMAND')}
|
|
37
39
|
|
|
38
|
-
${pc.cyan('@payloadcms/figma deploy
|
|
39
|
-
${pc.dim('--yes, -y')}
|
|
40
|
+
${pc.cyan('@payloadcms/figma deploy')} Deploy your project to Figma
|
|
41
|
+
${pc.dim('--yes, -y')} Skip confirmation prompts
|
|
40
42
|
|
|
41
43
|
${pc.bold('DOCUMENTATION')}
|
|
42
44
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/messages.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport path from 'path'\nimport pc from 'picocolors'\nimport terminalLink from 'terminal-link'\n\nimport type { PackageManager } from '../types.js'\n\nconst header = (message: string): string => pc.bold(message)\n\nexport function helpMessage(): void {\n console.log(`\n ${pc.bold('USAGE')}\n\n ${pc.dim('@payloadcms/figma <command> [options]')}\n\n ${pc.bold('COMMANDS')}\n\n ${pc.cyan('login')} Authenticate with Figma OAuth2\n ${pc.cyan('logout')} Clear all stored tokens\n ${pc.cyan('list-tokens')} Show stored token information\n ${pc.cyan('init')} Initialize a Figma CMS project\n ${pc.cyan('deploy')} Deploy your project to Figma\n\n ${pc.bold('OPTIONS')}\n\n ${pc.dim('-h, --help Show help')}\n ${pc.dim('--debug Enable debug logging')}\n\n ${pc.bold('AUTHENTICATION')}\n\n ${pc.cyan('@payloadcms/figma login')} Authenticate with Figma\n ${pc.cyan('@payloadcms/figma logout')} Clear all tokens (with confirmation)\n ${pc.cyan('@payloadcms/figma list-tokens')} Display stored OAuth and project tokens\n\n ${pc.bold('INIT COMMAND')}\n\n ${pc.cyan('@payloadcms/figma init --id <
|
|
1
|
+
{"version":3,"sources":["../../src/utils/messages.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport path from 'path'\nimport pc from 'picocolors'\nimport terminalLink from 'terminal-link'\n\nimport type { PackageManager } from '../types.js'\n\nconst header = (message: string): string => pc.bold(message)\n\nexport function helpMessage(): void {\n console.log(`\n ${pc.bold('USAGE')}\n\n ${pc.dim('@payloadcms/figma <command> [options]')}\n\n ${pc.bold('COMMANDS')}\n\n ${pc.cyan('login')} Authenticate with Figma OAuth2\n ${pc.cyan('logout')} Clear all stored tokens\n ${pc.cyan('list-tokens')} Show stored token information\n ${pc.cyan('init')} Initialize a Figma CMS project\n ${pc.cyan('deploy')} Deploy your project to Figma\n\n ${pc.bold('OPTIONS')}\n\n ${pc.dim('-h, --help Show help')}\n ${pc.dim('--debug Enable debug logging')}\n\n ${pc.bold('AUTHENTICATION')}\n\n ${pc.cyan('@payloadcms/figma login')} Authenticate with Figma\n ${pc.cyan('@payloadcms/figma logout')} Clear all tokens (with confirmation)\n ${pc.cyan('@payloadcms/figma list-tokens')} Display stored OAuth and project tokens\n\n ${pc.bold('INIT COMMAND')}\n\n ${pc.cyan('@payloadcms/figma init --id <cms-id>')} Initialize project with CMS ID\n ${pc.cyan('@payloadcms/figma init')} Initialize (prompts for CMS ID)\n ${pc.cyan('@payloadcms/figma init --name my-cms')} Specify project name for new projects\n ${pc.cyan('@payloadcms/figma init --force')} Force reconfiguration of existing project\n ${pc.cyan('@payloadcms/figma init --skip-auth')} Skip authentication (testing only)\n\n ${pc.bold('DEPLOY COMMAND')}\n\n ${pc.cyan('@payloadcms/figma deploy')} Deploy your project to Figma\n ${pc.dim('--yes, -y')} Skip confirmation prompts\n\n ${pc.bold('DOCUMENTATION')}\n\n ${createTerminalLink('Getting Started', 'https://payloadcms.com/docs/getting-started/what-is-payload')}\n ${createTerminalLink('Figma CMS Docs', 'https://www.figma.com/developers/api')}\n`)\n}\n\n// Create terminalLink with fallback for unsupported terminals\nfunction createTerminalLink(text: string, url: string) {\n return terminalLink(text, url, {\n fallback: (text, url) => `${text}: ${url}`,\n })\n}\n\nexport function successMessage(projectDir: string, packageManager: PackageManager): string {\n const relativePath = path.relative(process.cwd(), projectDir)\n return `\n${header('Launch Application:')}\n\n - cd ./${relativePath}\n - ${packageManager === 'npm' ? 'npm run' : packageManager} dev or follow directions in README.md\n\n${header('Documentation:')}\n\n - ${createTerminalLink(\n 'Getting Started',\n 'https://payloadcms.com/docs/getting-started/what-is-payload',\n )}\n - ${createTerminalLink('Configuration', 'https://payloadcms.com/docs/configuration/overview')}\n\n`\n}\n\nexport function successfulNextInit(): string {\n return `- ${createTerminalLink(\n 'Getting Started',\n 'https://payloadcms.com/docs/getting-started/what-is-payload',\n )}\n- ${createTerminalLink('Configuration', 'https://payloadcms.com/docs/configuration/overview')}\n`\n}\n\nexport function moveMessage(args: { nextAppDir: string; projectDir: string }): string {\n const relativeAppDir = path.relative(process.cwd(), args.nextAppDir)\n return `\n${header('Next Steps:')}\n\nPayload does not support a top-level layout.tsx file in the app directory.\n\n${pc.bold('To continue:')}\n\n- Create a new directory in ./${relativeAppDir} such as ./${relativeAppDir}/${pc.bold('(app)')}\n- Move all files from ./${relativeAppDir} into that directory\n\nIt is recommended to do this from your IDE if your app has existing file references.\n\nOnce moved, rerun the @payloadcms/figma command again.\n`\n}\n\nexport function feedbackOutro(): string {\n return `${pc.bgCyan(pc.black(' Have feedback? '))} Visit us on ${createTerminalLink('GitHub', 'https://github.com/payloadcms/payload')}.`\n}\n"],"names":["path","pc","terminalLink","header","message","bold","helpMessage","console","log","dim","cyan","createTerminalLink","text","url","fallback","successMessage","projectDir","packageManager","relativePath","relative","process","cwd","successfulNextInit","moveMessage","args","relativeAppDir","nextAppDir","feedbackOutro","bgCyan","black"],"mappings":"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"}
|
|
@@ -1,39 +1,19 @@
|
|
|
1
1
|
import type { SourceFile } from 'ts-morph';
|
|
2
|
-
/**
|
|
3
|
-
* Result of detecting what changes are needed in a payload config file
|
|
4
|
-
*/
|
|
5
2
|
export type DetectionResult = {
|
|
6
|
-
/** Database adapter configuration if present */
|
|
7
3
|
dbProperty?: {
|
|
8
|
-
/** Name of the adapter function (e.g., 'mongooseAdapter', 'postgresAdapter') */
|
|
9
4
|
adapter: string;
|
|
10
|
-
/** NPM package the adapter is imported from (e.g., '@payloadcms/db-mongodb') */
|
|
11
5
|
importSource: string;
|
|
12
6
|
};
|
|
13
|
-
/** Editor configuration if present */
|
|
14
7
|
editorProperty?: {
|
|
15
|
-
/** NPM package the editor is imported from (e.g., '@payloadcms/richtext-lexical') */
|
|
16
8
|
importSource: string;
|
|
17
|
-
/** Whether this is a default editor with no custom configuration */
|
|
18
9
|
isDefault: boolean;
|
|
19
10
|
};
|
|
20
|
-
/** Whether the config already has a `figma` property */
|
|
21
11
|
figmaObjectExists: boolean;
|
|
22
|
-
/** Whether buildConfig/buildFigmaConfig uses an import alias (e.g., 'buildConfig as createConfig') */
|
|
23
12
|
hasAlias: boolean;
|
|
24
|
-
/** Whether a buildConfig or buildFigmaConfig call was found (undefined if not checked) */
|
|
25
13
|
hasBuildConfig?: boolean;
|
|
26
|
-
/** Whether there are other imports from 'payload' besides buildConfig (e.g., types) */
|
|
27
14
|
hasOtherPayloadImports: boolean;
|
|
28
|
-
/** Whether the import needs to be changed from 'payload' to '@payloadcms/figma' */
|
|
29
15
|
needsImportChange: boolean;
|
|
30
|
-
/** Whether a `secret` property exists in the config */
|
|
31
16
|
secretProperty?: boolean;
|
|
32
|
-
/** Sharp configuration if present */
|
|
33
|
-
sharpProperty?: {
|
|
34
|
-
/** NPM package sharp is imported from (always 'sharp') */
|
|
35
|
-
importSource: string;
|
|
36
|
-
};
|
|
37
17
|
};
|
|
38
18
|
/**
|
|
39
19
|
* Detect what changes are needed in the payload config file
|
|
@@ -49,8 +29,9 @@ export type ASTModificationResult = {
|
|
|
49
29
|
*/
|
|
50
30
|
export declare function applyModifications(sourceFile: SourceFile, detection: DetectionResult): ASTModificationResult;
|
|
51
31
|
export type FigmaPropertyConfig = {
|
|
52
|
-
|
|
53
|
-
|
|
32
|
+
region: string;
|
|
33
|
+
tenantId: string;
|
|
34
|
+
useContentSystem: boolean;
|
|
54
35
|
};
|
|
55
36
|
/**
|
|
56
37
|
* Add figma property to buildConfig if it doesn't exist
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-config-ast.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAM1C
|
|
1
|
+
{"version":3,"file":"payload-config-ast.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAM1C,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,cAAc,CAAC,EAAE;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,SAAS,EAAE,OAAO,CAAA;KACnB,CAAA;IACD,iBAAiB,EAAE,OAAO,CAAA;IAC1B,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,sBAAsB,EAAE,OAAO,CAAA;IAC/B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAiJ7E;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AA0CD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,eAAe,GACzB,qBAAqB,CAyJvB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,mBAAmB,GAC1B,qBAAqB,CA+CvB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,mBAAmB,GAAG,IAAI,CA0ElF"}
|
|
@@ -20,18 +20,15 @@ import * as log from './log.js';
|
|
|
20
20
|
log.debug(`Found import from: ${payloadImport.getModuleSpecifierValue()}`);
|
|
21
21
|
const moduleSpecifier = payloadImport.getModuleSpecifierValue();
|
|
22
22
|
const namedImports = payloadImport.getNamedImports();
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
// - From '@payloadcms/figma': look for buildFigmaConfig (already migrated)
|
|
26
|
-
const expectedFunctionName = moduleSpecifier === 'payload' ? 'buildConfig' : 'buildFigmaConfig';
|
|
27
|
-
const buildConfigImport = namedImports.find((ni)=>ni.getName() === expectedFunctionName);
|
|
23
|
+
// Check if buildConfig is imported
|
|
24
|
+
const buildConfigImport = namedImports.find((ni)=>ni.getName() === 'buildConfig');
|
|
28
25
|
if (!buildConfigImport) {
|
|
29
26
|
result.hasBuildConfig = false;
|
|
30
27
|
return result;
|
|
31
28
|
}
|
|
32
29
|
// Check for alias and get the actual name used in code
|
|
33
30
|
const aliasNode = buildConfigImport.getAliasNode();
|
|
34
|
-
const buildConfigName = aliasNode ? aliasNode.getText() :
|
|
31
|
+
const buildConfigName = aliasNode ? aliasNode.getText() : 'buildConfig';
|
|
35
32
|
if (aliasNode) {
|
|
36
33
|
result.hasAlias = true;
|
|
37
34
|
}
|
|
@@ -112,15 +109,6 @@ import * as log from './log.js';
|
|
|
112
109
|
}
|
|
113
110
|
}
|
|
114
111
|
}
|
|
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
|
-
}
|
|
124
112
|
// Check for figma property
|
|
125
113
|
const figmaProperty = configArg.getProperty('figma');
|
|
126
114
|
if (figmaProperty) {
|
|
@@ -252,16 +240,7 @@ import * as log from './log.js';
|
|
|
252
240
|
modified = true;
|
|
253
241
|
}
|
|
254
242
|
}
|
|
255
|
-
// 4.
|
|
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
|
|
243
|
+
// 4. Update buildConfig import
|
|
265
244
|
if (detection.needsImportChange) {
|
|
266
245
|
if (payloadImport) {
|
|
267
246
|
if (detection.hasOtherPayloadImports) {
|
|
@@ -279,31 +258,19 @@ import * as log from './log.js';
|
|
|
279
258
|
sourceFile.addImportDeclaration({
|
|
280
259
|
moduleSpecifier: '@payloadcms/figma',
|
|
281
260
|
namedImports: [
|
|
282
|
-
'
|
|
261
|
+
'buildConfig'
|
|
283
262
|
]
|
|
284
263
|
});
|
|
285
264
|
changes.push('Split buildConfig import to @payloadcms/figma');
|
|
286
265
|
} else {
|
|
287
|
-
// Replace entire import
|
|
288
|
-
const buildConfigImport = payloadImport.getNamedImports().find((ni)=>ni.getName() === 'buildConfig');
|
|
289
|
-
if (buildConfigImport) {
|
|
290
|
-
// Change the import name
|
|
291
|
-
buildConfigImport.setName('buildFigmaConfig');
|
|
292
|
-
// Find and rename all usages of 'buildConfig' in the file
|
|
293
|
-
const identifiers = sourceFile.getDescendantsOfKind(SyntaxKind.Identifier);
|
|
294
|
-
identifiers.forEach((identifier)=>{
|
|
295
|
-
if (identifier.getText() === 'buildConfig') {
|
|
296
|
-
identifier.replaceWithText('buildFigmaConfig');
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
}
|
|
266
|
+
// Replace entire import
|
|
300
267
|
payloadImport.setModuleSpecifier('@payloadcms/figma');
|
|
301
268
|
changes.push('Changed buildConfig import to @payloadcms/figma');
|
|
302
269
|
}
|
|
303
270
|
modified = true;
|
|
304
271
|
}
|
|
305
272
|
}
|
|
306
|
-
//
|
|
273
|
+
// 5. Remove orphaned imports
|
|
307
274
|
// Re-fetch imports after each removal to avoid stale references
|
|
308
275
|
if (detection.dbProperty) {
|
|
309
276
|
const currentImports = sourceFile.getImportDeclarations();
|
|
@@ -323,15 +290,6 @@ import * as log from './log.js';
|
|
|
323
290
|
modified = true;
|
|
324
291
|
}
|
|
325
292
|
}
|
|
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
|
-
}
|
|
335
293
|
return {
|
|
336
294
|
changes,
|
|
337
295
|
modified
|
|
@@ -343,15 +301,15 @@ import * as log from './log.js';
|
|
|
343
301
|
*/ export function addFigmaProperty(sourceFile, config) {
|
|
344
302
|
const changes = [];
|
|
345
303
|
let modified = false;
|
|
346
|
-
// Find
|
|
304
|
+
// Find buildConfig call
|
|
347
305
|
const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
348
306
|
const buildConfigCall = callExpressions.find((ce)=>{
|
|
349
307
|
const expr = ce.getExpression();
|
|
350
308
|
const text = expr.getText();
|
|
351
|
-
return text === '
|
|
309
|
+
return text === 'buildConfig' || text.endsWith('.buildConfig');
|
|
352
310
|
});
|
|
353
311
|
if (!buildConfigCall) {
|
|
354
|
-
log.debug('No
|
|
312
|
+
log.debug('No buildConfig call found');
|
|
355
313
|
return {
|
|
356
314
|
changes: [],
|
|
357
315
|
modified: false
|
|
@@ -378,19 +336,15 @@ import * as log from './log.js';
|
|
|
378
336
|
};
|
|
379
337
|
}
|
|
380
338
|
// Add figma property
|
|
381
|
-
// Note: useContentSystem is optional and defaults to true, so we don't generate it during init
|
|
382
|
-
// contentSystemId is stored in .env file and referenced via process.env with non-null assertion
|
|
383
|
-
const figmaObj = config.useContentSystem === false ? `{
|
|
384
|
-
contentSystemId: process.env.FIGMA_CONTENT_SYSTEM_ID!,
|
|
385
|
-
useContentSystem: false,
|
|
386
|
-
}` : `{
|
|
387
|
-
contentSystemId: process.env.FIGMA_CONTENT_SYSTEM_ID!,
|
|
388
|
-
}`;
|
|
389
339
|
configArg.addPropertyAssignment({
|
|
390
340
|
name: 'figma',
|
|
391
|
-
initializer:
|
|
341
|
+
initializer: `{
|
|
342
|
+
region: '${config.region}',
|
|
343
|
+
tenantId: '${config.tenantId}',
|
|
344
|
+
useContentSystem: ${config.useContentSystem},
|
|
345
|
+
}`
|
|
392
346
|
});
|
|
393
|
-
changes.push(`Added figma property (
|
|
347
|
+
changes.push(`Added figma property (region: ${config.region}, tenantId: ${config.tenantId}, useContentSystem: ${config.useContentSystem})`);
|
|
394
348
|
modified = true;
|
|
395
349
|
return {
|
|
396
350
|
changes,
|
|
@@ -401,15 +355,15 @@ import * as log from './log.js';
|
|
|
401
355
|
* Read figma configuration from payload.config.ts
|
|
402
356
|
* Returns the figma object if it exists, null otherwise
|
|
403
357
|
*/ export function readFigmaConfig(sourceFile) {
|
|
404
|
-
// Find
|
|
358
|
+
// Find buildConfig call
|
|
405
359
|
const callExpressions = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
406
360
|
const buildConfigCall = callExpressions.find((ce)=>{
|
|
407
361
|
const expr = ce.getExpression();
|
|
408
362
|
const text = expr.getText();
|
|
409
|
-
return text === '
|
|
363
|
+
return text === 'buildConfig' || text.endsWith('.buildConfig');
|
|
410
364
|
});
|
|
411
365
|
if (!buildConfigCall) {
|
|
412
|
-
log.debug('No
|
|
366
|
+
log.debug('No buildConfig call found');
|
|
413
367
|
return null;
|
|
414
368
|
}
|
|
415
369
|
// Get config object argument
|
|
@@ -431,37 +385,25 @@ import * as log from './log.js';
|
|
|
431
385
|
return null;
|
|
432
386
|
}
|
|
433
387
|
// Extract values
|
|
434
|
-
const
|
|
388
|
+
const regionProp = initializer.getProperty('region');
|
|
389
|
+
const tenantIdProp = initializer.getProperty('tenantId');
|
|
435
390
|
const useContentSystemProp = initializer.getProperty('useContentSystem');
|
|
436
|
-
if (!
|
|
437
|
-
log.debug('Missing required figma
|
|
391
|
+
if (!regionProp || !tenantIdProp) {
|
|
392
|
+
log.debug('Missing required figma properties (region or tenantId)');
|
|
438
393
|
return null;
|
|
439
394
|
}
|
|
440
|
-
// Extract
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
const text = initializer?.getText() || '';
|
|
445
|
-
// Support both patterns:
|
|
446
|
-
// 1. Literal string: 'cms_abc123' or "cms_abc123"
|
|
447
|
-
// 2. Environment variable: process.env.FIGMA_CONTENT_SYSTEM_ID
|
|
448
|
-
if (text.includes('process.env.FIGMA_CONTENT_SYSTEM_ID')) {
|
|
449
|
-
// For env var reference, return a marker that indicates it's from env
|
|
450
|
-
// The actual value will be read at runtime
|
|
451
|
-
contentSystemId = 'process.env.FIGMA_CONTENT_SYSTEM_ID';
|
|
452
|
-
} else {
|
|
453
|
-
// Remove quotes for literal strings
|
|
454
|
-
contentSystemId = text.replace(/['"]/g, '');
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
const useContentSystem = Node.isPropertyAssignment(useContentSystemProp) ? useContentSystemProp.getInitializer()?.getText() === 'true' : undefined // Optional: undefined if not specified
|
|
395
|
+
// Extract string values (remove quotes)
|
|
396
|
+
const region = Node.isPropertyAssignment(regionProp) ? regionProp.getInitializer()?.getText().replace(/['"]/g, '') : undefined;
|
|
397
|
+
const tenantId = Node.isPropertyAssignment(tenantIdProp) ? tenantIdProp.getInitializer()?.getText().replace(/['"]/g, '') : undefined;
|
|
398
|
+
const useContentSystem = Node.isPropertyAssignment(useContentSystemProp) ? useContentSystemProp.getInitializer()?.getText() === 'true' : true // Default to true if not specified
|
|
458
399
|
;
|
|
459
|
-
if (!
|
|
460
|
-
log.debug('Could not extract
|
|
400
|
+
if (!region || !tenantId) {
|
|
401
|
+
log.debug('Could not extract region or tenantId values');
|
|
461
402
|
return null;
|
|
462
403
|
}
|
|
463
404
|
return {
|
|
464
|
-
|
|
405
|
+
region,
|
|
406
|
+
tenantId,
|
|
465
407
|
useContentSystem
|
|
466
408
|
};
|
|
467
409
|
}
|
|
@@ -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 /** 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":"AAEA,SAASA,IAAI,EAAEC,UAAU,QAAQ,WAAU;AAE3C,YAAYC,SAAS,WAAU;AAuC/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;QACjB,mCAAmC;QACnC,MAAMC,cAAclD,QAAQG,IAAI,CAC9B,CAACC,MACCA,IAAIC,uBAAuB,OAAO,WAClCD,IAAIM,eAAe,GAAG6B,IAAI,CAAC,CAAC1B,KAAOA,GAAGC,OAAO,OAAO;QAGxDnB,OAAOsD,aAAa,GAAG;YACrBR,cAAcS,aAAa7C,6BAA6B;QAC1D;IACF;IAEA,2BAA2B;IAC3B,MAAM8C,gBAAgBrB,UAAUI,WAAW,CAAC;IAC5C,IAAIiB,eAAe;QACjBxD,OAAOC,iBAAiB,GAAG;IAC7B;IAEA,OAAOD;AACT;AAOA;;;CAGC,GACD,SAASyD,kBAAkB1D,UAAsB;IAC/C,MAAM2D,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,gBAAgB5D;IAEhB,IAAI2D,OAAOlC,MAAM,KAAK,GAAG;QACvB,OAAO;IACT;IAEA,uEAAuE;IACvE,MAAM6C,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;QACrCtE,WAAWoF,UAAU,CAACF,KAAKC;IAC7B;IAEA,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,SAASE,mBACdrF,UAAsB,EACtBsF,SAA0B;IAE1B,MAAMC,UAAoB,EAAE;IAC5B,IAAIC,WAAW;IAEf,IAAIF,UAAUzE,cAAc,KAAK,SAASyE,UAAUnF,QAAQ,EAAE;QAC5DL,IAAIc,KAAK,CACP,CAAC,uCAAuC,EAAE0E,UAAUzE,cAAc,CAAC,WAAW,EAAEyE,UAAUnF,QAAQ,EAAE;QAEtG,OAAO;YAAEoF,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,qFAAqF;IACrF,MAAMC,cAAc/B,kBAAkB1D;IACtC,IAAIyF,aAAa;QACfF,QAAQtB,IAAI,CAAC;QACbuB,WAAW;IACb;IAEA,+BAA+B;IAC/B,MAAMlF,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;YAAE0D,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,MAAMpD,YAAYP,gBAAgBQ,YAAY,EAAE,CAAC,EAAE;IACnD,IAAI,CAACD,aAAa,CAACxC,KAAK0C,yBAAyB,CAACF,YAAY;QAC5D,OAAO;YAAEmD,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,wBAAwB;IACxB,IAAIF,UAAU/C,UAAU,EAAE;QACxB,MAAMA,aAAaH,UAAUI,WAAW,CAAC;QACzC,IAAID,YAAY;YACdA,WAAWmD,MAAM;YACjBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,4BAA4B;IAC5B,IAAIF,UAAUtC,cAAc,EAAE;QAC5B,MAAMA,iBAAiBZ,UAAUI,WAAW,CAAC;QAC7C,IAAIQ,gBAAgB;YAClBA,eAAe0C,MAAM;YACrBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,8BAA8B;IAC9B,IAAIF,UAAUrC,cAAc,EAAEK,WAAW;QACvC,MAAML,iBAAiBb,UAAUI,WAAW,CAAC;QAC7C,IAAIS,gBAAgB;YAClBA,eAAeyC,MAAM;YACrBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,2BAA2B;IAC3B,IAAIF,UAAU/B,aAAa,EAAE;QAC3B,MAAMA,gBAAgBnB,UAAUI,WAAW,CAAC;QAC5C,IAAIe,eAAe;YACjBA,cAAcmC,MAAM;YACpBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,+BAA+B;IAC/B,IAAIF,UAAUjF,iBAAiB,EAAE;QAC/B,IAAIG,eAAe;YACjB,IAAI8E,UAAUlF,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,kBAAkBwE,MAAM;oBAExB,4CAA4C;oBAC5C,IAAIlF,cAAcQ,eAAe,GAAGS,MAAM,KAAK,GAAG;wBAChDjB,cAAckF,MAAM;oBACtB;gBACF;gBAEA,4BAA4B;gBAC5B1F,WAAW2F,oBAAoB,CAAC;oBAC9B7E,iBAAiB;oBACjBC,cAAc;wBAAC;qBAAmB;gBACpC;gBAEAwE,QAAQtB,IAAI,CAAC;YACf,OAAO;gBACL,2EAA2E;gBAC3E,MAAM/C,oBAAoBV,cACvBQ,eAAe,GACfP,IAAI,CAAC,CAACU,KAAOA,GAAGC,OAAO,OAAO;gBACjC,IAAIF,mBAAmB;oBACrB,yBAAyB;oBACzBA,kBAAkB0E,OAAO,CAAC;oBAE1B,0DAA0D;oBAC1D,MAAMC,cAAc7F,WAAW+B,oBAAoB,CAAClC,WAAWiG,UAAU;oBACzED,YAAY9B,OAAO,CAAC,CAACgC;wBACnB,IAAIA,WAAWvE,OAAO,OAAO,eAAe;4BAC1CuE,WAAWC,eAAe,CAAC;wBAC7B;oBACF;gBACF;gBACAxF,cAAcyF,kBAAkB,CAAC;gBACjCV,QAAQtB,IAAI,CAAC;YACf;YACAuB,WAAW;QACb;IACF;IAEA,6BAA6B;IAC7B,gEAAgE;IAChE,IAAIF,UAAU/C,UAAU,EAAE;QACxB,MAAM2D,iBAAiBlG,WAAWO,qBAAqB;QACvD,MAAM4F,WAAWD,eAAezF,IAAI,CAClC,CAACC,MAAQA,IAAIC,uBAAuB,OAAO2E,UAAU/C,UAAU,EAAEQ;QAEnE,IAAIoD,UAAU;YACZA,SAAST,MAAM;YACfH,QAAQtB,IAAI,CAAC,CAAC,QAAQ,EAAEqB,UAAU/C,UAAU,CAACO,OAAO,CAAC,OAAO,CAAC;YAC7D0C,WAAW;QACb;IACF;IAEA,IAAIF,UAAUrC,cAAc,EAAEK,WAAW;QACvC,MAAM4C,iBAAiBlG,WAAWO,qBAAqB;QACvD,MAAM6C,eAAe8C,eAAezF,IAAI,CACtC,CAACC,MAAQA,IAAIC,uBAAuB,OAAO2E,UAAUrC,cAAc,EAAEF;QAEvE,IAAIK,cAAc;YAChBA,aAAasC,MAAM;YACnBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,IAAIF,UAAU/B,aAAa,EAAE;QAC3B,MAAM2C,iBAAiBlG,WAAWO,qBAAqB;QACvD,MAAMiD,cAAc0C,eAAezF,IAAI,CAAC,CAACC,MAAQA,IAAIC,uBAAuB,OAAO;QACnF,IAAI6C,aAAa;YACfA,YAAYkC,MAAM;YAClBH,QAAQtB,IAAI,CAAC;YACbuB,WAAW;QACb;IACF;IAEA,OAAO;QAAED;QAASC;IAAS;AAC7B;AAOA;;;CAGC,GACD,OAAO,SAASY,iBACdpG,UAAsB,EACtBqG,MAA2B;IAE3B,MAAMd,UAAoB,EAAE;IAC5B,IAAIC,WAAW;IAEf,6EAA6E;IAC7E,MAAM1D,kBAAkB9B,WAAW+B,oBAAoB,CAAClC,WAAWmC,cAAc;IACjF,MAAMH,kBAAkBC,gBAAgBrB,IAAI,CAAC,CAACwB;QAC5C,MAAMC,OAAOD,GAAGE,aAAa;QAC7B,MAAMmE,OAAOpE,KAAKV,OAAO;QACzB,OAAO8E,SAAS,sBAAsBA,KAAKC,QAAQ,CAAC;IACtD;IAEA,IAAI,CAAC1E,iBAAiB;QACpB/B,IAAIc,KAAK,CAAC;QACV,OAAO;YAAE2E,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,6BAA6B;IAC7B,MAAMpD,YAAYP,gBAAgBQ,YAAY,EAAE,CAAC,EAAE;IACnD,IAAI,CAACD,aAAa,CAACxC,KAAK0C,yBAAyB,CAACF,YAAY;QAC5DtC,IAAIc,KAAK,CAAC;QACV,OAAO;YAAE2E,SAAS,EAAE;YAAEC,UAAU;QAAM;IACxC;IAEA,yCAAyC;IACzC,MAAMgB,wBAAwBpE,UAAUI,WAAW,CAAC;IACpD,IAAIgE,uBAAuB;QACzB1G,IAAIc,KAAK,CAAC;QACV,OAAO;YAAE2E,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;IAEFtE,UAAUuE,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,gBAAgB/G,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,MAAMmE,OAAOpE,KAAKV,OAAO;QACzB,OAAO8E,SAAS,sBAAsBA,KAAKC,QAAQ,CAAC;IACtD;IAEA,IAAI,CAAC1E,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,MAAM6C,gBAAgBrB,UAAUI,WAAW,CAAC;IAC5C,IAAI,CAACiB,iBAAiB,CAAC7D,KAAKoH,oBAAoB,CAACvD,gBAAgB;QAC/D3D,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,qCAAqC;IACrC,MAAMiG,cAAcpD,cAAcwD,cAAc;IAChD,IAAI,CAACJ,eAAe,CAACjH,KAAK0C,yBAAyB,CAACuE,cAAc;QAChE/G,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,iBAAiB;IACjB,MAAMsG,sBAAsBL,YAAYrE,WAAW,CAAC;IACpD,MAAM2E,uBAAuBN,YAAYrE,WAAW,CAAC;IAErD,IAAI,CAAC0E,qBAAqB;QACxBpH,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,gFAAgF;IAChF,IAAIkG;IACJ,IAAIlH,KAAKoH,oBAAoB,CAACE,sBAAsB;QAClD,MAAML,cAAcK,oBAAoBD,cAAc;QACtD,MAAMX,OAAOO,aAAarF,aAAa;QAEvC,yBAAyB;QACzB,kDAAkD;QAClD,+DAA+D;QAC/D,IAAI8E,KAAKc,QAAQ,CAAC,wCAAwC;YACxD,sEAAsE;YACtE,2CAA2C;YAC3CN,kBAAkB;QACpB,OAAO;YACL,oCAAoC;YACpCA,kBAAkBR,KAAKe,OAAO,CAAC,SAAS;QAC1C;IACF;IAEA,MAAMX,mBAAmB9G,KAAKoH,oBAAoB,CAACG,wBAC/CA,qBAAqBF,cAAc,IAAIzF,cAAc,SACrD8F,UAAU,uCAAuC;;IAErD,IAAI,CAACR,iBAAiB;QACpBhH,IAAIc,KAAK,CAAC;QACV,OAAO;IACT;IAEA,OAAO;QACLkG;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\nexport type DetectionResult = {\n dbProperty?: {\n adapter: string\n importSource: string\n }\n editorProperty?: {\n importSource: string\n isDefault: boolean\n }\n figmaObjectExists: boolean\n hasAlias: boolean\n hasBuildConfig?: boolean\n hasOtherPayloadImports: boolean\n needsImportChange: boolean\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 // Check if buildConfig is imported\n const buildConfigImport = namedImports.find((ni) => ni.getName() === 'buildConfig')\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() : 'buildConfig'\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: ['buildConfig'],\n })\n\n changes.push('Split buildConfig import to @payloadcms/figma')\n } else {\n // Replace entire import\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 region: string\n tenantId: 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 buildConfig call\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 === 'buildConfig' || text.endsWith('.buildConfig')\n })\n\n if (!buildConfigCall) {\n log.debug('No buildConfig 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 configArg.addPropertyAssignment({\n name: 'figma',\n initializer: `{\n region: '${config.region}',\n tenantId: '${config.tenantId}',\n useContentSystem: ${config.useContentSystem},\n }`,\n })\n\n changes.push(\n `Added figma property (region: ${config.region}, tenantId: ${config.tenantId}, useContentSystem: ${config.useContentSystem})`,\n )\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 buildConfig call\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 === 'buildConfig' || text.endsWith('.buildConfig')\n })\n\n if (!buildConfigCall) {\n log.debug('No buildConfig 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 regionProp = initializer.getProperty('region')\n const tenantIdProp = initializer.getProperty('tenantId')\n const useContentSystemProp = initializer.getProperty('useContentSystem')\n\n if (!regionProp || !tenantIdProp) {\n log.debug('Missing required figma properties (region or tenantId)')\n return null\n }\n\n // Extract string values (remove quotes)\n const region = Node.isPropertyAssignment(regionProp)\n ? regionProp\n .getInitializer()\n ?.getText()\n .replace(/['\"]/g, '')\n : undefined\n\n const tenantId = Node.isPropertyAssignment(tenantIdProp)\n ? tenantIdProp\n .getInitializer()\n ?.getText()\n .replace(/['\"]/g, '')\n : undefined\n\n const useContentSystem = Node.isPropertyAssignment(useContentSystemProp)\n ? useContentSystemProp.getInitializer()?.getText() === 'true'\n : true // Default to true if not specified\n\n if (!region || !tenantId) {\n log.debug('Could not extract region or tenantId values')\n return null\n }\n\n return {\n region,\n tenantId,\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","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","setModuleSpecifier","currentImports","dbImport","addFigmaProperty","config","text","endsWith","existingFigmaProperty","addPropertyAssignment","name","initializer","region","tenantId","useContentSystem","readFigmaConfig","isPropertyAssignment","getInitializer","regionProp","tenantIdProp","useContentSystemProp","replace","undefined"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Find the Payload config file using Payload's built-in finder
|
|
3
|
-
*
|
|
2
|
+
* Find the Payload config file using Payload's built-in finder
|
|
3
|
+
* Changes to project directory temporarily and restores afterward
|
|
4
4
|
*
|
|
5
5
|
* @param projectPath - Absolute path to project directory
|
|
6
6
|
* @returns Absolute path to config file, or null if not found
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-config-finder.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-finder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payload-config-finder.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-finder.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAmBnF"}
|
|
@@ -1,65 +1,26 @@
|
|
|
1
|
-
import
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import * as log from './log.js';
|
|
4
|
-
// Standard Payload config file names in priority order
|
|
5
|
-
const CONFIG_FILES = [
|
|
6
|
-
'payload.config.ts',
|
|
7
|
-
'payload.config.js',
|
|
8
|
-
'src/payload.config.ts',
|
|
9
|
-
'src/payload.config.js'
|
|
10
|
-
];
|
|
1
|
+
import { findConfig } from 'payload/node';
|
|
11
2
|
/**
|
|
12
|
-
* Find the Payload config file using Payload's built-in finder
|
|
13
|
-
*
|
|
3
|
+
* Find the Payload config file using Payload's built-in finder
|
|
4
|
+
* Changes to project directory temporarily and restores afterward
|
|
14
5
|
*
|
|
15
6
|
* @param projectPath - Absolute path to project directory
|
|
16
7
|
* @returns Absolute path to config file, or null if not found
|
|
17
8
|
*/ export async function findPayloadConfig(projectPath) {
|
|
18
|
-
// First, try using Payload's official config finder (if payload is installed)
|
|
19
|
-
const configFromPayload = await findConfigWithPayload(projectPath);
|
|
20
|
-
if (configFromPayload) {
|
|
21
|
-
return configFromPayload;
|
|
22
|
-
}
|
|
23
|
-
// Fallback: Simple file search for standard config locations
|
|
24
|
-
// This works when running via npx before payload is installed
|
|
25
|
-
log.debug('Payload not available, using fallback config finder');
|
|
26
|
-
return findConfigFallback(projectPath);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Try to find config using Payload's findConfig function.
|
|
30
|
-
* Returns null if payload is not installed (dynamic import fails).
|
|
31
|
-
*/ async function findConfigWithPayload(projectPath) {
|
|
32
9
|
const originalCwd = process.cwd();
|
|
33
10
|
try {
|
|
34
|
-
// Dynamic import - will fail gracefully if payload is not installed
|
|
35
|
-
const { findConfig } = await import('payload/node');
|
|
36
11
|
// findConfig requires being in the project directory
|
|
37
12
|
process.chdir(projectPath);
|
|
13
|
+
// Use Payload's official config finder
|
|
38
14
|
const configPath = findConfig();
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
15
|
+
// Wrap in Promise.resolve to satisfy async requirement
|
|
16
|
+
return await Promise.resolve(configPath || null);
|
|
17
|
+
} catch {
|
|
18
|
+
// Config not found or error occurred
|
|
43
19
|
return null;
|
|
44
20
|
} finally{
|
|
21
|
+
// Always restore original working directory
|
|
45
22
|
process.chdir(originalCwd);
|
|
46
23
|
}
|
|
47
24
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Fallback config finder that checks standard locations.
|
|
50
|
-
* Used when payload is not installed (e.g., running via npx).
|
|
51
|
-
*/ async function findConfigFallback(projectPath) {
|
|
52
|
-
for (const configFile of CONFIG_FILES){
|
|
53
|
-
const fullPath = path.join(projectPath, configFile);
|
|
54
|
-
try {
|
|
55
|
-
await fs.access(fullPath);
|
|
56
|
-
log.debug(`Found config at: ${fullPath}`);
|
|
57
|
-
return fullPath;
|
|
58
|
-
} catch {
|
|
59
|
-
// File doesn't exist, try next
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
25
|
|
|
65
26
|
//# sourceMappingURL=payload-config-finder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/payload-config-finder.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/utils/payload-config-finder.ts"],"sourcesContent":["import { findConfig } from 'payload/node'\n\n/**\n * Find the Payload config file using Payload's built-in finder\n * Changes to project directory temporarily and restores afterward\n *\n * @param projectPath - Absolute path to project directory\n * @returns Absolute path to config file, or null if not found\n */\nexport async function findPayloadConfig(projectPath: string): Promise<null | string> {\n const originalCwd = process.cwd()\n\n try {\n // findConfig requires being in the project directory\n process.chdir(projectPath)\n\n // Use Payload's official config finder\n const configPath = findConfig()\n\n // Wrap in Promise.resolve to satisfy async requirement\n return await Promise.resolve(configPath || null)\n } catch {\n // Config not found or error occurred\n return null\n } finally {\n // Always restore original working directory\n process.chdir(originalCwd)\n }\n}\n"],"names":["findConfig","findPayloadConfig","projectPath","originalCwd","process","cwd","chdir","configPath","Promise","resolve"],"mappings":"AAAA,SAASA,UAAU,QAAQ,eAAc;AAEzC;;;;;;CAMC,GACD,OAAO,eAAeC,kBAAkBC,WAAmB;IACzD,MAAMC,cAAcC,QAAQC,GAAG;IAE/B,IAAI;QACF,qDAAqD;QACrDD,QAAQE,KAAK,CAACJ;QAEd,uCAAuC;QACvC,MAAMK,aAAaP;QAEnB,uDAAuD;QACvD,OAAO,MAAMQ,QAAQC,OAAO,CAACF,cAAc;IAC7C,EAAE,OAAM;QACN,qCAAqC;QACrC,OAAO;IACT,SAAU;QACR,4CAA4C;QAC5CH,QAAQE,KAAK,CAACH;IAChB;AACF"}
|
|
@@ -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,CAqL7B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAwC9D"}
|