@sanity/cli 7.10.0 → 7.12.0
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/README.md +31 -22
- package/dist/actions/auth/ensureAuthenticated.js +2 -0
- package/dist/actions/auth/ensureAuthenticated.js.map +1 -1
- package/dist/actions/auth/login/loginInstructions.js +19 -0
- package/dist/actions/auth/login/loginInstructions.js.map +1 -0
- package/dist/actions/build/buildApp.js +10 -7
- package/dist/actions/build/buildApp.js.map +1 -1
- package/dist/actions/build/buildStudio.js +9 -6
- package/dist/actions/build/buildStudio.js.map +1 -1
- package/dist/actions/build/types.js.map +1 -1
- package/dist/actions/dataset/resolveDataset.js +7 -1
- package/dist/actions/dataset/resolveDataset.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +205 -157
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/deploy/deployChecks.js +1 -1
- package/dist/actions/deploy/deployChecks.js.map +1 -1
- package/dist/actions/deploy/deployStudio.js +127 -86
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/deploy/resolveDeployTarget.js +5 -9
- package/dist/actions/deploy/resolveDeployTarget.js.map +1 -1
- package/dist/actions/dev/devAction.js +1 -2
- package/dist/actions/dev/devAction.js.map +1 -1
- package/dist/actions/dev/servers/getDevServerConfig.js +8 -2
- package/dist/actions/dev/servers/getDevServerConfig.js.map +1 -1
- package/dist/actions/graphql/resolveApiGeneration.js +9 -6
- package/dist/actions/graphql/resolveApiGeneration.js.map +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js +18 -9
- package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
- package/dist/actions/init/createAppCliConfig.js.map +1 -1
- package/dist/actions/init/createCliConfig.js.map +1 -1
- package/dist/actions/init/initAction.js +23 -15
- package/dist/actions/init/initAction.js.map +1 -1
- package/dist/actions/manifest/extractCoreAppManifest.js +5 -3
- package/dist/actions/manifest/extractCoreAppManifest.js.map +1 -1
- package/dist/actions/migration/constants.js +10 -0
- package/dist/actions/migration/constants.js.map +1 -0
- package/dist/actions/migration/ensureApiVersionFormat.js +16 -0
- package/dist/actions/migration/ensureApiVersionFormat.js.map +1 -0
- package/dist/actions/migration/fileExists.js +13 -0
- package/dist/actions/migration/fileExists.js.map +1 -0
- package/dist/actions/migration/prettyMutationFormatter.js +155 -0
- package/dist/actions/migration/prettyMutationFormatter.js.map +1 -0
- package/dist/actions/migration/resolveMigrationScript.js +75 -0
- package/dist/actions/migration/resolveMigrationScript.js.map +1 -0
- package/dist/actions/migration/resolveMigrations.js +50 -0
- package/dist/actions/migration/resolveMigrations.js.map +1 -0
- package/dist/actions/migration/templates/index.js +7 -0
- package/dist/actions/migration/templates/index.js.map +1 -0
- package/dist/actions/migration/templates/minimalAdvanced.js +21 -0
- package/dist/actions/migration/templates/minimalAdvanced.js.map +1 -0
- package/dist/actions/migration/templates/minimalSimple.js +61 -0
- package/dist/actions/migration/templates/minimalSimple.js.map +1 -0
- package/dist/actions/migration/templates/renameField.js +20 -0
- package/dist/actions/migration/templates/renameField.js.map +1 -0
- package/dist/actions/migration/templates/renameType.js +19 -0
- package/dist/actions/migration/templates/renameType.js.map +1 -0
- package/dist/actions/migration/templates/stringToPTE.js +32 -0
- package/dist/actions/migration/templates/stringToPTE.js.map +1 -0
- package/dist/actions/migration/tree.js +111 -0
- package/dist/actions/migration/tree.js.map +1 -0
- package/dist/actions/preview/previewAction.js +33 -1
- package/dist/actions/preview/previewAction.js.map +1 -1
- package/dist/actions/schema/listSchemas.js +6 -4
- package/dist/actions/schema/listSchemas.js.map +1 -1
- package/dist/actions/tokens/validateRole.js +2 -1
- package/dist/actions/tokens/validateRole.js.map +1 -1
- package/dist/actions/undeploy/runUndeploy.js +13 -4
- package/dist/actions/undeploy/runUndeploy.js.map +1 -1
- package/dist/commands/backups/disable.js +5 -1
- package/dist/commands/backups/disable.js.map +1 -1
- package/dist/commands/backups/download.js +30 -6
- package/dist/commands/backups/download.js.map +1 -1
- package/dist/commands/backups/enable.js +5 -1
- package/dist/commands/backups/enable.js.map +1 -1
- package/dist/commands/backups/list.js +5 -1
- package/dist/commands/backups/list.js.map +1 -1
- package/dist/commands/cors/add.js +15 -7
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +6 -1
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/datasets/alias/create.js +25 -18
- package/dist/commands/datasets/alias/create.js.map +1 -1
- package/dist/commands/datasets/alias/delete.js +15 -8
- package/dist/commands/datasets/alias/delete.js.map +1 -1
- package/dist/commands/datasets/alias/link.js +39 -17
- package/dist/commands/datasets/alias/link.js.map +1 -1
- package/dist/commands/datasets/alias/unlink.js +23 -2
- package/dist/commands/datasets/alias/unlink.js.map +1 -1
- package/dist/commands/datasets/copy.js +18 -2
- package/dist/commands/datasets/copy.js.map +1 -1
- package/dist/commands/datasets/create.js +8 -2
- package/dist/commands/datasets/create.js.map +1 -1
- package/dist/commands/datasets/delete.js +14 -17
- package/dist/commands/datasets/delete.js.map +1 -1
- package/dist/commands/datasets/embeddings/disable.js +3 -0
- package/dist/commands/datasets/embeddings/disable.js.map +1 -1
- package/dist/commands/datasets/embeddings/enable.js +5 -2
- package/dist/commands/datasets/embeddings/enable.js.map +1 -1
- package/dist/commands/datasets/embeddings/status.js +3 -0
- package/dist/commands/datasets/embeddings/status.js.map +1 -1
- package/dist/commands/datasets/export.js +27 -15
- package/dist/commands/datasets/export.js.map +1 -1
- package/dist/commands/datasets/import.js +3 -3
- package/dist/commands/datasets/import.js.map +1 -1
- package/dist/commands/datasets/visibility/get.js +2 -2
- package/dist/commands/datasets/visibility/get.js.map +1 -1
- package/dist/commands/datasets/visibility/set.js +2 -2
- package/dist/commands/datasets/visibility/set.js.map +1 -1
- package/dist/commands/docs/read.js +3 -3
- package/dist/commands/docs/read.js.map +1 -1
- package/dist/commands/documents/create.js +18 -13
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +3 -3
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +3 -3
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +3 -3
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +29 -26
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/deploy.js +20 -16
- package/dist/commands/graphql/deploy.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +15 -18
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hooks/delete.js +2 -2
- package/dist/commands/hooks/delete.js.map +1 -1
- package/dist/commands/hooks/logs.js +2 -2
- package/dist/commands/hooks/logs.js.map +1 -1
- package/dist/commands/login.js +2 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/media/create-aspect.js +20 -8
- package/dist/commands/media/create-aspect.js.map +1 -1
- package/dist/commands/media/delete-aspect.js +31 -16
- package/dist/commands/media/delete-aspect.js.map +1 -1
- package/dist/commands/media/deploy-aspect.js +10 -5
- package/dist/commands/media/deploy-aspect.js.map +1 -1
- package/dist/commands/media/export.js +9 -4
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +6 -1
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/migrations/create.js +150 -0
- package/dist/commands/migrations/create.js.map +1 -0
- package/dist/commands/migrations/list.js +64 -0
- package/dist/commands/migrations/list.js.map +1 -0
- package/dist/commands/migrations/run.js +306 -0
- package/dist/commands/migrations/run.js.map +1 -0
- package/dist/commands/preview.js +1 -0
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/projects/create.js +2 -1
- package/dist/commands/projects/create.js.map +1 -1
- package/dist/commands/schemas/delete.js +23 -2
- package/dist/commands/schemas/delete.js.map +1 -1
- package/dist/commands/schemas/deploy.js +6 -4
- package/dist/commands/schemas/deploy.js.map +1 -1
- package/dist/commands/schemas/extract.js +22 -1
- package/dist/commands/schemas/extract.js.map +1 -1
- package/dist/commands/schemas/list.js +8 -8
- package/dist/commands/schemas/list.js.map +1 -1
- package/dist/commands/tokens/{add.js → create.js} +25 -18
- package/dist/commands/tokens/create.js.map +1 -0
- package/dist/commands/tokens/delete.js +41 -23
- package/dist/commands/tokens/delete.js.map +1 -1
- package/dist/commands/undeploy.js +2 -7
- package/dist/commands/undeploy.js.map +1 -1
- package/dist/commands/users/invite.js +25 -3
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/topicAliases.js +3 -0
- package/dist/topicAliases.js.map +1 -1
- package/dist/util/formatCliErrorMessages.js +5 -0
- package/dist/util/formatCliErrorMessages.js.map +1 -0
- package/oclif.config.js +5 -1
- package/oclif.manifest.json +579 -374
- package/package.json +7 -7
- package/dist/commands/tokens/add.js.map +0 -1
package/README.md
CHANGED
|
@@ -113,7 +113,7 @@ Code for sanity cli
|
|
|
113
113
|
- [`sanity telemetry disable`](#sanity-telemetry-disable)
|
|
114
114
|
- [`sanity telemetry enable`](#sanity-telemetry-enable)
|
|
115
115
|
- [`sanity telemetry status`](#sanity-telemetry-status)
|
|
116
|
-
- [`sanity tokens
|
|
116
|
+
- [`sanity tokens create [LABEL]`](#sanity-tokens-create-label)
|
|
117
117
|
- [`sanity tokens delete [TOKENID]`](#sanity-tokens-delete-tokenid)
|
|
118
118
|
- [`sanity tokens list`](#sanity-tokens-list)
|
|
119
119
|
- [`sanity typegen generate`](#sanity-typegen-generate)
|
|
@@ -807,13 +807,14 @@ Add a CORS origin to the project
|
|
|
807
807
|
|
|
808
808
|
```
|
|
809
809
|
USAGE
|
|
810
|
-
$ sanity cors add ORIGIN [-p <id>] [--credentials]
|
|
810
|
+
$ sanity cors add ORIGIN [-p <id>] [--credentials] [-y]
|
|
811
811
|
|
|
812
812
|
ARGUMENTS
|
|
813
813
|
ORIGIN Origin to allow (e.g., https://example.com)
|
|
814
814
|
|
|
815
815
|
FLAGS
|
|
816
|
-
|
|
816
|
+
-y, --yes Confirm risky wildcard origins without prompting
|
|
817
|
+
--[no-]credentials Allow credentials (token/cookie) to be sent from this origin
|
|
817
818
|
|
|
818
819
|
OVERRIDE FLAGS
|
|
819
820
|
-p, --project-id=<id> Project ID to add CORS origin to (overrides CLI configuration)
|
|
@@ -1806,8 +1807,9 @@ Validate documents in a dataset against the studio schema
|
|
|
1806
1807
|
|
|
1807
1808
|
```
|
|
1808
1809
|
USAGE
|
|
1809
|
-
$ sanity documents validate [-p <id>] [-d <name>] [--file <value>] [--format
|
|
1810
|
-
[--max-custom-validation-concurrency <value>] [--max-fetch-concurrency <value>] [--workspace
|
|
1810
|
+
$ sanity documents validate [-p <id>] [-d <name>] [--file <value>] [--format json|ndjson|pretty] [--level
|
|
1811
|
+
error|warning|info] [--max-custom-validation-concurrency <value>] [--max-fetch-concurrency <value>] [--workspace
|
|
1812
|
+
<value>] [-y]
|
|
1811
1813
|
|
|
1812
1814
|
FLAGS
|
|
1813
1815
|
-d, --dataset=<name> Override the dataset used. By default, this is derived from the given
|
|
@@ -1815,10 +1817,11 @@ FLAGS
|
|
|
1815
1817
|
-p, --project-id=<id> Override the project ID used. By default, this is derived from the
|
|
1816
1818
|
given workspace
|
|
1817
1819
|
-y, --yes Skips the first confirmation prompt
|
|
1818
|
-
--file=<value>
|
|
1819
|
-
|
|
1820
|
-
--format=<
|
|
1820
|
+
--file=<value> Path to an NDJSON file or tar archive containing an NDJSON file
|
|
1821
|
+
(optionally gzip-compressed)
|
|
1822
|
+
--format=<option> The output format used to print the found validation markers and
|
|
1821
1823
|
report progress
|
|
1824
|
+
<options: json|ndjson|pretty>
|
|
1822
1825
|
--level=<option> [default: warning] The minimum level reported. Defaults to warning
|
|
1823
1826
|
<options: error|warning|info>
|
|
1824
1827
|
--max-custom-validation-concurrency=<value> [default: 5] Specify how many custom validators can run concurrently
|
|
@@ -2529,7 +2532,7 @@ USAGE
|
|
|
2529
2532
|
|
|
2530
2533
|
FLAGS
|
|
2531
2534
|
--[no-]open Open a browser window to log in (`--no-open` only prints URL)
|
|
2532
|
-
--provider=<providerId> Log in using
|
|
2535
|
+
--provider=<providerId> Log in using a provider ID (google, github, sanity, vercel)
|
|
2533
2536
|
--sso=<slug> Log in using Single Sign-On, using the given organization slug
|
|
2534
2537
|
--sso-provider=<name> Select a specific SSO provider by name (use with --sso)
|
|
2535
2538
|
--with-token Read token from standard input
|
|
@@ -2633,7 +2636,11 @@ Create a new aspect definition file
|
|
|
2633
2636
|
|
|
2634
2637
|
```
|
|
2635
2638
|
USAGE
|
|
2636
|
-
$ sanity media create-aspect
|
|
2639
|
+
$ sanity media create-aspect [--name <value>] [--title <value>]
|
|
2640
|
+
|
|
2641
|
+
FLAGS
|
|
2642
|
+
--name=<value> Aspect name. Defaults to the title in camel case
|
|
2643
|
+
--title=<value> Aspect title
|
|
2637
2644
|
|
|
2638
2645
|
DESCRIPTION
|
|
2639
2646
|
Create a new aspect definition file
|
|
@@ -2657,7 +2664,7 @@ ARGUMENTS
|
|
|
2657
2664
|
|
|
2658
2665
|
FLAGS
|
|
2659
2666
|
--media-library-id=<value> The id of the target media library
|
|
2660
|
-
--yes
|
|
2667
|
+
--yes Run without prompts and confirm deletion
|
|
2661
2668
|
|
|
2662
2669
|
OVERRIDE FLAGS
|
|
2663
2670
|
-p, --project-id=<id> Project ID to delete media aspect from (overrides CLI configuration)
|
|
@@ -3156,10 +3163,11 @@ Delete schema documents by id
|
|
|
3156
3163
|
|
|
3157
3164
|
```
|
|
3158
3165
|
USAGE
|
|
3159
|
-
$ sanity schemas delete --ids <value> [-p <id>] [-d <name>] [--verbose]
|
|
3166
|
+
$ sanity schemas delete --ids <value> [-p <id>] [-d <name>] [--verbose] [-y]
|
|
3160
3167
|
|
|
3161
3168
|
FLAGS
|
|
3162
3169
|
-d, --dataset=<name> Delete schemas from a specific dataset
|
|
3170
|
+
-y, --yes Delete schemas without prompting for confirmation
|
|
3163
3171
|
--ids=<value> (required) Comma-separated list of schema ids to delete
|
|
3164
3172
|
--verbose Enable verbose logging
|
|
3165
3173
|
|
|
@@ -3219,11 +3227,12 @@ Extract a JSON representation of a Sanity schema within a Studio context.
|
|
|
3219
3227
|
|
|
3220
3228
|
```
|
|
3221
3229
|
USAGE
|
|
3222
|
-
$ sanity schemas extract [--enforce-required-fields] [--format <format>] [--path <value>] [--watch]
|
|
3230
|
+
$ sanity schemas extract [--enforce-required-fields] [--force] [--format <format>] [--path <value>] [--watch]
|
|
3223
3231
|
[--watch-patterns <glob>...] [--workspace <name>]
|
|
3224
3232
|
|
|
3225
3233
|
FLAGS
|
|
3226
3234
|
--enforce-required-fields Makes the schema generated treat fields marked as required as non-optional
|
|
3235
|
+
--force Overwrite an existing schema file
|
|
3227
3236
|
--format=<format> [default: groq-type-nodes] Output format (currently only groq-type-nodes)
|
|
3228
3237
|
--path=<value> Optional path to specify destination of the schema file
|
|
3229
3238
|
--watch Enable watch mode to re-extract schema on file changes
|
|
@@ -3396,13 +3405,13 @@ EXAMPLES
|
|
|
3396
3405
|
$ sanity telemetry telemetry status
|
|
3397
3406
|
```
|
|
3398
3407
|
|
|
3399
|
-
## `sanity tokens
|
|
3408
|
+
## `sanity tokens create [LABEL]`
|
|
3400
3409
|
|
|
3401
3410
|
Create a new API token for the project
|
|
3402
3411
|
|
|
3403
3412
|
```
|
|
3404
3413
|
USAGE
|
|
3405
|
-
$ sanity tokens
|
|
3414
|
+
$ sanity tokens create [LABEL] [-p <id>] [--json] [--role viewer] [-y]
|
|
3406
3415
|
|
|
3407
3416
|
ARGUMENTS
|
|
3408
3417
|
[LABEL] Label for the new token
|
|
@@ -3410,10 +3419,10 @@ ARGUMENTS
|
|
|
3410
3419
|
FLAGS
|
|
3411
3420
|
-y, --yes Skip prompts and use defaults (unattended mode)
|
|
3412
3421
|
--json Output as JSON
|
|
3413
|
-
--role=viewer Role to assign to the token
|
|
3422
|
+
--role=viewer Role to assign to the token (defaults to viewer in unattended mode)
|
|
3414
3423
|
|
|
3415
3424
|
OVERRIDE FLAGS
|
|
3416
|
-
-p, --project-id=<id> Project ID to
|
|
3425
|
+
-p, --project-id=<id> Project ID to create token in (overrides CLI configuration)
|
|
3417
3426
|
|
|
3418
3427
|
DESCRIPTION
|
|
3419
3428
|
Create a new API token for the project
|
|
@@ -3421,23 +3430,23 @@ DESCRIPTION
|
|
|
3421
3430
|
EXAMPLES
|
|
3422
3431
|
Create a token with a label
|
|
3423
3432
|
|
|
3424
|
-
$ sanity tokens
|
|
3433
|
+
$ sanity tokens create "My API Token"
|
|
3425
3434
|
|
|
3426
3435
|
Create a token with editor role
|
|
3427
3436
|
|
|
3428
|
-
$ sanity tokens
|
|
3437
|
+
$ sanity tokens create "My API Token" --role=editor
|
|
3429
3438
|
|
|
3430
3439
|
Create a token in unattended mode
|
|
3431
3440
|
|
|
3432
|
-
$ sanity tokens
|
|
3441
|
+
$ sanity tokens create "CI Token" --role=editor --yes
|
|
3433
3442
|
|
|
3434
3443
|
Output token information as JSON
|
|
3435
3444
|
|
|
3436
|
-
$ sanity tokens
|
|
3445
|
+
$ sanity tokens create "API Token" --json
|
|
3437
3446
|
|
|
3438
3447
|
Create a token for a specific project
|
|
3439
3448
|
|
|
3440
|
-
$ sanity tokens
|
|
3449
|
+
$ sanity tokens create "My Token" --project-id abc123 --role=editor
|
|
3441
3450
|
```
|
|
3442
3451
|
|
|
3443
3452
|
## `sanity tokens delete [TOKENID]`
|
|
@@ -4,6 +4,7 @@ import { isHttpError } from '@sanity/client';
|
|
|
4
4
|
import { LoginError } from '../../errors/LoginError.js';
|
|
5
5
|
import { getCliUser } from '../../services/user.js';
|
|
6
6
|
import { login } from './login/login.js';
|
|
7
|
+
import { LOGIN_REQUIRED_MESSAGE } from './login/loginInstructions.js';
|
|
7
8
|
/**
|
|
8
9
|
* Ensure the user is authenticated. Validates the current token via /users/me
|
|
9
10
|
* and triggers interactive login if the token is missing or invalid.
|
|
@@ -15,6 +16,7 @@ import { login } from './login/login.js';
|
|
|
15
16
|
*/ export async function ensureAuthenticated(options) {
|
|
16
17
|
const user = await validateSession();
|
|
17
18
|
if (user) return user;
|
|
19
|
+
options.output.warn(LOGIN_REQUIRED_MESSAGE);
|
|
18
20
|
try {
|
|
19
21
|
await login({
|
|
20
22
|
output: options.output,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/auth/ensureAuthenticated.ts"],"sourcesContent":["import {\n type CLITelemetryStore,\n getCliToken,\n type Output,\n type SanityOrgUser,\n} from '@sanity/cli-core'\nimport {getErrorMessage} from '@sanity/cli-core/errors'\nimport {isHttpError} from '@sanity/client'\n\nimport {LoginError} from '../../errors/LoginError.js'\nimport {getCliUser} from '../../services/user.js'\nimport {login} from './login/login.js'\n\n/**\n * Ensure the user is authenticated. Validates the current token via /users/me\n * and triggers interactive login if the token is missing or invalid.\n *\n * @returns The authenticated user.\n * @throws LoginError if interactive login fails or is cancelled.\n * @throws Error if a network/server error occurs during validation.\n * @internal\n */\nexport async function ensureAuthenticated(options: {\n output: Output\n telemetry: CLITelemetryStore\n}): Promise<SanityOrgUser> {\n const user = await validateSession()\n if (user) return user\n\n try {\n await login({output: options.output, telemetry: options.telemetry})\n } catch (cause) {\n throw new LoginError(getErrorMessage(cause), {cause})\n }\n\n try {\n return await getCliUser()\n } catch (cause) {\n if (isHttpError(cause) && (cause.statusCode === 401 || cause.statusCode === 403)) {\n throw new LoginError(\n `Login succeeded but failed to verify session: ${getErrorMessage(cause)}`,\n {cause},\n )\n }\n throw cause\n }\n}\n\n/**\n * Validate the current CLI auth token by calling /users/me.\n *\n * Returns null only for auth failures (401/403). Re-throws network errors,\n * timeouts, and server errors so callers can handle them appropriately\n * instead of triggering an unnecessary re-login prompt.\n *\n * @returns The authenticated user if valid, null if invalid/missing.\n * @internal\n */\nexport async function validateSession(): Promise<SanityOrgUser | null> {\n const token = await getCliToken()\n if (!token) return null\n\n try {\n return await getCliUser()\n } catch (error) {\n if (isHttpError(error) && (error.statusCode === 401 || error.statusCode === 403)) {\n return null\n }\n throw error\n }\n}\n"],"names":["getCliToken","getErrorMessage","isHttpError","LoginError","getCliUser","login","ensureAuthenticated","options","user","validateSession","output","telemetry","cause","statusCode","token","error"],"mappings":"AAAA,SAEEA,WAAW,QAGN,mBAAkB;AACzB,SAAQC,eAAe,QAAO,0BAAyB;AACvD,SAAQC,WAAW,QAAO,iBAAgB;AAE1C,SAAQC,UAAU,QAAO,6BAA4B;AACrD,SAAQC,UAAU,QAAO,yBAAwB;AACjD,SAAQC,KAAK,QAAO,mBAAkB;
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/auth/ensureAuthenticated.ts"],"sourcesContent":["import {\n type CLITelemetryStore,\n getCliToken,\n type Output,\n type SanityOrgUser,\n} from '@sanity/cli-core'\nimport {getErrorMessage} from '@sanity/cli-core/errors'\nimport {isHttpError} from '@sanity/client'\n\nimport {LoginError} from '../../errors/LoginError.js'\nimport {getCliUser} from '../../services/user.js'\nimport {login} from './login/login.js'\nimport {LOGIN_REQUIRED_MESSAGE} from './login/loginInstructions.js'\n\n/**\n * Ensure the user is authenticated. Validates the current token via /users/me\n * and triggers interactive login if the token is missing or invalid.\n *\n * @returns The authenticated user.\n * @throws LoginError if interactive login fails or is cancelled.\n * @throws Error if a network/server error occurs during validation.\n * @internal\n */\nexport async function ensureAuthenticated(options: {\n output: Output\n telemetry: CLITelemetryStore\n}): Promise<SanityOrgUser> {\n const user = await validateSession()\n if (user) return user\n\n options.output.warn(LOGIN_REQUIRED_MESSAGE)\n\n try {\n await login({output: options.output, telemetry: options.telemetry})\n } catch (cause) {\n throw new LoginError(getErrorMessage(cause), {cause})\n }\n\n try {\n return await getCliUser()\n } catch (cause) {\n if (isHttpError(cause) && (cause.statusCode === 401 || cause.statusCode === 403)) {\n throw new LoginError(\n `Login succeeded but failed to verify session: ${getErrorMessage(cause)}`,\n {cause},\n )\n }\n throw cause\n }\n}\n\n/**\n * Validate the current CLI auth token by calling /users/me.\n *\n * Returns null only for auth failures (401/403). Re-throws network errors,\n * timeouts, and server errors so callers can handle them appropriately\n * instead of triggering an unnecessary re-login prompt.\n *\n * @returns The authenticated user if valid, null if invalid/missing.\n * @internal\n */\nexport async function validateSession(): Promise<SanityOrgUser | null> {\n const token = await getCliToken()\n if (!token) return null\n\n try {\n return await getCliUser()\n } catch (error) {\n if (isHttpError(error) && (error.statusCode === 401 || error.statusCode === 403)) {\n return null\n }\n throw error\n }\n}\n"],"names":["getCliToken","getErrorMessage","isHttpError","LoginError","getCliUser","login","LOGIN_REQUIRED_MESSAGE","ensureAuthenticated","options","user","validateSession","output","warn","telemetry","cause","statusCode","token","error"],"mappings":"AAAA,SAEEA,WAAW,QAGN,mBAAkB;AACzB,SAAQC,eAAe,QAAO,0BAAyB;AACvD,SAAQC,WAAW,QAAO,iBAAgB;AAE1C,SAAQC,UAAU,QAAO,6BAA4B;AACrD,SAAQC,UAAU,QAAO,yBAAwB;AACjD,SAAQC,KAAK,QAAO,mBAAkB;AACtC,SAAQC,sBAAsB,QAAO,+BAA8B;AAEnE;;;;;;;;CAQC,GACD,OAAO,eAAeC,oBAAoBC,OAGzC;IACC,MAAMC,OAAO,MAAMC;IACnB,IAAID,MAAM,OAAOA;IAEjBD,QAAQG,MAAM,CAACC,IAAI,CAACN;IAEpB,IAAI;QACF,MAAMD,MAAM;YAACM,QAAQH,QAAQG,MAAM;YAAEE,WAAWL,QAAQK,SAAS;QAAA;IACnE,EAAE,OAAOC,OAAO;QACd,MAAM,IAAIX,WAAWF,gBAAgBa,QAAQ;YAACA;QAAK;IACrD;IAEA,IAAI;QACF,OAAO,MAAMV;IACf,EAAE,OAAOU,OAAO;QACd,IAAIZ,YAAYY,UAAWA,CAAAA,MAAMC,UAAU,KAAK,OAAOD,MAAMC,UAAU,KAAK,GAAE,GAAI;YAChF,MAAM,IAAIZ,WACR,CAAC,8CAA8C,EAAEF,gBAAgBa,QAAQ,EACzE;gBAACA;YAAK;QAEV;QACA,MAAMA;IACR;AACF;AAEA;;;;;;;;;CASC,GACD,OAAO,eAAeJ;IACpB,MAAMM,QAAQ,MAAMhB;IACpB,IAAI,CAACgB,OAAO,OAAO;IAEnB,IAAI;QACF,OAAO,MAAMZ;IACf,EAAE,OAAOa,OAAO;QACd,IAAIf,YAAYe,UAAWA,CAAAA,MAAMF,UAAU,KAAK,OAAOE,MAAMF,UAAU,KAAK,GAAE,GAAI;YAChF,OAAO;QACT;QACA,MAAME;IACR;AACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const LOGIN_PROVIDER_IDS = [
|
|
2
|
+
'google',
|
|
3
|
+
'github',
|
|
4
|
+
'sanity',
|
|
5
|
+
'vercel'
|
|
6
|
+
];
|
|
7
|
+
export const LOGIN_REQUIRED_MESSAGE = [
|
|
8
|
+
'No valid authentication credentials found.',
|
|
9
|
+
'',
|
|
10
|
+
'Authenticate with one of these commands:',
|
|
11
|
+
' echo "$TOKEN" | sanity login --with-token',
|
|
12
|
+
' sanity login --provider <providerId> --no-open',
|
|
13
|
+
` Provider IDs: ${LOGIN_PROVIDER_IDS.join(', ')}`,
|
|
14
|
+
' sanity login --sso <organizationSlug> --no-open',
|
|
15
|
+
'',
|
|
16
|
+
'`--no-open` prints a login URL instead of opening a browser.'
|
|
17
|
+
].join('\n');
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=loginInstructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/auth/login/loginInstructions.ts"],"sourcesContent":["export const LOGIN_PROVIDER_IDS = ['google', 'github', 'sanity', 'vercel'] as const\n\nexport const LOGIN_REQUIRED_MESSAGE = [\n 'No valid authentication credentials found.',\n '',\n 'Authenticate with one of these commands:',\n ' echo \"$TOKEN\" | sanity login --with-token',\n ' sanity login --provider <providerId> --no-open',\n ` Provider IDs: ${LOGIN_PROVIDER_IDS.join(', ')}`,\n ' sanity login --sso <organizationSlug> --no-open',\n '',\n '`--no-open` prints a login URL instead of opening a browser.',\n].join('\\n')\n"],"names":["LOGIN_PROVIDER_IDS","LOGIN_REQUIRED_MESSAGE","join"],"mappings":"AAAA,OAAO,MAAMA,qBAAqB;IAAC;IAAU;IAAU;IAAU;CAAS,CAAS;AAEnF,OAAO,MAAMC,yBAAyB;IACpC;IACA;IACA;IACA;IACA;IACA,CAAC,kBAAkB,EAAED,mBAAmBE,IAAI,CAAC,OAAO;IACpD;IACA;IACA;CACD,CAACA,IAAI,CAAC,MAAK"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { compareDependencyVersions, buildApp as internalBuildApp } from '@sanity/cli-build/_internal/build';
|
|
2
|
-
import { resolveWorkbenchApp } from '@sanity/workbench-cli/build';
|
|
2
|
+
import { buildAppId, resolveWorkbenchApp } from '@sanity/workbench-cli/build';
|
|
3
3
|
import { getAppId } from '../../util/appId.js';
|
|
4
4
|
import { warnAboutMissingAppId } from '../../util/warnAboutMissingAppId.js';
|
|
5
5
|
import { determineBasePath } from './determineBasePath.js';
|
|
@@ -13,6 +13,11 @@ import { determineBasePath } from './determineBasePath.js';
|
|
|
13
13
|
// `views`/`services` live on the branded `unstable_defineApp` result, not the
|
|
14
14
|
// legacy `app` config object — resolve the workbench capability to read them.
|
|
15
15
|
const workbench = resolveWorkbenchApp(cliConfig);
|
|
16
|
+
const exposes = workbench ? {
|
|
17
|
+
config: workbench.config,
|
|
18
|
+
services: workbench.services,
|
|
19
|
+
views: workbench.views
|
|
20
|
+
} : undefined;
|
|
16
21
|
const appId = getAppId(cliConfig);
|
|
17
22
|
await internalBuildApp({
|
|
18
23
|
appId,
|
|
@@ -34,11 +39,7 @@ import { determineBasePath } from './determineBasePath.js';
|
|
|
34
39
|
}),
|
|
35
40
|
determineBasePath: ()=>determineBasePath(cliConfig, 'app', output),
|
|
36
41
|
entry: app?.entry,
|
|
37
|
-
exposes
|
|
38
|
-
config: workbench.config,
|
|
39
|
-
services: workbench.services,
|
|
40
|
-
views: workbench.views
|
|
41
|
-
} : undefined,
|
|
42
|
+
exposes,
|
|
42
43
|
isWorkbenchApp: !!workbench,
|
|
43
44
|
minify: flags.minify,
|
|
44
45
|
outDir,
|
|
@@ -49,7 +50,9 @@ import { determineBasePath } from './determineBasePath.js';
|
|
|
49
50
|
stats: flags.stats,
|
|
50
51
|
unattendedMode: flags.yes,
|
|
51
52
|
vite: cliConfig.vite,
|
|
52
|
-
|
|
53
|
+
// Shared with deploy: it passes the resolved application id (minted by the
|
|
54
|
+
// API on a first deploy) to inline; a plain build has none, so it hashes the shape.
|
|
55
|
+
workbenchAppId: workbench ? options.applicationId ?? buildAppId(workbench) : undefined,
|
|
53
56
|
workDir
|
|
54
57
|
});
|
|
55
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/build/buildApp.ts"],"sourcesContent":["import {\n compareDependencyVersions,\n buildApp as internalBuildApp,\n} from '@sanity/cli-build/_internal/build'\nimport {resolveWorkbenchApp} from '@sanity/workbench-cli/build'\n\nimport {getAppId} from '../../util/appId.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {type BuildOptions} from './types.js'\n\n/**\n * Build the Sanity app.\n *\n * @internal\n */\nexport async function buildApp(options: BuildOptions): Promise<void> {\n const {cliConfig, flags, outDir, output, workDir} = options\n\n const app = cliConfig && 'app' in cliConfig ? cliConfig.app : undefined\n // `views`/`services` live on the branded `unstable_defineApp` result, not the\n // legacy `app` config object — resolve the workbench capability to read them.\n const workbench = resolveWorkbenchApp(cliConfig)\n\n const appId = getAppId(cliConfig)\n\n await internalBuildApp({\n appId,\n appTitle: app?.title,\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n checkAppId: () => {\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !options.calledFromDeploy) {\n warnAboutMissingAppId({appType: 'app', output})\n }\n },\n compareDependencyVersions: (packages) => compareDependencyVersions(packages, workDir, {appId}),\n determineBasePath: () => determineBasePath(cliConfig, 'app', output),\n entry: app?.entry,\n exposes
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/build/buildApp.ts"],"sourcesContent":["import {\n compareDependencyVersions,\n buildApp as internalBuildApp,\n} from '@sanity/cli-build/_internal/build'\nimport {buildAppId, resolveWorkbenchApp} from '@sanity/workbench-cli/build'\n\nimport {getAppId} from '../../util/appId.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {type BuildOptions} from './types.js'\n\n/**\n * Build the Sanity app.\n *\n * @internal\n */\nexport async function buildApp(options: BuildOptions): Promise<void> {\n const {cliConfig, flags, outDir, output, workDir} = options\n\n const app = cliConfig && 'app' in cliConfig ? cliConfig.app : undefined\n // `views`/`services` live on the branded `unstable_defineApp` result, not the\n // legacy `app` config object — resolve the workbench capability to read them.\n const workbench = resolveWorkbenchApp(cliConfig)\n const exposes = workbench\n ? {config: workbench.config, services: workbench.services, views: workbench.views}\n : undefined\n\n const appId = getAppId(cliConfig)\n\n await internalBuildApp({\n appId,\n appTitle: app?.title,\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n checkAppId: () => {\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !options.calledFromDeploy) {\n warnAboutMissingAppId({appType: 'app', output})\n }\n },\n compareDependencyVersions: (packages) => compareDependencyVersions(packages, workDir, {appId}),\n determineBasePath: () => determineBasePath(cliConfig, 'app', output),\n entry: app?.entry,\n exposes,\n isWorkbenchApp: !!workbench,\n minify: flags.minify,\n outDir,\n output,\n reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n schemaExtraction: cliConfig?.schemaExtraction,\n sourceMap: Boolean(flags['source-maps']),\n stats: flags.stats,\n unattendedMode: flags.yes,\n vite: cliConfig.vite,\n // Shared with deploy: it passes the resolved application id (minted by the\n // API on a first deploy) to inline; a plain build has none, so it hashes the shape.\n workbenchAppId: workbench ? (options.applicationId ?? buildAppId(workbench)) : undefined,\n workDir,\n })\n}\n"],"names":["compareDependencyVersions","buildApp","internalBuildApp","buildAppId","resolveWorkbenchApp","getAppId","warnAboutMissingAppId","determineBasePath","options","cliConfig","flags","outDir","output","workDir","app","undefined","workbench","exposes","config","services","views","appId","appTitle","title","autoUpdatesEnabled","checkAppId","calledFromDeploy","appType","packages","entry","isWorkbenchApp","minify","reactCompiler","schemaExtraction","sourceMap","Boolean","stats","unattendedMode","yes","vite","workbenchAppId","applicationId"],"mappings":"AAAA,SACEA,yBAAyB,EACzBC,YAAYC,gBAAgB,QACvB,oCAAmC;AAC1C,SAAQC,UAAU,EAAEC,mBAAmB,QAAO,8BAA6B;AAE3E,SAAQC,QAAQ,QAAO,sBAAqB;AAC5C,SAAQC,qBAAqB,QAAO,sCAAqC;AACzE,SAAQC,iBAAiB,QAAO,yBAAwB;AAGxD;;;;CAIC,GACD,OAAO,eAAeN,SAASO,OAAqB;IAClD,MAAM,EAACC,SAAS,EAAEC,KAAK,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAC,GAAGL;IAEpD,MAAMM,MAAML,aAAa,SAASA,YAAYA,UAAUK,GAAG,GAAGC;IAC9D,8EAA8E;IAC9E,8EAA8E;IAC9E,MAAMC,YAAYZ,oBAAoBK;IACtC,MAAMQ,UAAUD,YACZ;QAACE,QAAQF,UAAUE,MAAM;QAAEC,UAAUH,UAAUG,QAAQ;QAAEC,OAAOJ,UAAUI,KAAK;IAAA,IAC/EL;IAEJ,MAAMM,QAAQhB,SAASI;IAEvB,MAAMP,iBAAiB;QACrBmB;QACAC,UAAUR,KAAKS;QACfC,oBAAoBhB,QAAQgB,kBAAkB;QAC9CC,YAAY;YACV,wDAAwD;YACxD,kEAAkE;YAClE,yDAAyD;YACzD,IAAI,CAACJ,SAAS,CAACb,QAAQkB,gBAAgB,EAAE;gBACvCpB,sBAAsB;oBAACqB,SAAS;oBAAOf;gBAAM;YAC/C;QACF;QACAZ,2BAA2B,CAAC4B,WAAa5B,0BAA0B4B,UAAUf,SAAS;gBAACQ;YAAK;QAC5Fd,mBAAmB,IAAMA,kBAAkBE,WAAW,OAAOG;QAC7DiB,OAAOf,KAAKe;QACZZ;QACAa,gBAAgB,CAAC,CAACd;QAClBe,QAAQrB,MAAMqB,MAAM;QACpBpB;QACAC;QACAoB,eAAevB,aAAa,mBAAmBA,YAAYA,UAAUuB,aAAa,GAAGjB;QACrFkB,kBAAkBxB,WAAWwB;QAC7BC,WAAWC,QAAQzB,KAAK,CAAC,cAAc;QACvC0B,OAAO1B,MAAM0B,KAAK;QAClBC,gBAAgB3B,MAAM4B,GAAG;QACzBC,MAAM9B,UAAU8B,IAAI;QACpB,2EAA2E;QAC3E,oFAAoF;QACpFC,gBAAgBxB,YAAaR,QAAQiC,aAAa,IAAItC,WAAWa,aAAcD;QAC/EF;IACF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { compareDependencyVersions, buildStudio as internalBuildStudio } from '@sanity/cli-build/_internal/build';
|
|
2
|
-
import { resolveWorkbenchApp } from '@sanity/workbench-cli/build';
|
|
2
|
+
import { buildAppId, resolveWorkbenchApp } from '@sanity/workbench-cli/build';
|
|
3
3
|
import { getAppId } from '../../util/appId.js';
|
|
4
4
|
import { determineIsApp } from '../../util/determineIsApp.js';
|
|
5
5
|
import { getPackageManagerChoice } from '../../util/packageManager/packageManagerChoice.js';
|
|
@@ -15,6 +15,10 @@ import { determineBasePath } from './determineBasePath.js';
|
|
|
15
15
|
// `views`/`services` live on the branded `unstable_defineApp` result — resolve
|
|
16
16
|
// the workbench capability so it's gated on the brand, like the app build.
|
|
17
17
|
const workbench = resolveWorkbenchApp(cliConfig);
|
|
18
|
+
const exposes = workbench ? {
|
|
19
|
+
services: workbench.services,
|
|
20
|
+
views: workbench.views
|
|
21
|
+
} : undefined;
|
|
18
22
|
const appId = getAppId(cliConfig);
|
|
19
23
|
const upgradePkgs = async (options)=>{
|
|
20
24
|
await upgradePackages({
|
|
@@ -46,10 +50,7 @@ import { determineBasePath } from './determineBasePath.js';
|
|
|
46
50
|
appId
|
|
47
51
|
}),
|
|
48
52
|
determineBasePath: ()=>determineBasePath(cliConfig, 'studio', output),
|
|
49
|
-
exposes
|
|
50
|
-
services: workbench.services,
|
|
51
|
-
views: workbench.views
|
|
52
|
-
} : undefined,
|
|
53
|
+
exposes,
|
|
53
54
|
isApp: determineIsApp(cliConfig),
|
|
54
55
|
isWorkbenchApp: !!workbench,
|
|
55
56
|
minify: Boolean(flags.minify),
|
|
@@ -62,7 +63,9 @@ import { determineBasePath } from './determineBasePath.js';
|
|
|
62
63
|
unattendedMode: Boolean(flags.yes),
|
|
63
64
|
upgradePackages: upgradePkgs,
|
|
64
65
|
vite: cliConfig.vite,
|
|
65
|
-
|
|
66
|
+
// Shared with deploy: it passes the resolved application id (minted by the
|
|
67
|
+
// API on a first deploy) to inline; a plain build has none, so it hashes the shape.
|
|
68
|
+
workbenchAppId: workbench ? options.applicationId ?? buildAppId(workbench) : undefined,
|
|
66
69
|
workDir
|
|
67
70
|
});
|
|
68
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/build/buildStudio.ts"],"sourcesContent":["import {\n compareDependencyVersions,\n buildStudio as internalBuildStudio,\n} from '@sanity/cli-build/_internal/build'\nimport {resolveWorkbenchApp} from '@sanity/workbench-cli/build'\n\nimport {getAppId} from '../../util/appId.js'\nimport {determineIsApp} from '../../util/determineIsApp.js'\nimport {getPackageManagerChoice} from '../../util/packageManager/packageManagerChoice.js'\nimport {upgradePackages} from '../../util/packageManager/upgradePackages.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {type BuildOptions} from './types.js'\n\n/**\n * Build the Sanity Studio.\n *\n * @internal\n */\nexport async function buildStudio(options: BuildOptions): Promise<void> {\n const {calledFromDeploy, cliConfig, flags, outDir, output, workDir} = options\n\n // `views`/`services` live on the branded `unstable_defineApp` result — resolve\n // the workbench capability so it's gated on the brand, like the app build.\n const workbench = resolveWorkbenchApp(cliConfig)\n\n const appId = getAppId(cliConfig)\n\n const upgradePkgs = async (options: {\n packages: [name: string, version: string][]\n }): Promise<void> => {\n await upgradePackages(\n {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: options.packages,\n },\n {output, workDir},\n )\n }\n\n await internalBuildStudio({\n appId,\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n checkAppId: () => {\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !calledFromDeploy) {\n warnAboutMissingAppId({appType: 'studio', output, projectId: cliConfig?.api?.projectId})\n }\n },\n compareDependencyVersions: (packages) => compareDependencyVersions(packages, workDir, {appId}),\n determineBasePath: () => determineBasePath(cliConfig, 'studio', output),\n exposes
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/build/buildStudio.ts"],"sourcesContent":["import {\n compareDependencyVersions,\n buildStudio as internalBuildStudio,\n} from '@sanity/cli-build/_internal/build'\nimport {buildAppId, resolveWorkbenchApp} from '@sanity/workbench-cli/build'\n\nimport {getAppId} from '../../util/appId.js'\nimport {determineIsApp} from '../../util/determineIsApp.js'\nimport {getPackageManagerChoice} from '../../util/packageManager/packageManagerChoice.js'\nimport {upgradePackages} from '../../util/packageManager/upgradePackages.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {type BuildOptions} from './types.js'\n\n/**\n * Build the Sanity Studio.\n *\n * @internal\n */\nexport async function buildStudio(options: BuildOptions): Promise<void> {\n const {calledFromDeploy, cliConfig, flags, outDir, output, workDir} = options\n\n // `views`/`services` live on the branded `unstable_defineApp` result — resolve\n // the workbench capability so it's gated on the brand, like the app build.\n const workbench = resolveWorkbenchApp(cliConfig)\n const exposes = workbench ? {services: workbench.services, views: workbench.views} : undefined\n\n const appId = getAppId(cliConfig)\n\n const upgradePkgs = async (options: {\n packages: [name: string, version: string][]\n }): Promise<void> => {\n await upgradePackages(\n {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: options.packages,\n },\n {output, workDir},\n )\n }\n\n await internalBuildStudio({\n appId,\n autoUpdatesEnabled: options.autoUpdatesEnabled,\n checkAppId: () => {\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !calledFromDeploy) {\n warnAboutMissingAppId({appType: 'studio', output, projectId: cliConfig?.api?.projectId})\n }\n },\n compareDependencyVersions: (packages) => compareDependencyVersions(packages, workDir, {appId}),\n determineBasePath: () => determineBasePath(cliConfig, 'studio', output),\n exposes,\n isApp: determineIsApp(cliConfig),\n isWorkbenchApp: !!workbench,\n minify: Boolean(flags.minify),\n outDir,\n output,\n reactCompiler: cliConfig.reactCompiler,\n schemaExtraction: cliConfig.schemaExtraction,\n sourceMap: Boolean(flags['source-maps']),\n stats: flags.stats,\n unattendedMode: Boolean(flags.yes),\n upgradePackages: upgradePkgs,\n vite: cliConfig.vite,\n // Shared with deploy: it passes the resolved application id (minted by the\n // API on a first deploy) to inline; a plain build has none, so it hashes the shape.\n workbenchAppId: workbench ? (options.applicationId ?? buildAppId(workbench)) : undefined,\n workDir,\n })\n}\n"],"names":["compareDependencyVersions","buildStudio","internalBuildStudio","buildAppId","resolveWorkbenchApp","getAppId","determineIsApp","getPackageManagerChoice","upgradePackages","warnAboutMissingAppId","determineBasePath","options","calledFromDeploy","cliConfig","flags","outDir","output","workDir","workbench","exposes","services","views","undefined","appId","upgradePkgs","packageManager","interactive","chosen","packages","autoUpdatesEnabled","checkAppId","appType","projectId","api","isApp","isWorkbenchApp","minify","Boolean","reactCompiler","schemaExtraction","sourceMap","stats","unattendedMode","yes","vite","workbenchAppId","applicationId"],"mappings":"AAAA,SACEA,yBAAyB,EACzBC,eAAeC,mBAAmB,QAC7B,oCAAmC;AAC1C,SAAQC,UAAU,EAAEC,mBAAmB,QAAO,8BAA6B;AAE3E,SAAQC,QAAQ,QAAO,sBAAqB;AAC5C,SAAQC,cAAc,QAAO,+BAA8B;AAC3D,SAAQC,uBAAuB,QAAO,oDAAmD;AACzF,SAAQC,eAAe,QAAO,+CAA8C;AAC5E,SAAQC,qBAAqB,QAAO,sCAAqC;AACzE,SAAQC,iBAAiB,QAAO,yBAAwB;AAGxD;;;;CAIC,GACD,OAAO,eAAeT,YAAYU,OAAqB;IACrD,MAAM,EAACC,gBAAgB,EAAEC,SAAS,EAAEC,KAAK,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,EAAC,GAAGN;IAEtE,+EAA+E;IAC/E,2EAA2E;IAC3E,MAAMO,YAAYd,oBAAoBS;IACtC,MAAMM,UAAUD,YAAY;QAACE,UAAUF,UAAUE,QAAQ;QAAEC,OAAOH,UAAUG,KAAK;IAAA,IAAIC;IAErF,MAAMC,QAAQlB,SAASQ;IAEvB,MAAMW,cAAc,OAAOb;QAGzB,MAAMH,gBACJ;YACEiB,gBAAgB,AAAC,CAAA,MAAMlB,wBAAwBU,SAAS;gBAACS,aAAa;YAAK,EAAC,EAAGC,MAAM;YACrFC,UAAUjB,QAAQiB,QAAQ;QAC5B,GACA;YAACZ;YAAQC;QAAO;IAEpB;IAEA,MAAMf,oBAAoB;QACxBqB;QACAM,oBAAoBlB,QAAQkB,kBAAkB;QAC9CC,YAAY;YACV,wDAAwD;YACxD,kEAAkE;YAClE,yDAAyD;YACzD,IAAI,CAACP,SAAS,CAACX,kBAAkB;gBAC/BH,sBAAsB;oBAACsB,SAAS;oBAAUf;oBAAQgB,WAAWnB,WAAWoB,KAAKD;gBAAS;YACxF;QACF;QACAhC,2BAA2B,CAAC4B,WAAa5B,0BAA0B4B,UAAUX,SAAS;gBAACM;YAAK;QAC5Fb,mBAAmB,IAAMA,kBAAkBG,WAAW,UAAUG;QAChEG;QACAe,OAAO5B,eAAeO;QACtBsB,gBAAgB,CAAC,CAACjB;QAClBkB,QAAQC,QAAQvB,MAAMsB,MAAM;QAC5BrB;QACAC;QACAsB,eAAezB,UAAUyB,aAAa;QACtCC,kBAAkB1B,UAAU0B,gBAAgB;QAC5CC,WAAWH,QAAQvB,KAAK,CAAC,cAAc;QACvC2B,OAAO3B,MAAM2B,KAAK;QAClBC,gBAAgBL,QAAQvB,MAAM6B,GAAG;QACjCnC,iBAAiBgB;QACjBoB,MAAM/B,UAAU+B,IAAI;QACpB,2EAA2E;QAC3E,oFAAoF;QACpFC,gBAAgB3B,YAAaP,QAAQmC,aAAa,IAAI3C,WAAWe,aAAcI;QAC/EL;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/build/types.ts"],"sourcesContent":["import {type CliConfig, type Output} from '@sanity/cli-core'\n\nimport {BuildCommand} from '../../commands/build.js'\nimport {type DeployFlags} from '../deploy/types.js'\n\nexport type BuildFlags = BuildCommand['flags']\n\nexport interface BuildOptions {\n autoUpdatesEnabled: boolean\n cliConfig: CliConfig\n flags: BuildFlags | DeployFlags\n output: Output\n\n workDir: string\n\n calledFromDeploy?: boolean\n outDir?: string\n}\n"],"names":[],"mappings":"AAOA,
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/build/types.ts"],"sourcesContent":["import {type CliConfig, type Output} from '@sanity/cli-core'\n\nimport {BuildCommand} from '../../commands/build.js'\nimport {type DeployFlags} from '../deploy/types.js'\n\nexport type BuildFlags = BuildCommand['flags']\n\nexport interface BuildOptions {\n autoUpdatesEnabled: boolean\n cliConfig: CliConfig\n flags: BuildFlags | DeployFlags\n output: Output\n\n workDir: string\n\n applicationId?: string\n calledFromDeploy?: boolean\n outDir?: string\n}\n"],"names":[],"mappings":"AAOA,WAWC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { exitCodes } from '@sanity/cli-core';
|
|
1
2
|
import { promptForDataset } from '../../prompts/promptForDataset.js';
|
|
2
3
|
import { listDatasets } from '../../services/datasets.js';
|
|
3
4
|
import { assertDatasetExists } from '../backup/assertDatasetExist.js';
|
|
@@ -5,7 +6,12 @@ import { assertDatasetExists } from '../backup/assertDatasetExist.js';
|
|
|
5
6
|
* Lists datasets for a project, validates the given dataset name (or prompts
|
|
6
7
|
* the user to pick one), and returns the resolved name together with the full
|
|
7
8
|
* dataset list.
|
|
8
|
-
*/ export async function resolveDataset({ dataset, output, projectId }) {
|
|
9
|
+
*/ export async function resolveDataset({ dataset, isUnattended, output, projectId }) {
|
|
10
|
+
if (!dataset && isUnattended) {
|
|
11
|
+
output.error('Dataset name is required. Pass it as the `<dataset>` argument.', {
|
|
12
|
+
exit: exitCodes.USAGE_ERROR
|
|
13
|
+
});
|
|
14
|
+
}
|
|
9
15
|
const datasets = await listDatasets(projectId);
|
|
10
16
|
if (datasets.length === 0) {
|
|
11
17
|
throw new Error('No datasets found in this project.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/dataset/resolveDataset.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {type DatasetsResponse} from '@sanity/client'\n\nimport {promptForDataset} from '../../prompts/promptForDataset.js'\nimport {listDatasets} from '../../services/datasets.js'\nimport {assertDatasetExists} from '../backup/assertDatasetExist.js'\n\ninterface ResolveDatasetOptions {\n /** Output to use for user-facing messages from the calling command */\n output: Output\n\n projectId: string\n\n dataset?: string\n}\n\ninterface ResolveDatasetResult {\n dataset: string\n datasets: DatasetsResponse\n}\n\n/**\n * Lists datasets for a project, validates the given dataset name (or prompts\n * the user to pick one), and returns the resolved name together with the full\n * dataset list.\n */\nexport async function resolveDataset({\n dataset,\n output,\n projectId,\n}: ResolveDatasetOptions): Promise<ResolveDatasetResult> {\n const datasets = await listDatasets(projectId)\n\n if (datasets.length === 0) {\n throw new Error('No datasets found in this project.')\n }\n\n if (dataset) {\n assertDatasetExists(datasets, dataset, output)\n } else {\n dataset = await promptForDataset({datasets})\n }\n\n return {dataset, datasets}\n}\n"],"names":["promptForDataset","listDatasets","assertDatasetExists","resolveDataset","dataset","output","projectId","datasets","length","Error"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/dataset/resolveDataset.ts"],"sourcesContent":["import {exitCodes, type Output} from '@sanity/cli-core'\nimport {type DatasetsResponse} from '@sanity/client'\n\nimport {promptForDataset} from '../../prompts/promptForDataset.js'\nimport {listDatasets} from '../../services/datasets.js'\nimport {assertDatasetExists} from '../backup/assertDatasetExist.js'\n\ninterface ResolveDatasetOptions {\n /** Output to use for user-facing messages from the calling command */\n output: Output\n\n projectId: string\n\n dataset?: string\n isUnattended?: boolean\n}\n\ninterface ResolveDatasetResult {\n dataset: string\n datasets: DatasetsResponse\n}\n\n/**\n * Lists datasets for a project, validates the given dataset name (or prompts\n * the user to pick one), and returns the resolved name together with the full\n * dataset list.\n */\nexport async function resolveDataset({\n dataset,\n isUnattended,\n output,\n projectId,\n}: ResolveDatasetOptions): Promise<ResolveDatasetResult> {\n if (!dataset && isUnattended) {\n output.error('Dataset name is required. Pass it as the `<dataset>` argument.', {\n exit: exitCodes.USAGE_ERROR,\n })\n }\n\n const datasets = await listDatasets(projectId)\n\n if (datasets.length === 0) {\n throw new Error('No datasets found in this project.')\n }\n\n if (dataset) {\n assertDatasetExists(datasets, dataset, output)\n } else {\n dataset = await promptForDataset({datasets})\n }\n\n return {dataset, datasets}\n}\n"],"names":["exitCodes","promptForDataset","listDatasets","assertDatasetExists","resolveDataset","dataset","isUnattended","output","projectId","error","exit","USAGE_ERROR","datasets","length","Error"],"mappings":"AAAA,SAAQA,SAAS,QAAoB,mBAAkB;AAGvD,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SAAQC,YAAY,QAAO,6BAA4B;AACvD,SAAQC,mBAAmB,QAAO,kCAAiC;AAiBnE;;;;CAIC,GACD,OAAO,eAAeC,eAAe,EACnCC,OAAO,EACPC,YAAY,EACZC,MAAM,EACNC,SAAS,EACa;IACtB,IAAI,CAACH,WAAWC,cAAc;QAC5BC,OAAOE,KAAK,CAAC,kEAAkE;YAC7EC,MAAMV,UAAUW,WAAW;QAC7B;IACF;IAEA,MAAMC,WAAW,MAAMV,aAAaM;IAEpC,IAAII,SAASC,MAAM,KAAK,GAAG;QACzB,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAIT,SAAS;QACXF,oBAAoBS,UAAUP,SAASE;IACzC,OAAO;QACLF,UAAU,MAAMJ,iBAAiB;YAACW;QAAQ;IAC5C;IAEA,OAAO;QAACP;QAASO;IAAQ;AAC3B"}
|