@sanity/plugin-kit 2.2.0 → 3.1.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.
Files changed (228) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +53 -38
  3. package/assets/inject/semver-workflow/lint-staged.template.js +1 -1
  4. package/bin/plugin-kit.js +2 -0
  5. package/dist/_chunks/cli-dbe00b65.js +162 -0
  6. package/dist/_chunks/cli-dbe00b65.js.map +1 -0
  7. package/dist/_chunks/init-2a3b4528.js +104 -0
  8. package/dist/_chunks/init-2a3b4528.js.map +1 -0
  9. package/dist/_chunks/init-7cd30f64.js +952 -0
  10. package/dist/_chunks/init-7cd30f64.js.map +1 -0
  11. package/dist/_chunks/inject-f8928379.js +49 -0
  12. package/dist/_chunks/inject-f8928379.js.map +1 -0
  13. package/dist/_chunks/link-watch-9e3f1174.js +94 -0
  14. package/dist/_chunks/link-watch-9e3f1174.js.map +1 -0
  15. package/dist/_chunks/package-bdb22a22.js +2314 -0
  16. package/dist/_chunks/package-bdb22a22.js.map +1 -0
  17. package/dist/_chunks/package-f79f12a7.js +152 -0
  18. package/dist/_chunks/package-f79f12a7.js.map +1 -0
  19. package/dist/_chunks/ts-5747e004.js +167 -0
  20. package/dist/_chunks/ts-5747e004.js.map +1 -0
  21. package/dist/_chunks/verify-package-73b843df.js +98 -0
  22. package/dist/_chunks/verify-package-73b843df.js.map +1 -0
  23. package/dist/_chunks/verify-studio-5e333969.js +75 -0
  24. package/dist/_chunks/verify-studio-5e333969.js.map +1 -0
  25. package/dist/_chunks/version-f89917d7.js +58 -0
  26. package/dist/_chunks/version-f89917d7.js.map +1 -0
  27. package/dist/cli.js +9 -0
  28. package/dist/cli.js.map +1 -0
  29. package/dist/index.d.ts +1 -0
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -0
  32. package/package.json +29 -17
  33. package/src/actions/init.ts +2 -0
  34. package/src/actions/inject.ts +66 -87
  35. package/src/actions/link-watch.ts +8 -5
  36. package/src/actions/verify/types.ts +0 -23
  37. package/src/actions/verify/validations.ts +142 -39
  38. package/src/actions/verify/verify-common.ts +5 -4
  39. package/src/actions/verify-package.ts +21 -7
  40. package/src/actions/verify-studio.ts +7 -4
  41. package/src/cli.ts +1 -3
  42. package/src/cmds/index.ts +18 -6
  43. package/src/cmds/inject.ts +5 -2
  44. package/src/cmds/link-watch.ts +0 -1
  45. package/src/configs/default-source.ts +10 -14
  46. package/src/configs/eslint.ts +51 -0
  47. package/src/configs/forced-package-versions.ts +8 -7
  48. package/src/configs/git.ts +68 -0
  49. package/src/configs/pkg-config.ts +31 -0
  50. package/src/configs/prettier.ts +11 -0
  51. package/src/configs/tsconfig.ts +79 -0
  52. package/src/configs/uselessFiles.ts +1 -1
  53. package/src/constants.ts +2 -0
  54. package/src/index.ts +1 -4
  55. package/src/npm/package.ts +62 -26
  56. package/src/presets/presets.ts +2 -1
  57. package/src/presets/renovatebot.ts +10 -1
  58. package/src/presets/semver-workflow.ts +26 -14
  59. package/src/presets/ui-workshop.ts +28 -12
  60. package/src/presets/ui.ts +68 -0
  61. package/src/sanity/manifest.ts +2 -2
  62. package/src/util/files.ts +8 -8
  63. package/src/util/readme.ts +17 -15
  64. package/src/util/ts.ts +13 -0
  65. package/assets/inject/gitignore +0 -57
  66. package/assets/inject/package.config.template +0 -16
  67. package/assets/inject/template-tsconfig.json +0 -24
  68. package/lib/package.json +0 -129
  69. package/lib/src/actions/init.d.ts +0 -73
  70. package/lib/src/actions/init.js +0 -79
  71. package/lib/src/actions/init.js.map +0 -1
  72. package/lib/src/actions/inject.d.ts +0 -31
  73. package/lib/src/actions/inject.js +0 -350
  74. package/lib/src/actions/inject.js.map +0 -1
  75. package/lib/src/actions/link-watch.d.ts +0 -3
  76. package/lib/src/actions/link-watch.js +0 -87
  77. package/lib/src/actions/link-watch.js.map +0 -1
  78. package/lib/src/actions/verify/types.d.ts +0 -75
  79. package/lib/src/actions/verify/types.js +0 -3
  80. package/lib/src/actions/verify/types.js.map +0 -1
  81. package/lib/src/actions/verify/validations.d.ts +0 -27
  82. package/lib/src/actions/verify/validations.js +0 -410
  83. package/lib/src/actions/verify/validations.js.map +0 -1
  84. package/lib/src/actions/verify/verify-common.d.ts +0 -44
  85. package/lib/src/actions/verify/verify-common.js +0 -89
  86. package/lib/src/actions/verify/verify-common.js.map +0 -1
  87. package/lib/src/actions/verify-package.d.ts +0 -5
  88. package/lib/src/actions/verify-package.js +0 -73
  89. package/lib/src/actions/verify-package.js.map +0 -1
  90. package/lib/src/actions/verify-studio.d.ts +0 -5
  91. package/lib/src/actions/verify-studio.js +0 -55
  92. package/lib/src/actions/verify-studio.js.map +0 -1
  93. package/lib/src/cli.d.ts +0 -2
  94. package/lib/src/cli.js +0 -87
  95. package/lib/src/cli.js.map +0 -1
  96. package/lib/src/cmds/index.d.ts +0 -9
  97. package/lib/src/cmds/index.js +0 -11
  98. package/lib/src/cmds/index.js.map +0 -1
  99. package/lib/src/cmds/init.d.ts +0 -4
  100. package/lib/src/cmds/init.js +0 -95
  101. package/lib/src/cmds/init.js.map +0 -1
  102. package/lib/src/cmds/inject.d.ts +0 -4
  103. package/lib/src/cmds/inject.js +0 -76
  104. package/lib/src/cmds/inject.js.map +0 -1
  105. package/lib/src/cmds/link-watch.d.ts +0 -4
  106. package/lib/src/cmds/link-watch.js +0 -49
  107. package/lib/src/cmds/link-watch.js.map +0 -1
  108. package/lib/src/cmds/verify-package.d.ts +0 -4
  109. package/lib/src/cmds/verify-package.js +0 -38
  110. package/lib/src/cmds/verify-package.js.map +0 -1
  111. package/lib/src/cmds/verify-studio.d.ts +0 -4
  112. package/lib/src/cmds/verify-studio.js +0 -38
  113. package/lib/src/cmds/verify-studio.js.map +0 -1
  114. package/lib/src/cmds/verify.d.ts +0 -0
  115. package/lib/src/cmds/verify.js +0 -42
  116. package/lib/src/cmds/verify.js.map +0 -1
  117. package/lib/src/cmds/version.d.ts +0 -4
  118. package/lib/src/cmds/version.js +0 -55
  119. package/lib/src/cmds/version.js.map +0 -1
  120. package/lib/src/configs/banned-packages.d.ts +0 -2
  121. package/lib/src/configs/banned-packages.js +0 -30
  122. package/lib/src/configs/banned-packages.js.map +0 -1
  123. package/lib/src/configs/buildExtensions.d.ts +0 -1
  124. package/lib/src/configs/buildExtensions.js +0 -5
  125. package/lib/src/configs/buildExtensions.js.map +0 -1
  126. package/lib/src/configs/default-source.d.ts +0 -3
  127. package/lib/src/configs/default-source.js +0 -70
  128. package/lib/src/configs/default-source.js.map +0 -1
  129. package/lib/src/configs/forced-package-versions.d.ts +0 -16
  130. package/lib/src/configs/forced-package-versions.js +0 -14
  131. package/lib/src/configs/forced-package-versions.js.map +0 -1
  132. package/lib/src/configs/uselessFiles.d.ts +0 -1
  133. package/lib/src/configs/uselessFiles.js +0 -33
  134. package/lib/src/configs/uselessFiles.js.map +0 -1
  135. package/lib/src/constants.d.ts +0 -11
  136. package/lib/src/constants.js +0 -15
  137. package/lib/src/constants.js.map +0 -1
  138. package/lib/src/dependencies/find.d.ts +0 -0
  139. package/lib/src/dependencies/find.js +0 -195
  140. package/lib/src/dependencies/find.js.map +0 -1
  141. package/lib/src/dependencies/import-linter.d.ts +0 -3
  142. package/lib/src/dependencies/import-linter.js +0 -112
  143. package/lib/src/dependencies/import-linter.js.map +0 -1
  144. package/lib/src/index.d.ts +0 -2
  145. package/lib/src/index.js +0 -6
  146. package/lib/src/index.js.map +0 -1
  147. package/lib/src/npm/manager.d.ts +0 -7
  148. package/lib/src/npm/manager.js +0 -62
  149. package/lib/src/npm/manager.js.map +0 -1
  150. package/lib/src/npm/package.d.ts +0 -11
  151. package/lib/src/npm/package.js +0 -302
  152. package/lib/src/npm/package.js.map +0 -1
  153. package/lib/src/npm/publish.d.ts +0 -1
  154. package/lib/src/npm/publish.js +0 -14
  155. package/lib/src/npm/publish.js.map +0 -1
  156. package/lib/src/npm/resolveLatestVersions.d.ts +0 -3
  157. package/lib/src/npm/resolveLatestVersions.js +0 -37
  158. package/lib/src/npm/resolveLatestVersions.js.map +0 -1
  159. package/lib/src/presets/presets.d.ts +0 -8
  160. package/lib/src/presets/presets.js +0 -53
  161. package/lib/src/presets/presets.js.map +0 -1
  162. package/lib/src/presets/renovatebot.d.ts +0 -2
  163. package/lib/src/presets/renovatebot.js +0 -24
  164. package/lib/src/presets/renovatebot.js.map +0 -1
  165. package/lib/src/presets/semver-workflow.d.ts +0 -8
  166. package/lib/src/presets/semver-workflow.js +0 -166
  167. package/lib/src/presets/semver-workflow.js.map +0 -1
  168. package/lib/src/presets/ui-workshop.d.ts +0 -2
  169. package/lib/src/presets/ui-workshop.js +0 -88
  170. package/lib/src/presets/ui-workshop.js.map +0 -1
  171. package/lib/src/sanity/manifest.d.ts +0 -48
  172. package/lib/src/sanity/manifest.js +0 -263
  173. package/lib/src/sanity/manifest.js.map +0 -1
  174. package/lib/src/sharedFlags.d.ts +0 -15
  175. package/lib/src/sharedFlags.js +0 -17
  176. package/lib/src/sharedFlags.js.map +0 -1
  177. package/lib/src/util/command-parser.d.ts +0 -9
  178. package/lib/src/util/command-parser.js +0 -46
  179. package/lib/src/util/command-parser.js.map +0 -1
  180. package/lib/src/util/errorToUndefined.d.ts +0 -1
  181. package/lib/src/util/errorToUndefined.js +0 -11
  182. package/lib/src/util/errorToUndefined.js.map +0 -1
  183. package/lib/src/util/files.d.ts +0 -36
  184. package/lib/src/util/files.js +0 -264
  185. package/lib/src/util/files.js.map +0 -1
  186. package/lib/src/util/log.d.ts +0 -14
  187. package/lib/src/util/log.js +0 -36
  188. package/lib/src/util/log.js.map +0 -1
  189. package/lib/src/util/prompt.d.ts +0 -14
  190. package/lib/src/util/prompt.js +0 -75
  191. package/lib/src/util/prompt.js.map +0 -1
  192. package/lib/src/util/readme.d.ts +0 -8
  193. package/lib/src/util/readme.js +0 -92
  194. package/lib/src/util/readme.js.map +0 -1
  195. package/lib/src/util/request.d.ts +0 -1
  196. package/lib/src/util/request.js +0 -19
  197. package/lib/src/util/request.js.map +0 -1
  198. package/lib/src/util/user.d.ts +0 -13
  199. package/lib/src/util/user.js +0 -111
  200. package/lib/src/util/user.js.map +0 -1
  201. package/lib/test/cli.test.d.ts +0 -1
  202. package/lib/test/cli.test.js +0 -64
  203. package/lib/test/cli.test.js.map +0 -1
  204. package/lib/test/fixture-utils.d.ts +0 -25
  205. package/lib/test/fixture-utils.js +0 -67
  206. package/lib/test/fixture-utils.js.map +0 -1
  207. package/lib/test/init-verify-build.test.d.ts +0 -1
  208. package/lib/test/init-verify-build.test.js +0 -68
  209. package/lib/test/init-verify-build.test.js.map +0 -1
  210. package/lib/test/init.test.d.ts +0 -1
  211. package/lib/test/init.test.js +0 -169
  212. package/lib/test/init.test.js.map +0 -1
  213. package/lib/test/inject.test.d.ts +0 -1
  214. package/lib/test/inject.test.js +0 -75
  215. package/lib/test/inject.test.js.map +0 -1
  216. package/lib/test/run-test-command.d.ts +0 -1
  217. package/lib/test/run-test-command.js +0 -6
  218. package/lib/test/run-test-command.js.map +0 -1
  219. package/lib/test/semver-workflow.test.d.ts +0 -1
  220. package/lib/test/semver-workflow.test.js +0 -93
  221. package/lib/test/semver-workflow.test.js.map +0 -1
  222. package/lib/test/verify-package.test.d.ts +0 -1
  223. package/lib/test/verify-package.test.js +0 -87
  224. package/lib/test/verify-package.test.js.map +0 -1
  225. package/lib/test/version.test.d.ts +0 -1
  226. package/lib/test/version.test.js +0 -48
  227. package/lib/test/version.test.js.map +0 -1
  228. package/src/cmds/verify.ts +0 -40
@@ -1,6 +1,6 @@
1
+ import {loadConfig as loadPackageConfig} from '@sanity/pkg-utils'
1
2
  import {getPackage} from '../npm/package'
2
3
  import log from '../util/log'
3
- import {readJson5File} from '../util/files'
4
4
  import {cliName, urls} from '../constants'
5
5
  import {validateImports} from '../dependencies/import-linter'
6
6
  import outdent from 'outdent'
@@ -11,18 +11,21 @@ import {
11
11
  VerifyFlags,
12
12
  VerifyPackageConfig,
13
13
  } from './verify/verify-common'
14
- import {PackageJson, TsConfig} from './verify/types'
14
+ import {PackageJson} from './verify/types'
15
15
  import {validateSanityDependencies, validateStudioConfig} from './verify/validations'
16
+ import {readTSConfig} from '../util/ts'
16
17
 
17
18
  export async function verifyStudio({basePath, flags}: {basePath: string; flags: VerifyFlags}) {
18
19
  let errors: string[] = []
19
20
 
20
21
  const packageJson: PackageJson = await getPackage({basePath, validate: false})
21
22
  const verifyConfig: VerifyPackageConfig = packageJson.sanityPlugin?.verifyPackage || {}
23
+ const packageConfig = await loadPackageConfig({cwd: basePath})
24
+ const tsconfig = packageConfig?.tsconfig ?? 'tsconfig.json'
22
25
 
23
26
  const validation = createValidator(verifyConfig, flags, errors)
24
27
 
25
- const tsConfig = await readJson5File<TsConfig>({basePath, filename: 'tsconfig.json'})
28
+ const ts = await readTSConfig({basePath, filename: tsconfig})
26
29
 
27
30
  await validation('studioConfig', async () => validateStudioConfig({basePath}))
28
31
  await validation('dependencies', async () => validateSanityDependencies(packageJson))
@@ -45,7 +48,7 @@ export async function verifyStudio({basePath, flags}: {basePath: string; flags:
45
48
  )
46
49
  }
47
50
 
48
- await runTscMaybe(verifyConfig, tsConfig)
51
+ await runTscMaybe(verifyConfig, ts)
49
52
 
50
53
  log.success(
51
54
  outdent`
package/src/cli.ts CHANGED
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env node
2
- 'use strict'
3
1
  import meow from 'meow'
4
2
  import log from './util/log'
5
3
  import commands from './cmds'
@@ -64,7 +62,7 @@ export async function cliEntry(argv = process.argv, autoExit = true) {
64
62
  }
65
63
 
66
64
  // Lazy-load command
67
- const cmd = require(commands[commandName as keyof typeof commands]).default
65
+ const cmd = commands[commandName as keyof typeof commands]
68
66
 
69
67
  try {
70
68
  log.setVerbosity(cli.flags)
package/src/cmds/index.ts CHANGED
@@ -1,8 +1,20 @@
1
1
  export default {
2
- init: require.resolve('./init'),
3
- inject: require.resolve('./inject'),
4
- 'link-watch': require.resolve('./link-watch'),
5
- 'verify-package': require.resolve('./verify-package'),
6
- 'verify-studio': require.resolve('./verify-studio'),
7
- version: require.resolve('./version'),
2
+ init: async (options: {argv: string[]}) => {
3
+ await (await import('./init')).default(options)
4
+ },
5
+ inject: async (options: {argv: string[]}) => {
6
+ await (await import('./inject')).default(options)
7
+ },
8
+ 'link-watch': async (options: {argv: string[]}) => {
9
+ await (await import('./link-watch')).default(options)
10
+ },
11
+ 'verify-package': async (options: {argv: string[]}) => {
12
+ await (await import('./verify-package')).default(options)
13
+ },
14
+ 'verify-studio': async (options: {argv: string[]}) => {
15
+ await (await import('./verify-studio')).default(options)
16
+ },
17
+ version: async (options: {argv: string[]}) => {
18
+ await (await import('./version')).default(options)
19
+ },
8
20
  }
@@ -1,10 +1,11 @@
1
+ import {loadConfig as loadPackageConfig} from '@sanity/pkg-utils'
1
2
  import path from 'path'
2
3
  import meow from 'meow'
3
4
  import log from '../util/log'
4
5
  import {inject} from '../actions/inject'
5
6
  import {findStudioV3Config} from '../sanity/manifest'
6
7
  import {initFlags} from '../actions/init'
7
- import {cliName} from '../constants'
8
+ import {cliName, defaultOutDir} from '../constants'
8
9
  import {presetHelpList} from '../presets/presets'
9
10
 
10
11
  const description = `Inject configuration into a Sanity plugin`
@@ -51,6 +52,8 @@ Examples
51
52
  async function run({argv}: {argv: string[]}) {
52
53
  const cli = meow(help, {flags: initFlags, argv, description})
53
54
  const basePath = path.resolve(cli.input[0] || process.cwd())
55
+ const packageConfig = await loadPackageConfig({cwd: basePath})
56
+ const outDir = packageConfig?.dist ?? defaultOutDir
54
57
 
55
58
  const {v3ConfigFile} = await findStudioV3Config(basePath)
56
59
  if (v3ConfigFile) {
@@ -60,7 +63,7 @@ async function run({argv}: {argv: string[]}) {
60
63
  }
61
64
  log.info('Inject config into plugin in "%s"', basePath)
62
65
 
63
- await inject({basePath, flags: cli.flags, validate: false})
66
+ await inject({basePath, outDir, flags: cli.flags, validate: false})
64
67
  log.info('Done!')
65
68
  }
66
69
 
@@ -22,7 +22,6 @@ To override the default watch command configuration, provide an override in pack
22
22
  "sanityPlugin": {
23
23
  "watchCommand": "microbundle watch --format modern,esm,cjs --jsx React.createElement --jsxImportSource react --css inline",
24
24
  "linkWatch": {
25
- "folder": "lib",
26
25
  "command": "npm run watch",
27
26
  "extensions": "js,png,svg,gif,jpeg,css"
28
27
  }
@@ -7,17 +7,15 @@ export function defaultSourceJs(pkg: PackageJson) {
7
7
  import {definePlugin} from 'sanity'
8
8
 
9
9
  /**
10
- * ## Usage in sanity.config.js (or .js)
10
+ * Usage in sanity.config.js (or .ts)
11
11
  *
12
- * \`\`\`
12
+ * \`\`\`js
13
13
  * import {defineConfig} from 'sanity'
14
14
  * import {myPlugin} from '${pkg.name}'
15
15
  *
16
- * export const defineConfig({
17
- * //...
18
- * plugins: [
19
- * myPlugin({})
20
- * ]
16
+ * export default defineConfig({
17
+ * // ...
18
+ * plugins: [myPlugin({})],
21
19
  * })
22
20
  * \`\`\`
23
21
  */
@@ -42,17 +40,15 @@ export function defaultSourceTs(pkg: PackageJson) {
42
40
  }
43
41
 
44
42
  /**
45
- * ## Usage in sanity.config.ts (or .js)
43
+ * Usage in \`sanity.config.ts\` (or .js)
46
44
  *
47
- * \`\`\`
45
+ * \`\`\`ts
48
46
  * import {defineConfig} from 'sanity'
49
47
  * import {myPlugin} from '${pkg.name}'
50
48
  *
51
- * export const defineConfig({
52
- * //...
53
- * plugins: [
54
- * myPlugin()
55
- * ]
49
+ * export default defineConfig({
50
+ * // ...
51
+ * plugins: [myPlugin()],
56
52
  * })
57
53
  * \`\`\`
58
54
  */
@@ -0,0 +1,51 @@
1
+ import {InjectTemplate} from '../actions/inject'
2
+ import {InitFlags} from '../actions/init'
3
+
4
+ export function eslintrcTemplate(options: {flags: InitFlags}): InjectTemplate {
5
+ const {flags} = options
6
+
7
+ const eslintConfig = {
8
+ root: true,
9
+ env: {
10
+ node: true,
11
+ browser: true,
12
+ },
13
+ extends: [
14
+ 'sanity',
15
+ flags.typescript && 'sanity/typescript',
16
+ 'sanity/react',
17
+ 'plugin:react-hooks/recommended',
18
+ flags.prettier && 'plugin:prettier/recommended',
19
+ 'plugin:react/jsx-runtime',
20
+ ].filter(Boolean),
21
+ }
22
+
23
+ return {
24
+ type: 'template',
25
+ force: flags.force,
26
+ to: '.eslintrc',
27
+ value: JSON.stringify(eslintConfig, null, 2),
28
+ }
29
+ }
30
+
31
+ export function eslintignoreTemplate(options: {flags: InitFlags; outDir: string}): InjectTemplate {
32
+ const {flags, outDir} = options
33
+
34
+ const patterns = [
35
+ '.eslintrc.js',
36
+ 'commitlint.config.js',
37
+ outDir,
38
+ 'lint-staged.config.js',
39
+ flags.typescript ? 'package.config.ts' : 'package.config.js',
40
+ flags.typescript ? '*.js' : '',
41
+ ].filter(Boolean)
42
+
43
+ patterns.sort()
44
+
45
+ return {
46
+ type: 'template',
47
+ force: flags.force,
48
+ to: '.eslintignore',
49
+ value: patterns.join('\n'),
50
+ }
51
+ }
@@ -1,12 +1,13 @@
1
- const sanityVersion = '^3.0.0'
1
+ export const forcedPackageVersions = {}
2
2
 
3
- export const forcedPackageVersions = {
3
+ export const forcedDevPackageVersions = forcedPackageVersions
4
+
5
+ export const forcedPeerPackageVersions = {
4
6
  react: '^18',
5
- '@types/react': '^18',
6
7
  'react-dom': '^18',
8
+ 'react-is': '^18',
9
+ '@types/react': '^18',
7
10
  '@types/react-dom': '^18',
8
- sanity: sanityVersion,
9
- '@sanity/ui': '^1.0.0',
11
+ sanity: '^3',
12
+ 'styled-components': '^5.2',
10
13
  }
11
-
12
- export const forcedDevPackageVersions = forcedPackageVersions
@@ -0,0 +1,68 @@
1
+ import {outdent} from 'outdent'
2
+ import {InjectTemplate} from '../actions/inject'
3
+
4
+ export function gitignoreTemplate(): InjectTemplate {
5
+ return {
6
+ type: 'template',
7
+ to: '.gitignore',
8
+ value: outdent`
9
+ # Logs
10
+ logs
11
+ *.log
12
+ npm-debug.log*
13
+
14
+ # Runtime data
15
+ pids
16
+ *.pid
17
+ *.seed
18
+
19
+ # Directory for instrumented libs generated by jscoverage/JSCover
20
+ lib-cov
21
+
22
+ # Coverage directory used by tools like istanbul
23
+ coverage
24
+
25
+ # nyc test coverage
26
+ .nyc_output
27
+
28
+ # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
29
+ .grunt
30
+
31
+ # node-waf configuration
32
+ .lock-wscript
33
+
34
+ # Compiled binary addons (http://nodejs.org/api/addons.html)
35
+ build/Release
36
+
37
+ # Dependency directories
38
+ node_modules
39
+ jspm_packages
40
+
41
+ # Optional npm cache directory
42
+ .npm
43
+
44
+ # Optional REPL history
45
+ .node_repl_history
46
+
47
+ # macOS finder cache file
48
+ .DS_Store
49
+
50
+ # VS Code settings
51
+ .vscode
52
+
53
+ # IntelliJ
54
+ .idea
55
+ *.iml
56
+
57
+ # Cache
58
+ .cache
59
+
60
+ # Yalc
61
+ .yalc
62
+ yalc.lock
63
+
64
+ # npm package zips
65
+ *.tgz
66
+ `,
67
+ }
68
+ }
@@ -0,0 +1,31 @@
1
+ import {outdent} from 'outdent'
2
+ import {InjectTemplate} from '../actions/inject'
3
+ import {InitFlags} from '../actions/init'
4
+
5
+ export function pkgConfigTemplate(options: {outDir: string; flags: InitFlags}): InjectTemplate {
6
+ const {flags, outDir} = options
7
+
8
+ return {
9
+ type: 'template',
10
+ force: flags.force,
11
+ to: flags.typescript ? 'package.config.ts' : 'package.config.js',
12
+ value: outdent`
13
+ import {defineConfig} from '@sanity/pkg-utils'
14
+
15
+ export default defineConfig({
16
+ legacyExports: true,
17
+ tsconfig: 'tsconfig.${outDir}.json',
18
+
19
+ // Remove this block to enable strict export validation
20
+ extract: {
21
+ rules: {
22
+ 'ae-forgotten-export': 'off',
23
+ 'ae-incompatible-release-tags': 'off',
24
+ 'ae-internal-missing-underscore': 'off',
25
+ 'ae-missing-release-tag': 'off',
26
+ },
27
+ },
28
+ })
29
+ `,
30
+ }
31
+ }
@@ -0,0 +1,11 @@
1
+ import {InjectTemplate} from '../actions/inject'
2
+
3
+ export function prettierignoreTemplate(options: {outDir: string}): InjectTemplate {
4
+ const {outDir} = options
5
+
6
+ return {
7
+ type: 'template',
8
+ to: '.prettierignore',
9
+ value: [outDir, 'pnpm-lock.yaml', 'yarn.lock', 'package-lock.json'].join('\n'),
10
+ }
11
+ }
@@ -0,0 +1,79 @@
1
+ import {outdent} from 'outdent'
2
+ import {InjectTemplate} from '../actions/inject'
3
+ import {InitFlags} from '../actions/init'
4
+
5
+ export function tsconfigTemplate(options: {flags: InitFlags}): InjectTemplate {
6
+ const {flags} = options
7
+
8
+ return {
9
+ type: 'template',
10
+ force: flags.force,
11
+ to: 'tsconfig.json',
12
+ value: outdent`
13
+ {
14
+ "extends": "./tsconfig.settings",
15
+ "include": ["./src", "./package.config.ts"],
16
+ "compilerOptions": {
17
+ "rootDir": ".",
18
+ "jsx": "react-jsx",
19
+ "noEmit": true
20
+ }
21
+ }
22
+ `,
23
+ }
24
+ }
25
+
26
+ export function tsconfigTemplateDist(options: {outDir: string; flags: InitFlags}): InjectTemplate {
27
+ const {flags, outDir} = options
28
+
29
+ return {
30
+ type: 'template',
31
+ force: flags.force,
32
+ to: `tsconfig.${outDir}.json`,
33
+ value: outdent`
34
+ {
35
+ "extends": "./tsconfig.settings",
36
+ "include": ["./src"],
37
+ "exclude": [
38
+ "./src/**/__fixtures__",
39
+ "./src/**/__mocks__",
40
+ "./src/**/*.test.ts",
41
+ "./src/**/*.test.tsx"
42
+ ],
43
+ "compilerOptions": {
44
+ "rootDir": ".",
45
+ "outDir": "./${outDir}",
46
+ "jsx": "react-jsx",
47
+ "emitDeclarationOnly": true
48
+ }
49
+ }
50
+ `,
51
+ }
52
+ }
53
+
54
+ export function tsconfigTemplateSettings(options: {flags: InitFlags}): InjectTemplate {
55
+ const {flags} = options
56
+
57
+ return {
58
+ type: 'template',
59
+ force: flags.force,
60
+ to: `tsconfig.settings.json`,
61
+ value: outdent`
62
+ {
63
+ "compilerOptions": {
64
+ "moduleResolution": "node",
65
+ "target": "esnext",
66
+ "module": "esnext",
67
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
68
+ "esModuleInterop": true,
69
+ "strict": true,
70
+ "downlevelIteration": true,
71
+ "declaration": true,
72
+ "allowSyntheticDefaultImports": true,
73
+ "skipLibCheck": true,
74
+ "isolatedModules": true
75
+ }
76
+ }
77
+ `,
78
+ }
79
+ }
@@ -10,7 +10,7 @@ export const uselessFiles = [
10
10
  '.gitignore',
11
11
  '.github',
12
12
  '.nyc_output',
13
- '.prettierrc.json',
13
+ '.prettierrc',
14
14
  '.stylelintignore',
15
15
  '.stylelintrc.json',
16
16
  '.stylelintrc',
package/src/constants.ts CHANGED
@@ -11,3 +11,5 @@ export const urls = {
11
11
  }
12
12
 
13
13
  export const incompatiblePluginPackage = '@sanity/incompatible-plugin'
14
+
15
+ export const defaultOutDir = 'dist'
package/src/index.ts CHANGED
@@ -1,4 +1 @@
1
- #!/usr/bin/env node
2
- import {cliEntry} from './cli'
3
-
4
- cliEntry()
1
+ export {}
@@ -13,10 +13,27 @@ import {cliName, incompatiblePluginPackage} from '../constants'
13
13
  import {InjectOptions, PackageData} from '../actions/inject'
14
14
  import {expectedScripts} from '../actions/verify/validations'
15
15
  import {PackageJson} from '../actions/verify/types'
16
- import {forcedDevPackageVersions, forcedPackageVersions} from '../configs/forced-package-versions'
16
+ import {
17
+ forcedDevPackageVersions,
18
+ forcedPackageVersions,
19
+ forcedPeerPackageVersions,
20
+ } from '../configs/forced-package-versions'
17
21
  const defaultDependencies = [incompatiblePluginPackage]
18
22
 
19
- const defaultDevDependencies = ['rimraf', 'react', 'sanity']
23
+ const defaultDevDependencies = [
24
+ 'npm-run-all',
25
+ 'rimraf',
26
+ 'sanity',
27
+
28
+ // peer dependencies of `sanity`
29
+ 'react',
30
+ 'react-dom',
31
+ 'styled-components',
32
+
33
+ // peer dependencies of `styled-components`
34
+ 'react-is',
35
+ ]
36
+
20
37
  const defaultPeerDependencies = ['react', 'sanity']
21
38
 
22
39
  const readFile = util.promisify(fs.readFile)
@@ -137,7 +154,7 @@ async function validatePaths(manifest: PackageJson, options: ManifestOptions) {
137
154
  }
138
155
 
139
156
  // We don't want to reference `./src/MyComponent.js` containing a bunch of JSX and whatnot,
140
- // instead we want to target `./lib/MyComponent.js` which is the location it'll be compiled to
157
+ // instead we want to target `./dist/MyComponent.js` which is the location it'll be compiled to
141
158
  if (!options?.flags?.allowSourceTarget && paths && withinSourceDir(manifestValue)) {
142
159
  throw new Error(
143
160
  `Invalid package.json: "${key}" points to file within source (uncompiled) directory. Use --allow-source-target if you really want to do this.`
@@ -188,7 +205,12 @@ function validateLockFiles(options: {basePath: string}) {
188
205
 
189
206
  export async function writePackageJson(data: PackageData, options: InjectOptions) {
190
207
  const {user, pluginName, license, description, pkg: prevPkg, gitOrigin} = data
191
- const {peerDependencies: addPeers, dependencies: addDeps, devDependencies: addDevDeps} = options
208
+ const {
209
+ outDir,
210
+ peerDependencies: addPeers,
211
+ dependencies: addDeps,
212
+ devDependencies: addDevDeps,
213
+ } = options
192
214
  const {flags} = options
193
215
  const prev = prevPkg || {}
194
216
 
@@ -200,7 +222,7 @@ export async function writePackageJson(data: PackageData, options: InjectOptions
200
222
 
201
223
  if (useTypescript) {
202
224
  log.debug('Using TypeScript. Adding to dev dependencies.')
203
- newDevDependencies.push('typescript')
225
+ newDevDependencies.push('@types/react', 'typescript')
204
226
  }
205
227
 
206
228
  if (usePrettier) {
@@ -228,11 +250,14 @@ export async function writePackageJson(data: PackageData, options: InjectOptions
228
250
  }
229
251
 
230
252
  log.debug('Resolving latest versions for %s', newDevDependencies.join(', '))
231
- const dependencies = forceDependencyVersions({
232
- ...(prev.dependencies || {}),
233
- ...(addDeps || {}),
234
- ...(await resolveLatestVersions(defaultDependencies)),
235
- })
253
+ const dependencies = forceDependencyVersions(
254
+ {
255
+ ...(prev.dependencies || {}),
256
+ ...(addDeps || {}),
257
+ ...(await resolveLatestVersions(defaultDependencies)),
258
+ },
259
+ forcedPackageVersions
260
+ )
236
261
  const devDependencies = forceDependencyVersions(
237
262
  {
238
263
  ...(addDevDeps || {}),
@@ -241,14 +266,22 @@ export async function writePackageJson(data: PackageData, options: InjectOptions
241
266
  },
242
267
  forcedDevPackageVersions
243
268
  )
244
- const peerDependencies = forceDependencyVersions({
245
- ...(prev.peerDependencies || {}),
246
- ...(addPeers || {}),
247
- ...(await resolveLatestVersions(defaultPeerDependencies)),
248
- })
269
+ const peerDependencies = forceDependencyVersions(
270
+ {
271
+ ...(prev.peerDependencies || {}),
272
+ ...(addPeers || {}),
273
+ ...(await resolveLatestVersions(defaultPeerDependencies)),
274
+ },
275
+ forcedPeerPackageVersions
276
+ )
249
277
 
250
278
  const source = flags.typescript ? './src/index.ts' : './src/index.js'
251
279
 
280
+ const files = [outDir, 'sanity.json', 'src', 'v2-incompatible.js']
281
+
282
+ // sort alphabetically for scanability
283
+ files.sort()
284
+
252
285
  // order should be compatible with prettier-plugin-packagejson
253
286
  const forcedOrder = {
254
287
  name: pluginName,
@@ -261,19 +294,19 @@ export async function writePackageJson(data: PackageData, options: InjectOptions
261
294
  author: user?.email ? `${user.name} <${user.email}>` : user?.name,
262
295
  exports: {
263
296
  '.': {
264
- ...(flags.typescript ? {types: './lib/src/index.d.ts'} : {}),
297
+ ...(flags.typescript ? {types: `./${outDir}/index.d.ts`} : {}),
265
298
  source,
266
- import: './lib/index.esm.js',
267
- require: './lib/index.js',
268
- default: './lib/index.esm.js',
299
+ import: `./${outDir}/index.esm.js`,
300
+ require: `./${outDir}/index.js`,
301
+ default: `./${outDir}/index.esm.js`,
269
302
  },
270
303
  './package.json': './package.json',
271
304
  },
272
- main: './lib/index.js',
273
- module: './lib/index.esm.js',
305
+ main: `./${outDir}/index.js`,
306
+ module: `./${outDir}/index.esm.js`,
274
307
  source,
275
- ...(flags.typescript ? {types: './lib/src/index.d.ts'} : {}),
276
- files: ['src', 'lib', 'v2-incompatible.js', 'sanity.json'],
308
+ ...(flags.typescript ? {types: `./${outDir}/index.d.ts`} : {}),
309
+ files,
277
310
  scripts: {...prev.scripts},
278
311
  dependencies: sortKeys(dependencies),
279
312
  devDependencies: sortKeys(devDependencies),
@@ -361,13 +394,15 @@ export async function writePackageJsonDirect(manifest: PackageJson, {basePath}:
361
394
  }
362
395
 
363
396
  export async function addBuildScripts(manifest: PackageJson, options: InjectOptions) {
397
+ const {outDir} = options
398
+
364
399
  if (!options.flags.scripts) {
365
400
  return false
366
401
  }
367
402
  return addPackageJsonScripts(manifest, options, (scripts) => {
368
- scripts.prebuild = addScript('npm run clean && ' + expectedScripts.prebuild, scripts.prebuild)
369
403
  scripts.build = addScript(expectedScripts.build, scripts.build)
370
- scripts.clean = addScript(`rimraf lib`, scripts.clean)
404
+ scripts.clean = addScript(`rimraf ${outDir}`, scripts.clean)
405
+ scripts.format = addScript(`prettier --write --cache --ignore-unknown .`, scripts.format)
371
406
  scripts['link-watch'] = addScript(expectedScripts['link-watch'], scripts['link-watch'])
372
407
  scripts.lint = addScript(`eslint .`, scripts.lint)
373
408
  scripts.prepublishOnly = addScript(expectedScripts.prepublishOnly, scripts.prepublishOnly)
@@ -386,7 +421,8 @@ export function sortKeys<T extends Record<string, unknown>>(unordered: T): T {
386
421
  }, {} as T)
387
422
  }
388
423
 
389
- function forceDependencyVersions(
424
+ /** @internal */
425
+ export function forceDependencyVersions(
390
426
  deps: Record<string, string>,
391
427
  versions = forcedPackageVersions
392
428
  ): Record<string, string> {
@@ -1,6 +1,7 @@
1
1
  import {InjectOptions} from '../actions/inject'
2
2
  import {semverWorkflowPreset} from './semver-workflow'
3
3
  import {renovatePreset} from './renovatebot'
4
+ import {ui} from './ui'
4
5
  import {uiWorkshop} from './ui-workshop'
5
6
 
6
7
  export interface Preset {
@@ -9,7 +10,7 @@ export interface Preset {
9
10
  apply: (options: InjectOptions) => Promise<void>
10
11
  }
11
12
 
12
- const presets: Preset[] = [semverWorkflowPreset, renovatePreset, uiWorkshop]
13
+ const presets: Preset[] = [semverWorkflowPreset, renovatePreset, ui, uiWorkshop]
13
14
  const presetNames = presets.map((p) => p?.name)
14
15
 
15
16
  export function presetHelpList(padStart: number) {
@@ -8,5 +8,14 @@ export const renovatePreset: Preset = {
8
8
  }
9
9
 
10
10
  async function applyPreset(options: InjectOptions) {
11
- await writeAssets([{from: ['renovatebot', 'renovate.json'], to: 'renovate.json'}], options)
11
+ await writeAssets(
12
+ [
13
+ {
14
+ type: 'copy',
15
+ from: ['renovatebot', 'renovate.json'],
16
+ to: 'renovate.json',
17
+ },
18
+ ],
19
+ options
20
+ )
12
21
  }