@payloadcms/figma 0.0.1-alpha.41 → 0.0.1-alpha.5
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 -22
- package/dist/api/control-plane.d.ts.map +1 -1
- package/dist/api/control-plane.js +22 -55
- 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 +21 -45
- package/dist/api/figma-api.js.map +1 -1
- package/dist/auth/callback-server.d.ts.map +1 -1
- package/dist/auth/callback-server.js +1 -2
- package/dist/auth/callback-server.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/jwt-validator.d.ts +1 -2
- package/dist/auth/jwt-validator.d.ts.map +1 -1
- package/dist/auth/jwt-validator.js +2 -2
- package/dist/auth/jwt-validator.js.map +1 -1
- package/dist/auth/oauth-flow.d.ts +1 -1
- package/dist/auth/oauth-flow.d.ts.map +1 -1
- package/dist/auth/oauth-flow.js +8 -9
- 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/refresh.d.ts.map +1 -1
- package/dist/auth/refresh.js +9 -14
- package/dist/auth/refresh.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.d.ts.map +1 -1
- package/dist/cli.js +0 -31
- package/dist/cli.js.map +1 -1
- package/dist/commands/deploy.d.ts +0 -4
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +129 -71
- 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 -94
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list-tokens.d.ts.map +1 -1
- package/dist/commands/list-tokens.js +3 -6
- 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 +11 -21
- 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 +14 -4
- package/dist/config/oauth.d.ts.map +1 -1
- package/dist/config/oauth.js +40 -19
- package/dist/config/oauth.js.map +1 -1
- package/dist/constants.d.ts +18 -26
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +20 -34
- package/dist/constants.js.map +1 -1
- package/dist/exports/client.d.ts +0 -1
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +0 -1
- package/dist/exports/client.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/defaults.d.ts.map +1 -1
- package/dist/oauth/defaults.js +5 -29
- package/dist/oauth/defaults.js.map +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +1 -1
- package/dist/oauth/endpoints/getLoginEndpoint.js +4 -4
- package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -1
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +5 -40
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/strategy/index.d.ts +2 -0
- package/dist/oauth/strategy/index.d.ts.map +1 -1
- package/dist/oauth/strategy/index.js +15 -38
- package/dist/oauth/strategy/index.js.map +1 -1
- package/dist/oauth/types.d.ts +6 -6
- 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 -21
- package/dist/plugin/build-config.d.ts.map +1 -1
- package/dist/plugin/build-config.js +8 -114
- package/dist/plugin/build-config.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/asset-collection.d.ts +6 -3
- package/dist/utils/asset-collection.d.ts.map +1 -1
- package/dist/utils/asset-collection.js +34 -10
- package/dist/utils/asset-collection.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/env-management.d.ts +8 -9
- package/dist/utils/env-management.d.ts.map +1 -1
- package/dist/utils/env-management.js +74 -73
- package/dist/utils/env-management.js.map +1 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +5 -3
- package/dist/utils/formatter.js.map +1 -1
- package/dist/utils/lambda-config.d.ts +1 -3
- package/dist/utils/lambda-config.d.ts.map +1 -1
- package/dist/utils/lambda-config.js +21 -13
- package/dist/utils/lambda-config.js.map +1 -1
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +7 -8
- 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 +6 -54
- package/dist/utils/payload-config-modifier.js.map +1 -1
- package/dist/utils/payload-package-check.d.ts +1 -12
- package/dist/utils/payload-package-check.d.ts.map +1 -1
- package/dist/utils/payload-package-check.js +5 -63
- package/dist/utils/payload-package-check.js.map +1 -1
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +5 -8
- 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/dist/utils/typescript-validator.d.ts.map +1 -1
- package/dist/utils/typescript-validator.js +6 -4
- package/dist/utils/typescript-validator.js.map +1 -1
- package/package.json +9 -27
- package/dist/commands/build-lambda-zip.d.ts +0 -5
- package/dist/commands/build-lambda-zip.d.ts.map +0 -1
- package/dist/commands/build-lambda-zip.js +0 -19
- package/dist/commands/build-lambda-zip.js.map +0 -1
- package/dist/db-content-api/README.md +0 -98
- package/dist/db-content-api/generated/content-api-types.d.ts +0 -3854
- 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 -18
- package/dist/db-content-api/index.d.ts.map +0 -1
- package/dist/db-content-api/index.js +0 -578
- package/dist/db-content-api/index.js.map +0 -1
- package/dist/db-content-api/temp-utilities/pagination.d.ts +0 -13
- package/dist/db-content-api/temp-utilities/pagination.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/pagination.js +0 -45
- package/dist/db-content-api/temp-utilities/pagination.js.map +0 -1
- package/dist/db-content-api/temp-utilities/slug.d.ts +0 -2
- package/dist/db-content-api/temp-utilities/slug.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/slug.js +0 -3
- package/dist/db-content-api/temp-utilities/slug.js.map +0 -1
- package/dist/db-content-api/temp-utilities/sorting.d.ts +0 -3
- package/dist/db-content-api/temp-utilities/sorting.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/sorting.js +0 -32
- package/dist/db-content-api/temp-utilities/sorting.js.map +0 -1
- package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts +0 -4
- package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/unwrapDocument.js +0 -53
- package/dist/db-content-api/temp-utilities/unwrapDocument.js.map +0 -1
- package/dist/db-content-api/utilities/auth.d.ts +0 -30
- package/dist/db-content-api/utilities/auth.d.ts.map +0 -1
- package/dist/db-content-api/utilities/auth.js +0 -81
- package/dist/db-content-api/utilities/auth.js.map +0 -1
- package/dist/db-content-api/utilities/data/applyDefaults.d.ts +0 -7
- package/dist/db-content-api/utilities/data/applyDefaults.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/applyDefaults.js +0 -59
- package/dist/db-content-api/utilities/data/applyDefaults.js.map +0 -1
- package/dist/db-content-api/utilities/data/castFieldValue.d.ts +0 -11
- package/dist/db-content-api/utilities/data/castFieldValue.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/castFieldValue.js +0 -66
- package/dist/db-content-api/utilities/data/castFieldValue.js.map +0 -1
- package/dist/db-content-api/utilities/data/index.d.ts +0 -30
- package/dist/db-content-api/utilities/data/index.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/index.js +0 -182
- package/dist/db-content-api/utilities/data/index.js.map +0 -1
- package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts +0 -12
- package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/removeVirtualFields.js +0 -54
- package/dist/db-content-api/utilities/data/removeVirtualFields.js.map +0 -1
- package/dist/db-content-api/utilities/data/stripFields.d.ts +0 -48
- package/dist/db-content-api/utilities/data/stripFields.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/stripFields.js +0 -195
- package/dist/db-content-api/utilities/data/stripFields.js.map +0 -1
- package/dist/db-content-api/utilities/joins.d.ts +0 -55
- package/dist/db-content-api/utilities/joins.d.ts.map +0 -1
- package/dist/db-content-api/utilities/joins.js +0 -136
- package/dist/db-content-api/utilities/joins.js.map +0 -1
- package/dist/db-content-api/utilities/where.d.ts +0 -12
- package/dist/db-content-api/utilities/where.d.ts.map +0 -1
- package/dist/db-content-api/utilities/where.js +0 -107
- package/dist/db-content-api/utilities/where.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/oauth/utilities/isDuplicateKeyError.d.ts +0 -7
- package/dist/oauth/utilities/isDuplicateKeyError.d.ts.map +0 -1
- package/dist/oauth/utilities/isDuplicateKeyError.js +0 -14
- package/dist/oauth/utilities/isDuplicateKeyError.js.map +0 -1
- package/dist/storage-content-api/api-types.d.ts +0 -161
- package/dist/storage-content-api/api-types.d.ts.map +0 -1
- package/dist/storage-content-api/api-types.js +0 -6
- package/dist/storage-content-api/api-types.js.map +0 -1
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts +0 -9
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts.map +0 -1
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.js +0 -42
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.js.map +0 -1
- package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts +0 -13
- package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts.map +0 -1
- package/dist/storage-content-api/client-uploads/generateSignedURL.js +0 -31
- package/dist/storage-content-api/client-uploads/generateSignedURL.js.map +0 -1
- package/dist/storage-content-api/client.d.ts +0 -6
- package/dist/storage-content-api/client.d.ts.map +0 -1
- package/dist/storage-content-api/client.js +0 -36
- package/dist/storage-content-api/client.js.map +0 -1
- package/dist/storage-content-api/generateURL.d.ts +0 -7
- package/dist/storage-content-api/generateURL.d.ts.map +0 -1
- package/dist/storage-content-api/generateURL.js +0 -7
- package/dist/storage-content-api/generateURL.js.map +0 -1
- package/dist/storage-content-api/handleDelete.d.ts +0 -8
- package/dist/storage-content-api/handleDelete.d.ts.map +0 -1
- package/dist/storage-content-api/handleDelete.js +0 -15
- package/dist/storage-content-api/handleDelete.js.map +0 -1
- package/dist/storage-content-api/handleUpload.d.ts +0 -11
- package/dist/storage-content-api/handleUpload.d.ts.map +0 -1
- package/dist/storage-content-api/handleUpload.js +0 -136
- package/dist/storage-content-api/handleUpload.js.map +0 -1
- package/dist/storage-content-api/index.d.ts +0 -5
- package/dist/storage-content-api/index.d.ts.map +0 -1
- package/dist/storage-content-api/index.js +0 -31
- package/dist/storage-content-api/index.js.map +0 -1
- package/dist/storage-content-api/staticHandler.d.ts +0 -10
- package/dist/storage-content-api/staticHandler.d.ts.map +0 -1
- package/dist/storage-content-api/staticHandler.js +0 -55
- package/dist/storage-content-api/staticHandler.js.map +0 -1
- package/dist/storage-content-api/types.d.ts +0 -10
- package/dist/storage-content-api/types.d.ts.map +0 -1
- package/dist/storage-content-api/types.js +0 -3
- package/dist/storage-content-api/types.js.map +0 -1
- package/dist/templates/README.md +0 -19
- package/dist/utils/build-lambda-zip.d.ts +0 -14
- package/dist/utils/build-lambda-zip.d.ts.map +0 -1
- package/dist/utils/build-lambda-zip.js +0 -81
- package/dist/utils/build-lambda-zip.js.map +0 -1
- package/dist/utils/version-check.d.ts +0 -3
- package/dist/utils/version-check.d.ts.map +0 -1
- package/dist/utils/version-check.js +0 -38
- package/dist/utils/version-check.js.map +0 -1
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAS1C"}
|
package/dist/cli.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import arg from 'arg';
|
|
3
3
|
import pc from 'picocolors';
|
|
4
|
-
import { buildLambdaZipCommand } from './commands/build-lambda-zip.js';
|
|
5
4
|
import { deployCommand } from './commands/deploy.js';
|
|
6
5
|
import { initCommand } from './commands/init.js';
|
|
7
6
|
import { listTokensCommand } from './commands/list-tokens.js';
|
|
8
7
|
import { loginCommand } from './commands/login.js';
|
|
9
8
|
import { logoutCommand } from './commands/logout.js';
|
|
10
|
-
import { setEnvironment } from './constants.js';
|
|
11
9
|
import { feedbackOutro, helpMessage } from './utils/messages.js';
|
|
12
10
|
/**
|
|
13
11
|
* Entrypoint for bin/cli.js
|
|
@@ -27,19 +25,15 @@ class Main {
|
|
|
27
25
|
// @ts-expect-error bad typings
|
|
28
26
|
this.args = arg({
|
|
29
27
|
'--debug': Boolean,
|
|
30
|
-
'--env': String,
|
|
31
28
|
'--force': Boolean,
|
|
32
29
|
'--help': Boolean,
|
|
33
30
|
'--id': String,
|
|
34
31
|
'--name': String,
|
|
35
32
|
'--skip-auth': Boolean,
|
|
36
|
-
'--skip-build': Boolean,
|
|
37
|
-
'--version': Boolean,
|
|
38
33
|
'--yes': Boolean,
|
|
39
34
|
// Aliases
|
|
40
35
|
'-f': '--force',
|
|
41
36
|
'-h': '--help',
|
|
42
|
-
'-v': '--version',
|
|
43
37
|
'-y': '--yes'
|
|
44
38
|
}, {
|
|
45
39
|
permissive: true
|
|
@@ -48,19 +42,6 @@ class Main {
|
|
|
48
42
|
if (this.args['--debug']) {
|
|
49
43
|
process.env.DEBUG = 'true';
|
|
50
44
|
}
|
|
51
|
-
// Handle --env flag for environment switching
|
|
52
|
-
if (this.args['--env']) {
|
|
53
|
-
const envArg = this.args['--env'].toLowerCase();
|
|
54
|
-
if (envArg === 'prod' || envArg === 'production') {
|
|
55
|
-
setEnvironment('production');
|
|
56
|
-
} else if (envArg === 'staging') {
|
|
57
|
-
setEnvironment('staging');
|
|
58
|
-
} else {
|
|
59
|
-
// eslint-disable-next-line no-console
|
|
60
|
-
console.error(`Invalid --env value: ${this.args['--env']}. Use 'prod' or 'staging'.`);
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
45
|
}
|
|
65
46
|
async init() {
|
|
66
47
|
try {
|
|
@@ -68,13 +49,6 @@ class Main {
|
|
|
68
49
|
helpMessage();
|
|
69
50
|
process.exit(0);
|
|
70
51
|
}
|
|
71
|
-
if (this.args['--version']) {
|
|
72
|
-
const { getOwnVersion } = await import('./utils/version-check.js');
|
|
73
|
-
const version = await getOwnVersion();
|
|
74
|
-
// eslint-disable-next-line no-console
|
|
75
|
-
console.log(version);
|
|
76
|
-
process.exit(0);
|
|
77
|
-
}
|
|
78
52
|
// Get the subcommand (first non-flag argument)
|
|
79
53
|
const subcommand = this.args._[0];
|
|
80
54
|
// eslint-disable-next-line no-console
|
|
@@ -82,14 +56,9 @@ class Main {
|
|
|
82
56
|
p.intro(pc.bgCyan(pc.black(' @payloadcms/figma ')));
|
|
83
57
|
// Route to appropriate command handler
|
|
84
58
|
switch(subcommand){
|
|
85
|
-
case 'build-lambda-zip':
|
|
86
|
-
await buildLambdaZipCommand();
|
|
87
|
-
break;
|
|
88
59
|
case 'deploy':
|
|
89
60
|
await deployCommand({
|
|
90
|
-
id: this.args['--id'],
|
|
91
61
|
debug: this.args['--debug'],
|
|
92
|
-
skipBuild: this.args['--skip-build'],
|
|
93
62
|
yes: this.args['--yes']
|
|
94
63
|
});
|
|
95
64
|
break;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport arg from 'arg'\nimport pc from 'picocolors'\n\nimport type { CliArgs } from './types.js'\n\nimport {
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport arg from 'arg'\nimport pc from 'picocolors'\n\nimport type { CliArgs } from './types.js'\n\nimport { deployCommand } from './commands/deploy.js'\nimport { initCommand } from './commands/init.js'\nimport { listTokensCommand } from './commands/list-tokens.js'\nimport { loginCommand } from './commands/login.js'\nimport { logoutCommand } from './commands/logout.js'\nimport { feedbackOutro, helpMessage } from './utils/messages.js'\n\n/**\n * Entrypoint for bin/cli.js\n */\nexport async function main(): Promise<void> {\n try {\n await new Main().init()\n } catch (e) {\n if (e instanceof Error) {\n // eslint-disable-next-line no-console\n console.error(e.message)\n }\n }\n}\n\nclass Main {\n args: CliArgs\n\n constructor() {\n // @ts-expect-error bad typings\n this.args = arg(\n {\n '--debug': Boolean,\n '--force': Boolean,\n '--help': Boolean,\n '--id': String,\n '--name': String,\n '--skip-auth': Boolean,\n '--yes': Boolean,\n\n // Aliases\n '-f': '--force',\n '-h': '--help',\n '-y': '--yes',\n },\n { permissive: true },\n )\n\n // Set debug flag globally\n if (this.args['--debug']) {\n process.env.DEBUG = 'true'\n }\n }\n\n async init(): Promise<void> {\n try {\n if (this.args['--help']) {\n helpMessage()\n process.exit(0)\n }\n\n // Get the subcommand (first non-flag argument)\n const subcommand = this.args._[0]\n\n // eslint-disable-next-line no-console\n console.log('\\n')\n p.intro(pc.bgCyan(pc.black(' @payloadcms/figma ')))\n\n // Route to appropriate command handler\n switch (subcommand) {\n case 'deploy':\n await deployCommand({\n debug: this.args['--debug'],\n yes: this.args['--yes'],\n })\n break\n\n case 'init':\n await initCommand({\n id: this.args['--id'],\n name: this.args['--name'],\n debug: this.args['--debug'],\n force: this.args['--force'],\n skipAuth: this.args['--skip-auth'],\n })\n break\n\n case 'list-tokens':\n listTokensCommand({\n debug: this.args['--debug'],\n })\n break\n\n case 'login':\n await loginCommand()\n break\n\n case 'logout':\n await logoutCommand({\n debug: this.args['--debug'],\n })\n break\n\n case undefined:\n // No subcommand - show default message\n p.note(\"Let's create a new CMS!\")\n p.outro(feedbackOutro())\n break\n\n default:\n p.log.error(pc.red(`Unknown command: ${subcommand}`))\n p.note('Use --help to see available commands', 'Tip')\n process.exit(1)\n }\n\n process.exit(0)\n } catch (err: unknown) {\n // eslint-disable-next-line no-console\n console.error(err instanceof Error ? err.message : 'An error occurred')\n process.exit(1)\n }\n }\n}\n"],"names":["p","arg","pc","deployCommand","initCommand","listTokensCommand","loginCommand","logoutCommand","feedbackOutro","helpMessage","main","Main","init","e","Error","console","error","message","args","Boolean","String","permissive","process","env","DEBUG","exit","subcommand","_","log","intro","bgCyan","black","debug","yes","id","name","force","skipAuth","undefined","note","outro","red","err"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,SAAS,MAAK;AACrB,OAAOC,QAAQ,aAAY;AAI3B,SAASC,aAAa,QAAQ,uBAAsB;AACpD,SAASC,WAAW,QAAQ,qBAAoB;AAChD,SAASC,iBAAiB,QAAQ,4BAA2B;AAC7D,SAASC,YAAY,QAAQ,sBAAqB;AAClD,SAASC,aAAa,QAAQ,uBAAsB;AACpD,SAASC,aAAa,EAAEC,WAAW,QAAQ,sBAAqB;AAEhE;;CAEC,GACD,OAAO,eAAeC;IACpB,IAAI;QACF,MAAM,IAAIC,OAAOC,IAAI;IACvB,EAAE,OAAOC,GAAG;QACV,IAAIA,aAAaC,OAAO;YACtB,sCAAsC;YACtCC,QAAQC,KAAK,CAACH,EAAEI,OAAO;QACzB;IACF;AACF;AAEA,MAAMN;IACJO,KAAa;IAEb,aAAc;QACZ,+BAA+B;QAC/B,IAAI,CAACA,IAAI,GAAGjB,IACV;YACE,WAAWkB;YACX,WAAWA;YACX,UAAUA;YACV,QAAQC;YACR,UAAUA;YACV,eAAeD;YACf,SAASA;YAET,UAAU;YACV,MAAM;YACN,MAAM;YACN,MAAM;QACR,GACA;YAAEE,YAAY;QAAK;QAGrB,0BAA0B;QAC1B,IAAI,IAAI,CAACH,IAAI,CAAC,UAAU,EAAE;YACxBI,QAAQC,GAAG,CAACC,KAAK,GAAG;QACtB;IACF;IAEA,MAAMZ,OAAsB;QAC1B,IAAI;YACF,IAAI,IAAI,CAACM,IAAI,CAAC,SAAS,EAAE;gBACvBT;gBACAa,QAAQG,IAAI,CAAC;YACf;YAEA,+CAA+C;YAC/C,MAAMC,aAAa,IAAI,CAACR,IAAI,CAACS,CAAC,CAAC,EAAE;YAEjC,sCAAsC;YACtCZ,QAAQa,GAAG,CAAC;YACZ5B,EAAE6B,KAAK,CAAC3B,GAAG4B,MAAM,CAAC5B,GAAG6B,KAAK,CAAC;YAE3B,uCAAuC;YACvC,OAAQL;gBACN,KAAK;oBACH,MAAMvB,cAAc;wBAClB6B,OAAO,IAAI,CAACd,IAAI,CAAC,UAAU;wBAC3Be,KAAK,IAAI,CAACf,IAAI,CAAC,QAAQ;oBACzB;oBACA;gBAEF,KAAK;oBACH,MAAMd,YAAY;wBAChB8B,IAAI,IAAI,CAAChB,IAAI,CAAC,OAAO;wBACrBiB,MAAM,IAAI,CAACjB,IAAI,CAAC,SAAS;wBACzBc,OAAO,IAAI,CAACd,IAAI,CAAC,UAAU;wBAC3BkB,OAAO,IAAI,CAAClB,IAAI,CAAC,UAAU;wBAC3BmB,UAAU,IAAI,CAACnB,IAAI,CAAC,cAAc;oBACpC;oBACA;gBAEF,KAAK;oBACHb,kBAAkB;wBAChB2B,OAAO,IAAI,CAACd,IAAI,CAAC,UAAU;oBAC7B;oBACA;gBAEF,KAAK;oBACH,MAAMZ;oBACN;gBAEF,KAAK;oBACH,MAAMC,cAAc;wBAClByB,OAAO,IAAI,CAACd,IAAI,CAAC,UAAU;oBAC7B;oBACA;gBAEF,KAAKoB;oBACH,uCAAuC;oBACvCtC,EAAEuC,IAAI,CAAC;oBACPvC,EAAEwC,KAAK,CAAChC;oBACR;gBAEF;oBACER,EAAE4B,GAAG,CAACZ,KAAK,CAACd,GAAGuC,GAAG,CAAC,CAAC,iBAAiB,EAAEf,YAAY;oBACnD1B,EAAEuC,IAAI,CAAC,wCAAwC;oBAC/CjB,QAAQG,IAAI,CAAC;YACjB;YAEAH,QAAQG,IAAI,CAAC;QACf,EAAE,OAAOiB,KAAc;YACrB,sCAAsC;YACtC3B,QAAQC,KAAK,CAAC0B,eAAe5B,QAAQ4B,IAAIzB,OAAO,GAAG;YACnDK,QAAQG,IAAI,CAAC;QACf;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gCAAgC;IAChC,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AA6BD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyThF"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
|
-
import spawn from '
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import pc from 'picocolors';
|
|
5
|
-
import {
|
|
5
|
+
import { Project } from 'ts-morph';
|
|
6
|
+
import { createDeployment, getTenantDetails, performDeployment } from '../api/control-plane.js';
|
|
6
7
|
import { getValidAccessToken } from '../auth/oauth-flow.js';
|
|
7
|
-
import {
|
|
8
|
+
import { getValidProjectToken } from '../auth/project-token.js';
|
|
9
|
+
import { TokenStore } from '../auth/token-store.js';
|
|
8
10
|
import { collectStaticAssets, createLambdaZip, getFileSize } from '../utils/asset-collection.js';
|
|
9
11
|
import { detectBuild, getBuildCommand } from '../utils/build-detection.js';
|
|
10
|
-
import { getEnvVar } from '../utils/env-management.js';
|
|
11
12
|
import * as log from '../utils/log.js';
|
|
12
13
|
import { getPackageManager } from '../utils/package-manager.js';
|
|
14
|
+
import { readFigmaConfig } from '../utils/payload-config-ast.js';
|
|
15
|
+
import { findPayloadConfig } from '../utils/payload-config-finder.js';
|
|
13
16
|
import { isInProjectDirectory } from '../utils/project.js';
|
|
14
17
|
import { uploadLambdaZip, uploadStaticAssets } from '../utils/s3-upload.js';
|
|
15
18
|
import { loginCommand } from './login.js';
|
|
@@ -48,14 +51,6 @@ import { loginCommand } from './login.js';
|
|
|
48
51
|
*/ export async function deployCommand(options) {
|
|
49
52
|
const projectPath = process.cwd();
|
|
50
53
|
const spinner = p.spinner();
|
|
51
|
-
let tenantId = options.id;
|
|
52
|
-
if (!tenantId) {
|
|
53
|
-
tenantId = await getEnvVar(projectPath, 'FIGMA_TENANT_ID') ?? undefined;
|
|
54
|
-
}
|
|
55
|
-
if (!tenantId) {
|
|
56
|
-
p.log.error(pc.red('✗ Tenant ID not found. Run `@payloadcms/figma init` first.'));
|
|
57
|
-
process.exit(1);
|
|
58
|
-
}
|
|
59
54
|
try {
|
|
60
55
|
// ===== PRE-FLIGHT CHECKS =====
|
|
61
56
|
// Check if in project directory
|
|
@@ -64,8 +59,27 @@ import { loginCommand } from './login.js';
|
|
|
64
59
|
p.note('Create a project or connect an existing one to Figma: npx @payloadcms/figma init', 'Tip');
|
|
65
60
|
process.exit(1);
|
|
66
61
|
}
|
|
62
|
+
// Find and read payload config
|
|
63
|
+
const configPath = await findPayloadConfig(projectPath);
|
|
64
|
+
if (!configPath) {
|
|
65
|
+
p.log.error(pc.red('✗ payload.config.ts not found'));
|
|
66
|
+
p.note('Run npx @payloadcms/figma init to configure your project.', 'Tip');
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
// Parse config with ts-morph
|
|
70
|
+
const project = new Project({
|
|
71
|
+
skipAddingFilesFromTsConfig: true
|
|
72
|
+
});
|
|
73
|
+
const sourceFile = project.addSourceFileAtPath(configPath);
|
|
74
|
+
// Read figma configuration from buildConfig
|
|
75
|
+
const config = readFigmaConfig(sourceFile);
|
|
76
|
+
if (!config || !config.tenantId) {
|
|
77
|
+
p.log.error(pc.red('✗ No figma configuration found in payload.config.ts'));
|
|
78
|
+
p.note('Run npx @payloadcms/figma init to configure your project.', 'Tip');
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
67
81
|
// Check authentication
|
|
68
|
-
const tokenStore =
|
|
82
|
+
const tokenStore = new TokenStore();
|
|
69
83
|
let accessToken = await getValidAccessToken(tokenStore);
|
|
70
84
|
if (!accessToken) {
|
|
71
85
|
p.log.message('Please log in to continue');
|
|
@@ -76,33 +90,40 @@ import { loginCommand } from './login.js';
|
|
|
76
90
|
process.exit(1);
|
|
77
91
|
}
|
|
78
92
|
}
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
spinner.stop(pc.
|
|
91
|
-
|
|
92
|
-
`${pc.cyan('Build ID:')} ${buildInfo.buildId}`,
|
|
93
|
-
`${pc.cyan('Date:')} ${formatDate(buildInfo.timestamp)}`
|
|
94
|
-
].join('\n'), 'Build Details');
|
|
95
|
-
} else {
|
|
96
|
-
// Always build (no prompt)
|
|
93
|
+
// Get project token
|
|
94
|
+
try {
|
|
95
|
+
await getValidProjectToken(tokenStore, config.tenantId);
|
|
96
|
+
} catch (error) {
|
|
97
|
+
p.log.error(pc.yellow('⚠ Project token invalid'));
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
// ===== BUILD VALIDATION =====
|
|
101
|
+
spinner.start('Checking for build...');
|
|
102
|
+
let buildInfo = await detectBuild(projectPath);
|
|
103
|
+
if (!buildInfo) {
|
|
104
|
+
spinner.stop(pc.yellow('⚠ No build found for this project.'));
|
|
105
|
+
// Try to find build command
|
|
97
106
|
const buildCmd = await getBuildCommand(projectPath);
|
|
98
107
|
if (!buildCmd) {
|
|
99
108
|
p.log.error('No build script found in package.json');
|
|
100
109
|
p.note('Add a build script to package.json: "build": "next build"', 'Tip');
|
|
101
110
|
process.exit(1);
|
|
102
111
|
}
|
|
112
|
+
// Prompt to run build
|
|
113
|
+
if (!options.yes) {
|
|
114
|
+
const shouldBuild = await p.confirm({
|
|
115
|
+
initialValue: true,
|
|
116
|
+
message: `Build command found in package.json. Run it?`
|
|
117
|
+
});
|
|
118
|
+
if (p.isCancel(shouldBuild) || !shouldBuild) {
|
|
119
|
+
p.log.message('Cancelling deployment...');
|
|
120
|
+
process.exit(0);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Run build
|
|
103
124
|
const packageManager = await getPackageManager(projectPath);
|
|
104
125
|
const buildCommand = `${packageManager} run build`;
|
|
105
|
-
|
|
126
|
+
spinner.stop(`Running ${buildCommand}...\n`);
|
|
106
127
|
try {
|
|
107
128
|
// Stream build output to user with formatting
|
|
108
129
|
const buildProcess = spawn(packageManager, [
|
|
@@ -118,20 +139,20 @@ import { loginCommand } from './login.js';
|
|
|
118
139
|
});
|
|
119
140
|
// Indent and dim output
|
|
120
141
|
buildProcess.stdout?.on('data', (data)=>{
|
|
121
|
-
const lines = data.toString().split(
|
|
142
|
+
const lines = data.toString().split('\n');
|
|
122
143
|
lines.forEach((line)=>{
|
|
123
144
|
if (line.trim()) {
|
|
124
145
|
// eslint-disable-next-line no-console
|
|
125
|
-
console.log(pc.dim(` ${line}`));
|
|
146
|
+
console.log(pc.dim(` ${line}`)); // Standard output
|
|
126
147
|
}
|
|
127
148
|
});
|
|
128
149
|
});
|
|
129
150
|
buildProcess.stderr?.on('data', (data)=>{
|
|
130
|
-
const lines = data.toString().split(
|
|
151
|
+
const lines = data.toString().split('\n');
|
|
131
152
|
lines.forEach((line)=>{
|
|
132
153
|
if (line.trim()) {
|
|
133
154
|
// eslint-disable-next-line no-console
|
|
134
|
-
console.log(pc.dim(` ${line}`));
|
|
155
|
+
console.log(pc.dim(` ${line}`)); // Standard error
|
|
135
156
|
}
|
|
136
157
|
});
|
|
137
158
|
});
|
|
@@ -149,13 +170,19 @@ import { loginCommand } from './login.js';
|
|
|
149
170
|
}
|
|
150
171
|
process.exit(1);
|
|
151
172
|
}
|
|
152
|
-
//
|
|
173
|
+
// Re-check for build
|
|
153
174
|
buildInfo = await detectBuild(projectPath);
|
|
154
175
|
if (!buildInfo) {
|
|
155
176
|
p.log.error(pc.red('✗ Build completed but standalone build not found'));
|
|
156
177
|
p.note('Ensure next.config.js has output: "standalone"', 'Check Lambda Configuration');
|
|
157
178
|
process.exit(1);
|
|
158
179
|
}
|
|
180
|
+
} else {
|
|
181
|
+
spinner.stop(pc.green('✓ Build found'));
|
|
182
|
+
p.note([
|
|
183
|
+
`${pc.cyan('Build ID:')} ${buildInfo.buildId}`,
|
|
184
|
+
`${pc.cyan('Date:')} ${formatDate(buildInfo.timestamp)}`
|
|
185
|
+
].join('\n'), 'Build Details');
|
|
159
186
|
}
|
|
160
187
|
// ===== DEPLOYMENT PREPARATION =====
|
|
161
188
|
// Create Lambda zip
|
|
@@ -183,59 +210,90 @@ import { loginCommand } from './login.js';
|
|
|
183
210
|
`${pc.cyan('Code size:')} ${formatBytes(zipSize)}`,
|
|
184
211
|
`${pc.cyan('Static assets:')} ${staticAssets.length} files`
|
|
185
212
|
].join('\n'), 'Details');
|
|
213
|
+
const shouldDeploy = await p.confirm({
|
|
214
|
+
initialValue: true,
|
|
215
|
+
message: 'Deploy this build to Figma?'
|
|
216
|
+
});
|
|
217
|
+
if (p.isCancel(shouldDeploy) || !shouldDeploy) {
|
|
218
|
+
p.log.message('Cancelling deployment...');
|
|
219
|
+
process.exit(0);
|
|
220
|
+
}
|
|
186
221
|
}
|
|
187
222
|
// ===== DEPLOYMENT EXECUTION =====
|
|
188
223
|
// Step 1: Create deployment
|
|
189
224
|
spinner.start('Creating deployment...');
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
225
|
+
let deploymentId;
|
|
226
|
+
let codeUploadUrl;
|
|
227
|
+
let staticAssetUploadUrls;
|
|
228
|
+
try {
|
|
229
|
+
const createResponse = await createDeployment(accessToken, config.tenantId, {
|
|
230
|
+
staticAssets
|
|
231
|
+
});
|
|
232
|
+
deploymentId = createResponse.deploymentId;
|
|
233
|
+
codeUploadUrl = createResponse.codeUploadUrl;
|
|
234
|
+
staticAssetUploadUrls = createResponse.staticAssetUploadUrls;
|
|
235
|
+
log.debug(`Deployment ID: ${deploymentId}`);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
spinner.stop(pc.red('✗ Failed to create deployment'));
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
197
240
|
// Step 2: Upload code
|
|
198
241
|
spinner.message(`Uploading code (${formatBytes(zipSize)})...`);
|
|
199
|
-
|
|
200
|
-
|
|
242
|
+
try {
|
|
243
|
+
await uploadLambdaZip(zipPath, codeUploadUrl);
|
|
244
|
+
spinner.stop(pc.green(`✓ Code uploaded (${formatBytes(zipSize)})`));
|
|
245
|
+
} catch (error) {
|
|
246
|
+
spinner.stop(pc.red('✗ Failed to upload code'));
|
|
247
|
+
throw error;
|
|
248
|
+
}
|
|
201
249
|
// Step 3: Upload static assets
|
|
202
250
|
if (staticAssets.length > 0) {
|
|
203
251
|
spinner.start('Uploading static assets...');
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
252
|
+
try {
|
|
253
|
+
const uploadResults = await uploadStaticAssets(projectPath, staticAssetUploadUrls, (uploaded, total)=>{
|
|
254
|
+
spinner.message(`Uploading static assets (${uploaded}/${total})...`);
|
|
255
|
+
});
|
|
256
|
+
if (uploadResults.assetsFailed > 0) {
|
|
257
|
+
spinner.stop(pc.yellow(`⚠ ${uploadResults.assetsUploaded}/${staticAssets.length} assets uploaded (${uploadResults.assetsFailed} failed)`));
|
|
258
|
+
p.log.warning(`${uploadResults.assetsFailed} assets failed to upload. Deployment may be incomplete.`);
|
|
259
|
+
} else {
|
|
260
|
+
spinner.stop(pc.green(`✓ Static assets uploaded (${uploadResults.assetsUploaded} files, ${formatBytes(uploadResults.totalBytesUploaded)})`));
|
|
261
|
+
}
|
|
262
|
+
} catch (error) {
|
|
263
|
+
spinner.stop(pc.red('✗ Failed to upload assets'));
|
|
264
|
+
throw error;
|
|
212
265
|
}
|
|
213
266
|
}
|
|
214
267
|
// Step 4: Perform deployment
|
|
215
268
|
spinner.start('Performing deployment...');
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
269
|
+
try {
|
|
270
|
+
await performDeployment(accessToken, config.tenantId, {
|
|
271
|
+
deploymentId
|
|
272
|
+
});
|
|
273
|
+
spinner.stop(pc.green('✓ Deployment initiated'));
|
|
274
|
+
} catch (error) {
|
|
275
|
+
spinner.stop(pc.red('✗ Failed to perform deployment'));
|
|
276
|
+
throw error;
|
|
277
|
+
}
|
|
221
278
|
// TODO: Add deployment progress tracking
|
|
222
279
|
// Future: Poll deployment status and show progress
|
|
223
280
|
// API endpoint: GET /v1/tenant/{tenant_id}/deploy/{deployment_id}/status
|
|
224
281
|
// Success output
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
spinner.stop(pc.red(`✗ ${error.message}`));
|
|
232
|
-
if (error.statusCode) {
|
|
233
|
-
p.log.message(pc.dim(` HTTP ${error.statusCode}`));
|
|
282
|
+
p.log.message('This usually takes 2-3 minutes to complete.');
|
|
283
|
+
// Get tenant details for URL
|
|
284
|
+
try {
|
|
285
|
+
const tenant = await getTenantDetails(accessToken, config.tenantId);
|
|
286
|
+
if (tenant.domain) {
|
|
287
|
+
p.log.message(`View: ${pc.cyan(`https://${tenant.domain}/`)}`);
|
|
234
288
|
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
spinner.stop(pc.red(`✗ ${message}`));
|
|
289
|
+
} catch {
|
|
290
|
+
// Non-critical - just skip URL display
|
|
238
291
|
}
|
|
292
|
+
p.note(`Manage your deployment at:\n${pc.cyan(`https://cms.figma.com/manage/tenants/${config.tenantId}`)}`, 'Next Steps');
|
|
293
|
+
} catch (error) {
|
|
294
|
+
spinner.stop(pc.red('✗ Failed'));
|
|
295
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
296
|
+
p.log.error(pc.red(`✗ ${message}`));
|
|
239
297
|
if (options.debug && error instanceof Error && error.stack) {
|
|
240
298
|
log.error(`Stack trace: ${error.stack}`);
|
|
241
299
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/deploy.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport spawn from 'cross-spawn'\nimport path from 'path'\nimport pc from 'picocolors'\n\nimport { ControlPlaneError, createDeployment, performDeployment } from '../api/control-plane.js'\nimport { getValidAccessToken } from '../auth/oauth-flow.js'\nimport { getTokenStore } from '../auth/token-store.js'\nimport { collectStaticAssets, createLambdaZip, getFileSize } from '../utils/asset-collection.js'\nimport { detectBuild, getBuildCommand } from '../utils/build-detection.js'\nimport { getEnvVar } from '../utils/env-management.js'\nimport * as log from '../utils/log.js'\nimport { getPackageManager } from '../utils/package-manager.js'\nimport { isInProjectDirectory } from '../utils/project.js'\nimport { uploadLambdaZip, uploadStaticAssets } from '../utils/s3-upload.js'\nimport { loginCommand } from './login.js'\n\n/**\n * Options for deploy command\n */\nexport interface DeployCommandOptions {\n /** Enable debug mode */\n debug?: boolean\n /** Tenant ID */\n id?: string\n /** Skip the build step (use existing build) */\n skipBuild?: boolean\n /** Skip confirmation prompts */\n yes?: boolean\n}\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 B'\n }\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`\n}\n\n/**\n * Format date to human-readable string in local time\n */\nfunction formatDate(date: Date): string {\n return date.toLocaleString('en-US', {\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n month: 'long',\n timeZoneName: 'short',\n year: 'numeric',\n })\n}\n\n/**\n * Execute the deploy command\n *\n * @param options - Command options\n */\nexport async function deployCommand(options: DeployCommandOptions): Promise<void> {\n const projectPath = process.cwd()\n const spinner = p.spinner()\n\n let tenantId = options.id\n if (!tenantId) {\n tenantId = (await getEnvVar(projectPath, 'FIGMA_TENANT_ID')) ?? undefined\n }\n if (!tenantId) {\n p.log.error(pc.red('✗ Tenant ID not found. Run `@payloadcms/figma init` first.'))\n process.exit(1)\n }\n\n try {\n // ===== PRE-FLIGHT CHECKS =====\n\n // Check if in project directory\n if (!(await isInProjectDirectory(projectPath))) {\n p.log.error(pc.red(\"✗ 'deploy' command is not available outside of a Payload project.\"))\n p.note(\n 'Create a project or connect an existing one to Figma: npx @payloadcms/figma init',\n 'Tip',\n )\n process.exit(1)\n }\n\n // Check authentication\n const tokenStore = getTokenStore()\n\n let accessToken = await getValidAccessToken(tokenStore)\n if (!accessToken) {\n p.log.message('Please log in to continue')\n await loginCommand()\n accessToken = await getValidAccessToken(tokenStore)\n if (!accessToken) {\n p.log.error(pc.red('✗ Authentication failed'))\n process.exit(1)\n }\n }\n\n // ===== BUILD =====\n\n let buildInfo: Awaited<ReturnType<typeof detectBuild>>\n\n if (options.skipBuild) {\n // User asserts build exists - verify it\n spinner.start('Checking for build...')\n buildInfo = await detectBuild(projectPath)\n\n if (!buildInfo) {\n spinner.stop(pc.red('✗ No build found'))\n p.log.error('Use deploy without --skip-build to build first.')\n process.exit(1)\n }\n\n spinner.stop(pc.green('✓ Build found'))\n p.note(\n [\n `${pc.cyan('Build ID:')} ${buildInfo.buildId}`,\n `${pc.cyan('Date:')} ${formatDate(buildInfo.timestamp)}`,\n ].join('\\n'),\n 'Build Details',\n )\n } else {\n // Always build (no prompt)\n const buildCmd = await getBuildCommand(projectPath)\n\n if (!buildCmd) {\n p.log.error('No build script found in package.json')\n p.note('Add a build script to package.json: \"build\": \"next build\"', 'Tip')\n process.exit(1)\n }\n\n const packageManager = await getPackageManager(projectPath)\n const buildCommand = `${packageManager} run build`\n p.log.step(`Running ${buildCommand}...\\n`)\n\n try {\n // Stream build output to user with formatting\n const buildProcess = spawn(packageManager, ['run', 'build'], {\n cwd: projectPath,\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n\n // Indent and dim output\n buildProcess.stdout?.on('data', (data) => {\n const lines = data.toString().split(/\\r?\\n/)\n lines.forEach((line: string) => {\n if (line.trim()) {\n // eslint-disable-next-line no-console\n console.log(pc.dim(` ${line}`))\n }\n })\n })\n\n buildProcess.stderr?.on('data', (data) => {\n const lines = data.toString().split(/\\r?\\n/)\n lines.forEach((line: string) => {\n if (line.trim()) {\n // eslint-disable-next-line no-console\n console.log(pc.dim(` ${line}`))\n }\n })\n })\n\n const exitCode = await new Promise<number>((resolve) => {\n buildProcess.on('close', resolve)\n })\n\n if (exitCode !== 0) {\n throw new Error(`Build process exited with code ${exitCode}`)\n }\n\n p.log.success(pc.green('✓ Build completed'))\n } catch (error) {\n p.log.error(pc.red('✗ Build failed'))\n if (error instanceof Error && options.debug) {\n log.error(`Build error: ${error.message}`)\n }\n process.exit(1)\n }\n\n // Verify build output\n buildInfo = await detectBuild(projectPath)\n if (!buildInfo) {\n p.log.error(pc.red('✗ Build completed but standalone build not found'))\n p.note('Ensure next.config.js has output: \"standalone\"', 'Check Lambda Configuration')\n process.exit(1)\n }\n }\n\n // ===== DEPLOYMENT PREPARATION =====\n\n // Create Lambda zip\n spinner.start('Creating deployment package...')\n try {\n await createLambdaZip(projectPath)\n spinner.stop(pc.green('✓ Deployment package created'))\n } catch (error) {\n spinner.stop(pc.red('✗ Failed to create deployment package'))\n throw error\n }\n\n // Collect static assets\n spinner.start('Collecting static assets...')\n const staticAssets = await collectStaticAssets(projectPath)\n const zipPath = path.join(projectPath, 'lambda.zip')\n const zipSize = await getFileSize(zipPath)\n spinner.stop(pc.green(`✓ ${staticAssets.length} static assets detected`))\n\n log.debug(`Lambda zip size: ${formatBytes(zipSize)}`)\n log.debug(`Static assets: ${staticAssets.length} files`)\n\n // ===== DEPLOYMENT CONFIRMATION =====\n\n if (!options.yes) {\n p.note(\n [\n `${pc.cyan('Build ID:')} ${buildInfo.buildId}`,\n `${pc.cyan('Date:')} ${formatDate(buildInfo.timestamp)}`,\n `${pc.cyan('Code size:')} ${formatBytes(zipSize)}`,\n `${pc.cyan('Static assets:')} ${staticAssets.length} files`,\n ].join('\\n'),\n 'Details',\n )\n }\n\n // ===== DEPLOYMENT EXECUTION =====\n\n // Step 1: Create deployment\n spinner.start('Creating deployment...')\n const createResponse = await createDeployment(accessToken, tenantId, {\n staticAssets,\n })\n\n const deploymentId = createResponse.deploymentId\n const codeUploadUrl = createResponse.codeUploadUrl\n const staticAssetUploadUrls = createResponse.staticAssetUploadUrls\n\n log.debug(`Deployment ID: ${deploymentId}`)\n\n // Step 2: Upload code\n spinner.message(`Uploading code (${formatBytes(zipSize)})...`)\n await uploadLambdaZip(zipPath, codeUploadUrl)\n spinner.stop(pc.green(`✓ Code uploaded (${formatBytes(zipSize)})`))\n\n // Step 3: Upload static assets\n if (staticAssets.length > 0) {\n spinner.start('Uploading static assets...')\n\n const uploadResults = await uploadStaticAssets(\n projectPath,\n staticAssetUploadUrls,\n (uploaded, total) => {\n spinner.message(`Uploading static assets (${uploaded}/${total})...`)\n },\n )\n\n if (uploadResults.assetsFailed > 0) {\n spinner.stop(\n pc.yellow(\n `⚠ ${uploadResults.assetsUploaded}/${staticAssets.length} assets uploaded (${uploadResults.assetsFailed} failed)`,\n ),\n )\n p.log.warning(\n `${uploadResults.assetsFailed} assets failed to upload. Deployment may be incomplete.`,\n )\n } else {\n spinner.stop(\n pc.green(\n `✓ Static assets uploaded (${uploadResults.assetsUploaded} files, ${formatBytes(uploadResults.totalBytesUploaded)})`,\n ),\n )\n }\n }\n\n // Step 4: Perform deployment\n spinner.start('Performing deployment...')\n const result = await performDeployment(accessToken, tenantId, {\n deploymentId,\n })\n const tenantDomains = result.tenantDomains ?? []\n spinner.stop(pc.green('✓ Deployment initiated'))\n\n // TODO: Add deployment progress tracking\n // Future: Poll deployment status and show progress\n // API endpoint: GET /v1/tenant/{tenant_id}/deploy/{deployment_id}/status\n\n // Success output\n if (tenantDomains.length > 0) {\n p.log.step(`URL: ${pc.cyan(`https://${tenantDomains[0]}`)}`)\n }\n p.log.step('This usually takes 2-3 minutes to complete.')\n } catch (error) {\n if (error instanceof ControlPlaneError) {\n spinner.stop(pc.red(`✗ ${error.message}`))\n if (error.statusCode) {\n p.log.message(pc.dim(` HTTP ${error.statusCode}`))\n }\n } else {\n const message = error instanceof Error ? error.message : 'Unknown error'\n spinner.stop(pc.red(`✗ ${message}`))\n }\n\n if (options.debug && error instanceof Error && error.stack) {\n log.error(`Stack trace: ${error.stack}`)\n }\n process.exit(1)\n }\n}\n"],"names":["p","spawn","path","pc","ControlPlaneError","createDeployment","performDeployment","getValidAccessToken","getTokenStore","collectStaticAssets","createLambdaZip","getFileSize","detectBuild","getBuildCommand","getEnvVar","log","getPackageManager","isInProjectDirectory","uploadLambdaZip","uploadStaticAssets","loginCommand","formatBytes","bytes","k","sizes","i","Math","floor","parseFloat","pow","toFixed","formatDate","date","toLocaleString","day","hour","minute","month","timeZoneName","year","deployCommand","options","projectPath","process","cwd","spinner","tenantId","id","undefined","error","red","exit","note","tokenStore","accessToken","message","buildInfo","skipBuild","start","stop","green","cyan","buildId","timestamp","join","buildCmd","packageManager","buildCommand","step","buildProcess","stdio","stdout","on","data","lines","toString","split","forEach","line","trim","console","dim","stderr","exitCode","Promise","resolve","Error","success","debug","staticAssets","zipPath","zipSize","length","yes","createResponse","deploymentId","codeUploadUrl","staticAssetUploadUrls","uploadResults","uploaded","total","assetsFailed","yellow","assetsUploaded","warning","totalBytesUploaded","result","tenantDomains","statusCode","stack"],"mappings":"AAAA,YAAYA,OAAO,iBAAgB;AACnC,OAAOC,WAAW,cAAa;AAC/B,OAAOC,UAAU,OAAM;AACvB,OAAOC,QAAQ,aAAY;AAE3B,SAASC,iBAAiB,EAAEC,gBAAgB,EAAEC,iBAAiB,QAAQ,0BAAyB;AAChG,SAASC,mBAAmB,QAAQ,wBAAuB;AAC3D,SAASC,aAAa,QAAQ,yBAAwB;AACtD,SAASC,mBAAmB,EAAEC,eAAe,EAAEC,WAAW,QAAQ,+BAA8B;AAChG,SAASC,WAAW,EAAEC,eAAe,QAAQ,8BAA6B;AAC1E,SAASC,SAAS,QAAQ,6BAA4B;AACtD,YAAYC,SAAS,kBAAiB;AACtC,SAASC,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,oBAAoB,QAAQ,sBAAqB;AAC1D,SAASC,eAAe,EAAEC,kBAAkB,QAAQ,wBAAuB;AAC3E,SAASC,YAAY,QAAQ,aAAY;AAgBzC;;CAEC,GACD,SAASC,YAAYC,KAAa;IAChC,IAAIA,UAAU,GAAG;QACf,OAAO;IACT;IACA,MAAMC,IAAI;IACV,MAAMC,QAAQ;QAAC;QAAK;QAAM;QAAM;KAAK;IACrC,MAAMC,IAAIC,KAAKC,KAAK,CAACD,KAAKX,GAAG,CAACO,SAASI,KAAKX,GAAG,CAACQ;IAChD,OAAO,GAAGK,WAAW,AAACN,CAAAA,QAAQI,KAAKG,GAAG,CAACN,GAAGE,EAAC,EAAGK,OAAO,CAAC,IAAI,CAAC,EAAEN,KAAK,CAACC,EAAE,EAAE;AACzE;AAEA;;CAEC,GACD,SAASM,WAAWC,IAAU;IAC5B,OAAOA,KAAKC,cAAc,CAAC,SAAS;QAClCC,KAAK;QACLC,MAAM;QACNC,QAAQ;QACRC,OAAO;QACPC,cAAc;QACdC,MAAM;IACR;AACF;AAEA;;;;CAIC,GACD,OAAO,eAAeC,cAAcC,OAA6B;IAC/D,MAAMC,cAAcC,QAAQC,GAAG;IAC/B,MAAMC,UAAU7C,EAAE6C,OAAO;IAEzB,IAAIC,WAAWL,QAAQM,EAAE;IACzB,IAAI,CAACD,UAAU;QACbA,WAAW,AAAC,MAAMhC,UAAU4B,aAAa,sBAAuBM;IAClE;IACA,IAAI,CAACF,UAAU;QACb9C,EAAEe,GAAG,CAACkC,KAAK,CAAC9C,GAAG+C,GAAG,CAAC;QACnBP,QAAQQ,IAAI,CAAC;IACf;IAEA,IAAI;QACF,gCAAgC;QAEhC,gCAAgC;QAChC,IAAI,CAAE,MAAMlC,qBAAqByB,cAAe;YAC9C1C,EAAEe,GAAG,CAACkC,KAAK,CAAC9C,GAAG+C,GAAG,CAAC;YACnBlD,EAAEoD,IAAI,CACJ,oFACA;YAEFT,QAAQQ,IAAI,CAAC;QACf;QAEA,uBAAuB;QACvB,MAAME,aAAa7C;QAEnB,IAAI8C,cAAc,MAAM/C,oBAAoB8C;QAC5C,IAAI,CAACC,aAAa;YAChBtD,EAAEe,GAAG,CAACwC,OAAO,CAAC;YACd,MAAMnC;YACNkC,cAAc,MAAM/C,oBAAoB8C;YACxC,IAAI,CAACC,aAAa;gBAChBtD,EAAEe,GAAG,CAACkC,KAAK,CAAC9C,GAAG+C,GAAG,CAAC;gBACnBP,QAAQQ,IAAI,CAAC;YACf;QACF;QAEA,oBAAoB;QAEpB,IAAIK;QAEJ,IAAIf,QAAQgB,SAAS,EAAE;YACrB,wCAAwC;YACxCZ,QAAQa,KAAK,CAAC;YACdF,YAAY,MAAM5C,YAAY8B;YAE9B,IAAI,CAACc,WAAW;gBACdX,QAAQc,IAAI,CAACxD,GAAG+C,GAAG,CAAC;gBACpBlD,EAAEe,GAAG,CAACkC,KAAK,CAAC;gBACZN,QAAQQ,IAAI,CAAC;YACf;YAEAN,QAAQc,IAAI,CAACxD,GAAGyD,KAAK,CAAC;YACtB5D,EAAEoD,IAAI,CACJ;gBACE,GAAGjD,GAAG0D,IAAI,CAAC,aAAa,CAAC,EAAEL,UAAUM,OAAO,EAAE;gBAC9C,GAAG3D,GAAG0D,IAAI,CAAC,SAAS,CAAC,EAAE9B,WAAWyB,UAAUO,SAAS,GAAG;aACzD,CAACC,IAAI,CAAC,OACP;QAEJ,OAAO;YACL,2BAA2B;YAC3B,MAAMC,WAAW,MAAMpD,gBAAgB6B;YAEvC,IAAI,CAACuB,UAAU;gBACbjE,EAAEe,GAAG,CAACkC,KAAK,CAAC;gBACZjD,EAAEoD,IAAI,CAAC,6DAA6D;gBACpET,QAAQQ,IAAI,CAAC;YACf;YAEA,MAAMe,iBAAiB,MAAMlD,kBAAkB0B;YAC/C,MAAMyB,eAAe,GAAGD,eAAe,UAAU,CAAC;YAClDlE,EAAEe,GAAG,CAACqD,IAAI,CAAC,CAAC,QAAQ,EAAED,aAAa,KAAK,CAAC;YAEzC,IAAI;gBACF,8CAA8C;gBAC9C,MAAME,eAAepE,MAAMiE,gBAAgB;oBAAC;oBAAO;iBAAQ,EAAE;oBAC3DtB,KAAKF;oBACL4B,OAAO;wBAAC;wBAAU;wBAAQ;qBAAO;gBACnC;gBAEA,wBAAwB;gBACxBD,aAAaE,MAAM,EAAEC,GAAG,QAAQ,CAACC;oBAC/B,MAAMC,QAAQD,KAAKE,QAAQ,GAAGC,KAAK,CAAC;oBACpCF,MAAMG,OAAO,CAAC,CAACC;wBACb,IAAIA,KAAKC,IAAI,IAAI;4BACf,sCAAsC;4BACtCC,QAAQjE,GAAG,CAACZ,GAAG8E,GAAG,CAAC,CAAC,MAAM,EAAEH,MAAM;wBACpC;oBACF;gBACF;gBAEAT,aAAaa,MAAM,EAAEV,GAAG,QAAQ,CAACC;oBAC/B,MAAMC,QAAQD,KAAKE,QAAQ,GAAGC,KAAK,CAAC;oBACpCF,MAAMG,OAAO,CAAC,CAACC;wBACb,IAAIA,KAAKC,IAAI,IAAI;4BACf,sCAAsC;4BACtCC,QAAQjE,GAAG,CAACZ,GAAG8E,GAAG,CAAC,CAAC,MAAM,EAAEH,MAAM;wBACpC;oBACF;gBACF;gBAEA,MAAMK,WAAW,MAAM,IAAIC,QAAgB,CAACC;oBAC1ChB,aAAaG,EAAE,CAAC,SAASa;gBAC3B;gBAEA,IAAIF,aAAa,GAAG;oBAClB,MAAM,IAAIG,MAAM,CAAC,+BAA+B,EAAEH,UAAU;gBAC9D;gBAEAnF,EAAEe,GAAG,CAACwE,OAAO,CAACpF,GAAGyD,KAAK,CAAC;YACzB,EAAE,OAAOX,OAAO;gBACdjD,EAAEe,GAAG,CAACkC,KAAK,CAAC9C,GAAG+C,GAAG,CAAC;gBACnB,IAAID,iBAAiBqC,SAAS7C,QAAQ+C,KAAK,EAAE;oBAC3CzE,IAAIkC,KAAK,CAAC,CAAC,aAAa,EAAEA,MAAMM,OAAO,EAAE;gBAC3C;gBACAZ,QAAQQ,IAAI,CAAC;YACf;YAEA,sBAAsB;YACtBK,YAAY,MAAM5C,YAAY8B;YAC9B,IAAI,CAACc,WAAW;gBACdxD,EAAEe,GAAG,CAACkC,KAAK,CAAC9C,GAAG+C,GAAG,CAAC;gBACnBlD,EAAEoD,IAAI,CAAC,kDAAkD;gBACzDT,QAAQQ,IAAI,CAAC;YACf;QACF;QAEA,qCAAqC;QAErC,oBAAoB;QACpBN,QAAQa,KAAK,CAAC;QACd,IAAI;YACF,MAAMhD,gBAAgBgC;YACtBG,QAAQc,IAAI,CAACxD,GAAGyD,KAAK,CAAC;QACxB,EAAE,OAAOX,OAAO;YACdJ,QAAQc,IAAI,CAACxD,GAAG+C,GAAG,CAAC;YACpB,MAAMD;QACR;QAEA,wBAAwB;QACxBJ,QAAQa,KAAK,CAAC;QACd,MAAM+B,eAAe,MAAMhF,oBAAoBiC;QAC/C,MAAMgD,UAAUxF,KAAK8D,IAAI,CAACtB,aAAa;QACvC,MAAMiD,UAAU,MAAMhF,YAAY+E;QAClC7C,QAAQc,IAAI,CAACxD,GAAGyD,KAAK,CAAC,CAAC,EAAE,EAAE6B,aAAaG,MAAM,CAAC,uBAAuB,CAAC;QAEvE7E,IAAIyE,KAAK,CAAC,CAAC,iBAAiB,EAAEnE,YAAYsE,UAAU;QACpD5E,IAAIyE,KAAK,CAAC,CAAC,eAAe,EAAEC,aAAaG,MAAM,CAAC,MAAM,CAAC;QAEvD,sCAAsC;QAEtC,IAAI,CAACnD,QAAQoD,GAAG,EAAE;YAChB7F,EAAEoD,IAAI,CACJ;gBACE,GAAGjD,GAAG0D,IAAI,CAAC,aAAa,CAAC,EAAEL,UAAUM,OAAO,EAAE;gBAC9C,GAAG3D,GAAG0D,IAAI,CAAC,SAAS,CAAC,EAAE9B,WAAWyB,UAAUO,SAAS,GAAG;gBACxD,GAAG5D,GAAG0D,IAAI,CAAC,cAAc,CAAC,EAAExC,YAAYsE,UAAU;gBAClD,GAAGxF,GAAG0D,IAAI,CAAC,kBAAkB,CAAC,EAAE4B,aAAaG,MAAM,CAAC,MAAM,CAAC;aAC5D,CAAC5B,IAAI,CAAC,OACP;QAEJ;QAEA,mCAAmC;QAEnC,4BAA4B;QAC5BnB,QAAQa,KAAK,CAAC;QACd,MAAMoC,iBAAiB,MAAMzF,iBAAiBiD,aAAaR,UAAU;YACnE2C;QACF;QAEA,MAAMM,eAAeD,eAAeC,YAAY;QAChD,MAAMC,gBAAgBF,eAAeE,aAAa;QAClD,MAAMC,wBAAwBH,eAAeG,qBAAqB;QAElElF,IAAIyE,KAAK,CAAC,CAAC,eAAe,EAAEO,cAAc;QAE1C,sBAAsB;QACtBlD,QAAQU,OAAO,CAAC,CAAC,gBAAgB,EAAElC,YAAYsE,SAAS,IAAI,CAAC;QAC7D,MAAMzE,gBAAgBwE,SAASM;QAC/BnD,QAAQc,IAAI,CAACxD,GAAGyD,KAAK,CAAC,CAAC,iBAAiB,EAAEvC,YAAYsE,SAAS,CAAC,CAAC;QAEjE,+BAA+B;QAC/B,IAAIF,aAAaG,MAAM,GAAG,GAAG;YAC3B/C,QAAQa,KAAK,CAAC;YAEd,MAAMwC,gBAAgB,MAAM/E,mBAC1BuB,aACAuD,uBACA,CAACE,UAAUC;gBACTvD,QAAQU,OAAO,CAAC,CAAC,yBAAyB,EAAE4C,SAAS,CAAC,EAAEC,MAAM,IAAI,CAAC;YACrE;YAGF,IAAIF,cAAcG,YAAY,GAAG,GAAG;gBAClCxD,QAAQc,IAAI,CACVxD,GAAGmG,MAAM,CACP,CAAC,EAAE,EAAEJ,cAAcK,cAAc,CAAC,CAAC,EAAEd,aAAaG,MAAM,CAAC,kBAAkB,EAAEM,cAAcG,YAAY,CAAC,QAAQ,CAAC;gBAGrHrG,EAAEe,GAAG,CAACyF,OAAO,CACX,GAAGN,cAAcG,YAAY,CAAC,uDAAuD,CAAC;YAE1F,OAAO;gBACLxD,QAAQc,IAAI,CACVxD,GAAGyD,KAAK,CACN,CAAC,0BAA0B,EAAEsC,cAAcK,cAAc,CAAC,QAAQ,EAAElF,YAAY6E,cAAcO,kBAAkB,EAAE,CAAC,CAAC;YAG1H;QACF;QAEA,6BAA6B;QAC7B5D,QAAQa,KAAK,CAAC;QACd,MAAMgD,SAAS,MAAMpG,kBAAkBgD,aAAaR,UAAU;YAC5DiD;QACF;QACA,MAAMY,gBAAgBD,OAAOC,aAAa,IAAI,EAAE;QAChD9D,QAAQc,IAAI,CAACxD,GAAGyD,KAAK,CAAC;QAEtB,yCAAyC;QACzC,mDAAmD;QACnD,yEAAyE;QAEzE,iBAAiB;QACjB,IAAI+C,cAAcf,MAAM,GAAG,GAAG;YAC5B5F,EAAEe,GAAG,CAACqD,IAAI,CAAC,CAAC,KAAK,EAAEjE,GAAG0D,IAAI,CAAC,CAAC,QAAQ,EAAE8C,aAAa,CAAC,EAAE,EAAE,GAAG;QAC7D;QACA3G,EAAEe,GAAG,CAACqD,IAAI,CAAC;IACb,EAAE,OAAOnB,OAAO;QACd,IAAIA,iBAAiB7C,mBAAmB;YACtCyC,QAAQc,IAAI,CAACxD,GAAG+C,GAAG,CAAC,CAAC,EAAE,EAAED,MAAMM,OAAO,EAAE;YACxC,IAAIN,MAAM2D,UAAU,EAAE;gBACpB5G,EAAEe,GAAG,CAACwC,OAAO,CAACpD,GAAG8E,GAAG,CAAC,CAAC,OAAO,EAAEhC,MAAM2D,UAAU,EAAE;YACnD;QACF,OAAO;YACL,MAAMrD,UAAUN,iBAAiBqC,QAAQrC,MAAMM,OAAO,GAAG;YACzDV,QAAQc,IAAI,CAACxD,GAAG+C,GAAG,CAAC,CAAC,EAAE,EAAEK,SAAS;QACpC;QAEA,IAAId,QAAQ+C,KAAK,IAAIvC,iBAAiBqC,SAASrC,MAAM4D,KAAK,EAAE;YAC1D9F,IAAIkC,KAAK,CAAC,CAAC,aAAa,EAAEA,MAAM4D,KAAK,EAAE;QACzC;QACAlE,QAAQQ,IAAI,CAAC;IACf;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/commands/deploy.ts"],"sourcesContent":["import * as p from '@clack/prompts'\nimport { spawn } from 'child_process'\nimport path from 'path'\nimport pc from 'picocolors'\nimport { Project } from 'ts-morph'\n\nimport { createDeployment, getTenantDetails, performDeployment } from '../api/control-plane.js'\nimport { getValidAccessToken } from '../auth/oauth-flow.js'\nimport { getValidProjectToken } from '../auth/project-token.js'\nimport { TokenStore } from '../auth/token-store.js'\nimport { collectStaticAssets, createLambdaZip, getFileSize } from '../utils/asset-collection.js'\nimport { detectBuild, getBuildCommand } from '../utils/build-detection.js'\nimport * as log from '../utils/log.js'\nimport { getPackageManager } from '../utils/package-manager.js'\nimport { readFigmaConfig } from '../utils/payload-config-ast.js'\nimport { findPayloadConfig } from '../utils/payload-config-finder.js'\nimport { isInProjectDirectory } from '../utils/project.js'\nimport { uploadLambdaZip, uploadStaticAssets } from '../utils/s3-upload.js'\nimport { loginCommand } from './login.js'\n\n/**\n * Options for deploy command\n */\nexport interface DeployCommandOptions {\n /** Enable debug mode */\n debug?: boolean\n /** Skip confirmation prompts */\n yes?: boolean\n}\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 B'\n }\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`\n}\n\n/**\n * Format date to human-readable string in local time\n */\nfunction formatDate(date: Date): string {\n return date.toLocaleString('en-US', {\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n month: 'long',\n timeZoneName: 'short',\n year: 'numeric',\n })\n}\n\n/**\n * Execute the deploy command\n *\n * @param options - Command options\n */\nexport async function deployCommand(options: DeployCommandOptions): Promise<void> {\n const projectPath = process.cwd()\n const spinner = p.spinner()\n\n try {\n // ===== PRE-FLIGHT CHECKS =====\n\n // Check if in project directory\n if (!(await isInProjectDirectory(projectPath))) {\n p.log.error(pc.red(\"✗ 'deploy' command is not available outside of a Payload project.\"))\n p.note(\n 'Create a project or connect an existing one to Figma: npx @payloadcms/figma init',\n 'Tip',\n )\n process.exit(1)\n }\n\n // Find and read payload config\n const configPath = await findPayloadConfig(projectPath)\n if (!configPath) {\n p.log.error(pc.red('✗ payload.config.ts not found'))\n p.note('Run npx @payloadcms/figma init to configure your project.', 'Tip')\n process.exit(1)\n }\n\n // Parse config with ts-morph\n const project = new Project({ skipAddingFilesFromTsConfig: true })\n const sourceFile = project.addSourceFileAtPath(configPath)\n\n // Read figma configuration from buildConfig\n const config = readFigmaConfig(sourceFile)\n if (!config || !config.tenantId) {\n p.log.error(pc.red('✗ No figma configuration found in payload.config.ts'))\n p.note('Run npx @payloadcms/figma init to configure your project.', 'Tip')\n process.exit(1)\n }\n\n // Check authentication\n const tokenStore = new TokenStore()\n\n let accessToken = await getValidAccessToken(tokenStore)\n if (!accessToken) {\n p.log.message('Please log in to continue')\n await loginCommand()\n accessToken = await getValidAccessToken(tokenStore)\n if (!accessToken) {\n p.log.error(pc.red('✗ Authentication failed'))\n process.exit(1)\n }\n }\n\n // Get project token\n try {\n await getValidProjectToken(tokenStore, config.tenantId)\n } catch (error) {\n p.log.error(pc.yellow('⚠ Project token invalid'))\n throw error\n }\n\n // ===== BUILD VALIDATION =====\n\n spinner.start('Checking for build...')\n let buildInfo = await detectBuild(projectPath)\n\n if (!buildInfo) {\n spinner.stop(pc.yellow('⚠ No build found for this project.'))\n\n // Try to find build command\n const buildCmd = await getBuildCommand(projectPath)\n\n if (!buildCmd) {\n p.log.error('No build script found in package.json')\n p.note('Add a build script to package.json: \"build\": \"next build\"', 'Tip')\n process.exit(1)\n }\n\n // Prompt to run build\n if (!options.yes) {\n const shouldBuild = await p.confirm({\n initialValue: true,\n message: `Build command found in package.json. Run it?`,\n })\n\n if (p.isCancel(shouldBuild) || !shouldBuild) {\n p.log.message('Cancelling deployment...')\n process.exit(0)\n }\n }\n\n // Run build\n const packageManager = await getPackageManager(projectPath)\n const buildCommand = `${packageManager} run build`\n spinner.stop(`Running ${buildCommand}...\\n`)\n\n try {\n // Stream build output to user with formatting\n const buildProcess = spawn(packageManager, ['run', 'build'], {\n cwd: projectPath,\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n\n // Indent and dim output\n buildProcess.stdout?.on('data', (data) => {\n const lines = data.toString().split('\\n')\n lines.forEach((line: string) => {\n if (line.trim()) {\n // eslint-disable-next-line no-console\n console.log(pc.dim(` ${line}`)) // Standard output\n }\n })\n })\n\n buildProcess.stderr?.on('data', (data) => {\n const lines = data.toString().split('\\n')\n lines.forEach((line: string) => {\n if (line.trim()) {\n // eslint-disable-next-line no-console\n console.log(pc.dim(` ${line}`)) // Standard error\n }\n })\n })\n\n const exitCode = await new Promise<number>((resolve) => {\n buildProcess.on('close', resolve)\n })\n\n if (exitCode !== 0) {\n throw new Error(`Build process exited with code ${exitCode}`)\n }\n\n p.log.success(pc.green('✓ Build completed'))\n } catch (error) {\n p.log.error(pc.red('✗ Build failed'))\n if (error instanceof Error && options.debug) {\n log.error(`Build error: ${error.message}`)\n }\n process.exit(1)\n }\n\n // Re-check for build\n buildInfo = await detectBuild(projectPath)\n if (!buildInfo) {\n p.log.error(pc.red('✗ Build completed but standalone build not found'))\n p.note('Ensure next.config.js has output: \"standalone\"', 'Check Lambda Configuration')\n process.exit(1)\n }\n } else {\n spinner.stop(pc.green('✓ Build found'))\n p.note(\n [\n `${pc.cyan('Build ID:')} ${buildInfo.buildId}`,\n `${pc.cyan('Date:')} ${formatDate(buildInfo.timestamp)}`,\n ].join('\\n'),\n 'Build Details',\n )\n }\n\n // ===== DEPLOYMENT PREPARATION =====\n\n // Create Lambda zip\n spinner.start('Creating deployment package...')\n try {\n await createLambdaZip(projectPath)\n spinner.stop(pc.green('✓ Deployment package created'))\n } catch (error) {\n spinner.stop(pc.red('✗ Failed to create deployment package'))\n throw error\n }\n\n // Collect static assets\n spinner.start('Collecting static assets...')\n const staticAssets = await collectStaticAssets(projectPath)\n const zipPath = path.join(projectPath, 'lambda.zip')\n const zipSize = await getFileSize(zipPath)\n spinner.stop(pc.green(`✓ ${staticAssets.length} static assets detected`))\n\n log.debug(`Lambda zip size: ${formatBytes(zipSize)}`)\n log.debug(`Static assets: ${staticAssets.length} files`)\n\n // ===== DEPLOYMENT CONFIRMATION =====\n\n if (!options.yes) {\n p.note(\n [\n `${pc.cyan('Build ID:')} ${buildInfo.buildId}`,\n `${pc.cyan('Date:')} ${formatDate(buildInfo.timestamp)}`,\n `${pc.cyan('Code size:')} ${formatBytes(zipSize)}`,\n `${pc.cyan('Static assets:')} ${staticAssets.length} files`,\n ].join('\\n'),\n 'Details',\n )\n\n const shouldDeploy = await p.confirm({\n initialValue: true,\n message: 'Deploy this build to Figma?',\n })\n\n if (p.isCancel(shouldDeploy) || !shouldDeploy) {\n p.log.message('Cancelling deployment...')\n process.exit(0)\n }\n }\n\n // ===== DEPLOYMENT EXECUTION =====\n\n // Step 1: Create deployment\n spinner.start('Creating deployment...')\n let deploymentId: string\n let codeUploadUrl: string\n let staticAssetUploadUrls: Record<string, string>\n\n try {\n const createResponse = await createDeployment(accessToken, config.tenantId, {\n staticAssets,\n })\n\n deploymentId = createResponse.deploymentId\n codeUploadUrl = createResponse.codeUploadUrl\n staticAssetUploadUrls = createResponse.staticAssetUploadUrls\n\n log.debug(`Deployment ID: ${deploymentId}`)\n } catch (error) {\n spinner.stop(pc.red('✗ Failed to create deployment'))\n throw error\n }\n\n // Step 2: Upload code\n spinner.message(`Uploading code (${formatBytes(zipSize)})...`)\n try {\n await uploadLambdaZip(zipPath, codeUploadUrl)\n spinner.stop(pc.green(`✓ Code uploaded (${formatBytes(zipSize)})`))\n } catch (error) {\n spinner.stop(pc.red('✗ Failed to upload code'))\n throw error\n }\n\n // Step 3: Upload static assets\n if (staticAssets.length > 0) {\n spinner.start('Uploading static assets...')\n\n try {\n const uploadResults = await uploadStaticAssets(\n projectPath,\n staticAssetUploadUrls,\n (uploaded, total) => {\n spinner.message(`Uploading static assets (${uploaded}/${total})...`)\n },\n )\n\n if (uploadResults.assetsFailed > 0) {\n spinner.stop(\n pc.yellow(\n `⚠ ${uploadResults.assetsUploaded}/${staticAssets.length} assets uploaded (${uploadResults.assetsFailed} failed)`,\n ),\n )\n p.log.warning(\n `${uploadResults.assetsFailed} assets failed to upload. Deployment may be incomplete.`,\n )\n } else {\n spinner.stop(\n pc.green(\n `✓ Static assets uploaded (${uploadResults.assetsUploaded} files, ${formatBytes(uploadResults.totalBytesUploaded)})`,\n ),\n )\n }\n } catch (error) {\n spinner.stop(pc.red('✗ Failed to upload assets'))\n throw error\n }\n }\n\n // Step 4: Perform deployment\n spinner.start('Performing deployment...')\n try {\n await performDeployment(accessToken, config.tenantId, {\n deploymentId,\n })\n spinner.stop(pc.green('✓ Deployment initiated'))\n } catch (error) {\n spinner.stop(pc.red('✗ Failed to perform deployment'))\n throw error\n }\n\n // TODO: Add deployment progress tracking\n // Future: Poll deployment status and show progress\n // API endpoint: GET /v1/tenant/{tenant_id}/deploy/{deployment_id}/status\n\n // Success output\n p.log.message('This usually takes 2-3 minutes to complete.')\n\n // Get tenant details for URL\n try {\n const tenant = await getTenantDetails(accessToken, config.tenantId)\n if (tenant.domain) {\n p.log.message(`View: ${pc.cyan(`https://${tenant.domain}/`)}`)\n }\n } catch {\n // Non-critical - just skip URL display\n }\n\n p.note(\n `Manage your deployment at:\\n${pc.cyan(`https://cms.figma.com/manage/tenants/${config.tenantId}`)}`,\n 'Next Steps',\n )\n } catch (error) {\n spinner.stop(pc.red('✗ Failed'))\n const message = error instanceof Error ? error.message : 'Unknown error'\n p.log.error(pc.red(`✗ ${message}`))\n if (options.debug && error instanceof Error && error.stack) {\n log.error(`Stack trace: ${error.stack}`)\n }\n process.exit(1)\n }\n}\n"],"names":["p","spawn","path","pc","Project","createDeployment","getTenantDetails","performDeployment","getValidAccessToken","getValidProjectToken","TokenStore","collectStaticAssets","createLambdaZip","getFileSize","detectBuild","getBuildCommand","log","getPackageManager","readFigmaConfig","findPayloadConfig","isInProjectDirectory","uploadLambdaZip","uploadStaticAssets","loginCommand","formatBytes","bytes","k","sizes","i","Math","floor","parseFloat","pow","toFixed","formatDate","date","toLocaleString","day","hour","minute","month","timeZoneName","year","deployCommand","options","projectPath","process","cwd","spinner","error","red","note","exit","configPath","project","skipAddingFilesFromTsConfig","sourceFile","addSourceFileAtPath","config","tenantId","tokenStore","accessToken","message","yellow","start","buildInfo","stop","buildCmd","yes","shouldBuild","confirm","initialValue","isCancel","packageManager","buildCommand","buildProcess","stdio","stdout","on","data","lines","toString","split","forEach","line","trim","console","dim","stderr","exitCode","Promise","resolve","Error","success","green","debug","cyan","buildId","timestamp","join","staticAssets","zipPath","zipSize","length","shouldDeploy","deploymentId","codeUploadUrl","staticAssetUploadUrls","createResponse","uploadResults","uploaded","total","assetsFailed","assetsUploaded","warning","totalBytesUploaded","tenant","domain","stack"],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -6,10 +6,14 @@ export interface InitCommandOptions {
|
|
|
6
6
|
debug?: boolean;
|
|
7
7
|
/** Force reconfiguration of existing project */
|
|
8
8
|
force?: boolean;
|
|
9
|
-
/**
|
|
9
|
+
/** Tenant ID to use (optional - will prompt if not provided) */
|
|
10
10
|
id?: string;
|
|
11
11
|
/** Project name (for scaffolding) */
|
|
12
12
|
name?: string;
|
|
13
|
+
/** Disable Content System (defaults to enabled) */
|
|
14
|
+
noContentSystem?: boolean;
|
|
15
|
+
/** AWS region for deployment (defaults to us-east-1) */
|
|
16
|
+
region?: string;
|
|
13
17
|
/** Skip authentication check (for testing/development) */
|
|
14
18
|
skipAuth?: boolean;
|
|
15
19
|
/** Skip prompts and use defaults where possible */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA6BA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gEAAgE;IAChE,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mDAAmD;IACnD,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAiDD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmW5E"}
|