@sanity/cli 3.92.1-next.9.9ecd386f43 → 3.93.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/codemods/partsTypeDirective.js +1 -2
- package/lib/_chunks-cjs/cli.js +210 -130
- package/lib/_chunks-cjs/cli.js.map +1 -1
- package/lib/_chunks-cjs/cliWorker.js.map +1 -1
- package/lib/_chunks-cjs/getCliConfig.js +4 -2
- package/lib/_chunks-cjs/getCliConfig.js.map +1 -1
- package/lib/_chunks-cjs/journeyConfig.js.map +1 -1
- package/lib/_chunks-cjs/loadEnv.js +10 -5
- package/lib/_chunks-cjs/loadEnv.js.map +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/workers/typegenGenerate.js +3 -4
- package/lib/workers/typegenGenerate.js.map +1 -1
- package/package.json +17 -15
- package/src/actions/codemod/codemodAction.ts +1 -1
- package/src/actions/codemod/mods/reactIconsV3.ts +1 -1
- package/src/actions/init-plugin/bootstrapFromTemplate.ts +2 -3
- package/src/actions/init-project/bootstrapLocalTemplate.ts +2 -2
- package/src/actions/init-project/git.ts +4 -4
- package/src/actions/init-project/initProject.ts +25 -13
- package/src/actions/init-project/readPackageJson.ts +1 -2
- package/src/actions/versions/findSanityModuleVersions.ts +1 -1
- package/src/cli.ts +3 -0
- package/src/commands/blueprints/addBlueprintsCommand.ts +32 -2
- package/src/commands/blueprints/initBlueprintsCommand.ts +23 -2
- package/src/commands/init/initCommand.ts +1 -1
- package/src/packageManager/installPackages.ts +33 -21
- package/src/util/cliWorker.ts +1 -1
- package/src/util/clientWrapper.ts +2 -2
- package/src/util/getCliConfig.ts +3 -3
- package/src/util/getLocalVersion.ts +1 -1
- package/src/util/journeyConfig.ts +2 -2
- package/src/util/remoteTemplate.ts +2 -2
- package/src/workers/typegenGenerate.ts +0 -1
- package/templates/blog/README.md +1 -1
- package/templates/clean/README.md +1 -1
- package/templates/ecommerce/README.md +1 -1
- package/templates/get-started/README.md +1 -1
- package/templates/moviedb/README.md +1 -1
- package/templates/quickstart/README.md +1 -1
- package/templates/.eslintrc +0 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.93.0",
|
|
4
4
|
"description": "Sanity CLI tool for managing Sanity installations, managing plugins, schemas and datasets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -50,40 +50,41 @@
|
|
|
50
50
|
"build": "pkg-utils build --strict --check --clean",
|
|
51
51
|
"check:types": "tsc --project tsconfig.lib.json",
|
|
52
52
|
"clean": "rimraf lib",
|
|
53
|
-
"lint": "eslint
|
|
53
|
+
"lint": "eslint .",
|
|
54
54
|
"prepublishOnly": "turbo run build",
|
|
55
55
|
"test": "vitest",
|
|
56
56
|
"ts": "node -r esbuild-register",
|
|
57
57
|
"watch": "pkg-utils watch"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@babel/traverse": "^7.
|
|
61
|
-
"@sanity/client": "^7.
|
|
62
|
-
"@sanity/codegen": "3.
|
|
63
|
-
"@sanity/runtime-cli": "^8.
|
|
60
|
+
"@babel/traverse": "^7.27.4",
|
|
61
|
+
"@sanity/client": "^7.6.0",
|
|
62
|
+
"@sanity/codegen": "3.93.0",
|
|
63
|
+
"@sanity/runtime-cli": "^8.1.0",
|
|
64
64
|
"@sanity/telemetry": "^0.8.0",
|
|
65
65
|
"@sanity/template-validator": "^2.4.3",
|
|
66
|
-
"@sanity/util": "3.
|
|
66
|
+
"@sanity/util": "3.93.0",
|
|
67
67
|
"chalk": "^4.1.2",
|
|
68
68
|
"debug": "^4.3.4",
|
|
69
69
|
"decompress": "^4.2.0",
|
|
70
70
|
"esbuild": "0.25.5",
|
|
71
|
-
"esbuild-register": "^3.
|
|
71
|
+
"esbuild-register": "^3.6.0",
|
|
72
72
|
"get-it": "^8.6.9",
|
|
73
73
|
"groq-js": "^1.17.0",
|
|
74
74
|
"pkg-dir": "^5.0.0",
|
|
75
|
-
"prettier": "^3.3
|
|
75
|
+
"prettier": "^3.5.3",
|
|
76
76
|
"semver": "^7.3.5",
|
|
77
77
|
"validate-npm-package-name": "^3.0.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@repo/
|
|
81
|
-
"@repo/
|
|
80
|
+
"@repo/eslint-config": "3.93.0",
|
|
81
|
+
"@repo/package.config": "3.93.0",
|
|
82
|
+
"@repo/test-config": "3.93.0",
|
|
82
83
|
"@rexxars/gitconfiglocal": "^3.0.1",
|
|
83
84
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
84
|
-
"@sanity/eslint-config-studio": "^
|
|
85
|
+
"@sanity/eslint-config-studio": "^5.0.2",
|
|
85
86
|
"@sanity/generate-help-url": "^3.0.0",
|
|
86
|
-
"@sanity/types": "3.
|
|
87
|
+
"@sanity/types": "3.93.0",
|
|
87
88
|
"@types/babel__traverse": "^7.20.5",
|
|
88
89
|
"@types/configstore": "^5.0.1",
|
|
89
90
|
"@types/cpx": "^1.5.2",
|
|
@@ -110,6 +111,7 @@
|
|
|
110
111
|
"execa": "^2.0.0",
|
|
111
112
|
"get-latest-version": "^5.0.0",
|
|
112
113
|
"git-user-info": "^2.0.3",
|
|
114
|
+
"globals": "^16.2.0",
|
|
113
115
|
"inquirer": "^6.0.0",
|
|
114
116
|
"is-installed-globally": "^0.4.0",
|
|
115
117
|
"leven": "^3.1.0",
|
|
@@ -128,12 +130,12 @@
|
|
|
128
130
|
"semver-compare": "^1.0.0",
|
|
129
131
|
"tar": "^6.1.11",
|
|
130
132
|
"vite": "^6.3.5",
|
|
131
|
-
"vitest": "^3.2.
|
|
133
|
+
"vitest": "^3.2.3",
|
|
132
134
|
"which": "^2.0.2",
|
|
133
135
|
"xdg-basedir": "^4.0.0"
|
|
134
136
|
},
|
|
135
137
|
"engines": {
|
|
136
138
|
"node": ">=18"
|
|
137
139
|
},
|
|
138
|
-
"gitHead": "
|
|
140
|
+
"gitHead": "6ab8137bd3e807a98595dbf1de2e848be48cfb27"
|
|
139
141
|
}
|
|
@@ -101,7 +101,7 @@ function ensureNpx() {
|
|
|
101
101
|
if (!npxHelp.includes('npm')) {
|
|
102
102
|
throw new Error('Not the npx we expected')
|
|
103
103
|
}
|
|
104
|
-
} catch
|
|
104
|
+
} catch {
|
|
105
105
|
throw new Error(
|
|
106
106
|
`Failed to run "npx" - required to run codemods. Do you have a recent version of npm installed?`,
|
|
107
107
|
)
|
|
@@ -4,7 +4,6 @@ import path from 'node:path'
|
|
|
4
4
|
import {absolutify, pathIsEmpty} from '@sanity/util/fs'
|
|
5
5
|
import decompress from 'decompress'
|
|
6
6
|
import {getIt} from 'get-it'
|
|
7
|
-
// eslint-disable-next-line import/extensions
|
|
8
7
|
import {promise} from 'get-it/middleware'
|
|
9
8
|
import resolveFrom from 'resolve-from'
|
|
10
9
|
import semver from 'semver'
|
|
@@ -44,7 +43,7 @@ export async function bootstrapFromTemplate(
|
|
|
44
43
|
try {
|
|
45
44
|
const projectManifest = await readJson<SanityJson>(path.join(workDir, 'sanity.json'))
|
|
46
45
|
inProjectContext = Boolean(projectManifest.root)
|
|
47
|
-
} catch
|
|
46
|
+
} catch {
|
|
48
47
|
// Intentional noop
|
|
49
48
|
}
|
|
50
49
|
|
|
@@ -185,7 +184,7 @@ function getZip(url: string): Promise<decompress.File[]> {
|
|
|
185
184
|
function parseJson<T = any>(json: string): T | undefined {
|
|
186
185
|
try {
|
|
187
186
|
return JSON.parse(json)
|
|
188
|
-
} catch
|
|
187
|
+
} catch {
|
|
189
188
|
return undefined
|
|
190
189
|
}
|
|
191
190
|
}
|
|
@@ -86,8 +86,8 @@ export async function bootstrapLocalTemplate(
|
|
|
86
86
|
const dependencyVersions = await resolveLatestVersions({
|
|
87
87
|
...(isAppTemplate ? {} : studioDependencies.dependencies),
|
|
88
88
|
...(isAppTemplate ? {} : studioDependencies.devDependencies),
|
|
89
|
-
...
|
|
90
|
-
...
|
|
89
|
+
...template.dependencies,
|
|
90
|
+
...template.devDependencies,
|
|
91
91
|
})
|
|
92
92
|
spinner.succeed()
|
|
93
93
|
|
|
@@ -26,11 +26,11 @@ export function tryGitInit(rootDir: string, commitMessage?: string): boolean {
|
|
|
26
26
|
cwd: rootDir,
|
|
27
27
|
})
|
|
28
28
|
return true
|
|
29
|
-
} catch
|
|
29
|
+
} catch {
|
|
30
30
|
if (didInit) {
|
|
31
31
|
try {
|
|
32
32
|
rimrafSync(path.join(rootDir, '.git'))
|
|
33
|
-
} catch
|
|
33
|
+
} catch {
|
|
34
34
|
// intentional noop
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -42,7 +42,7 @@ function isInGitRepository(rootDir: string): boolean {
|
|
|
42
42
|
try {
|
|
43
43
|
execSync('git rev-parse --is-inside-work-tree', {stdio: 'ignore', cwd: rootDir})
|
|
44
44
|
return true
|
|
45
|
-
} catch
|
|
45
|
+
} catch {
|
|
46
46
|
// intentional noop
|
|
47
47
|
}
|
|
48
48
|
return false
|
|
@@ -52,7 +52,7 @@ function isInMercurialRepository(rootDir: string): boolean {
|
|
|
52
52
|
try {
|
|
53
53
|
execSync('hg --cwd . root', {stdio: 'ignore', cwd: rootDir})
|
|
54
54
|
return true
|
|
55
|
-
} catch
|
|
55
|
+
} catch {
|
|
56
56
|
// intentional noop
|
|
57
57
|
}
|
|
58
58
|
return false
|
|
@@ -679,24 +679,36 @@ export default async function initSanity(
|
|
|
679
679
|
const devCommand = devCommandMap[pkgManager]
|
|
680
680
|
|
|
681
681
|
const isCurrentDir = outputPath === process.cwd()
|
|
682
|
-
|
|
683
|
-
|
|
682
|
+
const goToProjectDir = `(${chalk.cyan(`cd ${outputPath}`)} to navigate to your new project directory)`
|
|
683
|
+
|
|
684
|
+
if (isAppTemplate) {
|
|
685
|
+
//output for custom apps here
|
|
686
|
+
print(`✅ ${chalk.green.bold('Success!')} Your custom app has been scaffolded.`)
|
|
687
|
+
if (!isCurrentDir) print(goToProjectDir)
|
|
684
688
|
print(
|
|
685
|
-
|
|
689
|
+
`\n${chalk.bold('Next')}, configure the project(s) and dataset(s) your app should work with.`,
|
|
686
690
|
)
|
|
691
|
+
print('\nGet started in `src/App.tsx`, or refer to our documentation for a walkthrough:')
|
|
692
|
+
print(chalk.blue.underline('https://www.sanity.io/docs/app-sdk/sdk-configuration'))
|
|
693
|
+
print('\n')
|
|
694
|
+
print(`Other helpful commands:`)
|
|
695
|
+
print(`npx sanity docs to open the documentation in a browser`)
|
|
696
|
+
print(`npx sanity dev to start the development server for your app`)
|
|
697
|
+
print(`npx sanity deploy to deploy your app`)
|
|
687
698
|
} else {
|
|
688
|
-
|
|
689
|
-
print(
|
|
699
|
+
//output for Studios here
|
|
700
|
+
print(`✅ ${chalk.green.bold('Success!')} Your Studio has been created.`)
|
|
701
|
+
if (!isCurrentDir) print(goToProjectDir)
|
|
690
702
|
print(
|
|
691
|
-
`
|
|
703
|
+
`Get started by running ${chalk.cyan(devCommand)} to launch your Studio’s development server`,
|
|
692
704
|
)
|
|
705
|
+
print('\n')
|
|
706
|
+
print(`Other helpful commands:`)
|
|
707
|
+
print(`npx sanity docs to open the documentation in a browser`)
|
|
708
|
+
print(`npx sanity manage to open the project settings in a browser`)
|
|
709
|
+
print(`npx sanity help to explore the CLI manual`)
|
|
693
710
|
}
|
|
694
711
|
|
|
695
|
-
print(`Other helpful commands`)
|
|
696
|
-
print(`npx sanity docs - to open the documentation in a browser`)
|
|
697
|
-
print(`npx sanity manage - to open the project settings in a browser`)
|
|
698
|
-
print(`npx sanity help - to explore the CLI manual`)
|
|
699
|
-
|
|
700
712
|
if (isFirstProject) {
|
|
701
713
|
trace.log({step: 'sendCommunityInvite', selectedOption: 'yes'})
|
|
702
714
|
|
|
@@ -713,7 +725,7 @@ export default async function initSanity(
|
|
|
713
725
|
print('')
|
|
714
726
|
|
|
715
727
|
// Provide login options (`sanity login`)
|
|
716
|
-
const {extOptions, ...otherArgs} = args
|
|
728
|
+
const {extOptions: _extOptions, ...otherArgs} = args
|
|
717
729
|
const loginArgs: CliCommandArguments<LoginFlags> = {...otherArgs, extOptions: {}}
|
|
718
730
|
await login(loginArgs, {...context, telemetry: trace.newContext('login')})
|
|
719
731
|
return getUserData(apiClient)
|
|
@@ -1117,7 +1129,7 @@ export default async function initSanity(
|
|
|
1117
1129
|
body: {metadata: {cliInitializedAt: new Date().toISOString()}},
|
|
1118
1130
|
})
|
|
1119
1131
|
}
|
|
1120
|
-
} catch
|
|
1132
|
+
} catch {
|
|
1121
1133
|
// Non-critical update
|
|
1122
1134
|
debug('Failed to update cliInitializedAt metadata')
|
|
1123
1135
|
}
|
|
@@ -10,9 +10,8 @@ import {type PackageJson} from '../../types'
|
|
|
10
10
|
*/
|
|
11
11
|
export function readPackageJson(filePath: string): PackageJson | undefined {
|
|
12
12
|
try {
|
|
13
|
-
// eslint-disable-next-line no-sync
|
|
14
13
|
return JSON.parse(fs.readFileSync(filePath, 'utf8'))
|
|
15
|
-
} catch
|
|
14
|
+
} catch {
|
|
16
15
|
return undefined
|
|
17
16
|
}
|
|
18
17
|
}
|
package/src/cli.ts
CHANGED
|
@@ -157,6 +157,9 @@ export async function runCli(cliRoot: string, {cliVersion}: {cliVersion: string}
|
|
|
157
157
|
const error = typeof err.details === 'string' ? err.details : err
|
|
158
158
|
// eslint-disable-next-line no-console
|
|
159
159
|
console.error(`\n${error.stack ? neatStack(err) : error}`)
|
|
160
|
+
if (err.cause) {
|
|
161
|
+
console.error(`\nCaused by:\n\n${err.cause.stack ? neatStack(err.cause) : err.cause}`)
|
|
162
|
+
}
|
|
160
163
|
// eslint-disable-next-line no-process-exit
|
|
161
164
|
cliCommandTrace.error(error)
|
|
162
165
|
process.exit(1)
|
|
@@ -25,6 +25,9 @@ Examples:
|
|
|
25
25
|
# Add a Function with a specific type
|
|
26
26
|
sanity blueprints add function --fn-type document-publish
|
|
27
27
|
|
|
28
|
+
# Add a Function using an example
|
|
29
|
+
sanity blueprints add function --example example-name
|
|
30
|
+
|
|
28
31
|
# Add a JavaScript Function
|
|
29
32
|
sanity blueprints add function --js
|
|
30
33
|
|
|
@@ -36,6 +39,8 @@ Examples:
|
|
|
36
39
|
`
|
|
37
40
|
|
|
38
41
|
export interface BlueprintsAddFlags {
|
|
42
|
+
'example'?: string
|
|
43
|
+
|
|
39
44
|
'name'?: string
|
|
40
45
|
'n'?: string
|
|
41
46
|
|
|
@@ -44,8 +49,8 @@ export interface BlueprintsAddFlags {
|
|
|
44
49
|
'fn-language'?: string
|
|
45
50
|
'lang'?: string
|
|
46
51
|
|
|
47
|
-
'js'?: boolean
|
|
48
52
|
'javascript'?: boolean
|
|
53
|
+
'js'?: boolean
|
|
49
54
|
|
|
50
55
|
'fn-helpers'?: boolean
|
|
51
56
|
'helpers'?: boolean
|
|
@@ -73,7 +78,31 @@ const addBlueprintsCommand: CliCommandDefinition<BlueprintsAddFlags> = {
|
|
|
73
78
|
|
|
74
79
|
async action(args, context) {
|
|
75
80
|
const {output, apiClient} = context
|
|
76
|
-
const
|
|
81
|
+
const {extOptions} = args
|
|
82
|
+
|
|
83
|
+
if (extOptions.example) {
|
|
84
|
+
// example is exclusive to 'name', 'fn-type', 'fn-language', 'javascript', 'fn-helpers', 'fn-installer'
|
|
85
|
+
// check before merging default flags
|
|
86
|
+
const conflictingFlags: (keyof BlueprintsAddFlags)[] = [
|
|
87
|
+
'name',
|
|
88
|
+
'n',
|
|
89
|
+
'fn-type',
|
|
90
|
+
'fn-language',
|
|
91
|
+
'lang',
|
|
92
|
+
'javascript',
|
|
93
|
+
'js',
|
|
94
|
+
'fn-helpers',
|
|
95
|
+
'helpers',
|
|
96
|
+
'fn-installer',
|
|
97
|
+
'installer',
|
|
98
|
+
]
|
|
99
|
+
const foundConflict = conflictingFlags.find((key) => extOptions[key])
|
|
100
|
+
if (foundConflict) {
|
|
101
|
+
throw new Error(`--example can't be used with --${foundConflict}`)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const flags = {...defaultFlags, ...extOptions}
|
|
77
106
|
|
|
78
107
|
const client = apiClient({
|
|
79
108
|
requireUser: true,
|
|
@@ -108,6 +137,7 @@ const addBlueprintsCommand: CliCommandDefinition<BlueprintsAddFlags> = {
|
|
|
108
137
|
...cmdConfig.value,
|
|
109
138
|
args: {type: resourceType},
|
|
110
139
|
flags: {
|
|
140
|
+
'example': flags.example,
|
|
111
141
|
'name': flags.n ?? flags.name,
|
|
112
142
|
'fn-type': flags['fn-type'],
|
|
113
143
|
'language': flags.lang ?? flags['fn-language'],
|
|
@@ -9,14 +9,18 @@ Options
|
|
|
9
9
|
--project-id <id> Project ID to use
|
|
10
10
|
|
|
11
11
|
Examples:
|
|
12
|
-
# Create a new Blueprint
|
|
12
|
+
# Create a new Blueprint project in the current directory
|
|
13
13
|
sanity blueprints init
|
|
14
14
|
|
|
15
|
-
# Create a new Blueprint
|
|
15
|
+
# Create a new Blueprint project in a specific directory
|
|
16
16
|
sanity blueprints init my-sanity-project --type json
|
|
17
|
+
|
|
18
|
+
# Create a new Blueprint project in a specific directory with an example
|
|
19
|
+
sanity blueprints init --example example-name
|
|
17
20
|
`
|
|
18
21
|
|
|
19
22
|
export interface BlueprintsInitFlags {
|
|
23
|
+
'example'?: string
|
|
20
24
|
'dir'?: string
|
|
21
25
|
'blueprint-type'?: string
|
|
22
26
|
'type'?: string
|
|
@@ -56,6 +60,22 @@ const initBlueprintsCommand: CliCommandDefinition<BlueprintsInitFlags> = {
|
|
|
56
60
|
|
|
57
61
|
const {blueprintInitCore} = await import('@sanity/runtime-cli/cores/blueprints')
|
|
58
62
|
|
|
63
|
+
if (flags.example) {
|
|
64
|
+
const conflictingFlags: (keyof BlueprintsInitFlags)[] = [
|
|
65
|
+
'blueprint-type',
|
|
66
|
+
'type',
|
|
67
|
+
'stack-id',
|
|
68
|
+
'stackId',
|
|
69
|
+
'stack',
|
|
70
|
+
'stack-name',
|
|
71
|
+
'name',
|
|
72
|
+
]
|
|
73
|
+
const foundConflict = conflictingFlags.find((key) => flags[key])
|
|
74
|
+
if (foundConflict) {
|
|
75
|
+
throw new Error(`--example can't be used with --${foundConflict}`)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
59
79
|
const {success, error} = await blueprintInitCore({
|
|
60
80
|
bin: 'sanity',
|
|
61
81
|
log: (message) => output.print(message),
|
|
@@ -64,6 +84,7 @@ const initBlueprintsCommand: CliCommandDefinition<BlueprintsInitFlags> = {
|
|
|
64
84
|
dir: dir ?? flags.dir,
|
|
65
85
|
},
|
|
66
86
|
flags: {
|
|
87
|
+
'example': flags.example,
|
|
67
88
|
'blueprint-type': flags['blueprint-type'] ?? flags.type,
|
|
68
89
|
'project-id': flags['project-id'] ?? flags.projectId ?? flags.project,
|
|
69
90
|
'stack-id': flags['stack-id'] ?? flags.stackId ?? flags.stack,
|
|
@@ -95,7 +95,7 @@ export interface InitFlags {
|
|
|
95
95
|
'package-manager'?: PackageManager
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
const initCommand: CliCommandDefinition<InitFlags> = {
|
|
99
99
|
name: 'init',
|
|
100
100
|
signature: '',
|
|
101
101
|
description: 'Initializes a new Sanity Studio and/or project',
|
|
@@ -18,32 +18,44 @@ export async function installDeclaredPackages(
|
|
|
18
18
|
encoding: 'utf8',
|
|
19
19
|
env: getPartialEnvWithNpmPath(cwd),
|
|
20
20
|
cwd,
|
|
21
|
-
stdio: '
|
|
21
|
+
stdio: 'pipe',
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
// results of running execa with the selected package manager
|
|
25
25
|
let result: ExecaReturnValue<string> | undefined
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
output.print(`Running 'pnpm ${pnpmArgs.join(' ')}'`)
|
|
36
|
-
result = await execa('pnpm', pnpmArgs, execOptions)
|
|
37
|
-
} else if (packageManager === 'bun') {
|
|
38
|
-
const bunArgs = ['install']
|
|
39
|
-
output.print(`Running 'bun ${bunArgs.join(' ')}'`)
|
|
40
|
-
result = await execa('bun', bunArgs, execOptions)
|
|
41
|
-
} else if (packageManager === 'manual') {
|
|
42
|
-
output.print(`Manual installation selected - run 'npm ${npmArgs.join(' ')}' or similar`)
|
|
26
|
+
|
|
27
|
+
type PackageManagerLibs = Exclude<PackageManager, 'manual'>
|
|
28
|
+
type InstallerArgs = {[key in PackageManagerLibs]: string[]}
|
|
29
|
+
|
|
30
|
+
const installerArgs: InstallerArgs = {
|
|
31
|
+
npm: ['install', '--legacy-peer-deps'],
|
|
32
|
+
yarn: ['install'],
|
|
33
|
+
pnpm: ['install'],
|
|
34
|
+
bun: ['install'],
|
|
43
35
|
}
|
|
44
36
|
|
|
45
|
-
|
|
46
|
-
|
|
37
|
+
async function handleInstall(cmd: PackageManager, args: InstallerArgs[PackageManagerLibs]) {
|
|
38
|
+
// Start a spinner for the install process
|
|
39
|
+
const progress = output.spinner(`Running ${cmd} ${args.join(' ')}\n`).start()
|
|
40
|
+
|
|
41
|
+
// Perform the install command with execa
|
|
42
|
+
result = await execa(cmd, args, execOptions)
|
|
43
|
+
|
|
44
|
+
// If the install fails, log execa's stdout and throw…
|
|
45
|
+
if (result?.exitCode || result?.failed) {
|
|
46
|
+
progress.fail()
|
|
47
|
+
output.print(result.stdout)
|
|
48
|
+
throw new Error('Dependency installation failed')
|
|
49
|
+
} else {
|
|
50
|
+
// …otherwise, just mark the install as successful
|
|
51
|
+
progress.succeed()
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (packageManager === 'manual') {
|
|
56
|
+
output.print(`Manual installation selected — run 'npm ${installerArgs.npm} or equivalent'`)
|
|
57
|
+
} else {
|
|
58
|
+
await handleInstall(packageManager, installerArgs[packageManager])
|
|
47
59
|
}
|
|
48
60
|
}
|
|
49
61
|
|
package/src/util/cliWorker.ts
CHANGED
|
@@ -28,7 +28,7 @@ export async function getCliWorkerPath(workerPath: string): Promise<string> {
|
|
|
28
28
|
const resolvedPath = path.resolve(cliDir, 'lib', 'workers', workerPath)
|
|
29
29
|
try {
|
|
30
30
|
return require.resolve(resolvedPath)
|
|
31
|
-
} catch
|
|
31
|
+
} catch {
|
|
32
32
|
throw new Error(`Unable to resolve path for worker: ${workerPath}`)
|
|
33
33
|
}
|
|
34
34
|
}
|
package/src/util/getCliConfig.ts
CHANGED
|
@@ -35,14 +35,15 @@ export async function getCliConfig(
|
|
|
35
35
|
if (forked) {
|
|
36
36
|
try {
|
|
37
37
|
return await getCliConfigForked(cwd)
|
|
38
|
-
} catch
|
|
38
|
+
} catch {
|
|
39
39
|
// Intentional noop - try unforked variant
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
const {unregister} = __DEV__
|
|
44
44
|
? {unregister: () => undefined}
|
|
45
|
-
:
|
|
45
|
+
: // eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
46
|
+
require('esbuild-register/dist/node').register({supported: {'dynamic-import': true}})
|
|
46
47
|
|
|
47
48
|
try {
|
|
48
49
|
const v3Config = getSanityCliConfig(cwd)
|
|
@@ -68,7 +69,6 @@ async function getCliConfigForked(cwd: string): Promise<CliConfigResult | null>
|
|
|
68
69
|
return new Promise((resolve, reject) => {
|
|
69
70
|
const worker = new Worker(workerPath, {
|
|
70
71
|
workerData: cwd,
|
|
71
|
-
// eslint-disable-next-line no-process-env
|
|
72
72
|
env: process.env,
|
|
73
73
|
})
|
|
74
74
|
worker.on('message', (message) => {
|
|
@@ -154,7 +154,7 @@ export async function fetchJourneyConfig(
|
|
|
154
154
|
schemaUrl: response.schemaUrl,
|
|
155
155
|
isFirstProject: true,
|
|
156
156
|
}
|
|
157
|
-
} catch
|
|
157
|
+
} catch {
|
|
158
158
|
throw new Error(`Failed to fetch remote schema config: ${projectId}`)
|
|
159
159
|
}
|
|
160
160
|
}
|
|
@@ -169,7 +169,7 @@ async function fetchJourneySchema(schemaUrl: string): Promise<DocumentOrObject[]
|
|
|
169
169
|
try {
|
|
170
170
|
const response = await import(schemaUrl)
|
|
171
171
|
return response.default
|
|
172
|
-
} catch
|
|
172
|
+
} catch {
|
|
173
173
|
throw new Error(`Failed to fetch remote schema: ${schemaUrl}`)
|
|
174
174
|
}
|
|
175
175
|
}
|
|
@@ -264,7 +264,7 @@ export async function applyEnvVariables(
|
|
|
264
264
|
}
|
|
265
265
|
|
|
266
266
|
await writeFile(join(root, targetName), envContent)
|
|
267
|
-
} catch
|
|
267
|
+
} catch {
|
|
268
268
|
throw new Error(
|
|
269
269
|
'Failed to set environment variables. This could be due to file permissions or the .env file format. See https://www.sanity.io/docs/environment-variables for details on environment variable setup.',
|
|
270
270
|
)
|
|
@@ -278,7 +278,7 @@ export async function tryApplyPackageName(root: string, name: string): Promise<v
|
|
|
278
278
|
pkg.name = name
|
|
279
279
|
|
|
280
280
|
await writeFile(join(root, 'package.json'), JSON.stringify(pkg, null, 2))
|
|
281
|
-
} catch
|
|
281
|
+
} catch {
|
|
282
282
|
// noop
|
|
283
283
|
}
|
|
284
284
|
}
|
|
@@ -12,7 +12,6 @@ import createDebug from 'debug'
|
|
|
12
12
|
import {typeEvaluate, type TypeNode} from 'groq-js'
|
|
13
13
|
|
|
14
14
|
const $info = createDebug('sanity:codegen:generate:info')
|
|
15
|
-
const $warn = createDebug('sanity:codegen:generate:warn')
|
|
16
15
|
|
|
17
16
|
export interface TypegenGenerateTypesWorkerData {
|
|
18
17
|
workDir: string
|
package/templates/blog/README.md
CHANGED
|
@@ -7,5 +7,5 @@ Now you can do the following things:
|
|
|
7
7
|
- [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
|
|
8
8
|
- Check out the example frontend: [React/Next.js](https://github.com/sanity-io/tutorial-sanity-blog-react-next)
|
|
9
9
|
- [Read the blog post about this template](https://www.sanity.io/blog/build-your-own-blog-with-sanity-and-next-js?utm_source=readme)
|
|
10
|
-
- [Join the community Slack](https://
|
|
10
|
+
- [Join the community Slack](https://snty.link/community/?utm_source=readme)
|
|
11
11
|
- [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
|
|
@@ -5,5 +5,5 @@ Congratulations, you have now installed the Sanity Content Studio, an open-sourc
|
|
|
5
5
|
Now you can do the following things:
|
|
6
6
|
|
|
7
7
|
- [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
|
|
8
|
-
- [Join the community Slack](https://
|
|
8
|
+
- [Join the community Slack](https://snty.link/community/?utm_source=readme)
|
|
9
9
|
- [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
|
|
@@ -7,5 +7,5 @@ Now you can do the following things:
|
|
|
7
7
|
- [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
|
|
8
8
|
- Check out the example frontend: [Vue/Nuxt.js](https://github.com/sanity-io/example-ecommerce-snipcart-vue)
|
|
9
9
|
- [Read the blog post about this template](https://www.sanity.io/blog/e-commerce-vue-nuxt-snipcart?uutm_source=readme)
|
|
10
|
-
- [Join the community Slack](https://
|
|
10
|
+
- [Join the community Slack](https://snty.link/community/?utm_source=readme)
|
|
11
11
|
- [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
|
|
@@ -5,5 +5,5 @@ Congratulations, you have now installed the Sanity Content Studio, an open-sourc
|
|
|
5
5
|
Now you can do the following things:
|
|
6
6
|
|
|
7
7
|
- [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
|
|
8
|
-
- [Join the community Slack](https://
|
|
8
|
+
- [Join the community Slack](https://snty.link/community/?utm_source=readme)
|
|
9
9
|
- [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
|
|
@@ -6,5 +6,5 @@ Now you can do the following things:
|
|
|
6
6
|
|
|
7
7
|
- [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
|
|
8
8
|
- Check out one of the example frontends: [React](https://github.com/sanity-io/example-frontend-next-js) | [React Native](https://github.com/sanity-io/example-app-react-native) | [Vue](https://github.com/sanity-io/example-frontend-vue-js) | [PHP](https://github.com/sanity-io/example-frontend-silex-twig)
|
|
9
|
-
- [Join the community Slack](https://
|
|
9
|
+
- [Join the community Slack](https://snty.link/community/?utm_source=readme)
|
|
10
10
|
- [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
|
|
@@ -5,5 +5,5 @@ Congratulations, you have now installed Sanity Studio, an open-source real-time
|
|
|
5
5
|
Now you can do the following things:
|
|
6
6
|
|
|
7
7
|
- [Read “getting started” in the docs](https://www.sanity.io/docs/introduction/getting-started?utm_source=readme)
|
|
8
|
-
- [Join the community Slack](https://
|
|
8
|
+
- [Join the community Slack](https://snty.link/community/?utm_source=readme)
|
|
9
9
|
- [Extend and build plugins](https://www.sanity.io/docs/content-studio/extending?utm_source=readme)
|