@sanity/plugin-kit 6.0.3 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks-es/constants.js +12 -0
- package/dist/_chunks-es/constants.js.map +1 -0
- package/dist/_chunks-es/init.js +863 -81
- package/dist/_chunks-es/init.js.map +1 -1
- package/dist/_chunks-es/init2.js +97 -837
- package/dist/_chunks-es/init2.js.map +1 -1
- package/dist/_chunks-es/inject.js +22 -16
- package/dist/_chunks-es/inject.js.map +1 -1
- package/dist/_chunks-es/link-watch.js +51 -49
- package/dist/_chunks-es/link-watch.js.map +1 -1
- package/dist/_chunks-es/load-package-config.js +24 -15
- package/dist/_chunks-es/load-package-config.js.map +1 -1
- package/dist/_chunks-es/log.js +31 -0
- package/dist/_chunks-es/log.js.map +1 -0
- package/dist/_chunks-es/package.js +615 -771
- package/dist/_chunks-es/package.js.map +1 -1
- package/dist/_chunks-es/package2.js +4 -9
- package/dist/_chunks-es/package2.js.map +1 -1
- package/dist/_chunks-es/verify-common.js +102 -126
- package/dist/_chunks-es/verify-common.js.map +1 -1
- package/dist/_chunks-es/verify-package.js +46 -52
- package/dist/_chunks-es/verify-package.js.map +1 -1
- package/dist/_chunks-es/verify-studio.js +31 -27
- package/dist/_chunks-es/verify-studio.js.map +1 -1
- package/dist/_chunks-es/version.js +40 -36
- package/dist/_chunks-es/version.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -4
- package/dist/index.js.map +1 -1
- package/package.json +15 -13
- package/dist/_chunks-es/index.js +0 -125
- package/dist/_chunks-es/index.js.map +0 -1
|
@@ -1,61 +1,54 @@
|
|
|
1
|
+
import { a as urls } from "./constants.js";
|
|
2
|
+
import { n as sharedFlags_default, t as log_default } from "./log.js";
|
|
3
|
+
import { P as fileExists, W as mergedPackages } from "./package.js";
|
|
4
|
+
import chalk from "chalk";
|
|
1
5
|
import path from "path";
|
|
2
|
-
import { ESLint } from "eslint";
|
|
3
6
|
import outdent from "outdent";
|
|
4
|
-
import { mergedPackages, fileExists } from "./package.js";
|
|
5
|
-
import { log, urls, sharedFlags } from "./index.js";
|
|
6
|
-
import * as ts from "typescript";
|
|
7
|
-
import chalk from "chalk";
|
|
8
7
|
import childProcess from "child_process";
|
|
8
|
+
import { ESLint } from "eslint";
|
|
9
|
+
import * as ts from "@typescript/typescript6";
|
|
9
10
|
import npmRunPath from "npm-run-path";
|
|
10
11
|
const removedImportSuffix = `imports where removed in Sanity v3. Please refer to the migration guide: ${urls.migrationGuideStudio}, or new API-reference docs: ${urls.refDocs}`;
|
|
11
12
|
async function validateImports({ basePath }) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
...r,
|
|
53
|
-
messages: limitErrors,
|
|
54
|
-
errorCount: limitErrors.length
|
|
55
|
-
};
|
|
56
|
-
}).filter((r) => r.errorCount);
|
|
57
|
-
if (onlyImportErrors.length) {
|
|
58
|
-
const resultText = await (await eslint.loadFormatter("stylish")).format(onlyImportErrors), additionalInfo = outdent`
|
|
13
|
+
log_default.debug("Running ESLint with Sanity Studio import hints...");
|
|
14
|
+
let eslint = new ESLint({
|
|
15
|
+
cwd: basePath,
|
|
16
|
+
overrideConfig: {
|
|
17
|
+
ignorePatterns: ["node_modules"],
|
|
18
|
+
rules: { "no-restricted-imports": ["error", { patterns: [
|
|
19
|
+
...mergedPackages.map((packageName) => ({
|
|
20
|
+
group: [`${packageName}*`],
|
|
21
|
+
message: `Use sanity instead of ${packageName}.`
|
|
22
|
+
})),
|
|
23
|
+
{
|
|
24
|
+
group: ["config:*"],
|
|
25
|
+
message: `config: imports are no longer supported. Please see the new plugin API for alternatives: ${urls.migrationGuideStudio}`
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
group: ["part:*"],
|
|
29
|
+
message: `part: ${removedImportSuffix}`
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
group: ["all:part:*"],
|
|
33
|
+
message: `all:part: ${removedImportSuffix}`
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
group: ["sanity:*"],
|
|
37
|
+
message: `sanity: ${removedImportSuffix}`
|
|
38
|
+
}
|
|
39
|
+
] }] }
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
try {
|
|
43
|
+
let onlyImportErrors = (await eslint.lintFiles([path.join(basePath, "**/*.{js,jsx,ts,tsx}")])).map((r) => {
|
|
44
|
+
let limitErrors = r.messages.filter((m) => m.ruleId === "no-restricted-imports");
|
|
45
|
+
return {
|
|
46
|
+
...r,
|
|
47
|
+
messages: limitErrors,
|
|
48
|
+
errorCount: limitErrors.length
|
|
49
|
+
};
|
|
50
|
+
}).filter((r) => r.errorCount);
|
|
51
|
+
if (onlyImportErrors.length) return [await (await eslint.loadFormatter("stylish")).format(onlyImportErrors) + outdent`
|
|
59
52
|
ESLint detected Studio V2 imports that are no longer available.
|
|
60
53
|
It is recommended configure @sanity/eslint-config-no-v2-imports for ESLint.
|
|
61
54
|
|
|
@@ -69,101 +62,84 @@ async function validateImports({ basePath }) {
|
|
|
69
62
|
For more, see ${urls.linterPackage}
|
|
70
63
|
|
|
71
64
|
If the plugin package does not use eslint, disable this check.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
} catch (e) {
|
|
76
|
-
return log.error("Failed to run eslint check", e), [
|
|
77
|
-
outdent`
|
|
65
|
+
`];
|
|
66
|
+
} catch (e) {
|
|
67
|
+
return log_default.error("Failed to run eslint check", e), [outdent`
|
|
78
68
|
Failed to run ESLint. Is ESLint configured?
|
|
79
69
|
|
|
80
70
|
If the package does not use eslint, disable this check.
|
|
81
|
-
`
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return [];
|
|
71
|
+
`];
|
|
72
|
+
}
|
|
73
|
+
return [];
|
|
85
74
|
}
|
|
86
75
|
async function readTSConfig(options) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return ts.parseJsonConfigFileContent(config, ts.sys, basePath);
|
|
76
|
+
let { basePath, filename } = options, filePath = path.resolve(basePath, filename);
|
|
77
|
+
if (!await fileExists(filePath)) return;
|
|
78
|
+
let { config } = ts.readConfigFile(filePath, ts.sys.readFile);
|
|
79
|
+
if (config) return ts.parseJsonConfigFileContent(config, ts.sys, basePath);
|
|
92
80
|
}
|
|
93
81
|
function parseCommand(commandString) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
82
|
+
let commandAndArg = commandString.replace(/ +/g, " ").split(" ");
|
|
83
|
+
return {
|
|
84
|
+
command: commandAndArg[0],
|
|
85
|
+
args: commandAndArg.length > 1 ? commandAndArg.slice(1) : []
|
|
86
|
+
};
|
|
99
87
|
}
|
|
100
88
|
async function runCommand(commandString) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
89
|
+
log_default.info(`Running command: ${commandString}`);
|
|
90
|
+
let { command, args } = parseCommand(commandString), options = {
|
|
91
|
+
stdio: "inherit",
|
|
92
|
+
env: npmRunPath.env()
|
|
93
|
+
};
|
|
94
|
+
return options = process.platform === "win32" ? {
|
|
95
|
+
...options,
|
|
96
|
+
shell: !0
|
|
97
|
+
} : options, new Promise((resolve, reject) => {
|
|
98
|
+
childProcess.spawn(command, args, options).on("error", reject).on("close", (exitCode) => {
|
|
99
|
+
resolve({ code: exitCode ?? 0 });
|
|
100
|
+
});
|
|
101
|
+
});
|
|
109
102
|
}
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
103
|
+
const verifyFlags = {
|
|
104
|
+
...sharedFlags_default,
|
|
105
|
+
single: {
|
|
106
|
+
default: !1,
|
|
107
|
+
type: "boolean"
|
|
108
|
+
}
|
|
117
109
|
};
|
|
118
110
|
function disableCheckText(checkKey) {
|
|
119
|
-
|
|
120
|
-
outdent`
|
|
111
|
+
return chalk.grey(outdent`
|
|
121
112
|
To skip this validation add the following to your package.json:
|
|
122
113
|
"sanityPlugin": {
|
|
123
114
|
"verifyPackage": {
|
|
124
115
|
"${checkKey}": false
|
|
125
116
|
}
|
|
126
117
|
}
|
|
127
|
-
`.trimStart()
|
|
128
|
-
);
|
|
118
|
+
`.trimStart());
|
|
129
119
|
}
|
|
130
120
|
function createValidator(verifyConfig, flags, errors) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
`
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
if (flags.single && errors.length)
|
|
144
|
-
throw new Error(
|
|
145
|
-
outdent`Detected outstanding upgrade issues.
|
|
121
|
+
return async function(checkKey, task) {
|
|
122
|
+
if (verifyConfig[checkKey] !== !1) {
|
|
123
|
+
let result = await task();
|
|
124
|
+
if (result?.length) {
|
|
125
|
+
result.push(disableCheckText(checkKey));
|
|
126
|
+
let errorMessage = result.join("\n\n");
|
|
127
|
+
errors.push(errorMessage), log_default.error("\n" + errorMessage + "\n----------------------------------------------------------");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (flags.single && errors.length) throw Error(outdent`Detected outstanding upgrade issues.
|
|
146
131
|
|
|
147
132
|
Fail-fast (--single) mode enabled, stopping validation here.
|
|
148
|
-
`
|
|
149
|
-
|
|
150
|
-
};
|
|
133
|
+
`);
|
|
134
|
+
};
|
|
151
135
|
}
|
|
152
|
-
async function runTscMaybe(verifyConfig,
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
` + disableCheckText("tsc"));
|
|
160
|
-
}
|
|
136
|
+
async function runTscMaybe(verifyConfig, ts) {
|
|
137
|
+
if (ts && verifyConfig.tsc !== !1) {
|
|
138
|
+
log_default.info("All checks ok, running TypeScript compiler.");
|
|
139
|
+
let { code } = await runCommand("tsc --build");
|
|
140
|
+
if (code !== 0) throw Error("Compilation failed. See output above.\n\n" + disableCheckText("tsc"));
|
|
141
|
+
}
|
|
161
142
|
}
|
|
162
|
-
export {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
runTscMaybe,
|
|
166
|
-
validateImports,
|
|
167
|
-
verifyFlags
|
|
168
|
-
};
|
|
169
|
-
//# sourceMappingURL=verify-common.js.map
|
|
143
|
+
export { validateImports as a, readTSConfig as i, runTscMaybe as n, verifyFlags as r, createValidator as t };
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=verify-common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-common.js","sources":["../../src/dependencies/import-linter.ts","../../src/util/ts.ts","../../src/util/command-parser.ts","../../src/actions/verify/verify-common.ts"],"sourcesContent":["import path from 'path'\n\nimport {ESLint} from 'eslint'\nimport outdent from 'outdent'\n\nimport {mergedPackages} from '../configs/banned-packages'\nimport {urls} from '../constants'\nimport log from '../util/log'\n\nconst removedImportSuffix = `imports where removed in Sanity v3. Please refer to the migration guide: ${urls.migrationGuideStudio}, or new API-reference docs: ${urls.refDocs}`\n\nexport async function validateImports({basePath}: {basePath: string}): Promise<string[]> {\n log.debug('Running ESLint with Sanity Studio import hints...')\n const eslint = new ESLint({\n cwd: basePath,\n overrideConfig: {\n ignorePatterns: ['node_modules'],\n rules: {\n 'no-restricted-imports': [\n 'error',\n {\n patterns: [\n ...mergedPackages.map((packageName) => ({\n group: [`${packageName}*`],\n message: `Use sanity instead of ${packageName}.`,\n })),\n {\n group: ['config:*'],\n message: `config: imports are no longer supported. Please see the new plugin API for alternatives: ${urls.migrationGuideStudio}`,\n },\n {\n group: ['part:*'],\n message: `part: ${removedImportSuffix}`,\n },\n {\n group: ['all:part:*'],\n message: `all:part: ${removedImportSuffix}`,\n },\n {\n group: ['sanity:*'],\n message: `sanity: ${removedImportSuffix}`,\n },\n ],\n },\n ],\n },\n },\n })\n\n try {\n const results = await eslint.lintFiles([path.join(basePath, '**/*.{js,jsx,ts,tsx}')])\n\n const onlyImportErrors = results\n .map((r) => {\n const limitErrors = r.messages.filter((m) => m.ruleId === 'no-restricted-imports')\n return {\n ...r,\n messages: limitErrors,\n errorCount: limitErrors.length,\n }\n })\n .filter((r) => r.errorCount)\n\n if (onlyImportErrors.length) {\n const formatter = await eslint.loadFormatter('stylish')\n const resultText = await formatter.format(onlyImportErrors)\n\n const additionalInfo = outdent`\n ESLint detected Studio V2 imports that are no longer available.\n It is recommended configure @sanity/eslint-config-no-v2-imports for ESLint.\n\n Run:\n npm install --save-dev @sanity/eslint-config-no-v2-imports\n\n In .eslintrc add:\n \"extends\": [\"@sanity/no-v2-imports\"]\n\n This way, V2-imports can be identified directly in the IDE, or using eslint CLI.\n For more, see ${urls.linterPackage}\n\n If the plugin package does not use eslint, disable this check.\n `\n return [resultText + additionalInfo]\n }\n } catch (e) {\n log.error('Failed to run eslint check', e)\n return [\n outdent`\n Failed to run ESLint. Is ESLint configured?\n\n If the package does not use eslint, disable this check.\n `,\n ]\n }\n\n return []\n}\n","import path from 'path'\n\nimport * as ts from 'typescript'\n\nimport {fileExists} from './files'\n\nexport async function readTSConfig(options: {basePath: string; filename: string}) {\n const {basePath, filename} = options\n const filePath = path.resolve(basePath, filename)\n const exists = await fileExists(filePath)\n\n if (!exists) return undefined\n\n const {config} = ts.readConfigFile(filePath, ts.sys.readFile)\n\n if (!config) return undefined\n\n return ts.parseJsonConfigFileContent(config, ts.sys, basePath)\n}\n","import childProcess from 'child_process'\n\nimport npmRunPath from 'npm-run-path'\n\nimport log from './log'\n\ninterface Command {\n command: string\n args: string[]\n}\n\nfunction parseCommand(commandString: string): Command {\n const normalized = commandString.replace(/ +/g, ' ')\n const commandAndArg = normalized.split(' ')\n return {\n command: commandAndArg[0],\n args: commandAndArg.length > 1 ? commandAndArg.slice(1) : [],\n }\n}\n\nexport async function runCommand(commandString: string): Promise<{code: number}> {\n log.info(`Running command: ${commandString}`)\n const {command, args} = parseCommand(commandString)\n\n let options: any = {stdio: 'inherit', env: npmRunPath.env()}\n\n // ref: https://stackoverflow.com/questions/37459717/error-spawn-enoent-on-windows/37487465\n options = process.platform === 'win32' ? {...options, shell: true} : options\n\n return new Promise((resolve, reject) => {\n childProcess\n .spawn(command, args, options)\n .on('error', reject)\n .on('close', (exitCode) => {\n resolve({code: exitCode ?? 0})\n })\n })\n}\n","import chalk from 'chalk'\nimport type {TypedFlags} from 'meow'\nimport outdent from 'outdent'\nimport type {ParsedCommandLine} from 'typescript'\n\nimport sharedFlags from '../../sharedFlags'\nimport {runCommand} from '../../util/command-parser'\nimport log from '../../util/log'\n\nconst splitLine = `\\n----------------------------------------------------------`\n\nexport const verifyPackageConfigDefaults = {\n 'packageName': true,\n 'esmOnly': true,\n 'tsconfig': true,\n 'tsc': true,\n 'dependencies': true,\n 'deprecatedDependencies': true,\n 'babelConfig': true,\n 'incompatiblePlugin': true,\n 'eslintImports': true,\n 'scripts': true,\n 'pkg-utils': true,\n 'nodeEngine': true,\n 'studioConfig': true,\n 'srcIndex': true,\n 'bannedFiles': true,\n 'duplicateConfig': true,\n} as const\n\nexport type VerifyPackageConfig = Partial<Record<keyof typeof verifyPackageConfigDefaults, boolean>>\n\nexport const verifyFlags = {\n ...sharedFlags,\n single: {\n default: false,\n type: 'boolean',\n },\n} as const\n\nexport type VerifyFlags = TypedFlags<typeof verifyFlags>\n\nfunction disableCheckText(checkKey: string) {\n return chalk.grey(\n outdent`\n To skip this validation add the following to your package.json:\n \"sanityPlugin\": {\n \"verifyPackage\": {\n \"${checkKey}\": false\n }\n }\n `.trimStart(),\n )\n}\n\nexport function createValidator(\n verifyConfig: VerifyPackageConfig,\n flags: VerifyFlags,\n errors: string[],\n) {\n return async function validation(\n checkKey: keyof VerifyPackageConfig,\n task: () => Promise<string[] | undefined>,\n ) {\n if (verifyConfig[checkKey] !== false) {\n const result = await task()\n if (result?.length) {\n result.push(disableCheckText(checkKey))\n const errorMessage = result.join('\\n\\n')\n errors.push(errorMessage)\n log.error(`\\n` + errorMessage + splitLine)\n }\n }\n\n if (flags.single && errors.length) {\n throw new Error(\n outdent`Detected outstanding upgrade issues.\n\n Fail-fast (--single) mode enabled, stopping validation here.\n `,\n )\n }\n }\n}\n\nexport async function runTscMaybe(verifyConfig: VerifyPackageConfig, ts?: ParsedCommandLine) {\n if (ts && verifyConfig.tsc !== false) {\n log.info('All checks ok, running TypeScript compiler.')\n const {code} = await runCommand('tsc --build')\n if (code !== 0) {\n throw new Error('Compilation failed. See output above.\\n\\n' + disableCheckText('tsc'))\n }\n }\n}\n"],"names":["ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify-common.js","names":["sharedFlags"],"sources":["../../src/dependencies/import-linter.ts","../../src/util/ts.ts","../../src/util/command-parser.ts","../../src/actions/verify/verify-common.ts"],"sourcesContent":["import path from 'path'\n\nimport {ESLint} from 'eslint'\nimport outdent from 'outdent'\n\nimport {mergedPackages} from '../configs/banned-packages'\nimport {urls} from '../constants'\nimport log from '../util/log'\n\nconst removedImportSuffix = `imports where removed in Sanity v3. Please refer to the migration guide: ${urls.migrationGuideStudio}, or new API-reference docs: ${urls.refDocs}`\n\nexport async function validateImports({basePath}: {basePath: string}): Promise<string[]> {\n log.debug('Running ESLint with Sanity Studio import hints...')\n const eslint = new ESLint({\n cwd: basePath,\n overrideConfig: {\n ignorePatterns: ['node_modules'],\n rules: {\n 'no-restricted-imports': [\n 'error',\n {\n patterns: [\n ...mergedPackages.map((packageName) => ({\n group: [`${packageName}*`],\n message: `Use sanity instead of ${packageName}.`,\n })),\n {\n group: ['config:*'],\n message: `config: imports are no longer supported. Please see the new plugin API for alternatives: ${urls.migrationGuideStudio}`,\n },\n {\n group: ['part:*'],\n message: `part: ${removedImportSuffix}`,\n },\n {\n group: ['all:part:*'],\n message: `all:part: ${removedImportSuffix}`,\n },\n {\n group: ['sanity:*'],\n message: `sanity: ${removedImportSuffix}`,\n },\n ],\n },\n ],\n },\n },\n })\n\n try {\n const results = await eslint.lintFiles([path.join(basePath, '**/*.{js,jsx,ts,tsx}')])\n\n const onlyImportErrors = results\n .map((r) => {\n const limitErrors = r.messages.filter((m) => m.ruleId === 'no-restricted-imports')\n return {\n ...r,\n messages: limitErrors,\n errorCount: limitErrors.length,\n }\n })\n .filter((r) => r.errorCount)\n\n if (onlyImportErrors.length) {\n const formatter = await eslint.loadFormatter('stylish')\n const resultText = await formatter.format(onlyImportErrors)\n\n const additionalInfo = outdent`\n ESLint detected Studio V2 imports that are no longer available.\n It is recommended configure @sanity/eslint-config-no-v2-imports for ESLint.\n\n Run:\n npm install --save-dev @sanity/eslint-config-no-v2-imports\n\n In .eslintrc add:\n \"extends\": [\"@sanity/no-v2-imports\"]\n\n This way, V2-imports can be identified directly in the IDE, or using eslint CLI.\n For more, see ${urls.linterPackage}\n\n If the plugin package does not use eslint, disable this check.\n `\n return [resultText + additionalInfo]\n }\n } catch (e) {\n log.error('Failed to run eslint check', e)\n return [\n outdent`\n Failed to run ESLint. Is ESLint configured?\n\n If the package does not use eslint, disable this check.\n `,\n ]\n }\n\n return []\n}\n","import path from 'path'\n\n// The JS compiler API is loaded from the official `@typescript/typescript6` compat package\n// instead of the `typescript` peer dependency, as TypeScript 7 (the Go-native compiler) no longer\n// ships it\nimport * as ts from '@typescript/typescript6'\n\nimport {fileExists} from './files'\n\nexport async function readTSConfig(options: {basePath: string; filename: string}) {\n const {basePath, filename} = options\n const filePath = path.resolve(basePath, filename)\n const exists = await fileExists(filePath)\n\n if (!exists) return undefined\n\n const {config} = ts.readConfigFile(filePath, ts.sys.readFile)\n\n if (!config) return undefined\n\n return ts.parseJsonConfigFileContent(config, ts.sys, basePath)\n}\n","import childProcess from 'child_process'\n\nimport npmRunPath from 'npm-run-path'\n\nimport log from './log'\n\ninterface Command {\n command: string\n args: string[]\n}\n\nfunction parseCommand(commandString: string): Command {\n const normalized = commandString.replace(/ +/g, ' ')\n const commandAndArg = normalized.split(' ')\n return {\n command: commandAndArg[0],\n args: commandAndArg.length > 1 ? commandAndArg.slice(1) : [],\n }\n}\n\nexport async function runCommand(commandString: string): Promise<{code: number}> {\n log.info(`Running command: ${commandString}`)\n const {command, args} = parseCommand(commandString)\n\n let options: any = {stdio: 'inherit', env: npmRunPath.env()}\n\n // ref: https://stackoverflow.com/questions/37459717/error-spawn-enoent-on-windows/37487465\n options = process.platform === 'win32' ? {...options, shell: true} : options\n\n return new Promise((resolve, reject) => {\n childProcess\n .spawn(command, args, options)\n .on('error', reject)\n .on('close', (exitCode) => {\n resolve({code: exitCode ?? 0})\n })\n })\n}\n","import type {ParsedCommandLine} from '@typescript/typescript6'\nimport chalk from 'chalk'\nimport type {TypedFlags} from 'meow'\nimport outdent from 'outdent'\n\nimport sharedFlags from '../../sharedFlags'\nimport {runCommand} from '../../util/command-parser'\nimport log from '../../util/log'\n\nconst splitLine = `\\n----------------------------------------------------------`\n\nexport const verifyPackageConfigDefaults = {\n 'packageName': true,\n 'esmOnly': true,\n 'tsconfig': true,\n 'tsc': true,\n 'dependencies': true,\n 'deprecatedDependencies': true,\n 'babelConfig': true,\n 'incompatiblePlugin': true,\n 'eslintImports': true,\n 'scripts': true,\n 'pkg-utils': true,\n 'nodeEngine': true,\n 'studioConfig': true,\n 'srcIndex': true,\n 'bannedFiles': true,\n 'duplicateConfig': true,\n} as const\n\nexport type VerifyPackageConfig = Partial<Record<keyof typeof verifyPackageConfigDefaults, boolean>>\n\nexport const verifyFlags = {\n ...sharedFlags,\n single: {\n default: false,\n type: 'boolean',\n },\n} as const\n\nexport type VerifyFlags = TypedFlags<typeof verifyFlags>\n\nfunction disableCheckText(checkKey: string) {\n return chalk.grey(\n outdent`\n To skip this validation add the following to your package.json:\n \"sanityPlugin\": {\n \"verifyPackage\": {\n \"${checkKey}\": false\n }\n }\n `.trimStart(),\n )\n}\n\nexport function createValidator(\n verifyConfig: VerifyPackageConfig,\n flags: VerifyFlags,\n errors: string[],\n) {\n return async function validation(\n checkKey: keyof VerifyPackageConfig,\n task: () => Promise<string[] | undefined>,\n ) {\n if (verifyConfig[checkKey] !== false) {\n const result = await task()\n if (result?.length) {\n result.push(disableCheckText(checkKey))\n const errorMessage = result.join('\\n\\n')\n errors.push(errorMessage)\n log.error(`\\n` + errorMessage + splitLine)\n }\n }\n\n if (flags.single && errors.length) {\n throw new Error(\n outdent`Detected outstanding upgrade issues.\n\n Fail-fast (--single) mode enabled, stopping validation here.\n `,\n )\n }\n }\n}\n\nexport async function runTscMaybe(verifyConfig: VerifyPackageConfig, ts?: ParsedCommandLine) {\n if (ts && verifyConfig.tsc !== false) {\n log.info('All checks ok, running TypeScript compiler.')\n const {code} = await runCommand('tsc --build')\n if (code !== 0) {\n throw new Error('Compilation failed. See output above.\\n\\n' + disableCheckText('tsc'))\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,42 +1,36 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { a as urls, t as cliName } from "./constants.js";
|
|
2
|
+
import { t as log_default } from "./log.js";
|
|
3
|
+
import { C as validatePackageName, D as validateSanityDependencies, E as validatePkgUtilsVersion, O as validateScripts, S as validateNodeEngine, T as validatePkgUtilsDependency, _ as validateBabelConfig, a as getPackage, b as validateEsmOnly, g as disallowDuplicatePrettierConfig, h as disallowDuplicateEslintConfig, j as validateTsConfig, k as validateSrcIndexFile, v as validateBannedFiles, w as validatePackageType, x as validateIncompatiblePlugin, y as validateDeprecatedDependencies } from "./package.js";
|
|
4
|
+
import { t as loadPackageConfig } from "./load-package-config.js";
|
|
5
|
+
import { a as validateImports, i as readTSConfig, n as runTscMaybe, r as verifyFlags, t as createValidator } from "./verify-common.js";
|
|
2
6
|
import meow from "meow";
|
|
3
7
|
import chalk from "chalk";
|
|
8
|
+
import path from "path";
|
|
4
9
|
import outdent from "outdent";
|
|
5
|
-
import { log, defaultOutDir, urls, cliName } from "./index.js";
|
|
6
|
-
import { readTSConfig, validateImports, runTscMaybe, createValidator, verifyFlags } from "./verify-common.js";
|
|
7
|
-
import { getPackage, validatePackageType, validatePkgUtilsVersion, validatePackageName, validateEsmOnly, validatePkgUtilsDependency, validateSrcIndexFile, validateBannedFiles, validateScripts, validateNodeEngine, disallowDuplicateEslintConfig, disallowDuplicatePrettierConfig, validateTsConfig, validateIncompatiblePlugin, validateBabelConfig, validateSanityDependencies, validateDeprecatedDependencies } from "./package.js";
|
|
8
|
-
import { loadPackageConfig } from "./load-package-config.js";
|
|
9
10
|
async function verifyPackage({ basePath, flags }) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
async () => validateIncompatiblePlugin({ basePath, packageJson })
|
|
34
|
-
), await validation("babelConfig", async () => validateBabelConfig({ basePath })), await validation("dependencies", async () => validateSanityDependencies(packageJson)), await validation(
|
|
35
|
-
"deprecatedDependencies",
|
|
36
|
-
async () => validateDeprecatedDependencies(packageJson)
|
|
37
|
-
), await validation("eslintImports", async () => validateImports({ basePath })), errors.length)
|
|
38
|
-
throw new Error(
|
|
39
|
-
outdent`
|
|
11
|
+
let errors = [], packageJson = await getPackage({
|
|
12
|
+
basePath,
|
|
13
|
+
validate: !1
|
|
14
|
+
}), verifyConfig = packageJson.sanityPlugin?.verifyPackage || {};
|
|
15
|
+
for (let hardError of [...validatePackageType(packageJson), ...validatePkgUtilsVersion({ basePath })]) errors.push(hardError), log_default.error(`\n${hardError}`);
|
|
16
|
+
let packageConfig;
|
|
17
|
+
try {
|
|
18
|
+
packageConfig = await loadPackageConfig({ basePath });
|
|
19
|
+
} catch (err) {
|
|
20
|
+
log_default.debug("Failed to load package.config: %s", err);
|
|
21
|
+
}
|
|
22
|
+
let outDir = packageConfig?.dist ?? "dist", tsconfig = packageConfig?.tsconfig ?? "tsconfig.json", validation = createValidator(verifyConfig, flags, errors), ts = await readTSConfig({
|
|
23
|
+
basePath,
|
|
24
|
+
filename: tsconfig
|
|
25
|
+
});
|
|
26
|
+
if (await validation("packageName", async () => validatePackageName(packageJson)), await validation("esmOnly", async () => validateEsmOnly(packageJson)), await validation("pkg-utils", async () => validatePkgUtilsDependency(packageJson)), await validation("srcIndex", async () => validateSrcIndexFile(basePath)), await validation("bannedFiles", async () => validateBannedFiles(packageJson)), await validation("scripts", async () => validateScripts(packageJson)), await validation("nodeEngine", async () => validateNodeEngine(packageJson)), await validation("duplicateConfig", async () => disallowDuplicateEslintConfig(basePath, packageJson)), await validation("duplicateConfig", async () => disallowDuplicatePrettierConfig(basePath, packageJson)), ts && await validation("tsconfig", async () => validateTsConfig(ts, {
|
|
27
|
+
basePath,
|
|
28
|
+
outDir,
|
|
29
|
+
tsconfig
|
|
30
|
+
})), await validation("incompatiblePlugin", async () => validateIncompatiblePlugin({
|
|
31
|
+
basePath,
|
|
32
|
+
packageJson
|
|
33
|
+
})), await validation("babelConfig", async () => validateBabelConfig({ basePath })), await validation("dependencies", async () => validateSanityDependencies(packageJson)), await validation("deprecatedDependencies", async () => validateDeprecatedDependencies(packageJson)), await validation("eslintImports", async () => validateImports({ basePath })), errors.length) throw Error(outdent`
|
|
40
34
|
Detected validation issues!
|
|
41
35
|
To make this package Sanity v3 compatible, fix the issues starting from the top, or disable any checks you deem unnecessary.
|
|
42
36
|
|
|
@@ -48,24 +42,18 @@ ${hardError}`);
|
|
|
48
42
|
- Plugin migration guide: ${urls.migrationGuidePlugin}
|
|
49
43
|
- Reference documentation: ${urls.refDocs}
|
|
50
44
|
|
|
51
|
-
${chalk.grey(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
)}
|
|
55
|
-
`.trimStart()
|
|
56
|
-
);
|
|
57
|
-
await runTscMaybe(verifyConfig, ts), log.success(
|
|
58
|
-
outdent`
|
|
45
|
+
${chalk.grey(`To fail-fast on first detected issue run:\nnpx ${cliName} verify-package --single`)}
|
|
46
|
+
`.trimStart());
|
|
47
|
+
await runTscMaybe(verifyConfig, ts), log_default.success(outdent`
|
|
59
48
|
No outstanding upgrade issues detected.
|
|
60
49
|
|
|
61
50
|
Suggested next steps:
|
|
62
51
|
- Use plugin-kit to build and develop the plugin according to ${urls.pluginReadme}.
|
|
63
52
|
- Build the plugin and fix any compilation errors
|
|
64
53
|
- Test the plugin using the link-watch command
|
|
65
|
-
`.trim()
|
|
66
|
-
);
|
|
54
|
+
`.trim());
|
|
67
55
|
}
|
|
68
|
-
const
|
|
56
|
+
const help = `
|
|
69
57
|
Usage
|
|
70
58
|
$ ${cliName} verify-package [dir] [<args>]
|
|
71
59
|
|
|
@@ -86,10 +74,16 @@ Examples
|
|
|
86
74
|
$ ${cliName} verify-package my-plugin-directory --silent
|
|
87
75
|
`;
|
|
88
76
|
function run({ argv }) {
|
|
89
|
-
|
|
90
|
-
|
|
77
|
+
let cli = meow(help, {
|
|
78
|
+
flags: verifyFlags,
|
|
79
|
+
argv,
|
|
80
|
+
description: "Verify that a Sanity plugin package is v3 compatible, and print upgrade steps if not."
|
|
81
|
+
});
|
|
82
|
+
return verifyPackage({
|
|
83
|
+
basePath: path.resolve(cli.input[0] || process.cwd()),
|
|
84
|
+
flags: cli.flags
|
|
85
|
+
});
|
|
91
86
|
}
|
|
92
|
-
export {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
//# sourceMappingURL=verify-package.js.map
|
|
87
|
+
export { run as default };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=verify-package.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-package.js","sources":["../../src/actions/verify-package.ts","../../src/cmds/verify-package.ts"],"sourcesContent":["import chalk from 'chalk'\nimport outdent from 'outdent'\n\nimport {cliName, defaultOutDir, urls} from '../constants'\nimport {validateImports} from '../dependencies/import-linter'\nimport {getPackage} from '../npm/package'\nimport {loadPackageConfig} from '../util/load-package-config'\nimport log from '../util/log'\nimport {readTSConfig} from '../util/ts'\nimport type {PackageJson} from './verify/types'\nimport {\n validateBabelConfig,\n validateEsmOnly,\n validateNodeEngine,\n validatePackageName,\n validatePackageType,\n validatePkgUtilsDependency,\n validatePkgUtilsVersion,\n validateIncompatiblePlugin,\n validateDeprecatedDependencies,\n validateScripts,\n validateTsConfig,\n validateSanityDependencies,\n validateSrcIndexFile,\n validateBannedFiles,\n disallowDuplicateEslintConfig,\n disallowDuplicatePrettierConfig,\n} from './verify/validations'\nimport {\n createValidator,\n runTscMaybe,\n type VerifyFlags,\n type VerifyPackageConfig,\n} from './verify/verify-common'\n\nexport async function verifyPackage({basePath, flags}: {basePath: string; flags: VerifyFlags}) {\n let errors: string[] = []\n\n const packageJson: PackageJson = await getPackage({basePath, validate: false})\n const verifyConfig: VerifyPackageConfig = packageJson.sanityPlugin?.verifyPackage || {}\n\n // Hard requirements (not configurable via sanityPlugin.verifyPackage): plugins must be ESM and\n // ship a compatible @sanity/pkg-utils, since plugin-kit loads package.config.ts through it.\n for (const hardError of [\n ...validatePackageType(packageJson),\n ...validatePkgUtilsVersion({basePath}),\n ]) {\n errors.push(hardError)\n log.error(`\\n${hardError}`)\n }\n\n // Load defensively: if the config can't be loaded (e.g. incompatible/missing pkg-utils), fall\n // back to defaults so the remaining checks still surface actionable issues.\n let packageConfig\n try {\n packageConfig = await loadPackageConfig({basePath})\n } catch (err) {\n log.debug('Failed to load package.config: %s', err)\n }\n const outDir = packageConfig?.dist ?? defaultOutDir\n const tsconfig = packageConfig?.tsconfig ?? 'tsconfig.json'\n\n const validation = createValidator(verifyConfig, flags, errors)\n\n const ts = await readTSConfig({basePath, filename: tsconfig})\n\n await validation('packageName', async () => validatePackageName(packageJson))\n await validation('esmOnly', async () => validateEsmOnly(packageJson))\n await validation('pkg-utils', async () => validatePkgUtilsDependency(packageJson))\n await validation('srcIndex', async () => validateSrcIndexFile(basePath))\n await validation('bannedFiles', async () => validateBannedFiles(packageJson))\n await validation('scripts', async () => validateScripts(packageJson))\n await validation('nodeEngine', async () => validateNodeEngine(packageJson))\n await validation('duplicateConfig', async () =>\n disallowDuplicateEslintConfig(basePath, packageJson),\n )\n await validation('duplicateConfig', async () =>\n disallowDuplicatePrettierConfig(basePath, packageJson),\n )\n\n if (ts) {\n await validation('tsconfig', async () => validateTsConfig(ts, {basePath, outDir, tsconfig}))\n }\n\n await validation('incompatiblePlugin', async () =>\n validateIncompatiblePlugin({basePath, packageJson}),\n )\n\n await validation('babelConfig', async () => validateBabelConfig({basePath}))\n\n await validation('dependencies', async () => validateSanityDependencies(packageJson))\n await validation('deprecatedDependencies', async () =>\n validateDeprecatedDependencies(packageJson),\n )\n await validation('eslintImports', async () => validateImports({basePath}))\n\n if (errors.length) {\n throw new Error(\n outdent`\n Detected validation issues!\n To make this package Sanity v3 compatible, fix the issues starting from the top, or disable any checks you deem unnecessary.\n\n These issues assume the package uses @sanity/plugin-kit defaults for development and building.\n Refer to ${urls.pluginReadme} for configuration options.\n\n More information is available here:\n - Studio migration guide: ${urls.migrationGuideStudio}\n - Plugin migration guide: ${urls.migrationGuidePlugin}\n - Reference documentation: ${urls.refDocs}\n\n ${chalk.grey(\n `To fail-fast on first detected issue run:\\nnpx ${cliName} verify-package --single`,\n )}\n `.trimStart(),\n )\n }\n\n await runTscMaybe(verifyConfig, ts)\n\n log.success(\n outdent`\n No outstanding upgrade issues detected.\n\n Suggested next steps:\n - Use plugin-kit to build and develop the plugin according to ${urls.pluginReadme}.\n - Build the plugin and fix any compilation errors\n - Test the plugin using the link-watch command\n `.trim(),\n )\n}\n","import path from 'path'\n\nimport meow from 'meow'\n\nimport {verifyPackage} from '../actions/verify-package'\nimport {verifyFlags} from '../actions/verify/verify-common'\nimport {cliName} from '../constants'\n\nconst description = `Verify that a Sanity plugin package is v3 compatible, and print upgrade steps if not.`\n\nconst help = `\nUsage\n $ ${cliName} verify-package [dir] [<args>]\n\nOptions\n --single Enables fail-fast mode: Will only output the first validation that fails.\n --silent Do not print info and warning messages\n --verbose Log everything. This option conflicts with --silent\n --version Output the version number\n --help Output usage information\n\nEach check will describe how they can be individually disabled.\n\nExamples\n # Verify Sanity plugin package in current directory\n $ ${cliName} verify-package\n\n # Verify Sanity plugin package in my-plugin directory in silent mode\n $ ${cliName} verify-package my-plugin-directory --silent\n`\n\nfunction run({argv}: {argv: string[]}) {\n const cli = meow(help, {flags: verifyFlags, argv, description})\n const basePath = path.resolve(cli.input[0] || process.cwd())\n return verifyPackage({basePath, flags: cli.flags})\n}\n\nexport default run\n"],"
|
|
1
|
+
{"version":3,"file":"verify-package.js","names":[],"sources":["../../src/actions/verify-package.ts","../../src/cmds/verify-package.ts"],"sourcesContent":["import chalk from 'chalk'\nimport outdent from 'outdent'\n\nimport {cliName, defaultOutDir, urls} from '../constants'\nimport {validateImports} from '../dependencies/import-linter'\nimport {getPackage} from '../npm/package'\nimport {loadPackageConfig} from '../util/load-package-config'\nimport log from '../util/log'\nimport {readTSConfig} from '../util/ts'\nimport type {PackageJson} from './verify/types'\nimport {\n validateBabelConfig,\n validateEsmOnly,\n validateNodeEngine,\n validatePackageName,\n validatePackageType,\n validatePkgUtilsDependency,\n validatePkgUtilsVersion,\n validateIncompatiblePlugin,\n validateDeprecatedDependencies,\n validateScripts,\n validateTsConfig,\n validateSanityDependencies,\n validateSrcIndexFile,\n validateBannedFiles,\n disallowDuplicateEslintConfig,\n disallowDuplicatePrettierConfig,\n} from './verify/validations'\nimport {\n createValidator,\n runTscMaybe,\n type VerifyFlags,\n type VerifyPackageConfig,\n} from './verify/verify-common'\n\nexport async function verifyPackage({basePath, flags}: {basePath: string; flags: VerifyFlags}) {\n let errors: string[] = []\n\n const packageJson: PackageJson = await getPackage({basePath, validate: false})\n const verifyConfig: VerifyPackageConfig = packageJson.sanityPlugin?.verifyPackage || {}\n\n // Hard requirements (not configurable via sanityPlugin.verifyPackage): plugins must be ESM and\n // ship a compatible @sanity/pkg-utils, since plugin-kit loads package.config.ts through it.\n for (const hardError of [\n ...validatePackageType(packageJson),\n ...validatePkgUtilsVersion({basePath}),\n ]) {\n errors.push(hardError)\n log.error(`\\n${hardError}`)\n }\n\n // Load defensively: if the config can't be loaded (e.g. incompatible/missing pkg-utils), fall\n // back to defaults so the remaining checks still surface actionable issues.\n let packageConfig\n try {\n packageConfig = await loadPackageConfig({basePath})\n } catch (err) {\n log.debug('Failed to load package.config: %s', err)\n }\n const outDir = packageConfig?.dist ?? defaultOutDir\n const tsconfig = packageConfig?.tsconfig ?? 'tsconfig.json'\n\n const validation = createValidator(verifyConfig, flags, errors)\n\n const ts = await readTSConfig({basePath, filename: tsconfig})\n\n await validation('packageName', async () => validatePackageName(packageJson))\n await validation('esmOnly', async () => validateEsmOnly(packageJson))\n await validation('pkg-utils', async () => validatePkgUtilsDependency(packageJson))\n await validation('srcIndex', async () => validateSrcIndexFile(basePath))\n await validation('bannedFiles', async () => validateBannedFiles(packageJson))\n await validation('scripts', async () => validateScripts(packageJson))\n await validation('nodeEngine', async () => validateNodeEngine(packageJson))\n await validation('duplicateConfig', async () =>\n disallowDuplicateEslintConfig(basePath, packageJson),\n )\n await validation('duplicateConfig', async () =>\n disallowDuplicatePrettierConfig(basePath, packageJson),\n )\n\n if (ts) {\n await validation('tsconfig', async () => validateTsConfig(ts, {basePath, outDir, tsconfig}))\n }\n\n await validation('incompatiblePlugin', async () =>\n validateIncompatiblePlugin({basePath, packageJson}),\n )\n\n await validation('babelConfig', async () => validateBabelConfig({basePath}))\n\n await validation('dependencies', async () => validateSanityDependencies(packageJson))\n await validation('deprecatedDependencies', async () =>\n validateDeprecatedDependencies(packageJson),\n )\n await validation('eslintImports', async () => validateImports({basePath}))\n\n if (errors.length) {\n throw new Error(\n outdent`\n Detected validation issues!\n To make this package Sanity v3 compatible, fix the issues starting from the top, or disable any checks you deem unnecessary.\n\n These issues assume the package uses @sanity/plugin-kit defaults for development and building.\n Refer to ${urls.pluginReadme} for configuration options.\n\n More information is available here:\n - Studio migration guide: ${urls.migrationGuideStudio}\n - Plugin migration guide: ${urls.migrationGuidePlugin}\n - Reference documentation: ${urls.refDocs}\n\n ${chalk.grey(\n `To fail-fast on first detected issue run:\\nnpx ${cliName} verify-package --single`,\n )}\n `.trimStart(),\n )\n }\n\n await runTscMaybe(verifyConfig, ts)\n\n log.success(\n outdent`\n No outstanding upgrade issues detected.\n\n Suggested next steps:\n - Use plugin-kit to build and develop the plugin according to ${urls.pluginReadme}.\n - Build the plugin and fix any compilation errors\n - Test the plugin using the link-watch command\n `.trim(),\n )\n}\n","import path from 'path'\n\nimport meow from 'meow'\n\nimport {verifyPackage} from '../actions/verify-package'\nimport {verifyFlags} from '../actions/verify/verify-common'\nimport {cliName} from '../constants'\n\nconst description = `Verify that a Sanity plugin package is v3 compatible, and print upgrade steps if not.`\n\nconst help = `\nUsage\n $ ${cliName} verify-package [dir] [<args>]\n\nOptions\n --single Enables fail-fast mode: Will only output the first validation that fails.\n --silent Do not print info and warning messages\n --verbose Log everything. This option conflicts with --silent\n --version Output the version number\n --help Output usage information\n\nEach check will describe how they can be individually disabled.\n\nExamples\n # Verify Sanity plugin package in current directory\n $ ${cliName} verify-package\n\n # Verify Sanity plugin package in my-plugin directory in silent mode\n $ ${cliName} verify-package my-plugin-directory --silent\n`\n\nfunction run({argv}: {argv: string[]}) {\n const cli = meow(help, {flags: verifyFlags, argv, description})\n const basePath = path.resolve(cli.input[0] || process.cwd())\n return verifyPackage({basePath, flags: cli.flags})\n}\n\nexport default run\n"],"mappings":";;;;;;;;;AAmCA,eAAsB,cAAc,EAAC,UAAU,SAAgD;CAC7F,IAAI,SAAmB,CAAC,GAElB,cAA2B,MAAM,WAAW;EAAC;EAAU,UAAU;CAAK,CAAC,GACvE,eAAoC,YAAY,cAAc,iBAAiB,CAAC;CAItF,KAAK,IAAM,aAAa,CACtB,GAAG,oBAAoB,WAAW,GAClC,GAAG,wBAAwB,EAAC,SAAQ,CAAC,CACvC,GAEE,AADA,OAAO,KAAK,SAAS,GACrB,YAAI,MAAM,KAAK,WAAW;CAK5B,IAAI;CACJ,IAAI;EACF,gBAAgB,MAAM,kBAAkB,EAAC,SAAQ,CAAC;CACpD,SAAS,KAAK;EACZ,YAAI,MAAM,qCAAqC,GAAG;CACpD;CACA,IAAM,SAAS,eAAe,QAAA,QACxB,WAAW,eAAe,YAAY,iBAEtC,aAAa,gBAAgB,cAAc,OAAO,MAAM,GAExD,KAAK,MAAM,aAAa;EAAC;EAAU,UAAU;CAAQ,CAAC;CAgC5D,IA9BA,MAAM,WAAW,eAAe,YAAY,oBAAoB,WAAW,CAAC,GAC5E,MAAM,WAAW,WAAW,YAAY,gBAAgB,WAAW,CAAC,GACpE,MAAM,WAAW,aAAa,YAAY,2BAA2B,WAAW,CAAC,GACjF,MAAM,WAAW,YAAY,YAAY,qBAAqB,QAAQ,CAAC,GACvE,MAAM,WAAW,eAAe,YAAY,oBAAoB,WAAW,CAAC,GAC5E,MAAM,WAAW,WAAW,YAAY,gBAAgB,WAAW,CAAC,GACpE,MAAM,WAAW,cAAc,YAAY,mBAAmB,WAAW,CAAC,GAC1E,MAAM,WAAW,mBAAmB,YAClC,8BAA8B,UAAU,WAAW,CACrD,GACA,MAAM,WAAW,mBAAmB,YAClC,gCAAgC,UAAU,WAAW,CACvD,GAEI,MACF,MAAM,WAAW,YAAY,YAAY,iBAAiB,IAAI;EAAC;EAAU;EAAQ;CAAQ,CAAC,CAAC,GAG7F,MAAM,WAAW,sBAAsB,YACrC,2BAA2B;EAAC;EAAU;CAAW,CAAC,CACpD,GAEA,MAAM,WAAW,eAAe,YAAY,oBAAoB,EAAC,SAAQ,CAAC,CAAC,GAE3E,MAAM,WAAW,gBAAgB,YAAY,2BAA2B,WAAW,CAAC,GACpF,MAAM,WAAW,0BAA0B,YACzC,+BAA+B,WAAW,CAC5C,GACA,MAAM,WAAW,iBAAiB,YAAY,gBAAgB,EAAC,SAAQ,CAAC,CAAC,GAErE,OAAO,QACT,MAAU,MACR,OAAO;;;;;mBAKM,KAAK,aAAa;;;oCAGD,KAAK,qBAAqB;oCAC1B,KAAK,qBAAqB;qCACzB,KAAK,QAAQ;;UAExC,MAAM,KACN,kDAAkD,QAAQ,yBAC5D,EAAE;QACF,UAAU,CACd;CAKF,AAFA,MAAM,YAAY,cAAc,EAAE,GAElC,YAAI,QACF,OAAO;;;;sEAI2D,KAAK,aAAa;;;IAGpF,KAAK,CACP;AACF;ACzHA,MAEM,OAAO;;MAEP,QAAQ;;;;;;;;;;;;;MAaR,QAAQ;;;MAGR,QAAQ;;AAGd,SAAS,IAAI,EAAC,QAAyB;CACrC,IAAM,MAAM,KAAK,MAAM;EAAC,OAAO;EAAa;EAAM;CAAW,CAAC;CAE9D,OAAO,cAAc;EAAC,UADL,KAAK,QAAQ,IAAI,MAAM,MAAM,QAAQ,IAAI,CAC7B;EAAG,OAAO,IAAI;CAAK,CAAC;AACnD"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { a as urls, t as cliName } from "./constants.js";
|
|
2
|
+
import { t as log_default } from "./log.js";
|
|
3
|
+
import { A as validateStudioConfig, D as validateSanityDependencies, a as getPackage } from "./package.js";
|
|
4
|
+
import { t as loadPackageConfig } from "./load-package-config.js";
|
|
5
|
+
import { a as validateImports, i as readTSConfig, n as runTscMaybe, r as verifyFlags, t as createValidator } from "./verify-common.js";
|
|
2
6
|
import meow from "meow";
|
|
3
7
|
import chalk from "chalk";
|
|
8
|
+
import path from "path";
|
|
4
9
|
import outdent from "outdent";
|
|
5
|
-
import { urls, cliName, log } from "./index.js";
|
|
6
|
-
import { readTSConfig, validateImports, runTscMaybe, createValidator, verifyFlags } from "./verify-common.js";
|
|
7
|
-
import { getPackage, validateStudioConfig, validateSanityDependencies } from "./package.js";
|
|
8
|
-
import { loadPackageConfig } from "./load-package-config.js";
|
|
9
10
|
async function verifyStudio({ basePath, flags }) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
let errors = [], packageJson = await getPackage({
|
|
12
|
+
basePath,
|
|
13
|
+
validate: !1
|
|
14
|
+
}), verifyConfig = packageJson.sanityPlugin?.verifyPackage || {}, tsconfig = (await loadPackageConfig({ basePath }))?.tsconfig ?? "tsconfig.json", validation = createValidator(verifyConfig, flags, errors), ts = await readTSConfig({
|
|
15
|
+
basePath,
|
|
16
|
+
filename: tsconfig
|
|
17
|
+
});
|
|
18
|
+
if (await validation("studioConfig", async () => validateStudioConfig({ basePath })), await validation("dependencies", async () => validateSanityDependencies(packageJson)), await validation("eslintImports", async () => validateImports({ basePath })), errors.length) throw Error(outdent`
|
|
15
19
|
Detected validation issues!
|
|
16
20
|
This Sanity Studio is not completely V3 ready. Fix the issues starting from the top, or disable any checks you deem unnecessary.
|
|
17
21
|
|
|
@@ -19,19 +23,13 @@ async function verifyStudio({ basePath, flags }) {
|
|
|
19
23
|
- Migration guide: ${urls.migrationGuideStudio}
|
|
20
24
|
- Reference documentation: ${urls.refDocs}
|
|
21
25
|
|
|
22
|
-
${chalk.grey(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
)}
|
|
26
|
-
`.trimStart()
|
|
27
|
-
);
|
|
28
|
-
await runTscMaybe(verifyConfig, ts), log.success(
|
|
29
|
-
outdent`
|
|
26
|
+
${chalk.grey(`To fail-fast on first detected issue run:\nnpx ${cliName} verify-studio --single`)}
|
|
27
|
+
`.trimStart());
|
|
28
|
+
await runTscMaybe(verifyConfig, ts), log_default.success(outdent`
|
|
30
29
|
No outstanding upgrade issues detected. Studio is V3 ready!
|
|
31
|
-
`.trim()
|
|
32
|
-
);
|
|
30
|
+
`.trim());
|
|
33
31
|
}
|
|
34
|
-
const
|
|
32
|
+
const help = `
|
|
35
33
|
Usage
|
|
36
34
|
$ ${cliName} verify-studio [dir] [<args>]
|
|
37
35
|
|
|
@@ -52,10 +50,16 @@ Examples
|
|
|
52
50
|
$ ${cliName} verify-studio my-sanity-studio --silent
|
|
53
51
|
`;
|
|
54
52
|
function run({ argv }) {
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
let cli = meow(help, {
|
|
54
|
+
flags: verifyFlags,
|
|
55
|
+
argv,
|
|
56
|
+
description: "Verify that a Sanity Studio is configured correctly for v3, and print upgrade steps if not."
|
|
57
|
+
});
|
|
58
|
+
return verifyStudio({
|
|
59
|
+
basePath: path.resolve(cli.input[0] || process.cwd()),
|
|
60
|
+
flags: cli.flags
|
|
61
|
+
});
|
|
57
62
|
}
|
|
58
|
-
export {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=verify-studio.js.map
|
|
63
|
+
export { run as default };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=verify-studio.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-studio.js","sources":["../../src/actions/verify-studio.ts","../../src/cmds/verify-studio.ts"],"sourcesContent":["import chalk from 'chalk'\nimport outdent from 'outdent'\n\nimport {cliName, urls} from '../constants'\nimport {validateImports} from '../dependencies/import-linter'\nimport {getPackage} from '../npm/package'\nimport {loadPackageConfig} from '../util/load-package-config'\nimport log from '../util/log'\nimport {readTSConfig} from '../util/ts'\nimport type {PackageJson} from './verify/types'\nimport {validateSanityDependencies, validateStudioConfig} from './verify/validations'\nimport {\n createValidator,\n runTscMaybe,\n type VerifyFlags,\n type VerifyPackageConfig,\n} from './verify/verify-common'\n\nexport async function verifyStudio({basePath, flags}: {basePath: string; flags: VerifyFlags}) {\n let errors: string[] = []\n\n const packageJson: PackageJson = await getPackage({basePath, validate: false})\n const verifyConfig: VerifyPackageConfig = packageJson.sanityPlugin?.verifyPackage || {}\n const packageConfig = await loadPackageConfig({basePath})\n const tsconfig = packageConfig?.tsconfig ?? 'tsconfig.json'\n\n const validation = createValidator(verifyConfig, flags, errors)\n\n const ts = await readTSConfig({basePath, filename: tsconfig})\n\n await validation('studioConfig', async () => validateStudioConfig({basePath}))\n await validation('dependencies', async () => validateSanityDependencies(packageJson))\n await validation('eslintImports', async () => validateImports({basePath}))\n\n if (errors.length) {\n throw new Error(\n outdent`\n Detected validation issues!\n This Sanity Studio is not completely V3 ready. Fix the issues starting from the top, or disable any checks you deem unnecessary.\n\n More information is available here:\n - Migration guide: ${urls.migrationGuideStudio}\n - Reference documentation: ${urls.refDocs}\n\n ${chalk.grey(\n `To fail-fast on first detected issue run:\\nnpx ${cliName} verify-studio --single`,\n )}\n `.trimStart(),\n )\n }\n\n await runTscMaybe(verifyConfig, ts)\n\n log.success(\n outdent`\n No outstanding upgrade issues detected. Studio is V3 ready!\n `.trim(),\n )\n}\n","import path from 'path'\n\nimport meow from 'meow'\n\nimport {verifyStudio} from '../actions/verify-studio'\nimport {verifyFlags} from '../actions/verify/verify-common'\nimport {cliName} from '../constants'\n\nconst description = `Verify that a Sanity Studio is configured correctly for v3, and print upgrade steps if not.`\n\nconst help = `\nUsage\n $ ${cliName} verify-studio [dir] [<args>]\n\nOptions\n --single Enables fail-fast mode: Will only output the first validation that fails.\n --silent Do not print info and warning messages\n --verbose Log everything. This option conflicts with --silent\n --version Output the version number\n --help Output usage information\n\nEach check will describe how they can be individually disabled.\n\nExamples\n # Verify Sanity Studio in current directory\n $ ${cliName} verify-studio\n\n # Verify Sanity Studio in my-sanity-studio directory in silent mode\n $ ${cliName} verify-studio my-sanity-studio --silent\n`\n\nfunction run({argv}: {argv: string[]}) {\n const cli = meow(help, {flags: verifyFlags, argv, description})\n const basePath = path.resolve(cli.input[0] || process.cwd())\n return verifyStudio({basePath, flags: cli.flags})\n}\n\nexport default run\n"],"
|
|
1
|
+
{"version":3,"file":"verify-studio.js","names":[],"sources":["../../src/actions/verify-studio.ts","../../src/cmds/verify-studio.ts"],"sourcesContent":["import chalk from 'chalk'\nimport outdent from 'outdent'\n\nimport {cliName, urls} from '../constants'\nimport {validateImports} from '../dependencies/import-linter'\nimport {getPackage} from '../npm/package'\nimport {loadPackageConfig} from '../util/load-package-config'\nimport log from '../util/log'\nimport {readTSConfig} from '../util/ts'\nimport type {PackageJson} from './verify/types'\nimport {validateSanityDependencies, validateStudioConfig} from './verify/validations'\nimport {\n createValidator,\n runTscMaybe,\n type VerifyFlags,\n type VerifyPackageConfig,\n} from './verify/verify-common'\n\nexport async function verifyStudio({basePath, flags}: {basePath: string; flags: VerifyFlags}) {\n let errors: string[] = []\n\n const packageJson: PackageJson = await getPackage({basePath, validate: false})\n const verifyConfig: VerifyPackageConfig = packageJson.sanityPlugin?.verifyPackage || {}\n const packageConfig = await loadPackageConfig({basePath})\n const tsconfig = packageConfig?.tsconfig ?? 'tsconfig.json'\n\n const validation = createValidator(verifyConfig, flags, errors)\n\n const ts = await readTSConfig({basePath, filename: tsconfig})\n\n await validation('studioConfig', async () => validateStudioConfig({basePath}))\n await validation('dependencies', async () => validateSanityDependencies(packageJson))\n await validation('eslintImports', async () => validateImports({basePath}))\n\n if (errors.length) {\n throw new Error(\n outdent`\n Detected validation issues!\n This Sanity Studio is not completely V3 ready. Fix the issues starting from the top, or disable any checks you deem unnecessary.\n\n More information is available here:\n - Migration guide: ${urls.migrationGuideStudio}\n - Reference documentation: ${urls.refDocs}\n\n ${chalk.grey(\n `To fail-fast on first detected issue run:\\nnpx ${cliName} verify-studio --single`,\n )}\n `.trimStart(),\n )\n }\n\n await runTscMaybe(verifyConfig, ts)\n\n log.success(\n outdent`\n No outstanding upgrade issues detected. Studio is V3 ready!\n `.trim(),\n )\n}\n","import path from 'path'\n\nimport meow from 'meow'\n\nimport {verifyStudio} from '../actions/verify-studio'\nimport {verifyFlags} from '../actions/verify/verify-common'\nimport {cliName} from '../constants'\n\nconst description = `Verify that a Sanity Studio is configured correctly for v3, and print upgrade steps if not.`\n\nconst help = `\nUsage\n $ ${cliName} verify-studio [dir] [<args>]\n\nOptions\n --single Enables fail-fast mode: Will only output the first validation that fails.\n --silent Do not print info and warning messages\n --verbose Log everything. This option conflicts with --silent\n --version Output the version number\n --help Output usage information\n\nEach check will describe how they can be individually disabled.\n\nExamples\n # Verify Sanity Studio in current directory\n $ ${cliName} verify-studio\n\n # Verify Sanity Studio in my-sanity-studio directory in silent mode\n $ ${cliName} verify-studio my-sanity-studio --silent\n`\n\nfunction run({argv}: {argv: string[]}) {\n const cli = meow(help, {flags: verifyFlags, argv, description})\n const basePath = path.resolve(cli.input[0] || process.cwd())\n return verifyStudio({basePath, flags: cli.flags})\n}\n\nexport default run\n"],"mappings":";;;;;;;;;AAkBA,eAAsB,aAAa,EAAC,UAAU,SAAgD;CAC5F,IAAI,SAAmB,CAAC,GAElB,cAA2B,MAAM,WAAW;EAAC;EAAU,UAAU;CAAK,CAAC,GACvE,eAAoC,YAAY,cAAc,iBAAiB,CAAC,GAEhF,YAAW,MADW,kBAAkB,EAAC,SAAQ,CAAC,EAAA,EACxB,YAAY,iBAEtC,aAAa,gBAAgB,cAAc,OAAO,MAAM,GAExD,KAAK,MAAM,aAAa;EAAC;EAAU,UAAU;CAAQ,CAAC;CAM5D,IAJA,MAAM,WAAW,gBAAgB,YAAY,qBAAqB,EAAC,SAAQ,CAAC,CAAC,GAC7E,MAAM,WAAW,gBAAgB,YAAY,2BAA2B,WAAW,CAAC,GACpF,MAAM,WAAW,iBAAiB,YAAY,gBAAgB,EAAC,SAAQ,CAAC,CAAC,GAErE,OAAO,QACT,MAAU,MACR,OAAO;;;;;6BAKgB,KAAK,qBAAqB;qCAClB,KAAK,QAAQ;;UAExC,MAAM,KACN,kDAAkD,QAAQ,wBAC5D,EAAE;QACF,UAAU,CACd;CAKF,AAFA,MAAM,YAAY,cAAc,EAAE,GAElC,YAAI,QACF,OAAO;;IAEP,KAAK,CACP;AACF;AClDA,MAEM,OAAO;;MAEP,QAAQ;;;;;;;;;;;;;MAaR,QAAQ;;;MAGR,QAAQ;;AAGd,SAAS,IAAI,EAAC,QAAyB;CACrC,IAAM,MAAM,KAAK,MAAM;EAAC,OAAO;EAAa;EAAM;CAAW,CAAC;CAE9D,OAAO,aAAa;EAAC,UADJ,KAAK,QAAQ,IAAI,MAAM,MAAM,QAAQ,IAAI,CAC9B;EAAG,OAAO,IAAI;CAAK,CAAC;AAClD"}
|