@sanity/plugin-kit 3.1.11 → 3.1.13-canary.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 (61) hide show
  1. package/assets/inject/semver-workflow/.github/workflows/main.yml +6 -6
  2. package/dist/_chunks-cjs/cli.js +135 -0
  3. package/dist/_chunks-cjs/cli.js.map +1 -0
  4. package/dist/_chunks-cjs/init.js +894 -0
  5. package/dist/_chunks-cjs/init.js.map +1 -0
  6. package/dist/_chunks-cjs/init2.js +83 -0
  7. package/dist/_chunks-cjs/init2.js.map +1 -0
  8. package/dist/_chunks-cjs/inject.js +54 -0
  9. package/dist/_chunks-cjs/inject.js.map +1 -0
  10. package/dist/_chunks-cjs/link-watch.js +84 -0
  11. package/dist/_chunks-cjs/link-watch.js.map +1 -0
  12. package/dist/_chunks-cjs/package.js +1808 -0
  13. package/dist/_chunks-cjs/package.js.map +1 -0
  14. package/dist/_chunks-cjs/package2.js +143 -0
  15. package/dist/_chunks-cjs/package2.js.map +1 -0
  16. package/dist/_chunks-cjs/ts.js +162 -0
  17. package/dist/_chunks-cjs/ts.js.map +1 -0
  18. package/dist/_chunks-cjs/verify-package.js +75 -0
  19. package/dist/_chunks-cjs/verify-package.js.map +1 -0
  20. package/dist/_chunks-cjs/verify-studio.js +57 -0
  21. package/dist/_chunks-cjs/verify-studio.js.map +1 -0
  22. package/dist/_chunks-cjs/version.js +51 -0
  23. package/dist/_chunks-cjs/version.js.map +1 -0
  24. package/dist/cli.d.ts +4 -0
  25. package/dist/cli.js +4 -7
  26. package/dist/cli.js.map +1 -1
  27. package/dist/index.js +1 -1
  28. package/package.json +57 -59
  29. package/src/actions/inject.ts +1 -1
  30. package/src/actions/verify/types.ts +0 -1
  31. package/src/actions/verify/validations.ts +13 -69
  32. package/src/actions/verify/verify-common.ts +0 -1
  33. package/src/actions/verify-package.ts +0 -2
  34. package/src/cli.ts +1 -0
  35. package/src/configs/forced-package-versions.ts +0 -1
  36. package/src/configs/pkg-config.ts +0 -1
  37. package/src/configs/tsconfig.ts +20 -21
  38. package/src/npm/package.ts +6 -17
  39. package/src/presets/ui.ts +0 -1
  40. package/dist/_chunks/cli-Wd1KIVDi.js +0 -168
  41. package/dist/_chunks/cli-Wd1KIVDi.js.map +0 -1
  42. package/dist/_chunks/init-5h0qT4Si.js +0 -966
  43. package/dist/_chunks/init-5h0qT4Si.js.map +0 -1
  44. package/dist/_chunks/init-7PO3ckQZ.js +0 -104
  45. package/dist/_chunks/init-7PO3ckQZ.js.map +0 -1
  46. package/dist/_chunks/inject-dEkit_VE.js +0 -49
  47. package/dist/_chunks/inject-dEkit_VE.js.map +0 -1
  48. package/dist/_chunks/link-watch-gjJZIMKf.js +0 -91
  49. package/dist/_chunks/link-watch-gjJZIMKf.js.map +0 -1
  50. package/dist/_chunks/package-esTAlA-W.js +0 -155
  51. package/dist/_chunks/package-esTAlA-W.js.map +0 -1
  52. package/dist/_chunks/package-yXL1pPXe.js +0 -2358
  53. package/dist/_chunks/package-yXL1pPXe.js.map +0 -1
  54. package/dist/_chunks/ts-DjETsLGv.js +0 -165
  55. package/dist/_chunks/ts-DjETsLGv.js.map +0 -1
  56. package/dist/_chunks/verify-package-8RX50rZW.js +0 -97
  57. package/dist/_chunks/verify-package-8RX50rZW.js.map +0 -1
  58. package/dist/_chunks/verify-studio-ybZTH8nM.js +0 -74
  59. package/dist/_chunks/verify-studio-ybZTH8nM.js.map +0 -1
  60. package/dist/_chunks/version-VsJ55gag.js +0 -54
  61. package/dist/_chunks/version-VsJ55gag.js.map +0 -1
@@ -45,8 +45,8 @@ jobs:
45
45
  runs-on: ubuntu-latest
46
46
  name: Lint & Build
47
47
  steps:
48
- - uses: actions/checkout@v3
49
- - uses: actions/setup-node@v3
48
+ - uses: actions/checkout@v4
49
+ - uses: actions/setup-node@v4
50
50
  with:
51
51
  cache: npm
52
52
  node-version: lts/*
@@ -85,8 +85,8 @@ jobs:
85
85
  run: |
86
86
  git config --global core.autocrlf false
87
87
  git config --global core.eol lf
88
- - uses: actions/checkout@v3
89
- - uses: actions/setup-node@v3
88
+ - uses: actions/checkout@v4
89
+ - uses: actions/setup-node@v4
90
90
  with:
91
91
  cache: npm
92
92
  node-version: ${{ matrix.node }}
@@ -105,12 +105,12 @@ jobs:
105
105
  runs-on: ubuntu-latest
106
106
  name: Semantic release
107
107
  steps:
108
- - uses: actions/checkout@v3
108
+ - uses: actions/checkout@v4
109
109
  with:
110
110
  # Need to fetch entire commit history to
111
111
  # analyze every commit since last release
112
112
  fetch-depth: 0
113
- - uses: actions/setup-node@v3
113
+ - uses: actions/setup-node@v4
114
114
  with:
115
115
  cache: npm
116
116
  node-version: lts/*
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var meow = require("meow"), chalk = require("chalk");
3
+ function _interopDefaultCompat(e) {
4
+ return e && typeof e == "object" && "default" in e ? e : { default: e };
5
+ }
6
+ var meow__default = /* @__PURE__ */ _interopDefaultCompat(meow), chalk__default = /* @__PURE__ */ _interopDefaultCompat(chalk);
7
+ let beQuiet = !1, beVerbose = !1;
8
+ function setVerbosity({ verbose, silent }) {
9
+ silent ? (beVerbose = !1, beQuiet = !0) : verbose && (beVerbose = !0, beQuiet = !1);
10
+ }
11
+ var log = {
12
+ setVerbosity,
13
+ // Bypasses any checks, prints regardless (only use for things like `cli --version`)
14
+ msg: (msg, ...args) => !beQuiet && console.log(msg, ...args),
15
+ // Debug only printed on --verbose
16
+ debug: (msg, ...args) => !beQuiet && beVerbose && console.debug(`${chalk__default.default.bgBlack.white("[debug]")} ${msg}`, ...args),
17
+ // Success messages only printed if not --silent
18
+ success: (msg, ...args) => !beQuiet && console.info(`${chalk__default.default.bgBlack.greenBright("[success]")} ${msg}`, ...args),
19
+ // Info only printed if not --silent ("standard" level)
20
+ info: (msg, ...args) => !beQuiet && console.info(`${chalk__default.default.bgBlack.cyanBright("[info]")} ${msg}`, ...args),
21
+ // Warning only printed if not --silent
22
+ warn: (msg, ...args) => !beQuiet && console.warn(`${chalk__default.default.bgBlack.yellowBright("[warn]")} ${msg}`, ...args),
23
+ // Errors are always printed
24
+ error: (msg, ...args) => console.error(`${chalk__default.default.bgBlack.redBright("[error]")} ${msg}`, ...args)
25
+ }, commands = {
26
+ init: async (options) => {
27
+ await (await Promise.resolve().then(function() {
28
+ return require("./init2.js");
29
+ })).default(options);
30
+ },
31
+ inject: async (options) => {
32
+ await (await Promise.resolve().then(function() {
33
+ return require("./inject.js");
34
+ })).default(options);
35
+ },
36
+ "link-watch": async (options) => {
37
+ await (await Promise.resolve().then(function() {
38
+ return require("./link-watch.js");
39
+ })).default(options);
40
+ },
41
+ "verify-package": async (options) => {
42
+ await (await Promise.resolve().then(function() {
43
+ return require("./verify-package.js");
44
+ })).default(options);
45
+ },
46
+ "verify-studio": async (options) => {
47
+ await (await Promise.resolve().then(function() {
48
+ return require("./verify-studio.js");
49
+ })).default(options);
50
+ },
51
+ version: async (options) => {
52
+ await (await Promise.resolve().then(function() {
53
+ return require("./version.js");
54
+ })).default(options);
55
+ }
56
+ }, sharedFlags = {
57
+ debug: {
58
+ default: !1,
59
+ type: "boolean"
60
+ },
61
+ silent: {
62
+ type: "boolean",
63
+ default: !1
64
+ },
65
+ verbose: {
66
+ type: "boolean",
67
+ default: !1
68
+ }
69
+ };
70
+ const cliName = "@sanity/plugin-kit", urls = {
71
+ refDocs: "https://beta.sanity.io/docs/reference",
72
+ migrationGuideStudio: "https://beta.sanity.io/docs/platform/v2-to-v3",
73
+ migrationGuidePlugin: "https://beta.sanity.io/docs/platform/v2-to-v3/plugins",
74
+ pluginReadme: "https://github.com/sanity-io/plugin-kit",
75
+ incompatiblePlugin: "https://github.com/sanity-io/incompatible-plugin",
76
+ sanityExchange: "https://www.sanity.io/exchange",
77
+ linterPackage: "https://github.com/sanity-io/eslint-config-no-v2-imports"
78
+ }, incompatiblePluginPackage = "@sanity/incompatible-plugin", defaultOutDir = "dist";
79
+ async function cliEntry(argv = process.argv, autoExit = !0) {
80
+ const cli = meow__default.default(
81
+ `
82
+ Usage
83
+ $ ${cliName} [--help] [--debug] <command> [<args>]
84
+
85
+ These are common commands used in various situations:
86
+
87
+ init Create a new Sanity plugin
88
+ inject Inject config into an existing Sanity v3 plugin
89
+ verify-package Check that a Sanity plugin package follows V3 conventions. Prints upgrade steps.
90
+ verify-studio Check that a Sanity Studio follows V3 conventions. Prints upgrade steps.
91
+ link-watch Recompiles plugin automatically on changes and runs yalc push --publish
92
+ version Show the version of ${cliName} currently installed
93
+
94
+ Options
95
+ --silent Do not print info and warning messages
96
+ --verbose Log everything. This option conflicts with --silent
97
+ --debug Print stack trace on errors
98
+ --version Output the version number
99
+ --help Output usage information
100
+
101
+ Examples
102
+ # Init a new plugin in current directory
103
+ $ ${cliName} init
104
+
105
+ # Init a new plugin in my-sanity-plugin directory
106
+ $ ${cliName} init my-sanity-plugin
107
+
108
+ # Check that a Sanity plugin package in current directory follows V3 conventions
109
+ $ ${cliName} verify-package
110
+
111
+ # Check that a Sanity Studio in current directory follows V3 conventions
112
+ $ ${cliName} verify-studio
113
+ `,
114
+ {
115
+ autoHelp: !1,
116
+ flags: sharedFlags,
117
+ argv: argv.slice(2)
118
+ }
119
+ ), commandName = cli.input[0];
120
+ commandName || cli.showHelp(), commandName in commands || (console.error(`Unknown command "${commandName}"`), cli.showHelp()), cli.flags.silent && cli.flags.verbose && (log.error("--silent and --verbose are mutually exclusive"), cli.showHelp());
121
+ const cmd = commands[commandName];
122
+ try {
123
+ log.setVerbosity(cli.flags), await cmd({ argv: argv.slice(3) });
124
+ } catch (err) {
125
+ log.error(err instanceof TypeError || cli.flags.debug ? err.stack : err.message), process.exit(1);
126
+ }
127
+ }
128
+ exports.cliEntry = cliEntry;
129
+ exports.cliName = cliName;
130
+ exports.defaultOutDir = defaultOutDir;
131
+ exports.incompatiblePluginPackage = incompatiblePluginPackage;
132
+ exports.log = log;
133
+ exports.sharedFlags = sharedFlags;
134
+ exports.urls = urls;
135
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sources":["../../src/util/log.ts","../../src/cmds/index.ts","../../src/sharedFlags.ts","../../src/constants.ts","../../src/cli.ts"],"sourcesContent":["// Note: This is _specifically_ meant for CLI usage,\n// I realize that \"singletons\" are bad.\n\nimport chalk from 'chalk'\n\nlet beQuiet = false\nlet beVerbose = false\n\nfunction setVerbosity({verbose, silent}: {verbose: boolean; silent: boolean}) {\n if (silent) {\n beVerbose = false\n beQuiet = true\n } else if (verbose) {\n beVerbose = true\n beQuiet = false\n }\n}\n\nexport default {\n setVerbosity: setVerbosity,\n\n // Bypasses any checks, prints regardless (only use for things like `cli --version`)\n msg: (msg: any, ...args: any[]) => !beQuiet && console.log(msg, ...args),\n\n // Debug only printed on --verbose\n debug: (msg: any, ...args: any[]) =>\n !beQuiet && beVerbose && console.debug(`${chalk.bgBlack.white('[debug]')} ${msg}`, ...args),\n\n // Success messages only printed if not --silent\n success: (msg: any, ...args: any[]) =>\n !beQuiet && console.info(`${chalk.bgBlack.greenBright('[success]')} ${msg}`, ...args),\n\n // Info only printed if not --silent (\"standard\" level)\n info: (msg: any, ...args: any[]) =>\n !beQuiet && console.info(`${chalk.bgBlack.cyanBright('[info]')} ${msg}`, ...args),\n\n // Warning only printed if not --silent\n warn: (msg: any, ...args: any[]) =>\n !beQuiet && console.warn(`${chalk.bgBlack.yellowBright('[warn]')} ${msg}`, ...args),\n\n // Errors are always printed\n error: (msg: any, ...args: any[]) =>\n console.error(`${chalk.bgBlack.redBright('[error]')} ${msg}`, ...args),\n}\n","export default {\n init: async (options: {argv: string[]}) => {\n await (await import('./init')).default(options)\n },\n inject: async (options: {argv: string[]}) => {\n await (await import('./inject')).default(options)\n },\n 'link-watch': async (options: {argv: string[]}) => {\n await (await import('./link-watch')).default(options)\n },\n 'verify-package': async (options: {argv: string[]}) => {\n await (await import('./verify-package')).default(options)\n },\n 'verify-studio': async (options: {argv: string[]}) => {\n await (await import('./verify-studio')).default(options)\n },\n version: async (options: {argv: string[]}) => {\n await (await import('./version')).default(options)\n },\n}\n","export default {\n debug: {\n default: false,\n type: 'boolean',\n },\n silent: {\n type: 'boolean',\n default: false,\n },\n verbose: {\n type: 'boolean',\n default: false,\n },\n} as const\n","export const cliName = '@sanity/plugin-kit'\n\nexport const urls = {\n refDocs: 'https://beta.sanity.io/docs/reference',\n migrationGuideStudio: 'https://beta.sanity.io/docs/platform/v2-to-v3',\n migrationGuidePlugin: 'https://beta.sanity.io/docs/platform/v2-to-v3/plugins',\n pluginReadme: 'https://github.com/sanity-io/plugin-kit',\n incompatiblePlugin: 'https://github.com/sanity-io/incompatible-plugin',\n sanityExchange: 'https://www.sanity.io/exchange',\n linterPackage: 'https://github.com/sanity-io/eslint-config-no-v2-imports',\n}\n\nexport const incompatiblePluginPackage = '@sanity/incompatible-plugin'\n\nexport const defaultOutDir = 'dist'\n","import meow from 'meow'\nimport log from './util/log'\nimport commands from './cmds'\nimport sharedFlags from './sharedFlags'\nimport {cliName} from './constants'\n\n/** @public */\nexport async function cliEntry(argv = process.argv, autoExit = true) {\n const cli = meow(\n `\n\tUsage\n\t $ ${cliName} [--help] [--debug] <command> [<args>]\n\n These are common commands used in various situations:\n\n init Create a new Sanity plugin\n inject Inject config into an existing Sanity v3 plugin\n verify-package Check that a Sanity plugin package follows V3 conventions. Prints upgrade steps.\n verify-studio Check that a Sanity Studio follows V3 conventions. Prints upgrade steps.\n link-watch Recompiles plugin automatically on changes and runs yalc push --publish\n version Show the version of ${cliName} currently installed\n\n Options\n --silent Do not print info and warning messages\n --verbose Log everything. This option conflicts with --silent\n --debug Print stack trace on errors\n --version Output the version number\n --help Output usage information\n\n Examples\n # Init a new plugin in current directory\n $ ${cliName} init\n\n # Init a new plugin in my-sanity-plugin directory\n $ ${cliName} init my-sanity-plugin\n\n # Check that a Sanity plugin package in current directory follows V3 conventions\n $ ${cliName} verify-package\n\n # Check that a Sanity Studio in current directory follows V3 conventions\n $ ${cliName} verify-studio\n`,\n {\n autoHelp: false,\n flags: sharedFlags,\n argv: argv.slice(2),\n },\n )\n\n const commandName = cli.input[0]\n if (!commandName) {\n cli.showHelp() // Exits\n }\n\n if (!(commandName in commands)) {\n console.error(`Unknown command \"${commandName}\"`)\n cli.showHelp() // Exits\n }\n\n if (cli.flags.silent && cli.flags.verbose) {\n log.error(`--silent and --verbose are mutually exclusive`)\n cli.showHelp() // Exits\n }\n\n // Lazy-load command\n const cmd = commands[commandName as keyof typeof commands]\n\n try {\n log.setVerbosity(cli.flags)\n await cmd({argv: argv.slice(3)})\n } catch (err: any) {\n log.error(err instanceof TypeError || cli.flags.debug ? err.stack : err.message)\n\n // eslint-disable-next-line no-process-exit\n process.exit(1)\n }\n}\n"],"names":["chalk","meow"],"mappings":"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"}