@payloadcms/figma 0.0.1-alpha.1 → 0.0.1-alpha.10
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.map +1 -1
- package/dist/api/control-plane.js +2 -7
- package/dist/api/control-plane.js.map +1 -1
- package/dist/api/figma-api.js +3 -3
- package/dist/api/figma-api.js.map +1 -1
- package/dist/auth/jwt-validator.js.map +1 -1
- package/dist/auth/oauth-flow.d.ts.map +1 -1
- package/dist/auth/oauth-flow.js +3 -6
- 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 +1 -4
- package/dist/auth/project-token.js.map +1 -1
- package/dist/auth/refresh.d.ts.map +1 -1
- package/dist/auth/refresh.js +19 -28
- package/dist/auth/refresh.js.map +1 -1
- package/dist/auth/types.d.ts +1 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/auth/types.js.map +1 -1
- package/dist/cli.js +1 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +17 -10
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -85
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list-tokens.d.ts +1 -1
- package/dist/commands/list-tokens.d.ts.map +1 -1
- package/dist/commands/list-tokens.js +6 -5
- package/dist/commands/list-tokens.js.map +1 -1
- package/dist/commands/login.d.ts +2 -11
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +4 -7
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/exports/client.d.ts +3 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +4 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/oauth/components/LoginButton/index.d.ts +9 -0
- package/dist/oauth/components/LoginButton/index.d.ts.map +1 -0
- package/dist/oauth/components/LoginButton/index.js +52 -0
- package/dist/oauth/components/LoginButton/index.js.map +1 -0
- package/dist/oauth/components/LoginButton/index.scss +10 -0
- package/dist/oauth/components/LogoutButton/index.d.ts +7 -0
- package/dist/oauth/components/LogoutButton/index.d.ts.map +1 -0
- package/dist/oauth/components/LogoutButton/index.js +67 -0
- package/dist/oauth/components/LogoutButton/index.js.map +1 -0
- package/dist/oauth/components/LogoutButton/index.scss +10 -0
- package/dist/oauth/defaults.d.ts +10 -0
- package/dist/oauth/defaults.d.ts.map +1 -0
- package/dist/oauth/defaults.js +91 -0
- package/dist/oauth/defaults.js.map +1 -0
- package/dist/oauth/endpoints/getLoginEndpoint.d.ts +13 -0
- package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +1 -0
- package/dist/oauth/endpoints/getLoginEndpoint.js +237 -0
- package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -0
- package/dist/oauth/endpoints/getLogoutEndpoint.d.ts +12 -0
- package/dist/oauth/endpoints/getLogoutEndpoint.d.ts.map +1 -0
- package/dist/oauth/endpoints/getLogoutEndpoint.js +99 -0
- package/dist/oauth/endpoints/getLogoutEndpoint.js.map +1 -0
- package/dist/oauth/endpoints/getMetaEndpoint.d.ts +13 -0
- package/dist/oauth/endpoints/getMetaEndpoint.d.ts.map +1 -0
- package/dist/oauth/endpoints/getMetaEndpoint.js +25 -0
- package/dist/oauth/endpoints/getMetaEndpoint.js.map +1 -0
- package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts +13 -0
- package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts.map +1 -0
- package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js +21 -0
- package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js.map +1 -0
- package/dist/oauth/exports/client.d.ts +3 -0
- package/dist/oauth/exports/client.d.ts.map +1 -0
- package/dist/oauth/exports/client.js +4 -0
- package/dist/oauth/exports/client.js.map +1 -0
- package/dist/oauth/hooks/afterLogout.d.ts +8 -0
- package/dist/oauth/hooks/afterLogout.d.ts.map +1 -0
- package/dist/oauth/hooks/afterLogout.js +27 -0
- package/dist/oauth/hooks/afterLogout.js.map +1 -0
- package/dist/oauth/hooks/me.d.ts +5 -0
- package/dist/oauth/hooks/me.d.ts.map +1 -0
- package/dist/oauth/hooks/me.js +55 -0
- package/dist/oauth/hooks/me.js.map +1 -0
- package/dist/oauth/hooks/refresh.d.ts +8 -0
- package/dist/oauth/hooks/refresh.d.ts.map +1 -0
- package/dist/oauth/hooks/refresh.js +91 -0
- package/dist/oauth/hooks/refresh.js.map +1 -0
- package/dist/oauth/index.d.ts +4 -0
- package/dist/oauth/index.d.ts.map +1 -0
- package/dist/oauth/index.js +222 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/oauth/strategy/index.d.ts +54 -0
- package/dist/oauth/strategy/index.d.ts.map +1 -0
- package/dist/oauth/strategy/index.js +280 -0
- package/dist/oauth/strategy/index.js.map +1 -0
- package/dist/oauth/types.d.ts +192 -0
- package/dist/oauth/types.d.ts.map +1 -0
- package/dist/oauth/types.js +3 -0
- package/dist/oauth/types.js.map +1 -0
- package/dist/oauth/utilities/clearCookie.d.ts +9 -0
- package/dist/oauth/utilities/clearCookie.d.ts.map +1 -0
- package/dist/oauth/utilities/clearCookie.js +21 -0
- package/dist/oauth/utilities/clearCookie.js.map +1 -0
- package/dist/oauth/utilities/createCookieOptions.d.ts +10 -0
- package/dist/oauth/utilities/createCookieOptions.d.ts.map +1 -0
- package/dist/oauth/utilities/createCookieOptions.js +42 -0
- package/dist/oauth/utilities/createCookieOptions.js.map +1 -0
- package/dist/oauth/utilities/createDebugLogger.d.ts +4 -0
- package/dist/oauth/utilities/createDebugLogger.d.ts.map +1 -0
- package/dist/oauth/utilities/createDebugLogger.js +16 -0
- package/dist/oauth/utilities/createDebugLogger.js.map +1 -0
- package/dist/oauth/utilities/extractOrigin.d.ts +2 -0
- package/dist/oauth/utilities/extractOrigin.d.ts.map +1 -0
- package/dist/oauth/utilities/extractOrigin.js +12 -0
- package/dist/oauth/utilities/extractOrigin.js.map +1 -0
- package/dist/oauth/utilities/getAdminCollectionSlug.d.ts +3 -0
- package/dist/oauth/utilities/getAdminCollectionSlug.d.ts.map +1 -0
- package/dist/oauth/utilities/getAdminCollectionSlug.js +18 -0
- package/dist/oauth/utilities/getAdminCollectionSlug.js.map +1 -0
- package/dist/oauth/utilities/getAdminPath.d.ts +8 -0
- package/dist/oauth/utilities/getAdminPath.d.ts.map +1 -0
- package/dist/oauth/utilities/getAdminPath.js +9 -0
- package/dist/oauth/utilities/getAdminPath.js.map +1 -0
- package/dist/oauth/utilities/getAuthorizeURL.d.ts +17 -0
- package/dist/oauth/utilities/getAuthorizeURL.d.ts.map +1 -0
- package/dist/oauth/utilities/getAuthorizeURL.js +45 -0
- package/dist/oauth/utilities/getAuthorizeURL.js.map +1 -0
- package/dist/oauth/utilities/getCookieExpiration.d.ts +4 -0
- package/dist/oauth/utilities/getCookieExpiration.d.ts.map +1 -0
- package/dist/oauth/utilities/getCookieExpiration.js +11 -0
- package/dist/oauth/utilities/getCookieExpiration.js.map +1 -0
- package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts +2 -0
- package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts.map +1 -0
- package/dist/oauth/utilities/getSecondsFromTokenExp.js +7 -0
- package/dist/oauth/utilities/getSecondsFromTokenExp.js.map +1 -0
- package/dist/oauth/utilities/getTokenExp.d.ts +6 -0
- package/dist/oauth/utilities/getTokenExp.d.ts.map +1 -0
- package/dist/oauth/utilities/getTokenExp.js +20 -0
- package/dist/oauth/utilities/getTokenExp.js.map +1 -0
- package/dist/oauth/utilities/getUsernameField.d.ts +9 -0
- package/dist/oauth/utilities/getUsernameField.d.ts.map +1 -0
- package/dist/oauth/utilities/getUsernameField.js +20 -0
- package/dist/oauth/utilities/getUsernameField.js.map +1 -0
- package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts +8 -0
- package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts.map +1 -0
- package/dist/oauth/utilities/hasUserTokenPropsChanged.js +25 -0
- package/dist/oauth/utilities/hasUserTokenPropsChanged.js.map +1 -0
- package/dist/oauth/utilities/mergeHeaders.d.ts +2 -0
- package/dist/oauth/utilities/mergeHeaders.d.ts.map +1 -0
- package/dist/oauth/utilities/mergeHeaders.js +37 -0
- package/dist/oauth/utilities/mergeHeaders.js.map +1 -0
- package/dist/oauth/utilities/refreshTokens.d.ts +16 -0
- package/dist/oauth/utilities/refreshTokens.d.ts.map +1 -0
- package/dist/oauth/utilities/refreshTokens.js +67 -0
- package/dist/oauth/utilities/refreshTokens.js.map +1 -0
- package/dist/plugin/build-config.d.ts +7 -1
- package/dist/plugin/build-config.d.ts.map +1 -1
- package/dist/plugin/build-config.js +29 -2
- package/dist/plugin/build-config.js.map +1 -1
- package/dist/types/config.d.ts +0 -11
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/utils/config.d.ts +0 -22
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +0 -46
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/messages.js +11 -11
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/payload-config-ast.d.ts +17 -1
- package/dist/utils/payload-config-ast.d.ts.map +1 -1
- package/dist/utils/payload-config-ast.js +166 -14
- package/dist/utils/payload-config-ast.js.map +1 -1
- package/dist/utils/payload-config-modifier.d.ts +2 -1
- package/dist/utils/payload-config-modifier.d.ts.map +1 -1
- package/dist/utils/payload-config-modifier.js +50 -79
- package/dist/utils/payload-config-modifier.js.map +1 -1
- package/dist/utils/payload-package-check.d.ts.map +1 -1
- package/dist/utils/payload-package-check.js +14 -33
- package/dist/utils/payload-package-check.js.map +1 -1
- package/dist/utils/project.d.ts +1 -1
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +3 -5
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/s3-upload.d.ts.map +1 -1
- package/dist/utils/s3-upload.js +3 -8
- 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 +3 -2
- package/dist/utils/token-display.js.map +1 -1
- package/package.json +9 -3
- package/dist/api/control-plane.spec.d.ts +0 -2
- package/dist/api/control-plane.spec.d.ts.map +0 -1
- package/dist/api/control-plane.spec.js +0 -296
- package/dist/api/control-plane.spec.js.map +0 -1
- package/dist/api/figma-api.spec.d.ts +0 -14
- package/dist/api/figma-api.spec.d.ts.map +0 -1
- package/dist/api/figma-api.spec.js +0 -201
- package/dist/api/figma-api.spec.js.map +0 -1
- package/dist/auth/__tests__/fixtures.d.ts +0 -26
- package/dist/auth/__tests__/fixtures.d.ts.map +0 -1
- package/dist/auth/__tests__/fixtures.js +0 -67
- package/dist/auth/__tests__/fixtures.js.map +0 -1
- package/dist/auth/__tests__/mocks.d.ts +0 -33
- package/dist/auth/__tests__/mocks.d.ts.map +0 -1
- package/dist/auth/__tests__/mocks.js +0 -63
- package/dist/auth/__tests__/mocks.js.map +0 -1
- package/dist/auth/callback-server.spec.d.ts +0 -2
- package/dist/auth/callback-server.spec.d.ts.map +0 -1
- package/dist/auth/callback-server.spec.js +0 -85
- package/dist/auth/callback-server.spec.js.map +0 -1
- package/dist/auth/crypto-utils.spec.d.ts +0 -2
- package/dist/auth/crypto-utils.spec.d.ts.map +0 -1
- package/dist/auth/crypto-utils.spec.js +0 -36
- package/dist/auth/crypto-utils.spec.js.map +0 -1
- package/dist/auth/jwt-validator.spec.d.ts +0 -10
- package/dist/auth/jwt-validator.spec.d.ts.map +0 -1
- package/dist/auth/jwt-validator.spec.js +0 -236
- package/dist/auth/jwt-validator.spec.js.map +0 -1
- package/dist/auth/oauth-flow.spec.d.ts +0 -2
- package/dist/auth/oauth-flow.spec.d.ts.map +0 -1
- package/dist/auth/oauth-flow.spec.js +0 -134
- package/dist/auth/oauth-flow.spec.js.map +0 -1
- package/dist/auth/pkce.spec.d.ts +0 -2
- package/dist/auth/pkce.spec.d.ts.map +0 -1
- package/dist/auth/pkce.spec.js +0 -32
- package/dist/auth/pkce.spec.js.map +0 -1
- package/dist/auth/project-token.spec.d.ts +0 -2
- package/dist/auth/project-token.spec.d.ts.map +0 -1
- package/dist/auth/project-token.spec.js +0 -332
- package/dist/auth/project-token.spec.js.map +0 -1
- package/dist/auth/refresh.spec.d.ts +0 -2
- package/dist/auth/refresh.spec.d.ts.map +0 -1
- package/dist/auth/refresh.spec.js +0 -105
- package/dist/auth/refresh.spec.js.map +0 -1
- package/dist/auth/token-store.spec.d.ts +0 -2
- package/dist/auth/token-store.spec.d.ts.map +0 -1
- package/dist/auth/token-store.spec.js +0 -276
- package/dist/auth/token-store.spec.js.map +0 -1
- package/dist/commands/__tests__/test-utils.d.ts +0 -28
- package/dist/commands/__tests__/test-utils.d.ts.map +0 -1
- package/dist/commands/__tests__/test-utils.js +0 -34
- package/dist/commands/__tests__/test-utils.js.map +0 -1
- package/dist/commands/deploy.spec.d.ts +0 -2
- package/dist/commands/deploy.spec.d.ts.map +0 -1
- package/dist/commands/deploy.spec.js +0 -18
- package/dist/commands/deploy.spec.js.map +0 -1
- package/dist/commands/init.spec.d.ts +0 -2
- package/dist/commands/init.spec.d.ts.map +0 -1
- package/dist/commands/init.spec.js +0 -283
- package/dist/commands/init.spec.js.map +0 -1
- package/dist/plugin/build-config.spec.d.ts +0 -2
- package/dist/plugin/build-config.spec.d.ts.map +0 -1
- package/dist/plugin/build-config.spec.js +0 -72
- package/dist/plugin/build-config.spec.js.map +0 -1
- package/dist/utils/asset-collection.spec.d.ts +0 -2
- package/dist/utils/asset-collection.spec.d.ts.map +0 -1
- package/dist/utils/asset-collection.spec.js +0 -155
- package/dist/utils/asset-collection.spec.js.map +0 -1
- package/dist/utils/build-detection.spec.d.ts +0 -2
- package/dist/utils/build-detection.spec.d.ts.map +0 -1
- package/dist/utils/build-detection.spec.js +0 -110
- package/dist/utils/build-detection.spec.js.map +0 -1
- package/dist/utils/config.spec.d.ts +0 -2
- package/dist/utils/config.spec.d.ts.map +0 -1
- package/dist/utils/config.spec.js +0 -167
- package/dist/utils/config.spec.js.map +0 -1
- package/dist/utils/download-template.spec.d.ts +0 -2
- package/dist/utils/download-template.spec.d.ts.map +0 -1
- package/dist/utils/download-template.spec.js +0 -76
- package/dist/utils/download-template.spec.js.map +0 -1
- package/dist/utils/env-management.spec.d.ts +0 -2
- package/dist/utils/env-management.spec.d.ts.map +0 -1
- package/dist/utils/env-management.spec.js +0 -123
- package/dist/utils/env-management.spec.js.map +0 -1
- package/dist/utils/git.spec.d.ts +0 -2
- package/dist/utils/git.spec.d.ts.map +0 -1
- package/dist/utils/git.spec.js +0 -99
- package/dist/utils/git.spec.js.map +0 -1
- package/dist/utils/lambda-config.spec.d.ts +0 -2
- package/dist/utils/lambda-config.spec.d.ts.map +0 -1
- package/dist/utils/lambda-config.spec.js +0 -141
- package/dist/utils/lambda-config.spec.js.map +0 -1
- package/dist/utils/payload-config-ast.spec.d.ts +0 -2
- package/dist/utils/payload-config-ast.spec.d.ts.map +0 -1
- package/dist/utils/payload-config-ast.spec.js +0 -303
- package/dist/utils/payload-config-ast.spec.js.map +0 -1
- package/dist/utils/payload-config-modifier.int.spec.d.ts +0 -2
- package/dist/utils/payload-config-modifier.int.spec.d.ts.map +0 -1
- package/dist/utils/payload-config-modifier.int.spec.js +0 -116
- package/dist/utils/payload-config-modifier.int.spec.js.map +0 -1
- package/dist/utils/payload-config-modifier.spec.d.ts +0 -2
- package/dist/utils/payload-config-modifier.spec.d.ts.map +0 -1
- package/dist/utils/payload-config-modifier.spec.js +0 -162
- package/dist/utils/payload-config-modifier.spec.js.map +0 -1
- package/dist/utils/payload-package-check.spec.d.ts +0 -2
- package/dist/utils/payload-package-check.spec.d.ts.map +0 -1
- package/dist/utils/payload-package-check.spec.js +0 -148
- package/dist/utils/payload-package-check.spec.js.map +0 -1
- package/dist/utils/project.spec.d.ts +0 -2
- package/dist/utils/project.spec.d.ts.map +0 -1
- package/dist/utils/project.spec.js +0 -222
- package/dist/utils/project.spec.js.map +0 -1
- package/dist/utils/s3-upload.spec.d.ts +0 -2
- package/dist/utils/s3-upload.spec.d.ts.map +0 -1
- package/dist/utils/s3-upload.spec.js +0 -140
- package/dist/utils/s3-upload.spec.js.map +0 -1
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import fs from 'fs/promises';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { Project } from 'ts-morph';
|
|
4
|
-
import { beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
-
import { applyModifications, detectRequiredChanges } from './payload-config-ast.js';
|
|
6
|
-
describe('payload-config-modifier - integration tests', ()=>{
|
|
7
|
-
const fixturesDir = path.join(process.cwd(), 'test/fixtures/payload-configs');
|
|
8
|
-
let project;
|
|
9
|
-
beforeEach(()=>{
|
|
10
|
-
project = new Project({
|
|
11
|
-
useInMemoryFileSystem: false
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
it('should handle minimal config correctly', async ()=>{
|
|
15
|
-
const fixturePath = path.join(fixturesDir, 'minimal.ts');
|
|
16
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
17
|
-
const sourceFile = project.createSourceFile('test-minimal.ts', content);
|
|
18
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
19
|
-
expect(detection.needsImportChange).toBe(true);
|
|
20
|
-
expect(detection.dbProperty).toBeDefined();
|
|
21
|
-
expect(detection.secretProperty).toBe(true);
|
|
22
|
-
expect(detection.editorProperty?.isDefault).toBe(true);
|
|
23
|
-
const { changes, modified } = applyModifications(sourceFile, detection);
|
|
24
|
-
expect(modified).toBe(true);
|
|
25
|
-
expect(changes).toContain('Removed db property');
|
|
26
|
-
expect(changes).toContain('Removed secret property');
|
|
27
|
-
expect(changes).toContain('Removed default editor property');
|
|
28
|
-
expect(changes).toContain('Changed buildConfig import to @payloadcms/figma');
|
|
29
|
-
// Verify final state
|
|
30
|
-
const finalText = sourceFile.getFullText();
|
|
31
|
-
expect(finalText).toContain("from '@payloadcms/figma'");
|
|
32
|
-
expect(finalText).not.toContain('db:');
|
|
33
|
-
expect(finalText).not.toContain('secret:');
|
|
34
|
-
expect(finalText).not.toContain('editor:');
|
|
35
|
-
});
|
|
36
|
-
it('should skip already-figma config', async ()=>{
|
|
37
|
-
const fixturePath = path.join(fixturesDir, 'already-figma.ts');
|
|
38
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
39
|
-
const sourceFile = project.createSourceFile('test-already-figma.ts', content);
|
|
40
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
41
|
-
expect(detection.needsImportChange).toBe(false);
|
|
42
|
-
const { modified } = applyModifications(sourceFile, detection);
|
|
43
|
-
expect(modified).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
it('should preserve other payload imports', async ()=>{
|
|
46
|
-
const fixturePath = path.join(fixturesDir, 'with-other-imports.ts');
|
|
47
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
48
|
-
const sourceFile = project.createSourceFile('test-with-other-imports.ts', content);
|
|
49
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
50
|
-
expect(detection.needsImportChange).toBe(true);
|
|
51
|
-
expect(detection.hasOtherPayloadImports).toBe(true);
|
|
52
|
-
const { changes, modified } = applyModifications(sourceFile, detection);
|
|
53
|
-
expect(modified).toBe(true);
|
|
54
|
-
expect(changes).toContain('Split buildConfig import to @payloadcms/figma');
|
|
55
|
-
const finalText = sourceFile.getFullText();
|
|
56
|
-
expect(finalText).toContain("import { CollectionConfig } from 'payload'");
|
|
57
|
-
// ts-morph uses double quotes for new imports
|
|
58
|
-
expect(finalText).toContain('import { buildConfig } from "@payloadcms/figma"');
|
|
59
|
-
});
|
|
60
|
-
it('should preserve custom editor config', async ()=>{
|
|
61
|
-
const fixturePath = path.join(fixturesDir, 'custom-editor.ts');
|
|
62
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
63
|
-
const sourceFile = project.createSourceFile('test-custom-editor.ts', content);
|
|
64
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
65
|
-
expect(detection.editorProperty?.isDefault).toBe(false);
|
|
66
|
-
applyModifications(sourceFile, detection);
|
|
67
|
-
const finalText = sourceFile.getFullText();
|
|
68
|
-
expect(finalText).toContain('editor:');
|
|
69
|
-
expect(finalText).toContain('lexicalEditor');
|
|
70
|
-
});
|
|
71
|
-
it('should handle postgres adapter', async ()=>{
|
|
72
|
-
const fixturePath = path.join(fixturesDir, 'postgres-adapter.ts');
|
|
73
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
74
|
-
const sourceFile = project.createSourceFile('test-postgres.ts', content);
|
|
75
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
76
|
-
expect(detection.dbProperty?.adapter).toBe('postgresAdapter');
|
|
77
|
-
expect(detection.dbProperty?.importSource).toBe('@payloadcms/db-postgres');
|
|
78
|
-
const { changes, modified } = applyModifications(sourceFile, detection);
|
|
79
|
-
expect(modified).toBe(true);
|
|
80
|
-
expect(changes).toContain('Removed postgresAdapter import');
|
|
81
|
-
const finalText = sourceFile.getFullText();
|
|
82
|
-
expect(finalText).not.toContain('@payloadcms/db-postgres');
|
|
83
|
-
});
|
|
84
|
-
it('should fail gracefully on alias', async ()=>{
|
|
85
|
-
const fixturePath = path.join(fixturesDir, 'with-alias.ts');
|
|
86
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
87
|
-
const sourceFile = project.createSourceFile('test-alias.ts', content);
|
|
88
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
89
|
-
expect(detection.hasAlias).toBe(true);
|
|
90
|
-
const { modified } = applyModifications(sourceFile, detection);
|
|
91
|
-
expect(modified).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
it('should fail gracefully on missing buildConfig call', async ()=>{
|
|
94
|
-
const fixturePath = path.join(fixturesDir, 'no-buildconfig.ts');
|
|
95
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
96
|
-
const sourceFile = project.createSourceFile('test-no-buildconfig.ts', content);
|
|
97
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
98
|
-
expect(detection.buildConfigNotFound).toBe(true);
|
|
99
|
-
const { modified } = applyModifications(sourceFile, detection);
|
|
100
|
-
expect(modified).toBe(false);
|
|
101
|
-
});
|
|
102
|
-
it('should handle syntax errors gracefully', async ()=>{
|
|
103
|
-
const fixturePath = path.join(fixturesDir, 'syntax-error.ts');
|
|
104
|
-
const content = await fs.readFile(fixturePath, 'utf-8');
|
|
105
|
-
// ts-morph parses as much as it can, even with syntax errors
|
|
106
|
-
// It doesn't throw, but the AST may be incomplete
|
|
107
|
-
const sourceFile = project.createSourceFile('test-syntax-error.ts', content);
|
|
108
|
-
// Detection should handle incomplete AST gracefully
|
|
109
|
-
const detection = detectRequiredChanges(sourceFile);
|
|
110
|
-
// With syntax errors, detection may fail to find buildConfig properly
|
|
111
|
-
// The code should not crash
|
|
112
|
-
expect(()=>applyModifications(sourceFile, detection)).not.toThrow();
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
//# sourceMappingURL=payload-config-modifier.int.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/payload-config-modifier.int.spec.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport path from 'path'\nimport { Project } from 'ts-morph'\nimport { beforeEach, describe, expect, it } from 'vitest'\n\nimport { applyModifications, detectRequiredChanges } from './payload-config-ast.js'\n\ndescribe('payload-config-modifier - integration tests', () => {\n const fixturesDir = path.join(process.cwd(), 'test/fixtures/payload-configs')\n let project: Project\n\n beforeEach(() => {\n project = new Project({ useInMemoryFileSystem: false })\n })\n\n it('should handle minimal config correctly', async () => {\n const fixturePath = path.join(fixturesDir, 'minimal.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-minimal.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.needsImportChange).toBe(true)\n expect(detection.dbProperty).toBeDefined()\n expect(detection.secretProperty).toBe(true)\n expect(detection.editorProperty?.isDefault).toBe(true)\n\n const { changes, modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(true)\n expect(changes).toContain('Removed db property')\n expect(changes).toContain('Removed secret property')\n expect(changes).toContain('Removed default editor property')\n expect(changes).toContain('Changed buildConfig import to @payloadcms/figma')\n\n // Verify final state\n const finalText = sourceFile.getFullText()\n expect(finalText).toContain(\"from '@payloadcms/figma'\")\n expect(finalText).not.toContain('db:')\n expect(finalText).not.toContain('secret:')\n expect(finalText).not.toContain('editor:')\n })\n\n it('should skip already-figma config', async () => {\n const fixturePath = path.join(fixturesDir, 'already-figma.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-already-figma.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.needsImportChange).toBe(false)\n\n const { modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(false)\n })\n\n it('should preserve other payload imports', async () => {\n const fixturePath = path.join(fixturesDir, 'with-other-imports.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-with-other-imports.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.needsImportChange).toBe(true)\n expect(detection.hasOtherPayloadImports).toBe(true)\n\n const { changes, modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(true)\n expect(changes).toContain('Split buildConfig import to @payloadcms/figma')\n\n const finalText = sourceFile.getFullText()\n expect(finalText).toContain(\"import { CollectionConfig } from 'payload'\")\n // ts-morph uses double quotes for new imports\n expect(finalText).toContain('import { buildConfig } from \"@payloadcms/figma\"')\n })\n\n it('should preserve custom editor config', async () => {\n const fixturePath = path.join(fixturesDir, 'custom-editor.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-custom-editor.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.editorProperty?.isDefault).toBe(false)\n\n applyModifications(sourceFile, detection)\n\n const finalText = sourceFile.getFullText()\n expect(finalText).toContain('editor:')\n expect(finalText).toContain('lexicalEditor')\n })\n\n it('should handle postgres adapter', async () => {\n const fixturePath = path.join(fixturesDir, 'postgres-adapter.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-postgres.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.dbProperty?.adapter).toBe('postgresAdapter')\n expect(detection.dbProperty?.importSource).toBe('@payloadcms/db-postgres')\n\n const { changes, modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(true)\n expect(changes).toContain('Removed postgresAdapter import')\n\n const finalText = sourceFile.getFullText()\n expect(finalText).not.toContain('@payloadcms/db-postgres')\n })\n\n it('should fail gracefully on alias', async () => {\n const fixturePath = path.join(fixturesDir, 'with-alias.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-alias.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.hasAlias).toBe(true)\n\n const { modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(false)\n })\n\n it('should fail gracefully on missing buildConfig call', async () => {\n const fixturePath = path.join(fixturesDir, 'no-buildconfig.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n const sourceFile = project.createSourceFile('test-no-buildconfig.ts', content)\n\n const detection = detectRequiredChanges(sourceFile)\n expect(detection.buildConfigNotFound).toBe(true)\n\n const { modified } = applyModifications(sourceFile, detection)\n expect(modified).toBe(false)\n })\n\n it('should handle syntax errors gracefully', async () => {\n const fixturePath = path.join(fixturesDir, 'syntax-error.ts')\n const content = await fs.readFile(fixturePath, 'utf-8')\n\n // ts-morph parses as much as it can, even with syntax errors\n // It doesn't throw, but the AST may be incomplete\n const sourceFile = project.createSourceFile('test-syntax-error.ts', content)\n\n // Detection should handle incomplete AST gracefully\n const detection = detectRequiredChanges(sourceFile)\n\n // With syntax errors, detection may fail to find buildConfig properly\n // The code should not crash\n expect(() => applyModifications(sourceFile, detection)).not.toThrow()\n })\n})\n"],"names":["fs","path","Project","beforeEach","describe","expect","it","applyModifications","detectRequiredChanges","fixturesDir","join","process","cwd","project","useInMemoryFileSystem","fixturePath","content","readFile","sourceFile","createSourceFile","detection","needsImportChange","toBe","dbProperty","toBeDefined","secretProperty","editorProperty","isDefault","changes","modified","toContain","finalText","getFullText","not","hasOtherPayloadImports","adapter","importSource","hasAlias","buildConfigNotFound","toThrow"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payload-config-modifier.spec.d.ts","sourceRoot":"","sources":["../../src/utils/payload-config-modifier.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { displayManualInstructions, ensurePayloadFigmaConfig } from './payload-config-modifier.js';
|
|
3
|
-
vi.mock('./payload-config-finder.js');
|
|
4
|
-
vi.mock('./payload-package-check.js');
|
|
5
|
-
vi.mock('./payload-config-ast.js');
|
|
6
|
-
vi.mock('./typescript-validator.js');
|
|
7
|
-
vi.mock('./formatter.js');
|
|
8
|
-
describe('payload-config-modifier', ()=>{
|
|
9
|
-
beforeEach(()=>{
|
|
10
|
-
vi.clearAllMocks();
|
|
11
|
-
});
|
|
12
|
-
describe('ensurePayloadFigmaConfig', ()=>{
|
|
13
|
-
it('should return error when config not found', async ()=>{
|
|
14
|
-
const { findPayloadConfig } = await import('./payload-config-finder.js');
|
|
15
|
-
vi.mocked(findPayloadConfig).mockResolvedValue(null);
|
|
16
|
-
const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
|
|
17
|
-
expect(result.success).toBe(false);
|
|
18
|
-
expect(result.error).toContain('payload.config.ts not found');
|
|
19
|
-
});
|
|
20
|
-
it('should install package if missing', async ()=>{
|
|
21
|
-
const { findPayloadConfig } = await import('./payload-config-finder.js');
|
|
22
|
-
const { checkPackageInstalled, installPackage } = await import('./payload-package-check.js');
|
|
23
|
-
vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
|
|
24
|
-
vi.mocked(checkPackageInstalled).mockResolvedValue(false);
|
|
25
|
-
vi.mocked(installPackage).mockResolvedValue();
|
|
26
|
-
// Mock ts-morph to avoid file system operations
|
|
27
|
-
const { Project } = await import('ts-morph');
|
|
28
|
-
vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue({
|
|
29
|
-
getFullText: vi.fn().mockReturnValue('')
|
|
30
|
-
});
|
|
31
|
-
const { detectRequiredChanges } = await import('./payload-config-ast.js');
|
|
32
|
-
vi.mocked(detectRequiredChanges).mockReturnValue({
|
|
33
|
-
hasAlias: false,
|
|
34
|
-
hasOtherPayloadImports: false,
|
|
35
|
-
needsImportChange: false
|
|
36
|
-
});
|
|
37
|
-
const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
|
|
38
|
-
expect(installPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/figma', 'pnpm');
|
|
39
|
-
expect(result.changes).toContain('Installed @payloadcms/figma');
|
|
40
|
-
});
|
|
41
|
-
it('should apply modifications when needed', async ()=>{
|
|
42
|
-
const { findPayloadConfig } = await import('./payload-config-finder.js');
|
|
43
|
-
const { checkPackageInstalled } = await import('./payload-package-check.js');
|
|
44
|
-
const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js');
|
|
45
|
-
vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
|
|
46
|
-
vi.mocked(checkPackageInstalled).mockResolvedValue(true);
|
|
47
|
-
// Mock source file
|
|
48
|
-
const mockSourceFile = {
|
|
49
|
-
getFullText: vi.fn().mockReturnValue(''),
|
|
50
|
-
save: vi.fn().mockResolvedValue(undefined)
|
|
51
|
-
};
|
|
52
|
-
const { Project } = await import('ts-morph');
|
|
53
|
-
vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile);
|
|
54
|
-
vi.mocked(detectRequiredChanges).mockReturnValue({
|
|
55
|
-
dbProperty: {
|
|
56
|
-
adapter: 'mongooseAdapter',
|
|
57
|
-
importSource: '@payloadcms/db-mongodb'
|
|
58
|
-
},
|
|
59
|
-
hasAlias: false,
|
|
60
|
-
hasOtherPayloadImports: false,
|
|
61
|
-
needsImportChange: true
|
|
62
|
-
});
|
|
63
|
-
vi.mocked(applyModifications).mockReturnValue({
|
|
64
|
-
changes: [
|
|
65
|
-
'Removed db property',
|
|
66
|
-
'Changed buildConfig import to @payloadcms/figma'
|
|
67
|
-
],
|
|
68
|
-
modified: true
|
|
69
|
-
});
|
|
70
|
-
const { runTypeScriptCheck } = await import('./typescript-validator.js');
|
|
71
|
-
vi.mocked(runTypeScriptCheck).mockResolvedValue({
|
|
72
|
-
errors: [],
|
|
73
|
-
success: true
|
|
74
|
-
});
|
|
75
|
-
const { formatFile } = await import('./formatter.js');
|
|
76
|
-
vi.mocked(formatFile).mockResolvedValue({
|
|
77
|
-
success: true
|
|
78
|
-
});
|
|
79
|
-
const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
|
|
80
|
-
expect(result.success).toBe(true);
|
|
81
|
-
expect(result.modified).toBe(true);
|
|
82
|
-
expect(result.changes.length).toBeGreaterThan(0);
|
|
83
|
-
expect(mockSourceFile.save).toHaveBeenCalled();
|
|
84
|
-
});
|
|
85
|
-
it('should return error when buildConfig has alias', async ()=>{
|
|
86
|
-
const { findPayloadConfig } = await import('./payload-config-finder.js');
|
|
87
|
-
const { checkPackageInstalled } = await import('./payload-package-check.js');
|
|
88
|
-
const { detectRequiredChanges } = await import('./payload-config-ast.js');
|
|
89
|
-
vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
|
|
90
|
-
vi.mocked(checkPackageInstalled).mockResolvedValue(true);
|
|
91
|
-
const mockSourceFile = {
|
|
92
|
-
getFullText: vi.fn().mockReturnValue('')
|
|
93
|
-
};
|
|
94
|
-
const { Project } = await import('ts-morph');
|
|
95
|
-
vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile);
|
|
96
|
-
vi.mocked(detectRequiredChanges).mockReturnValue({
|
|
97
|
-
hasAlias: true,
|
|
98
|
-
hasOtherPayloadImports: false,
|
|
99
|
-
needsImportChange: true
|
|
100
|
-
});
|
|
101
|
-
const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
|
|
102
|
-
expect(result.success).toBe(false);
|
|
103
|
-
expect(result.error).toContain('Config uses import alias');
|
|
104
|
-
});
|
|
105
|
-
it('should uninstall orphaned packages', async ()=>{
|
|
106
|
-
const { findPayloadConfig } = await import('./payload-config-finder.js');
|
|
107
|
-
const { checkPackageInstalled, uninstallPackage } = await import('./payload-package-check.js');
|
|
108
|
-
const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js');
|
|
109
|
-
vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts');
|
|
110
|
-
vi.mocked(checkPackageInstalled).mockResolvedValue(true);
|
|
111
|
-
const mockSourceFile = {
|
|
112
|
-
getFullText: vi.fn().mockReturnValue(''),
|
|
113
|
-
save: vi.fn().mockResolvedValue(undefined)
|
|
114
|
-
};
|
|
115
|
-
const { Project } = await import('ts-morph');
|
|
116
|
-
vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile);
|
|
117
|
-
vi.mocked(detectRequiredChanges).mockReturnValue({
|
|
118
|
-
dbProperty: {
|
|
119
|
-
adapter: 'mongooseAdapter',
|
|
120
|
-
importSource: '@payloadcms/db-mongodb'
|
|
121
|
-
},
|
|
122
|
-
editorProperty: {
|
|
123
|
-
importSource: '@payloadcms/richtext-lexical',
|
|
124
|
-
isDefault: true
|
|
125
|
-
},
|
|
126
|
-
hasAlias: false,
|
|
127
|
-
hasOtherPayloadImports: false,
|
|
128
|
-
needsImportChange: false
|
|
129
|
-
});
|
|
130
|
-
vi.mocked(applyModifications).mockReturnValue({
|
|
131
|
-
changes: [
|
|
132
|
-
'Removed db property',
|
|
133
|
-
'Removed default editor property'
|
|
134
|
-
],
|
|
135
|
-
modified: true
|
|
136
|
-
});
|
|
137
|
-
vi.mocked(uninstallPackage).mockResolvedValue();
|
|
138
|
-
const { runTypeScriptCheck } = await import('./typescript-validator.js');
|
|
139
|
-
vi.mocked(runTypeScriptCheck).mockResolvedValue({
|
|
140
|
-
errors: [],
|
|
141
|
-
success: true
|
|
142
|
-
});
|
|
143
|
-
const { formatFile } = await import('./formatter.js');
|
|
144
|
-
vi.mocked(formatFile).mockResolvedValue({
|
|
145
|
-
success: true
|
|
146
|
-
});
|
|
147
|
-
const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm');
|
|
148
|
-
expect(uninstallPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/db-mongodb', 'pnpm');
|
|
149
|
-
expect(uninstallPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/richtext-lexical', 'pnpm');
|
|
150
|
-
expect(result.changes).toContain('Uninstalled @payloadcms/db-mongodb');
|
|
151
|
-
expect(result.changes).toContain('Uninstalled @payloadcms/richtext-lexical');
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
describe('displayManualInstructions', ()=>{
|
|
155
|
-
it('should format manual instructions correctly', ()=>{
|
|
156
|
-
// This is a formatting function, just verify it doesn't throw
|
|
157
|
-
expect(()=>displayManualInstructions('Test reason')).not.toThrow();
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
//# sourceMappingURL=payload-config-modifier.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/payload-config-modifier.spec.ts"],"sourcesContent":["import { beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport { displayManualInstructions, ensurePayloadFigmaConfig } from './payload-config-modifier.js'\n\nvi.mock('./payload-config-finder.js')\nvi.mock('./payload-package-check.js')\nvi.mock('./payload-config-ast.js')\nvi.mock('./typescript-validator.js')\nvi.mock('./formatter.js')\n\ndescribe('payload-config-modifier', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n describe('ensurePayloadFigmaConfig', () => {\n it('should return error when config not found', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n vi.mocked(findPayloadConfig).mockResolvedValue(null)\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(result.success).toBe(false)\n expect(result.error).toContain('payload.config.ts not found')\n })\n\n it('should install package if missing', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled, installPackage } = await import('./payload-package-check.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(false)\n vi.mocked(installPackage).mockResolvedValue()\n\n // Mock ts-morph to avoid file system operations\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue({\n getFullText: vi.fn().mockReturnValue(''),\n } as any)\n\n const { detectRequiredChanges } = await import('./payload-config-ast.js')\n vi.mocked(detectRequiredChanges).mockReturnValue({\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: false,\n })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(installPackage).toHaveBeenCalledWith('/test/project', '@payloadcms/figma', 'pnpm')\n expect(result.changes).toContain('Installed @payloadcms/figma')\n })\n\n it('should apply modifications when needed', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled } = await import('./payload-package-check.js')\n const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(true)\n\n // Mock source file\n const mockSourceFile = {\n getFullText: vi.fn().mockReturnValue(''),\n save: vi.fn().mockResolvedValue(undefined),\n }\n\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile as any)\n\n vi.mocked(detectRequiredChanges).mockReturnValue({\n dbProperty: {\n adapter: 'mongooseAdapter',\n importSource: '@payloadcms/db-mongodb',\n },\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: true,\n })\n\n vi.mocked(applyModifications).mockReturnValue({\n changes: ['Removed db property', 'Changed buildConfig import to @payloadcms/figma'],\n modified: true,\n })\n\n const { runTypeScriptCheck } = await import('./typescript-validator.js')\n vi.mocked(runTypeScriptCheck).mockResolvedValue({ errors: [], success: true })\n\n const { formatFile } = await import('./formatter.js')\n vi.mocked(formatFile).mockResolvedValue({ success: true })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(result.success).toBe(true)\n expect(result.modified).toBe(true)\n expect(result.changes.length).toBeGreaterThan(0)\n expect(mockSourceFile.save).toHaveBeenCalled()\n })\n\n it('should return error when buildConfig has alias', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled } = await import('./payload-package-check.js')\n const { detectRequiredChanges } = await import('./payload-config-ast.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(true)\n\n const mockSourceFile = {\n getFullText: vi.fn().mockReturnValue(''),\n }\n\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile as any)\n\n vi.mocked(detectRequiredChanges).mockReturnValue({\n hasAlias: true,\n hasOtherPayloadImports: false,\n needsImportChange: true,\n })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(result.success).toBe(false)\n expect(result.error).toContain('Config uses import alias')\n })\n\n it('should uninstall orphaned packages', async () => {\n const { findPayloadConfig } = await import('./payload-config-finder.js')\n const { checkPackageInstalled, uninstallPackage } = await import('./payload-package-check.js')\n const { applyModifications, detectRequiredChanges } = await import('./payload-config-ast.js')\n\n vi.mocked(findPayloadConfig).mockResolvedValue('/test/project/payload.config.ts')\n vi.mocked(checkPackageInstalled).mockResolvedValue(true)\n\n const mockSourceFile = {\n getFullText: vi.fn().mockReturnValue(''),\n save: vi.fn().mockResolvedValue(undefined),\n }\n\n const { Project } = await import('ts-morph')\n vi.spyOn(Project.prototype, 'addSourceFileAtPath').mockReturnValue(mockSourceFile as any)\n\n vi.mocked(detectRequiredChanges).mockReturnValue({\n dbProperty: {\n adapter: 'mongooseAdapter',\n importSource: '@payloadcms/db-mongodb',\n },\n editorProperty: {\n importSource: '@payloadcms/richtext-lexical',\n isDefault: true,\n },\n hasAlias: false,\n hasOtherPayloadImports: false,\n needsImportChange: false,\n })\n\n vi.mocked(applyModifications).mockReturnValue({\n changes: ['Removed db property', 'Removed default editor property'],\n modified: true,\n })\n\n vi.mocked(uninstallPackage).mockResolvedValue()\n\n const { runTypeScriptCheck } = await import('./typescript-validator.js')\n vi.mocked(runTypeScriptCheck).mockResolvedValue({ errors: [], success: true })\n\n const { formatFile } = await import('./formatter.js')\n vi.mocked(formatFile).mockResolvedValue({ success: true })\n\n const result = await ensurePayloadFigmaConfig('/test/project', 'pnpm')\n\n expect(uninstallPackage).toHaveBeenCalledWith(\n '/test/project',\n '@payloadcms/db-mongodb',\n 'pnpm',\n )\n expect(uninstallPackage).toHaveBeenCalledWith(\n '/test/project',\n '@payloadcms/richtext-lexical',\n 'pnpm',\n )\n expect(result.changes).toContain('Uninstalled @payloadcms/db-mongodb')\n expect(result.changes).toContain('Uninstalled @payloadcms/richtext-lexical')\n })\n })\n\n describe('displayManualInstructions', () => {\n it('should format manual instructions correctly', () => {\n // This is a formatting function, just verify it doesn't throw\n expect(() => displayManualInstructions('Test reason')).not.toThrow()\n })\n })\n})\n"],"names":["beforeEach","describe","expect","it","vi","displayManualInstructions","ensurePayloadFigmaConfig","mock","clearAllMocks","findPayloadConfig","mocked","mockResolvedValue","result","success","toBe","error","toContain","checkPackageInstalled","installPackage","Project","spyOn","prototype","mockReturnValue","getFullText","fn","detectRequiredChanges","hasAlias","hasOtherPayloadImports","needsImportChange","toHaveBeenCalledWith","changes","applyModifications","mockSourceFile","save","undefined","dbProperty","adapter","importSource","modified","runTypeScriptCheck","errors","formatFile","length","toBeGreaterThan","toHaveBeenCalled","uninstallPackage","editorProperty","isDefault","not","toThrow"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"payload-package-check.spec.d.ts","sourceRoot":"","sources":["../../src/utils/payload-package-check.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import fs from 'fs/promises';
|
|
2
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
-
import { checkPackageInstalled, installPackage, uninstallPackage } from './payload-package-check.js';
|
|
4
|
-
vi.mock('fs/promises');
|
|
5
|
-
vi.mock('child_process', ()=>({
|
|
6
|
-
spawn: vi.fn()
|
|
7
|
-
}));
|
|
8
|
-
describe('payload-package-check', ()=>{
|
|
9
|
-
beforeEach(()=>{
|
|
10
|
-
vi.clearAllMocks();
|
|
11
|
-
});
|
|
12
|
-
describe('checkPackageInstalled', ()=>{
|
|
13
|
-
it('should return true when package is in dependencies', async ()=>{
|
|
14
|
-
const mockPackageJson = {
|
|
15
|
-
dependencies: {
|
|
16
|
-
'@payloadcms/figma': '1.0.0'
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson));
|
|
20
|
-
const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
|
|
21
|
-
expect(result).toBe(true);
|
|
22
|
-
});
|
|
23
|
-
it('should return false when package is in devDependencies', async ()=>{
|
|
24
|
-
const mockPackageJson = {
|
|
25
|
-
devDependencies: {
|
|
26
|
-
'@payloadcms/figma': '1.0.0'
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson));
|
|
30
|
-
const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
|
|
31
|
-
expect(result).toBe(false);
|
|
32
|
-
});
|
|
33
|
-
it('should return false when package is not installed', async ()=>{
|
|
34
|
-
const mockPackageJson = {
|
|
35
|
-
dependencies: {}
|
|
36
|
-
};
|
|
37
|
-
vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson));
|
|
38
|
-
const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
|
|
39
|
-
expect(result).toBe(false);
|
|
40
|
-
});
|
|
41
|
-
it('should handle missing package.json', async ()=>{
|
|
42
|
-
vi.mocked(fs.readFile).mockRejectedValue(new Error('ENOENT'));
|
|
43
|
-
const result = await checkPackageInstalled('/test/project', '@payloadcms/figma');
|
|
44
|
-
expect(result).toBe(false);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
describe('installPackage', ()=>{
|
|
48
|
-
it('should call pnpm add for pnpm package manager', async ()=>{
|
|
49
|
-
const { spawn } = await import('child_process');
|
|
50
|
-
const mockSpawn = vi.mocked(spawn);
|
|
51
|
-
mockSpawn.mockReturnValue({
|
|
52
|
-
on: vi.fn((event, callback)=>{
|
|
53
|
-
if (event === 'close') {
|
|
54
|
-
callback(0);
|
|
55
|
-
}
|
|
56
|
-
if (event === 'error') {
|
|
57
|
-
// Error handler registered but not called in success case
|
|
58
|
-
}
|
|
59
|
-
return {};
|
|
60
|
-
}),
|
|
61
|
-
stderr: {
|
|
62
|
-
on: vi.fn()
|
|
63
|
-
},
|
|
64
|
-
stdout: {
|
|
65
|
-
on: vi.fn()
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
await installPackage('/test/project', '@payloadcms/figma', 'pnpm');
|
|
69
|
-
expect(mockSpawn).toHaveBeenCalledWith('pnpm', [
|
|
70
|
-
'add',
|
|
71
|
-
'@payloadcms/figma'
|
|
72
|
-
], expect.objectContaining({
|
|
73
|
-
cwd: '/test/project'
|
|
74
|
-
}));
|
|
75
|
-
});
|
|
76
|
-
it('should throw error when installation fails', async ()=>{
|
|
77
|
-
const { spawn } = await import('child_process');
|
|
78
|
-
const mockSpawn = vi.mocked(spawn);
|
|
79
|
-
mockSpawn.mockReturnValue({
|
|
80
|
-
on: vi.fn((event, callback)=>{
|
|
81
|
-
if (event === 'close') {
|
|
82
|
-
callback(1);
|
|
83
|
-
}
|
|
84
|
-
if (event === 'error') {
|
|
85
|
-
// Error handler registered but not called in this test
|
|
86
|
-
}
|
|
87
|
-
return {};
|
|
88
|
-
}),
|
|
89
|
-
stderr: {
|
|
90
|
-
on: vi.fn()
|
|
91
|
-
},
|
|
92
|
-
stdout: {
|
|
93
|
-
on: vi.fn()
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
await expect(installPackage('/test/project', '@payloadcms/figma', 'pnpm')).rejects.toThrow('Failed to install @payloadcms/figma');
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
describe('uninstallPackage', ()=>{
|
|
100
|
-
it('should call pnpm remove for pnpm package manager', async ()=>{
|
|
101
|
-
const { spawn } = await import('child_process');
|
|
102
|
-
const mockSpawn = vi.mocked(spawn);
|
|
103
|
-
mockSpawn.mockReturnValue({
|
|
104
|
-
on: vi.fn((event, callback)=>{
|
|
105
|
-
if (event === 'close') {
|
|
106
|
-
callback(0);
|
|
107
|
-
}
|
|
108
|
-
return {};
|
|
109
|
-
}),
|
|
110
|
-
stderr: {
|
|
111
|
-
on: vi.fn()
|
|
112
|
-
},
|
|
113
|
-
stdout: {
|
|
114
|
-
on: vi.fn()
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
await uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm');
|
|
118
|
-
expect(mockSpawn).toHaveBeenCalledWith('pnpm', [
|
|
119
|
-
'remove',
|
|
120
|
-
'@payloadcms/db-postgres'
|
|
121
|
-
], expect.objectContaining({
|
|
122
|
-
cwd: '/test/project'
|
|
123
|
-
}));
|
|
124
|
-
});
|
|
125
|
-
it('should not throw error when uninstallation fails', async ()=>{
|
|
126
|
-
const { spawn } = await import('child_process');
|
|
127
|
-
const mockSpawn = vi.mocked(spawn);
|
|
128
|
-
mockSpawn.mockReturnValue({
|
|
129
|
-
on: vi.fn((event, callback)=>{
|
|
130
|
-
if (event === 'close') {
|
|
131
|
-
callback(1);
|
|
132
|
-
}
|
|
133
|
-
return {};
|
|
134
|
-
}),
|
|
135
|
-
stderr: {
|
|
136
|
-
on: vi.fn()
|
|
137
|
-
},
|
|
138
|
-
stdout: {
|
|
139
|
-
on: vi.fn()
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
// Should not throw - orphaned package is better than broken config
|
|
143
|
-
await expect(uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm')).resolves.not.toThrow();
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
//# sourceMappingURL=payload-package-check.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/payload-package-check.spec.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport { beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { PackageManager } from './package-manager.js'\n\nimport { checkPackageInstalled, installPackage, uninstallPackage } from './payload-package-check.js'\n\nvi.mock('fs/promises')\nvi.mock('child_process', () => ({\n spawn: vi.fn(),\n}))\n\ndescribe('payload-package-check', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n describe('checkPackageInstalled', () => {\n it('should return true when package is in dependencies', async () => {\n const mockPackageJson = {\n dependencies: {\n '@payloadcms/figma': '1.0.0',\n },\n }\n\n vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(true)\n })\n\n it('should return false when package is in devDependencies', async () => {\n const mockPackageJson = {\n devDependencies: {\n '@payloadcms/figma': '1.0.0',\n },\n }\n\n vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(false)\n })\n\n it('should return false when package is not installed', async () => {\n const mockPackageJson = {\n dependencies: {},\n }\n\n vi.mocked(fs.readFile).mockResolvedValue(JSON.stringify(mockPackageJson))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(false)\n })\n\n it('should handle missing package.json', async () => {\n vi.mocked(fs.readFile).mockRejectedValue(new Error('ENOENT'))\n\n const result = await checkPackageInstalled('/test/project', '@payloadcms/figma')\n\n expect(result).toBe(false)\n })\n })\n\n describe('installPackage', () => {\n it('should call pnpm add for pnpm package manager', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(0)\n }\n if (event === 'error') {\n // Error handler registered but not called in success case\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n await installPackage('/test/project', '@payloadcms/figma', 'pnpm')\n\n expect(mockSpawn).toHaveBeenCalledWith(\n 'pnpm',\n ['add', '@payloadcms/figma'],\n expect.objectContaining({ cwd: '/test/project' }),\n )\n })\n\n it('should throw error when installation fails', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(1)\n }\n if (event === 'error') {\n // Error handler registered but not called in this test\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n await expect(installPackage('/test/project', '@payloadcms/figma', 'pnpm')).rejects.toThrow(\n 'Failed to install @payloadcms/figma',\n )\n })\n })\n\n describe('uninstallPackage', () => {\n it('should call pnpm remove for pnpm package manager', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(0)\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n await uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm')\n\n expect(mockSpawn).toHaveBeenCalledWith(\n 'pnpm',\n ['remove', '@payloadcms/db-postgres'],\n expect.objectContaining({ cwd: '/test/project' }),\n )\n })\n\n it('should not throw error when uninstallation fails', async () => {\n const { spawn } = await import('child_process')\n const mockSpawn = vi.mocked(spawn)\n\n mockSpawn.mockReturnValue({\n on: vi.fn((event, callback) => {\n if (event === 'close') {\n callback(1)\n }\n return {} as any\n }),\n stderr: { on: vi.fn() },\n stdout: { on: vi.fn() },\n } as any)\n\n // Should not throw - orphaned package is better than broken config\n await expect(\n uninstallPackage('/test/project', '@payloadcms/db-postgres', 'pnpm'),\n ).resolves.not.toThrow()\n })\n })\n})\n"],"names":["fs","beforeEach","describe","expect","it","vi","checkPackageInstalled","installPackage","uninstallPackage","mock","spawn","fn","clearAllMocks","mockPackageJson","dependencies","mocked","readFile","mockResolvedValue","JSON","stringify","result","toBe","devDependencies","mockRejectedValue","Error","mockSpawn","mockReturnValue","on","event","callback","stderr","stdout","toHaveBeenCalledWith","objectContaining","cwd","rejects","toThrow","resolves","not"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.spec.d.ts","sourceRoot":"","sources":["../../src/utils/project.spec.ts"],"names":[],"mappings":""}
|