@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.
- package/README.md +32 -1
- package/assets/{splat → inject}/LICENSE +0 -0
- package/assets/{splat → inject}/editorconfig +0 -0
- package/assets/{splat → inject}/gitignore +0 -0
- package/assets/{splat → inject}/npmignore +0 -0
- package/assets/{splat → inject}/prettierrc.js +0 -0
- package/assets/inject/renovatebot/renovate.json +7 -0
- package/assets/{splat → inject}/sanity.json +0 -0
- package/assets/inject/semver-workflow/.github/workflows/main.yml +85 -0
- package/assets/inject/semver-workflow/.husky/commit-msg +4 -0
- package/assets/inject/semver-workflow/.husky/pre-commit +4 -0
- package/assets/inject/semver-workflow/.releaserc.json +4 -0
- package/assets/inject/semver-workflow/commitlint.config.js +3 -0
- package/assets/inject/semver-workflow/renovate.json +7 -0
- package/assets/{splat → inject}/template-tsconfig.json +0 -0
- package/assets/{splat → inject}/v2-incompatible.js.template +0 -0
- package/lib/package.json +30 -28
- package/lib/src/actions/init.d.ts +8 -0
- package/lib/src/actions/init.js +10 -6
- package/lib/src/actions/init.js.map +1 -1
- package/lib/src/actions/{splat.d.ts → inject.d.ts} +7 -2
- package/lib/src/actions/{splat.js → inject.js} +64 -14
- package/lib/src/actions/inject.js.map +1 -0
- package/lib/src/cli.js +1 -0
- package/lib/src/cli.js.map +1 -1
- package/lib/src/cmds/index.d.ts +1 -0
- package/lib/src/cmds/index.js +1 -2
- package/lib/src/cmds/index.js.map +1 -1
- package/lib/src/cmds/init.js +5 -0
- package/lib/src/cmds/init.js.map +1 -1
- package/lib/src/cmds/{splat.d.ts → inject.d.ts} +0 -0
- package/lib/src/cmds/inject.js +76 -0
- package/lib/src/cmds/inject.js.map +1 -0
- package/lib/src/npm/package.d.ts +7 -4
- package/lib/src/npm/package.js +32 -30
- package/lib/src/npm/package.js.map +1 -1
- package/lib/src/npm/resolveLatestVersions.js +3 -1
- package/lib/src/npm/resolveLatestVersions.js.map +1 -1
- package/lib/src/presets/presets.d.ts +8 -0
- package/lib/src/presets/presets.js +52 -0
- package/lib/src/presets/presets.js.map +1 -0
- package/lib/src/presets/renovatebot.d.ts +2 -0
- package/lib/src/presets/renovatebot.js +24 -0
- package/lib/src/presets/renovatebot.js.map +1 -0
- package/lib/src/presets/semver-workflow.d.ts +2 -0
- package/lib/src/presets/semver-workflow.js +73 -0
- package/lib/src/presets/semver-workflow.js.map +1 -0
- package/lib/src/util/files.js +11 -0
- package/lib/src/util/files.js.map +1 -1
- package/lib/src/util/prompt.d.ts +5 -4
- package/lib/src/util/prompt.js.map +1 -1
- package/lib/src/util/readme.d.ts +1 -1
- package/lib/src/util/user.d.ts +2 -2
- package/lib/src/util/user.js.map +1 -1
- package/lib/test/init.test.js +46 -17
- package/lib/test/init.test.js.map +1 -1
- package/lib/test/inject.test.d.ts +1 -0
- package/lib/test/inject.test.js +75 -0
- package/lib/test/inject.test.js.map +1 -0
- package/package.json +30 -28
- package/src/actions/init.ts +13 -6
- package/src/actions/{splat.ts → inject.ts} +68 -18
- package/src/cli.ts +1 -0
- package/src/cmds/index.ts +1 -2
- package/src/cmds/init.ts +5 -0
- package/src/cmds/inject.ts +67 -0
- package/src/npm/package.ts +33 -39
- package/src/npm/resolveLatestVersions.ts +4 -2
- package/src/presets/presets.ts +52 -0
- package/src/presets/renovatebot.ts +12 -0
- package/src/presets/semver-workflow.ts +71 -0
- package/src/util/files.ts +11 -0
- package/src/util/prompt.ts +3 -3
- package/src/util/readme.ts +1 -1
- package/src/util/user.ts +2 -2
- package/assets/splat/eslint.config.js +0 -5
- package/lib/src/actions/splat.js.map +0 -1
- package/lib/src/cmds/splat.js +0 -63
- package/lib/src/cmds/splat.js.map +0 -1
- package/src/cmds/splat.ts +0 -59
package/lib/test/init.test.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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": "^
|
|
61
|
-
"get-latest-version": "^
|
|
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.
|
|
65
|
+
"inquirer": "^8.2.4",
|
|
66
66
|
"meow": "^9.0.0",
|
|
67
|
-
"nodemon": "^2.0.
|
|
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.
|
|
73
|
+
"postcss": "^8.4.16",
|
|
74
74
|
"rimraf": "^3.0.2",
|
|
75
|
-
"semver": "^7.3.
|
|
76
|
-
"spdx-license-ids": "^3.0.
|
|
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": "^
|
|
86
|
-
"@commitlint/config-conventional": "^
|
|
87
|
-
"@parcel/packager-ts": "^2.
|
|
88
|
-
"@parcel/transformer-typescript-types": "^2.
|
|
89
|
-
"@sanity/semantic-release-preset": "^
|
|
90
|
-
"@types/eslint": "^8.4.
|
|
91
|
-
"@types/
|
|
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.
|
|
94
|
+
"@types/nodemon": "^1.19.2",
|
|
94
95
|
"@types/tap": "^15.0.7",
|
|
95
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
96
|
-
"@typescript-eslint/parser": "^5.
|
|
97
|
-
"eslint": "^8.
|
|
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.
|
|
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.
|
|
104
|
-
"parcel": "^2.
|
|
105
|
-
"prettier": "^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": "
|
|
110
|
+
"sanity": "3.0.0-dev-preview.15",
|
|
109
111
|
"sinon": "^14.0.0",
|
|
110
|
-
"tap": "^16.
|
|
111
|
-
"ts-node": "^10.
|
|
112
|
-
"typescript": "^4.7.
|
|
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,
|
package/src/actions/init.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
|
-
import {
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
const
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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, '
|
|
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
|
-
]
|
|
354
|
+
]
|
|
355
|
+
.map((f) => (f ? (f as FromTo) : undefined))
|
|
356
|
+
.filter((f): f is FromTo => !!f)
|
|
304
357
|
|
|
305
|
-
|
|
306
|
-
|
|
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
|
-
|
|
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:
|
|
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
|