@sanity/plugin-kit 1.0.0 → 1.1.0-ecosystem-preset.2

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 (80) hide show
  1. package/README.md +32 -1
  2. package/assets/{splat → inject}/LICENSE +0 -0
  3. package/assets/{splat → inject}/editorconfig +0 -0
  4. package/assets/{splat → inject}/gitignore +0 -0
  5. package/assets/{splat → inject}/npmignore +0 -0
  6. package/assets/{splat → inject}/prettierrc.js +0 -0
  7. package/assets/inject/renovatebot/renovate.json +7 -0
  8. package/assets/{splat → inject}/sanity.json +0 -0
  9. package/assets/inject/semver-workflow/.github/workflows/main.yml +85 -0
  10. package/assets/inject/semver-workflow/.husky/commit-msg +4 -0
  11. package/assets/inject/semver-workflow/.husky/pre-commit +4 -0
  12. package/assets/inject/semver-workflow/.releaserc.json +4 -0
  13. package/assets/inject/semver-workflow/commitlint.config.js +3 -0
  14. package/assets/inject/semver-workflow/renovate.json +7 -0
  15. package/assets/{splat → inject}/template-tsconfig.json +0 -0
  16. package/assets/{splat → inject}/v2-incompatible.js.template +0 -0
  17. package/lib/package.json +30 -28
  18. package/lib/src/actions/init.d.ts +8 -0
  19. package/lib/src/actions/init.js +10 -6
  20. package/lib/src/actions/init.js.map +1 -1
  21. package/lib/src/actions/{splat.d.ts → inject.d.ts} +7 -2
  22. package/lib/src/actions/{splat.js → inject.js} +64 -14
  23. package/lib/src/actions/inject.js.map +1 -0
  24. package/lib/src/cli.js +1 -0
  25. package/lib/src/cli.js.map +1 -1
  26. package/lib/src/cmds/index.d.ts +1 -0
  27. package/lib/src/cmds/index.js +1 -2
  28. package/lib/src/cmds/index.js.map +1 -1
  29. package/lib/src/cmds/init.js +5 -0
  30. package/lib/src/cmds/init.js.map +1 -1
  31. package/lib/src/cmds/{splat.d.ts → inject.d.ts} +0 -0
  32. package/lib/src/cmds/inject.js +76 -0
  33. package/lib/src/cmds/inject.js.map +1 -0
  34. package/lib/src/npm/package.d.ts +7 -4
  35. package/lib/src/npm/package.js +32 -30
  36. package/lib/src/npm/package.js.map +1 -1
  37. package/lib/src/npm/resolveLatestVersions.js +3 -1
  38. package/lib/src/npm/resolveLatestVersions.js.map +1 -1
  39. package/lib/src/presets/presets.d.ts +8 -0
  40. package/lib/src/presets/presets.js +52 -0
  41. package/lib/src/presets/presets.js.map +1 -0
  42. package/lib/src/presets/renovatebot.d.ts +2 -0
  43. package/lib/src/presets/renovatebot.js +24 -0
  44. package/lib/src/presets/renovatebot.js.map +1 -0
  45. package/lib/src/presets/semver-workflow.d.ts +2 -0
  46. package/lib/src/presets/semver-workflow.js +73 -0
  47. package/lib/src/presets/semver-workflow.js.map +1 -0
  48. package/lib/src/util/files.js +11 -0
  49. package/lib/src/util/files.js.map +1 -1
  50. package/lib/src/util/prompt.d.ts +5 -4
  51. package/lib/src/util/prompt.js.map +1 -1
  52. package/lib/src/util/readme.d.ts +1 -1
  53. package/lib/src/util/user.d.ts +2 -2
  54. package/lib/src/util/user.js.map +1 -1
  55. package/lib/test/init.test.js +46 -17
  56. package/lib/test/init.test.js.map +1 -1
  57. package/lib/test/inject.test.d.ts +1 -0
  58. package/lib/test/inject.test.js +75 -0
  59. package/lib/test/inject.test.js.map +1 -0
  60. package/package.json +30 -28
  61. package/src/actions/init.ts +13 -6
  62. package/src/actions/{splat.ts → inject.ts} +68 -18
  63. package/src/cli.ts +1 -0
  64. package/src/cmds/index.ts +1 -2
  65. package/src/cmds/init.ts +5 -0
  66. package/src/cmds/inject.ts +67 -0
  67. package/src/npm/package.ts +33 -39
  68. package/src/npm/resolveLatestVersions.ts +4 -2
  69. package/src/presets/presets.ts +52 -0
  70. package/src/presets/renovatebot.ts +12 -0
  71. package/src/presets/semver-workflow.ts +71 -0
  72. package/src/util/files.ts +11 -0
  73. package/src/util/prompt.ts +3 -3
  74. package/src/util/readme.ts +1 -1
  75. package/src/util/user.ts +2 -2
  76. package/assets/splat/eslint.config.js +0 -5
  77. package/lib/src/actions/splat.js.map +0 -1
  78. package/lib/src/cmds/splat.js +0 -63
  79. package/lib/src/cmds/splat.js.map +0 -1
  80. package/src/cmds/splat.ts +0 -59
@@ -17,6 +17,23 @@ const fixture_utils_1 = require("./fixture-utils");
17
17
  const path_1 = __importDefault(require("path"));
18
18
  const files_1 = require("../src/util/files");
19
19
  const constants_1 = require("../src/constants");
20
+ const defaultDevDependencies = [
21
+ '@sanity/plugin-kit',
22
+ '@typescript-eslint/eslint-plugin',
23
+ '@typescript-eslint/parser',
24
+ 'eslint',
25
+ 'eslint-config-prettier',
26
+ 'eslint-config-sanity',
27
+ 'eslint-plugin-prettier',
28
+ 'eslint-plugin-react',
29
+ 'eslint-plugin-react-hooks',
30
+ 'parcel',
31
+ 'prettier',
32
+ 'react',
33
+ 'rimraf',
34
+ 'sanity',
35
+ 'typescript',
36
+ ];
20
37
  tap_1.default.test('plugin-kit init --force in empty directory', (t) => __awaiter(void 0, void 0, void 0, function* () {
21
38
  yield (0, fixture_utils_1.testFixture)({
22
39
  fixturePath: 'init/empty',
@@ -31,6 +48,7 @@ tap_1.default.test('plugin-kit init --force in empty directory', (t) => __awaite
31
48
  yield fileContains('README.md', `# ${fixture_utils_1.pluginTestName}`);
32
49
  yield fileContains('.gitignore', 'lib', '.parcel-cache');
33
50
  yield fileContains('.eslintrc', 'sanity', 'sanity/typescript', 'sanity/react', 'plugin:react-hooks/recommended', 'plugin:prettier/recommended');
51
+ yield fileContains('.eslintignore', '.eslintrc.js', 'commitlint.config.js', 'lib', 'lint-staged.config.js', '*.js');
34
52
  yield fileContains('.npmignore', '/test');
35
53
  yield fileContains('.prettierrc.js', 'semi: false');
36
54
  yield fileContains('sanity.json', '"path": "./v2-incompatible.js"');
@@ -78,23 +96,7 @@ tap_1.default.test('plugin-kit init --force in empty directory', (t) => __awaite
78
96
  }, 'package.json has expected content');
79
97
  t.strictSame(Object.keys((_a = pkg.dependencies) !== null && _a !== void 0 ? _a : {}), [constants_1.incompatiblePluginPackage], 'should have empty dependencies');
80
98
  t.strictSame(Object.keys((_b = pkg.peerDependencies) !== null && _b !== void 0 ? _b : {}), ['react', 'sanity'], 'should have expected peerDependencies');
81
- t.strictSame(Object.keys((_c = pkg.devDependencies) !== null && _c !== void 0 ? _c : {}), [
82
- '@sanity/plugin-kit',
83
- '@typescript-eslint/eslint-plugin',
84
- '@typescript-eslint/parser',
85
- 'eslint',
86
- 'eslint-config-prettier',
87
- 'eslint-config-sanity',
88
- 'eslint-plugin-prettier',
89
- 'eslint-plugin-react',
90
- 'eslint-plugin-react-hooks',
91
- 'parcel',
92
- 'prettier',
93
- 'react',
94
- 'rimraf',
95
- 'sanity',
96
- 'typescript',
97
- ], 'should have expected devDependencies');
99
+ t.strictSame(Object.keys((_c = pkg.devDependencies) !== null && _c !== void 0 ? _c : {}), defaultDevDependencies, 'should have expected devDependencies');
98
100
  }),
99
101
  });
100
102
  }));
@@ -134,4 +136,31 @@ tap_1.default.test('plugin-kit init --force with all the opt-outs in empty direc
134
136
  }),
135
137
  });
136
138
  }));
139
+ tap_1.default.test('plugin-kit init --force --preset semver-workflow in empty directory', (t) => __awaiter(void 0, void 0, void 0, function* () {
140
+ yield (0, fixture_utils_1.testFixture)({
141
+ fixturePath: 'init/empty',
142
+ relativeOutPath: 'defaults-semver-workflow',
143
+ command: ({ outputDir }) => (0, fixture_utils_1.runCliCommand)('init', [outputDir, ...fixture_utils_1.initTestArgs, '--preset', 'semver-workflow']),
144
+ assert: ({ result: { stdout, stderr }, outputDir }) => __awaiter(void 0, void 0, void 0, function* () {
145
+ var _g, _h;
146
+ t.equal(stderr, '', 'should have empty stderr');
147
+ const fileContains = (0, fixture_utils_1.fileContainsValidator)(t, outputDir);
148
+ yield fileContains(path_1.default.join('.github', 'workflows', 'main.yml'), 'CI & Release');
149
+ yield fileContains(path_1.default.join('.husky', 'commit-msg'), 'npx --no -- commitlint');
150
+ yield fileContains(path_1.default.join('.husky', 'pre-commit'), 'npx lint-staged');
151
+ yield fileContains(path_1.default.join('.releaserc.json'), '@sanity/semantic-release-preset');
152
+ yield fileContains(path_1.default.join('commitlint.config.js'), '@commitlint/config-conventional');
153
+ const pkg = JSON.parse(yield (0, fixture_utils_1.readFile)(path_1.default.join(outputDir, 'package.json')));
154
+ t.strictSame(Object.keys((_g = pkg.devDependencies) !== null && _g !== void 0 ? _g : {}), [
155
+ ...defaultDevDependencies,
156
+ '@commitlint/cli',
157
+ '@commitlint/config-conventional',
158
+ '@sanity/semantic-release-preset',
159
+ 'husky',
160
+ 'lint-staged',
161
+ ].sort(), 'should have expected devDependencies');
162
+ t.strictSame((_h = pkg.scripts) === null || _h === void 0 ? void 0 : _h.prepare, 'husky install');
163
+ }),
164
+ });
165
+ }));
137
166
  //# sourceMappingURL=init.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../test/init.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../test/init.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const tap_1 = __importDefault(require("tap"));
16
+ const fixture_utils_1 = require("./fixture-utils");
17
+ const path_1 = __importDefault(require("path"));
18
+ const fs_extra_1 = require("fs-extra");
19
+ tap_1.default.test('plugin-kit inject --preset semver-workflow into existing plugin directory', (t) => __awaiter(void 0, void 0, void 0, function* () {
20
+ yield (0, fixture_utils_1.testFixture)({
21
+ fixturePath: 'inject/valid',
22
+ relativeOutPath: '../semver-workflow',
23
+ command: ({ fixtureDir, outputDir }) => __awaiter(void 0, void 0, void 0, function* () {
24
+ (0, fs_extra_1.copySync)(fixtureDir, outputDir);
25
+ return (0, fixture_utils_1.runCliCommand)('inject', [outputDir, '--preset-only', '--preset', 'semver-workflow']);
26
+ }),
27
+ assert: ({ result: { stdout, stderr }, outputDir }) => __awaiter(void 0, void 0, void 0, function* () {
28
+ t.equal(stderr, '', 'should have empty stderr');
29
+ t.match(stdout, `Only apply presets, skipping default inject.`);
30
+ t.match(stdout, `Inject config into plugin in "${outputDir}"`);
31
+ const fileContains = (0, fixture_utils_1.fileContainsValidator)(t, outputDir);
32
+ // only check for a single file from the preset:
33
+ // rest is covered by the init tests; it uses the same codepath
34
+ yield fileContains(path_1.default.join('.github', 'workflows', 'main.yml'), 'CI & Release');
35
+ }),
36
+ });
37
+ }));
38
+ tap_1.default.test('plugin-kit inject --preset renovatebot into existing plugin directory', (t) => __awaiter(void 0, void 0, void 0, function* () {
39
+ yield (0, fixture_utils_1.testFixture)({
40
+ fixturePath: 'inject/valid',
41
+ relativeOutPath: '../renovatebot',
42
+ command: ({ fixtureDir, outputDir }) => __awaiter(void 0, void 0, void 0, function* () {
43
+ (0, fs_extra_1.copySync)(fixtureDir, outputDir);
44
+ return (0, fixture_utils_1.runCliCommand)('inject', [outputDir, '--preset-only', '--preset', 'renovatebot']);
45
+ }),
46
+ assert: ({ result: { stdout, stderr }, outputDir }) => __awaiter(void 0, void 0, void 0, function* () {
47
+ t.equal(stderr, '', 'should have empty stderr');
48
+ const fileContains = (0, fixture_utils_1.fileContainsValidator)(t, outputDir);
49
+ yield fileContains(path_1.default.join('renovate.json'), '"github>sanity-io/renovate-presets//ecosystem/auto"');
50
+ }),
51
+ });
52
+ }));
53
+ tap_1.default.test('plugin-kit inject --preset-only requires --preset', (t) => __awaiter(void 0, void 0, void 0, function* () {
54
+ yield (0, fixture_utils_1.testFixture)({
55
+ fixturePath: 'inject/valid',
56
+ command: ({ fixtureDir }) => __awaiter(void 0, void 0, void 0, function* () {
57
+ return (0, fixture_utils_1.runCliCommand)('inject', [fixtureDir, '--preset-only']);
58
+ }),
59
+ assert: ({ result: { stdout, stderr }, outputDir }) => __awaiter(void 0, void 0, void 0, function* () {
60
+ t.match(stderr, '--preset-only, but no --preset [preset-name] was provided.');
61
+ }),
62
+ });
63
+ }));
64
+ tap_1.default.test('plugin-kit inject --preset-only --preset does-not-exist', (t) => __awaiter(void 0, void 0, void 0, function* () {
65
+ yield (0, fixture_utils_1.testFixture)({
66
+ fixturePath: 'inject/valid',
67
+ command: ({ fixtureDir }) => __awaiter(void 0, void 0, void 0, function* () {
68
+ return (0, fixture_utils_1.runCliCommand)('inject', [fixtureDir, '--preset-only', '--preset', 'does-not-exist']);
69
+ }),
70
+ assert: ({ result: { stdout, stderr }, outputDir }) => __awaiter(void 0, void 0, void 0, function* () {
71
+ t.match(stderr, 'Unknown --preset(s): [does-not-exist]. Must be one of: [');
72
+ }),
73
+ });
74
+ }));
75
+ //# sourceMappingURL=inject.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.test.js","sourceRoot":"","sources":["../../test/inject.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/plugin-kit",
3
- "version": "1.0.0",
3
+ "version": "1.1.0-ecosystem-preset.2",
4
4
  "description": "Enhanced Sanity.io plugin development experience",
5
5
  "scripts": {
6
6
  "clean": "rimraf lib",
@@ -52,28 +52,28 @@
52
52
  "dependencies": {
53
53
  "@rexxars/choosealicense-list": "^1.1.2",
54
54
  "chalk": "^4.1.2",
55
- "concurrently": "^7.1.0",
55
+ "concurrently": "^7.3.0",
56
56
  "discover-path": "^1.0.0",
57
57
  "email-validator": "^2.0.4",
58
58
  "execa": "^5.1.1",
59
59
  "find-babel-config": "^1.2.0",
60
- "get-it": "^5.0.5",
61
- "get-latest-version": "^2.0.0",
60
+ "get-it": "^6.1.1",
61
+ "get-latest-version": "^4.0.0",
62
62
  "git-remote-origin-url": "^3.1.0",
63
63
  "git-user-info": "^1.0.1",
64
64
  "github-url-to-object": "^4.0.6",
65
- "inquirer": "^8.2.0",
65
+ "inquirer": "^8.2.4",
66
66
  "meow": "^9.0.0",
67
- "nodemon": "^2.0.15",
67
+ "nodemon": "^2.0.19",
68
68
  "npm-packlist": "^3.0.0",
69
69
  "npm-run-path": "^4.0.1",
70
70
  "outdent": "^0.8.0",
71
71
  "p-any": "^3.0.0",
72
72
  "p-props": "^4.0.0",
73
- "postcss": "^8.3.9",
73
+ "postcss": "^8.4.16",
74
74
  "rimraf": "^3.0.2",
75
- "semver": "^7.3.5",
76
- "spdx-license-ids": "^3.0.10",
75
+ "semver": "^7.3.7",
76
+ "spdx-license-ids": "^3.0.12",
77
77
  "validate-npm-package-name": "^3.0.0",
78
78
  "xdg-basedir": "^4.0.0",
79
79
  "yalc": "^1.0.0-pre.53"
@@ -82,34 +82,36 @@
82
82
  "eslint": ">=8.0.0"
83
83
  },
84
84
  "devDependencies": {
85
- "@commitlint/cli": "^16.2.3",
86
- "@commitlint/config-conventional": "^16.2.1",
87
- "@parcel/packager-ts": "^2.6.0",
88
- "@parcel/transformer-typescript-types": "^2.6.0",
89
- "@sanity/semantic-release-preset": "^1.1.3",
90
- "@types/eslint": "^8.4.3",
91
- "@types/inquirer": "^8.2.1",
85
+ "@commitlint/cli": "^17.0.3",
86
+ "@commitlint/config-conventional": "^17.0.3",
87
+ "@parcel/packager-ts": "^2.7.0",
88
+ "@parcel/transformer-typescript-types": "^2.7.0",
89
+ "@sanity/semantic-release-preset": "^2.0.0",
90
+ "@types/eslint": "^8.4.6",
91
+ "@types/fs-extra": "^9.0.13",
92
+ "@types/inquirer": "^8.2.3",
92
93
  "@types/node": "^17.0.40",
93
- "@types/nodemon": "^1.19.1",
94
+ "@types/nodemon": "^1.19.2",
94
95
  "@types/tap": "^15.0.7",
95
- "@typescript-eslint/eslint-plugin": "^5.20.0",
96
- "@typescript-eslint/parser": "^5.20.0",
97
- "eslint": "^8.15.0",
96
+ "@typescript-eslint/eslint-plugin": "^5.34.0",
97
+ "@typescript-eslint/parser": "^5.34.0",
98
+ "eslint": "^8.22.0",
98
99
  "eslint-config-prettier": "^8.5.0",
99
100
  "eslint-config-sanity": "^5.1.0",
100
- "eslint-plugin-prettier": "^4.0.0",
101
+ "eslint-plugin-prettier": "^4.2.1",
102
+ "fs-extra": "^10.1.0",
101
103
  "husky": "^7.0.4",
102
104
  "json5": "^2.2.1",
103
- "lint-staged": "^12.4.0",
104
- "parcel": "^2.6.0",
105
- "prettier": "^2.6.2",
105
+ "lint-staged": "^12.5.0",
106
+ "parcel": "^2.7.0",
107
+ "prettier": "^2.7.1",
106
108
  "readdirp": "^3.6.0",
107
109
  "rimraf": "^3.0.2",
108
- "sanity": "^3.0.0-dev-preview.7",
110
+ "sanity": "3.0.0-dev-preview.15",
109
111
  "sinon": "^14.0.0",
110
- "tap": "^16.2.0",
111
- "ts-node": "^10.8.0",
112
- "typescript": "^4.7.2"
112
+ "tap": "^16.3.0",
113
+ "ts-node": "^10.9.1",
114
+ "typescript": "^4.7.4"
113
115
  },
114
116
  "tap": {
115
117
  "jobs": 2,
@@ -1,5 +1,5 @@
1
1
  import path from 'path'
2
- import {splat} from './splat'
2
+ import {inject} from './inject'
3
3
  import {ensureDir, writeFile} from '../util/files'
4
4
  import {resolveLatestVersions} from '../npm/resolveLatestVersions'
5
5
  import sharedFlags from '../sharedFlags'
@@ -54,15 +54,22 @@ export const initFlags = {
54
54
  repo: {
55
55
  type: 'string',
56
56
  },
57
+ presetOnly: {
58
+ type: 'boolean',
59
+ default: false,
60
+ },
61
+ preset: {
62
+ type: 'string',
63
+ isMultiple: true,
64
+ },
57
65
  } as const
58
66
 
59
67
  export type InitFlags = TypedFlags<typeof initFlags>
60
68
 
61
69
  const defaultDependencies = [incompatiblePluginPackage]
62
- // purple-unicorn as version in devDependencies will install 2.29.5, so must be explicit
63
- // using ^2.29.5-purple-unicorn.856 is not safe either
64
- const defaultDevDependencies = {react: '^17.0.0 || ^18.0.0', sanity: '2.29.5-purple-unicorn.856'}
65
- const defaultPeerDependencies = {react: '^17.0.0 || ^18.0.0', sanity: 'purple-unicorn'}
70
+
71
+ const defaultDevDependencies = {react: '^17.0.0 || ^18.0.0', sanity: '^3.0.0-dev-preview.15'}
72
+ const defaultPeerDependencies = {react: '^17.0.0 || ^18.0.0', sanity: 'dev-preview'}
66
73
 
67
74
  export interface InitOptions {
68
75
  basePath: string
@@ -85,7 +92,7 @@ export async function init(options: InitOptions) {
85
92
  ...defaultPeerDependencies,
86
93
  }
87
94
 
88
- await splat({
95
+ await inject({
89
96
  ...options,
90
97
  requireUserConfirmation: !options.flags.force,
91
98
  dependencies,
@@ -18,6 +18,8 @@ import {
18
18
  } from '../util/files'
19
19
  import {InitFlags} from './init'
20
20
  import {PackageJson} from './verify/types'
21
+ import outdent from 'outdent'
22
+ import {injectPresets} from '../presets/presets'
21
23
 
22
24
  const bannedFields = ['login', 'description', 'projecturl', 'email']
23
25
  const preferredLicenses = ['MIT', 'ISC', 'BSD-3-Clause']
@@ -29,7 +31,9 @@ const otherLicenses = Object.keys(licenses.list).filter((id) => {
29
31
  )
30
32
  })
31
33
 
32
- export interface SplatOptions {
34
+ export type FromTo = {from: string | string[]; to: string | string[]}
35
+
36
+ export interface InjectOptions {
33
37
  basePath: string
34
38
  requireUserConfirmation?: boolean
35
39
  flags: InitFlags
@@ -48,7 +52,16 @@ export interface PackageData {
48
52
  gitOrigin?: string
49
53
  }
50
54
 
51
- export async function splat(options: SplatOptions) {
55
+ export async function inject(options: InjectOptions) {
56
+ if (options.flags.presetOnly) {
57
+ log.info('Only apply presets, skipping default inject.')
58
+ } else {
59
+ await injectBase(options)
60
+ }
61
+ await injectPresets(options)
62
+ }
63
+
64
+ async function injectBase(options: InjectOptions) {
52
65
  const {basePath, flags, requireUserConfirmation} = options
53
66
  const info = (write: boolean, msg: string, ...args: string[]) => write && log.info(msg, ...args)
54
67
  // Gather data
@@ -100,6 +113,8 @@ export async function splat(options: SplatOptions) {
100
113
 
101
114
  didWrite = await writeEslintrc(options)
102
115
  info(didWrite, 'Wrote .eslintrc.js')
116
+ didWrite = await writeEslintIgnore(options)
117
+ info(didWrite, 'Wrote .eslintignore')
103
118
 
104
119
  didWrite = await addBuildScripts(newPkg, options)
105
120
  info(didWrite, 'Added build scripts to package.json')
@@ -108,7 +123,7 @@ export async function splat(options: SplatOptions) {
108
123
  info(didWrite, 'Added compilation output directory to .gitignore')
109
124
  }
110
125
 
111
- async function writeReadme(data: PackageData, options: SplatOptions) {
126
+ async function writeReadme(data: PackageData, options: InjectOptions) {
112
127
  const {basePath} = options
113
128
 
114
129
  const readmePath = path.join(basePath, 'README.md')
@@ -125,7 +140,7 @@ async function writeReadme(data: PackageData, options: SplatOptions) {
125
140
  return true
126
141
  }
127
142
 
128
- async function writeEslintrc(options: SplatOptions) {
143
+ async function writeEslintrc(options: InjectOptions) {
129
144
  if (!options.flags.eslint) {
130
145
  return false
131
146
  }
@@ -156,9 +171,32 @@ async function writeEslintrc(options: SplatOptions) {
156
171
  return true
157
172
  }
158
173
 
174
+ async function writeEslintIgnore(options: InjectOptions) {
175
+ if (!options.flags.eslint) {
176
+ return false
177
+ }
178
+ const {basePath} = options
179
+
180
+ const eslintrc = path.join(basePath, '.eslintignore')
181
+
182
+ const content = outdent`
183
+ .eslintrc.js
184
+ commitlint.config.js
185
+ lib
186
+ lint-staged.config.js
187
+ ${options.flags.typescript ? '*.js' : ''}
188
+ `.trim()
189
+
190
+ await writeFileWithOverwritePrompt(eslintrc, content, {
191
+ encoding: 'utf8',
192
+ force: options.flags.force,
193
+ })
194
+ return true
195
+ }
196
+
159
197
  async function writeLicense(
160
198
  {license}: PackageData,
161
- options: SplatOptions,
199
+ options: InjectOptions,
162
200
  licenseChanged: boolean
163
201
  ) {
164
202
  const {basePath, flags} = options
@@ -284,14 +322,27 @@ async function resolveProjectDescription(basePath: string, pkg: PackageJson | un
284
322
  }
285
323
  }
286
324
 
287
- type FromTo = {from: string; to: string}
288
-
289
- async function writeStaticAssets({basePath, flags}: SplatOptions) {
325
+ export async function writeAssets(files: FromTo[], {basePath, flags}: InjectOptions) {
290
326
  const assetsDir = await findAssetsDir()
291
327
 
292
- const from = (...segments: string[]) => path.join(assetsDir, 'splat', ...segments)
328
+ const from = (...segments: string[]) => path.join(assetsDir, 'inject', ...segments)
293
329
  const to = (...segments: string[]) => path.join(basePath, ...segments)
294
330
 
331
+ const writes: string[] = []
332
+ for (const file of files) {
333
+ const fromPath = asArray(file.from)
334
+ const toPath = asArray(file.to)
335
+ if (await copyFileWithOverwritePrompt(from(...fromPath), to(...toPath), flags)) {
336
+ writes.push(path.join(...toPath))
337
+ }
338
+ }
339
+
340
+ return writes
341
+ }
342
+
343
+ async function writeStaticAssets(options: InjectOptions) {
344
+ const {flags} = options
345
+
295
346
  const files: FromTo[] = [
296
347
  {from: 'editorconfig', to: '.editorconfig'},
297
348
  {from: 'npmignore', to: '.npmignore'},
@@ -300,16 +351,15 @@ async function writeStaticAssets({basePath, flags}: SplatOptions) {
300
351
  flags.gitignore && {from: 'gitignore', to: '.gitignore'},
301
352
  flags.typescript && {from: 'template-tsconfig.json', to: 'tsconfig.json'},
302
353
  flags.prettier && {from: 'prettierrc.js', to: '.prettierrc.js'},
303
- ].filter((f): f is FromTo => !!f)
354
+ ]
355
+ .map((f) => (f ? (f as FromTo) : undefined))
356
+ .filter((f): f is FromTo => !!f)
304
357
 
305
- const writes: string[] = []
306
- for (const file of files) {
307
- if (await copyFileWithOverwritePrompt(from(file.from), to(file.to), flags)) {
308
- writes.push(file.to)
309
- }
310
- }
358
+ return writeAssets(files, options)
359
+ }
311
360
 
312
- return writes
361
+ function asArray(input: string | string[]): string[] {
362
+ return typeof input === 'string' ? [input] : input
313
363
  }
314
364
 
315
365
  /**
@@ -336,7 +386,7 @@ async function findAssetsDir(): Promise<string> {
336
386
  return assetsDir
337
387
  }
338
388
 
339
- async function addCompileDirToGitIgnore(data: PackageData, options: SplatOptions) {
389
+ async function addCompileDirToGitIgnore(data: PackageData, options: InjectOptions) {
340
390
  const gitIgnorePath = path.join(options.basePath, '.gitignore')
341
391
  const gitignore = await readFile(gitIgnorePath, 'utf8').catch(errorToUndefined)
342
392
  if (!gitignore) {
package/src/cli.ts CHANGED
@@ -15,6 +15,7 @@ export async function cliEntry(argv = process.argv, autoExit = true) {
15
15
  These are common commands used in various situations:
16
16
 
17
17
  init Create a new Sanity plugin
18
+ inject Inject config into an existing Sanity v3 plugin
18
19
  verify-package Check that a Sanity plugin package follows V3 conventions. Prints upgrade steps.
19
20
  verify-studio Check that a Sanity Studio follows V3 conventions. Prints upgrade steps.
20
21
  link-watch Recompiles plugin automatically on changes and runs yalc push --publish
package/src/cmds/index.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  export default {
2
2
  init: require.resolve('./init'),
3
+ inject: require.resolve('./inject'),
3
4
  'link-watch': require.resolve('./link-watch'),
4
5
  'verify-package': require.resolve('./verify-package'),
5
6
  'verify-studio': require.resolve('./verify-studio'),
6
7
  version: require.resolve('./version'),
7
- // wont make it for initial release
8
- //splat: require.resolve('./splat'),
9
8
  }
package/src/cmds/init.ts CHANGED
@@ -7,6 +7,7 @@ import {installDependencies, promptForPackageManager} from '../npm/manager'
7
7
  import {findStudioV3Config, hasSanityJson} from '../sanity/manifest'
8
8
  import {prompt} from '../util/prompt'
9
9
  import {cliName} from '../constants'
10
+ import {presetHelpList} from '../presets/presets'
10
11
 
11
12
  const description = `Initialize a new Sanity plugin`
12
13
 
@@ -30,6 +31,10 @@ Options
30
31
  --license [spdx] Use the license with the given SPDX identifier
31
32
  --force No promt when overwriting files
32
33
 
34
+ --preset [preset-name] [beta] - Adds config and files from a named preset. --preset can be supplied multiple times.
35
+ The following presets are available:
36
+ ${presetHelpList(30)}
37
+
33
38
  Examples
34
39
  # Initialize a new plugin in the current directory
35
40
  $ ${cliName} init
@@ -0,0 +1,67 @@
1
+ import path from 'path'
2
+ import meow from 'meow'
3
+ import log from '../util/log'
4
+ import {inject} from '../actions/inject'
5
+ import {findStudioV3Config} from '../sanity/manifest'
6
+ import {initFlags} from '../actions/init'
7
+ import {cliName} from '../constants'
8
+ import {presetHelpList} from '../presets/presets'
9
+
10
+ const description = `Inject configuration into a Sanity plugin`
11
+
12
+ const help = `
13
+ Usage
14
+ $ ${cliName} inject [dir] [<args>]
15
+
16
+ Options
17
+ --no-eslint Disables ESLint config and dependencies from being added
18
+ --no-prettier Disables prettier config and dependencies from being added
19
+ --no-typescript Disables typescript config and dependencies from being added
20
+ --no-license Disables LICENSE + package.json license field from being added
21
+ --no-editorconfig Disables .editorconfig from being added
22
+ --no-gitignore Disables .gitignore from being added
23
+ --no-scripts Disables scripts from being added to package.json
24
+
25
+ --license [spdx] Use the license with the given SPDX identifier
26
+ --force No promt when overwriting files
27
+
28
+ --preset [preset-name] [beta] - Adds config and files from a named preset. --preset can be supplied multiple times.
29
+ The following presets are available:
30
+ ${presetHelpList(30)}
31
+ --preset-only Skips the default inject steps. Use this to apply a preset to an otherwise complete plugin.
32
+
33
+ Examples
34
+ # Inject configuration into the plugin in the current directory
35
+ $ ${cliName} inject
36
+
37
+ # Inject configuration into the plugin in ~/my-plugin
38
+ $ ${cliName} inject ~/my-plugin
39
+
40
+ # Don't inject eslint or prettier
41
+ $ ${cliName} inject --no-eslint --no-prettier
42
+
43
+ # Inject plugin configuration and semver-workflow into the plugin in the current directory
44
+ $ @sanity/plugin-kit inject --preset semver-workflow
45
+
46
+ # Only inject semver-workflow and renovatebot config from presets
47
+ $ ${cliName} inject --preset-only --preset semver-workflow --preset renovatebot
48
+
49
+ `
50
+
51
+ async function run({argv}: {argv: string[]}) {
52
+ const cli = meow(help, {flags: initFlags, argv, description})
53
+ const basePath = path.resolve(cli.input[0] || process.cwd())
54
+
55
+ const {v3ConfigFile} = await findStudioV3Config(basePath)
56
+ if (v3ConfigFile) {
57
+ throw new Error(
58
+ `${v3ConfigFile} exists - are you trying to INJECT into a studio instead of a plugin?`
59
+ )
60
+ }
61
+ log.info('Inject config into plugin in "%s"', basePath)
62
+
63
+ await inject({basePath, flags: cli.flags, validate: false})
64
+ log.info('Done!')
65
+ }
66
+
67
+ export default run