@sanity/plugin-kit 4.0.19 → 5.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/assets/inject/semver-workflow/.husky/commit-msg +0 -0
- package/assets/inject/semver-workflow/.husky/pre-commit +0 -0
- package/assets/inject/ui-workshop/src/__workshop__/props.tsx +2 -1
- package/bin/plugin-kit.js +3 -1
- package/dist/{_chunks-cjs/cli.js → _chunks-es/index.js} +53 -63
- package/dist/_chunks-es/index.js.map +1 -0
- package/dist/{_chunks-cjs/init2.js → _chunks-es/init.js} +25 -23
- package/dist/_chunks-es/init.js.map +1 -0
- package/dist/_chunks-es/init2.js +140 -0
- package/dist/_chunks-es/init2.js.map +1 -0
- package/{src/cmds/inject.ts → dist/_chunks-es/inject.js} +18 -32
- package/dist/{_chunks-cjs → _chunks-es}/inject.js.map +1 -1
- package/dist/_chunks-es/link-watch.js +91 -0
- package/dist/_chunks-es/link-watch.js.map +1 -0
- package/dist/_chunks-es/load-package-config.js +22 -0
- package/dist/_chunks-es/load-package-config.js.map +1 -0
- package/dist/_chunks-es/package.js +1759 -0
- package/dist/_chunks-es/package.js.map +1 -0
- package/dist/_chunks-es/package2.js +9 -0
- package/dist/_chunks-es/package2.js.map +1 -0
- package/dist/{_chunks-cjs → _chunks-es}/ts.js +101 -92
- package/dist/_chunks-es/ts.js.map +1 -0
- package/dist/_chunks-es/verify-package.js +92 -0
- package/dist/_chunks-es/verify-package.js.map +1 -0
- package/dist/_chunks-es/verify-studio.js +61 -0
- package/dist/_chunks-es/verify-studio.js.map +1 -0
- package/dist/_chunks-es/version.js +50 -0
- package/dist/_chunks-es/version.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +41 -88
- package/LICENSE +0 -21
- package/dist/_chunks-cjs/cli.js.map +0 -1
- package/dist/_chunks-cjs/init.js +0 -894
- package/dist/_chunks-cjs/init.js.map +0 -1
- package/dist/_chunks-cjs/init2.js.map +0 -1
- package/dist/_chunks-cjs/inject.js +0 -54
- package/dist/_chunks-cjs/link-watch.js +0 -84
- package/dist/_chunks-cjs/link-watch.js.map +0 -1
- package/dist/_chunks-cjs/package.js +0 -1809
- package/dist/_chunks-cjs/package.js.map +0 -1
- package/dist/_chunks-cjs/package2.js +0 -146
- package/dist/_chunks-cjs/package2.js.map +0 -1
- package/dist/_chunks-cjs/ts.js.map +0 -1
- package/dist/_chunks-cjs/verify-package.js +0 -75
- package/dist/_chunks-cjs/verify-package.js.map +0 -1
- package/dist/_chunks-cjs/verify-studio.js +0 -57
- package/dist/_chunks-cjs/verify-studio.js.map +0 -1
- package/dist/_chunks-cjs/version.js +0 -51
- package/dist/_chunks-cjs/version.js.map +0 -1
- package/dist/cli.d.ts +0 -4
- package/dist/cli.js +0 -6
- package/dist/cli.js.map +0 -1
- package/src/actions/init.ts +0 -95
- package/src/actions/inject.ts +0 -399
- package/src/actions/link-watch.ts +0 -98
- package/src/actions/verify/types.ts +0 -56
- package/src/actions/verify/validations.ts +0 -505
- package/src/actions/verify/verify-common.ts +0 -93
- package/src/actions/verify-package.ts +0 -103
- package/src/actions/verify-studio.ts +0 -58
- package/src/cli.ts +0 -77
- package/src/cmds/index.ts +0 -20
- package/src/cmds/init.ts +0 -90
- package/src/cmds/link-watch.ts +0 -50
- package/src/cmds/verify-package.ts +0 -36
- package/src/cmds/verify-studio.ts +0 -36
- package/src/cmds/version.ts +0 -67
- package/src/configs/banned-packages.ts +0 -27
- package/src/configs/buildExtensions.ts +0 -1
- package/src/configs/default-source.ts +0 -64
- package/src/configs/eslint.ts +0 -51
- package/src/configs/forced-package-versions.ts +0 -12
- package/src/configs/git.ts +0 -68
- package/src/configs/pkg-config.ts +0 -31
- package/src/configs/prettier.ts +0 -11
- package/src/configs/tsconfig.ts +0 -78
- package/src/configs/uselessFiles.ts +0 -29
- package/src/constants.ts +0 -15
- package/src/dependencies/find.ts +0 -193
- package/src/dependencies/import-linter.ts +0 -95
- package/src/index.ts +0 -1
- package/src/npm/manager.ts +0 -44
- package/src/npm/package.ts +0 -427
- package/src/npm/publish.ts +0 -9
- package/src/npm/resolveLatestVersions.ts +0 -31
- package/src/presets/presets.ts +0 -54
- package/src/presets/renovatebot.ts +0 -21
- package/src/presets/semver-workflow.ts +0 -193
- package/src/presets/ui-workshop.ts +0 -97
- package/src/presets/ui.ts +0 -67
- package/src/sanity/manifest.ts +0 -340
- package/src/sharedFlags.ts +0 -14
- package/src/util/command-parser.ts +0 -36
- package/src/util/errorToUndefined.ts +0 -7
- package/src/util/files.ts +0 -260
- package/src/util/log.ts +0 -44
- package/src/util/prompt.ts +0 -70
- package/src/util/readme.ts +0 -93
- package/src/util/request.ts +0 -11
- package/src/util/ts.ts +0 -13
- package/src/util/user.ts +0 -119
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify-package.js","sources":["../../src/actions/verify-package.ts","../../src/cmds/verify-package.ts"],"sourcesContent":["import {loadConfig as loadPackageConfig} from '@sanity/pkg-utils'\nimport {getPackage} from '../npm/package'\nimport log from '../util/log'\nimport {cliName, defaultOutDir, urls} from '../constants'\nimport {validateImports} from '../dependencies/import-linter'\nimport outdent from 'outdent'\nimport {\n createValidator,\n runTscMaybe,\n VerifyFlags,\n VerifyPackageConfig,\n} from './verify/verify-common'\nimport {\n validateBabelConfig,\n validateNodeEngine,\n validatePackageName,\n validatePkgUtilsDependency,\n validatePluginSanityJson,\n validateDeprecatedDependencies,\n validateScripts,\n validateTsConfig,\n validateSanityDependencies,\n validateSrcIndexFile,\n disallowDuplicateEslintConfig,\n disallowDuplicatePrettierConfig,\n} from './verify/validations'\nimport {PackageJson} from './verify/types'\nimport chalk from 'chalk'\nimport {readTSConfig} from '../util/ts'\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 const packageConfig = await loadPackageConfig({cwd: basePath})\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('pkg-utils', async () => validatePkgUtilsDependency(packageJson))\n await validation('srcIndex', async () => validateSrcIndexFile(basePath))\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('sanityV2Json', async () => validatePluginSanityJson({basePath, packageJson}))\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'\nimport meow from 'meow'\nimport {verifyPackage} from '../actions/verify-package'\nimport {cliName} from '../constants'\nimport {verifyFlags} from '../actions/verify/verify-common'\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"],"names":["getPackage","loadPackageConfig","defaultOutDir","createValidator","ts","readTSConfig","validatePackageName","validatePkgUtilsDependency","validateSrcIndexFile","validateScripts","validateNodeEngine","disallowDuplicateEslintConfig","disallowDuplicatePrettierConfig","validateTsConfig","validatePluginSanityJson","validateBabelConfig","validateSanityDependencies","validateDeprecatedDependencies","validateImports","outdent","urls","chalk","cliName","runTscMaybe","log","cli","meow","verifyFlags","path"],"mappings":";;;;;;AA8BA,eAAsB,cAAc,EAAC,UAAU,SAAgD;AAC7F,MAAI,SAAmB,CAAC;AAElB,QAAA,cAA2B,MAAMA,SAAAA,WAAW,EAAC,UAAU,UAAU,GAAM,CAAA,GACvE,eAAoC,YAAY,cAAc,iBAAiB,CAAA,GAC/E,gBAAgB,MAAMC,SAAAA,WAAkB,EAAC,KAAK,UAAS,GACvD,SAAS,eAAe,QAAQC,IAAAA,eAChC,WAAW,eAAe,YAAY,iBAEtC,aAAaC,GAAgB,gBAAA,cAAc,OAAO,MAAM,GAExDC,OAAK,MAAMC,GAAA,aAAa,EAAC,UAAU,UAAU,UAAS;AA4B5D,MA1BA,MAAM,WAAW,eAAe,YAAYC,SAAAA,oBAAoB,WAAW,CAAC,GAC5E,MAAM,WAAW,aAAa,YAAYC,SAAAA,2BAA2B,WAAW,CAAC,GACjF,MAAM,WAAW,YAAY,YAAYC,SAAqB,qBAAA,QAAQ,CAAC,GACvE,MAAM,WAAW,WAAW,YAAYC,yBAAgB,WAAW,CAAC,GACpE,MAAM,WAAW,cAAc,YAAYC,4BAAmB,WAAW,CAAC,GAC1E,MAAM;AAAA,IAAW;AAAA,IAAmB,YAClCC,SAAAA,8BAA8B,UAAU,WAAW;AAAA,KAErD,MAAM;AAAA,IAAW;AAAA,IAAmB,YAClCC,SAAAA,gCAAgC,UAAU,WAAW;AAAA,EAAA,GAGnDR,QACF,MAAM,WAAW,YAAY,YAAYS,SAAAA,iBAAiBT,MAAI,EAAC,UAAU,QAAQ,SAAS,CAAA,CAAC,GAG7F,MAAM,WAAW,gBAAgB,YAAYU,SAAAA,yBAAyB,EAAC,UAAU,YAAY,CAAA,CAAC,GAE9F,MAAM,WAAW,eAAe,YAAYC,SAAA,oBAAoB,EAAC,SAAQ,CAAC,CAAC,GAE3E,MAAM,WAAW,gBAAgB,YAAYC,oCAA2B,WAAW,CAAC,GACpF,MAAM;AAAA,IAAW;AAAA,IAA0B,YACzCC,wCAA+B,WAAW;AAAA,EAAA,GAE5C,MAAM,WAAW,iBAAiB,YAAYC,GAAAA,gBAAgB,EAAC,SAAS,CAAA,CAAC,GAErE,OAAO;AACT,UAAM,IAAI;AAAA,MACRC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKaC,IAAAA,KAAK,YAAY;AAAA;AAAA;AAAA,oCAGAA,SAAK,oBAAoB;AAAA,oCACzBA,SAAK,oBAAoB;AAAA,qCACxBA,SAAK,OAAO;AAAA;AAAA,UAEvCC,eAAM,QAAA;AAAA,QACN;AAAA,MAAkDC,IAAO,OAAA;AAAA,MAC1D,CAAA;AAAA,QACD,UAAU;AAAA,IACd;AAGF,QAAMC,GAAY,YAAA,cAAcnB,IAAE,GAElCoB,IAAI,IAAA;AAAA,IACFL,iBAAA;AAAA;AAAA;AAAA;AAAA,sEAIkEC,IAAAA,KAAK,YAAY;AAAA;AAAA;AAAA,IAGnF,KAAK;AAAA,EACP;AACF;AChGA,MAAM,cAAc,yFAEd,OAAO;AAAA;AAAA,MAEPE,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaPA,WAAO;AAAA;AAAA;AAAA,MAGPA,WAAO;AAAA;AAGb,SAAS,IAAI,EAAC,QAAyB;AACrC,QAAMG,OAAMC,cAAAA,QAAK,MAAM,EAAC,OAAOC,GAAA,aAAa,MAAM,YAAY,CAAA,GACxD,WAAWC,cAAA,QAAK,QAAQH,KAAI,MAAM,CAAC,KAAK,QAAQ,KAAK;AAC3D,SAAO,cAAc,EAAC,UAAU,OAAOA,KAAI,OAAM;AACnD;;"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var path = require("path"), meow = require("meow"), cli = require("./cli.js"), ts = require("./ts.js"), pkgUtils = require("@sanity/pkg-utils"), _package = require("./package.js"), outdent = require("outdent"), chalk = require("chalk");
|
|
3
|
-
function _interopDefaultCompat(e) {
|
|
4
|
-
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
|
5
|
-
}
|
|
6
|
-
var path__default = /* @__PURE__ */ _interopDefaultCompat(path), meow__default = /* @__PURE__ */ _interopDefaultCompat(meow), outdent__default = /* @__PURE__ */ _interopDefaultCompat(outdent), chalk__default = /* @__PURE__ */ _interopDefaultCompat(chalk);
|
|
7
|
-
async function verifyStudio({ basePath, flags }) {
|
|
8
|
-
let errors = [];
|
|
9
|
-
const packageJson = await _package.getPackage({ basePath, validate: !1 }), verifyConfig = packageJson.sanityPlugin?.verifyPackage || {}, tsconfig = (await pkgUtils.loadConfig({ cwd: basePath }))?.tsconfig ?? "tsconfig.json", validation = ts.createValidator(verifyConfig, flags, errors), ts$1 = await ts.readTSConfig({ basePath, filename: tsconfig });
|
|
10
|
-
if (await validation("studioConfig", async () => _package.validateStudioConfig({ basePath })), await validation("dependencies", async () => _package.validateSanityDependencies(packageJson)), await validation("eslintImports", async () => ts.validateImports({ basePath })), errors.length)
|
|
11
|
-
throw new Error(
|
|
12
|
-
outdent__default.default`
|
|
13
|
-
Detected validation issues!
|
|
14
|
-
This Sanity Studio is not completely V3 ready. Fix the issues starting from the top, or disable any checks you deem unnecessary.
|
|
15
|
-
|
|
16
|
-
More information is available here:
|
|
17
|
-
- Migration guide: ${cli.urls.migrationGuideStudio}
|
|
18
|
-
- Reference documentation: ${cli.urls.refDocs}
|
|
19
|
-
|
|
20
|
-
${chalk__default.default.grey(
|
|
21
|
-
`To fail-fast on first detected issue run:
|
|
22
|
-
npx ${cli.cliName} verify-studio --single`
|
|
23
|
-
)}
|
|
24
|
-
`.trimStart()
|
|
25
|
-
);
|
|
26
|
-
await ts.runTscMaybe(verifyConfig, ts$1), cli.log.success(
|
|
27
|
-
outdent__default.default`
|
|
28
|
-
No outstanding upgrade issues detected. Studio is V3 ready!
|
|
29
|
-
`.trim()
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
const description = "Verify that a Sanity Studio is configured correctly for v3, and print upgrade steps if not.", help = `
|
|
33
|
-
Usage
|
|
34
|
-
$ ${cli.cliName} verify-studio [dir] [<args>]
|
|
35
|
-
|
|
36
|
-
Options
|
|
37
|
-
--single Enables fail-fast mode: Will only output the first validation that fails.
|
|
38
|
-
--silent Do not print info and warning messages
|
|
39
|
-
--verbose Log everything. This option conflicts with --silent
|
|
40
|
-
--version Output the version number
|
|
41
|
-
--help Output usage information
|
|
42
|
-
|
|
43
|
-
Each check will describe how they can be individually disabled.
|
|
44
|
-
|
|
45
|
-
Examples
|
|
46
|
-
# Verify Sanity Studio in current directory
|
|
47
|
-
$ ${cli.cliName} verify-studio
|
|
48
|
-
|
|
49
|
-
# Verify Sanity Studio in my-sanity-studio directory in silent mode
|
|
50
|
-
$ ${cli.cliName} verify-studio my-sanity-studio --silent
|
|
51
|
-
`;
|
|
52
|
-
function run({ argv }) {
|
|
53
|
-
const cli2 = meow__default.default(help, { flags: ts.verifyFlags, argv, description }), basePath = path__default.default.resolve(cli2.input[0] || process.cwd());
|
|
54
|
-
return verifyStudio({ basePath, flags: cli2.flags });
|
|
55
|
-
}
|
|
56
|
-
exports.default = run;
|
|
57
|
-
//# sourceMappingURL=verify-studio.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify-studio.js","sources":["../../src/actions/verify-studio.ts","../../src/cmds/verify-studio.ts"],"sourcesContent":["import {loadConfig as loadPackageConfig} from '@sanity/pkg-utils'\nimport {getPackage} from '../npm/package'\nimport log from '../util/log'\nimport {cliName, urls} from '../constants'\nimport {validateImports} from '../dependencies/import-linter'\nimport outdent from 'outdent'\nimport chalk from 'chalk'\nimport {\n createValidator,\n runTscMaybe,\n VerifyFlags,\n VerifyPackageConfig,\n} from './verify/verify-common'\nimport {PackageJson} from './verify/types'\nimport {validateSanityDependencies, validateStudioConfig} from './verify/validations'\nimport {readTSConfig} from '../util/ts'\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({cwd: 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'\nimport meow from 'meow'\nimport {cliName} from '../constants'\nimport {verifyFlags} from '../actions/verify/verify-common'\nimport {verifyStudio} from '../actions/verify-studio'\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"],"names":["getPackage","loadPackageConfig","createValidator","ts","readTSConfig","validateStudioConfig","validateSanityDependencies","validateImports","outdent","urls","chalk","cliName","runTscMaybe","log","cli","meow","verifyFlags","path"],"mappings":";;;;;;AAiBA,eAAsB,aAAa,EAAC,UAAU,SAAgD;AAC5F,MAAI,SAAmB,CAAC;AAExB,QAAM,cAA2B,MAAMA,SAAA,WAAW,EAAC,UAAU,UAAU,GAAM,CAAA,GACvE,eAAoC,YAAY,cAAc,iBAAiB,CAE/E,GAAA,YADgB,MAAMC,oBAAkB,EAAC,KAAK,SAAA,CAAS,IAC7B,YAAY,iBAEtC,aAAaC,mBAAgB,cAAc,OAAO,MAAM,GAExDC,OAAK,MAAMC,GAAA,aAAa,EAAC,UAAU,UAAU,UAAS;AAM5D,MAJA,MAAM,WAAW,gBAAgB,YAAYC,SAAqB,qBAAA,EAAC,SAAQ,CAAC,CAAC,GAC7E,MAAM,WAAW,gBAAgB,YAAYC,oCAA2B,WAAW,CAAC,GACpF,MAAM,WAAW,iBAAiB,YAAYC,mBAAgB,EAAC,SAAS,CAAA,CAAC,GAErE,OAAO;AACT,UAAM,IAAI;AAAA,MACRC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKuBC,SAAK,oBAAoB;AAAA,qCACjBA,SAAK,OAAO;AAAA;AAAA,UAEvCC,eAAM,QAAA;AAAA,QACN;AAAA,MAAkDC,IAAO,OAAA;AAAA,MAC1D,CAAA;AAAA,QACD,UAAU;AAAA,IACd;AAGF,QAAMC,GAAY,YAAA,cAAcT,IAAE,GAElCU,IAAI,IAAA;AAAA,IACFL,iBAAA;AAAA;AAAA,IAEA,KAAK;AAAA,EACP;AACF;ACnDA,MAAM,cAAc,+FAEd,OAAO;AAAA;AAAA,MAEPG,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaPA,WAAO;AAAA;AAAA;AAAA,MAGPA,WAAO;AAAA;AAGb,SAAS,IAAI,EAAC,QAAyB;AACrC,QAAMG,OAAMC,cAAAA,QAAK,MAAM,EAAC,OAAOC,GAAA,aAAa,MAAM,YAAY,CAAA,GACxD,WAAWC,cAAA,QAAK,QAAQH,KAAI,MAAM,CAAC,KAAK,QAAQ,KAAK;AAC3D,SAAO,aAAa,EAAC,UAAU,OAAOA,KAAI,OAAM;AAClD;;"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var meow = require("meow"), _package = require("./package2.js"), cli = require("./cli.js");
|
|
3
|
-
function _interopDefaultCompat(e) {
|
|
4
|
-
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
|
5
|
-
}
|
|
6
|
-
var meow__default = /* @__PURE__ */ _interopDefaultCompat(meow);
|
|
7
|
-
const description = `Show the installed version of ${_package.pkg.name}`, help = `
|
|
8
|
-
Usage
|
|
9
|
-
$ ${_package.pkg.binname} version
|
|
10
|
-
|
|
11
|
-
Options
|
|
12
|
-
--major Show only the major version
|
|
13
|
-
--minor Show only the minor version
|
|
14
|
-
--patch Show only the patch version
|
|
15
|
-
|
|
16
|
-
Examples
|
|
17
|
-
$ ${_package.pkg.binname} version
|
|
18
|
-
${_package.pkg.name} version ${_package.pkg.version}
|
|
19
|
-
|
|
20
|
-
$ ${_package.pkg.binname} version --major
|
|
21
|
-
${_package.pkg.version.split(".")[0]}
|
|
22
|
-
`, flags = {
|
|
23
|
-
...cli.sharedFlags,
|
|
24
|
-
major: {
|
|
25
|
-
type: "boolean",
|
|
26
|
-
default: !1
|
|
27
|
-
},
|
|
28
|
-
minor: {
|
|
29
|
-
type: "boolean",
|
|
30
|
-
default: !1
|
|
31
|
-
},
|
|
32
|
-
patch: {
|
|
33
|
-
type: "boolean",
|
|
34
|
-
default: !1
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
function run({ argv }) {
|
|
38
|
-
const cli$1 = meow__default.default(help, { flags, argv, description }), versionParts = _package.pkg.version.split("."), versionNames = ["major", "minor", "patch"], versionFlags = versionNames.filter((flagName) => cli$1.flags[flagName]), versionFlag = versionFlags[0], numVersionFlags = versionFlags.length;
|
|
39
|
-
if (numVersionFlags === 0) {
|
|
40
|
-
cli.log.msg(`${_package.pkg.name} version ${_package.pkg.version}`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (numVersionFlags > 1)
|
|
44
|
-
throw new Error(
|
|
45
|
-
"--major, --minor and --patch are mutually exclusive - only one can be used at a time"
|
|
46
|
-
);
|
|
47
|
-
const partIndex = versionNames.indexOf(versionFlag);
|
|
48
|
-
cli.log.msg(versionParts[partIndex]);
|
|
49
|
-
}
|
|
50
|
-
exports.default = run;
|
|
51
|
-
//# sourceMappingURL=version.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sources":["../../src/cmds/version.ts"],"sourcesContent":["import meow from 'meow'\nimport pkg from '../../package.json'\nimport log from '../util/log'\nimport sharedFlags from '../sharedFlags'\n\nconst description = `Show the installed version of ${pkg.name}`\n\nconst help = `\nUsage\n $ ${pkg.binname} version\n\nOptions\n --major Show only the major version\n --minor Show only the minor version\n --patch Show only the patch version\n\nExamples\n $ ${pkg.binname} version\n ${pkg.name} version ${pkg.version}\n\n $ ${pkg.binname} version --major\n ${pkg.version.split('.')[0]}\n`\n\nconst flags = {\n ...sharedFlags,\n\n major: {\n type: 'boolean',\n default: false,\n },\n\n minor: {\n type: 'boolean',\n default: false,\n },\n\n patch: {\n type: 'boolean',\n default: false,\n },\n} as const\n\nfunction run({argv}: {argv: string[]}) {\n const cli = meow(help, {flags, argv, description})\n const versionParts = pkg.version.split('.')\n const versionNames = ['major', 'minor', 'patch']\n const versionFlags = versionNames.filter((flagName) => cli.flags[flagName])\n const versionFlag = versionFlags[0]\n const numVersionFlags = versionFlags.length\n\n if (numVersionFlags === 0) {\n log.msg(`${pkg.name} version ${pkg.version}`)\n return\n }\n\n if (numVersionFlags > 1) {\n throw new Error(\n `--major, --minor and --patch are mutually exclusive - only one can be used at a time`,\n )\n }\n\n const partIndex = versionNames.indexOf(versionFlag)\n log.msg(versionParts[partIndex])\n}\n\nexport default run\n"],"names":["pkg","sharedFlags","cli","meow","log"],"mappings":";;;;;;AAKA,MAAM,cAAc,iCAAiCA,SAAAA,IAAI,IAAI,IAEvD,OAAO;AAAA;AAAA,MAEPA,SAAAA,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQXA,SAAAA,IAAI,OAAO;AAAA,IACbA,aAAI,IAAI,YAAYA,SAAA,IAAI,OAAO;AAAA;AAAA,MAE7BA,SAAAA,IAAI,OAAO;AAAA,IACbA,aAAI,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA,GAGvB,QAAQ;AAAA,EACZ,GAAGC,IAAA;AAAA,EAEH,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAEb;AAEA,SAAS,IAAI,EAAC,QAAyB;AACrC,QAAMC,QAAMC,cAAAA,QAAK,MAAM,EAAC,OAAO,MAAM,YAAY,CAAA,GAC3C,eAAeH,SAAAA,IAAI,QAAQ,MAAM,GAAG,GACpC,eAAe,CAAC,SAAS,SAAS,OAAO,GACzC,eAAe,aAAa,OAAO,CAAC,aAAaE,MAAI,MAAM,QAAQ,CAAC,GACpE,cAAc,aAAa,CAAC,GAC5B,kBAAkB,aAAa;AAErC,MAAI,oBAAoB,GAAG;AACzBE,YAAI,IAAI,GAAGJ,SAAA,IAAI,IAAI,YAAYA,SAAAA,IAAI,OAAO,EAAE;AAC5C;AAAA,EAAA;AAGF,MAAI,kBAAkB;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAGI,QAAA,YAAY,aAAa,QAAQ,WAAW;AAC9CI,MAAAA,IAAA,IAAI,aAAa,SAAS,CAAC;AACjC;;"}
|
package/dist/cli.d.ts
DELETED
package/dist/cli.js
DELETED
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
package/src/actions/init.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import path from 'path'
|
|
2
|
-
import {inject} from './inject'
|
|
3
|
-
import {ensureDir, writeFile} from '../util/files'
|
|
4
|
-
import sharedFlags from '../sharedFlags'
|
|
5
|
-
import {TypedFlags} from 'meow'
|
|
6
|
-
import {getPackage} from '../npm/package'
|
|
7
|
-
import {defaultSourceJs, defaultSourceTs} from '../configs/default-source'
|
|
8
|
-
import {defaultOutDir} from '../constants'
|
|
9
|
-
|
|
10
|
-
export const initFlags = {
|
|
11
|
-
...sharedFlags,
|
|
12
|
-
scripts: {
|
|
13
|
-
type: 'boolean',
|
|
14
|
-
default: true,
|
|
15
|
-
},
|
|
16
|
-
eslint: {
|
|
17
|
-
type: 'boolean',
|
|
18
|
-
default: true,
|
|
19
|
-
},
|
|
20
|
-
typescript: {
|
|
21
|
-
type: 'boolean',
|
|
22
|
-
default: true,
|
|
23
|
-
},
|
|
24
|
-
prettier: {
|
|
25
|
-
type: 'boolean',
|
|
26
|
-
default: true,
|
|
27
|
-
},
|
|
28
|
-
license: {
|
|
29
|
-
type: 'string',
|
|
30
|
-
},
|
|
31
|
-
editorconfig: {
|
|
32
|
-
type: 'boolean',
|
|
33
|
-
default: true,
|
|
34
|
-
},
|
|
35
|
-
gitignore: {
|
|
36
|
-
type: 'boolean',
|
|
37
|
-
default: true,
|
|
38
|
-
},
|
|
39
|
-
force: {
|
|
40
|
-
type: 'boolean',
|
|
41
|
-
default: false,
|
|
42
|
-
},
|
|
43
|
-
install: {
|
|
44
|
-
type: 'boolean',
|
|
45
|
-
default: true,
|
|
46
|
-
},
|
|
47
|
-
name: {
|
|
48
|
-
type: 'string',
|
|
49
|
-
},
|
|
50
|
-
author: {
|
|
51
|
-
type: 'string',
|
|
52
|
-
},
|
|
53
|
-
repo: {
|
|
54
|
-
type: 'string',
|
|
55
|
-
},
|
|
56
|
-
presetOnly: {
|
|
57
|
-
type: 'boolean',
|
|
58
|
-
default: false,
|
|
59
|
-
},
|
|
60
|
-
preset: {
|
|
61
|
-
type: 'string',
|
|
62
|
-
isMultiple: true,
|
|
63
|
-
},
|
|
64
|
-
} as const
|
|
65
|
-
|
|
66
|
-
export type InitFlags = TypedFlags<typeof initFlags>
|
|
67
|
-
|
|
68
|
-
export interface InitOptions {
|
|
69
|
-
basePath: string
|
|
70
|
-
flags: InitFlags
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export async function init(options: InitOptions) {
|
|
74
|
-
let dependencies = {}
|
|
75
|
-
let devDependencies = {}
|
|
76
|
-
let peerDependencies = {}
|
|
77
|
-
|
|
78
|
-
await inject({
|
|
79
|
-
...options,
|
|
80
|
-
outDir: defaultOutDir,
|
|
81
|
-
requireUserConfirmation: !options.flags.force,
|
|
82
|
-
dependencies,
|
|
83
|
-
devDependencies,
|
|
84
|
-
peerDependencies,
|
|
85
|
-
validate: false,
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
const packageJson = await getPackage({basePath: options.basePath, validate: false})
|
|
89
|
-
const typescript = options.flags.typescript
|
|
90
|
-
const source = typescript ? defaultSourceTs(packageJson) : defaultSourceJs(packageJson)
|
|
91
|
-
const filename = typescript ? 'index.ts' : 'index.js'
|
|
92
|
-
const srcDir = path.resolve(options.basePath, 'src')
|
|
93
|
-
await ensureDir(srcDir)
|
|
94
|
-
await writeFile(path.join(srcDir, filename), source, {encoding: 'utf8'})
|
|
95
|
-
}
|
package/src/actions/inject.ts
DELETED
|
@@ -1,399 +0,0 @@
|
|
|
1
|
-
import path from 'path'
|
|
2
|
-
// @ts-expect-error missing types
|
|
3
|
-
import licenses from '@rexxars/choosealicense-list'
|
|
4
|
-
import gitRemoteOriginUrl from 'git-remote-origin-url'
|
|
5
|
-
import log from '../util/log'
|
|
6
|
-
import {getUserInfo} from '../util/user'
|
|
7
|
-
import {errorToUndefined} from '../util/errorToUndefined'
|
|
8
|
-
import {addBuildScripts, getPackage, writePackageJson} from '../npm/package'
|
|
9
|
-
import {prompt, promptForPackageName, promptForRepoOrigin} from '../util/prompt'
|
|
10
|
-
import {generateReadme, isDefaultGitHubReadme} from '../util/readme'
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
copyFileWithOverwritePrompt,
|
|
14
|
-
fileExists,
|
|
15
|
-
readFile,
|
|
16
|
-
writeFile,
|
|
17
|
-
writeFileWithOverwritePrompt,
|
|
18
|
-
} from '../util/files'
|
|
19
|
-
import {InitFlags} from './init'
|
|
20
|
-
import {PackageJson} from './verify/types'
|
|
21
|
-
import {injectPresets} from '../presets/presets'
|
|
22
|
-
import {tsconfigTemplateDist, tsconfigTemplate, tsconfigTemplateSettings} from '../configs/tsconfig'
|
|
23
|
-
import {pkgConfigTemplate} from '../configs/pkg-config'
|
|
24
|
-
import {gitignoreTemplate} from '../configs/git'
|
|
25
|
-
import {eslintignoreTemplate, eslintrcTemplate} from '../configs/eslint'
|
|
26
|
-
import {prettierignoreTemplate} from '../configs/prettier'
|
|
27
|
-
|
|
28
|
-
const bannedFields = ['login', 'description', 'projecturl', 'email']
|
|
29
|
-
const preferredLicenses = ['MIT', 'ISC', 'BSD-3-Clause']
|
|
30
|
-
const otherLicenses = Object.keys(licenses.list).filter((id) => {
|
|
31
|
-
const license = licenses.list[id]
|
|
32
|
-
return (
|
|
33
|
-
!preferredLicenses.includes(id) &&
|
|
34
|
-
!bannedFields.some((field) => license.body.includes(`[${field}]`))
|
|
35
|
-
)
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
export interface InjectCopyFromTo {
|
|
39
|
-
type: 'copy'
|
|
40
|
-
from: string | string[]
|
|
41
|
-
to: string | string[]
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface InjectTemplate {
|
|
45
|
-
type: 'template'
|
|
46
|
-
to: string | string[]
|
|
47
|
-
value: string
|
|
48
|
-
force?: boolean
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export type Injectable = InjectCopyFromTo | InjectTemplate
|
|
52
|
-
|
|
53
|
-
export interface InjectOptions {
|
|
54
|
-
basePath: string
|
|
55
|
-
requireUserConfirmation?: boolean
|
|
56
|
-
flags: InitFlags
|
|
57
|
-
dependencies?: Record<string, string>
|
|
58
|
-
devDependencies?: Record<string, string>
|
|
59
|
-
peerDependencies?: Record<string, string>
|
|
60
|
-
validate?: boolean
|
|
61
|
-
outDir: string
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export interface PackageData {
|
|
65
|
-
user?: {name?: string; email?: string}
|
|
66
|
-
pluginName?: string
|
|
67
|
-
license?: {id: string; text: string}
|
|
68
|
-
description?: string
|
|
69
|
-
pkg?: PackageJson
|
|
70
|
-
gitOrigin?: string
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export async function inject(options: InjectOptions) {
|
|
74
|
-
if (options.flags.presetOnly) {
|
|
75
|
-
log.info('Only apply presets, skipping default inject.')
|
|
76
|
-
} else {
|
|
77
|
-
await injectBase(options)
|
|
78
|
-
}
|
|
79
|
-
await injectPresets(options)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async function injectBase(options: InjectOptions) {
|
|
83
|
-
const {basePath, flags, requireUserConfirmation} = options
|
|
84
|
-
const info = (write: boolean, msg: string, ...args: string[]) => write && log.info(msg, ...args)
|
|
85
|
-
// Gather data
|
|
86
|
-
const pkg = await getPackage(options).catch(errorToUndefined)
|
|
87
|
-
log.debug('Plugin has package.json: %s', pkg ? 'yes' : 'no')
|
|
88
|
-
|
|
89
|
-
const user = await getUserInfo(options, pkg)
|
|
90
|
-
log.debug('User information: %o', user)
|
|
91
|
-
|
|
92
|
-
const pkgName = flags.name ?? pkg?.name
|
|
93
|
-
const pluginName =
|
|
94
|
-
requireUserConfirmation || !pkgName ? await promptForPackageName(options, pkgName) : pkgName
|
|
95
|
-
|
|
96
|
-
log.debug('Plugin name: %s', pluginName)
|
|
97
|
-
|
|
98
|
-
const license = await getLicense(flags, {user, pluginName, pkg, requireUserConfirmation})
|
|
99
|
-
const licenseChanged = (pkg && pkg.license) !== (license && license.id)
|
|
100
|
-
log.debug('License: %s', license ? license.id : '<none>')
|
|
101
|
-
|
|
102
|
-
const description = await getProjectDescription(basePath, pkg, requireUserConfirmation)
|
|
103
|
-
log.debug('Description: %s', description || '<none>')
|
|
104
|
-
|
|
105
|
-
const repoUrl =
|
|
106
|
-
flags.repo ??
|
|
107
|
-
((await gitRemoteOriginUrl(basePath).catch(errorToUndefined)) || pkg?.repository?.url)
|
|
108
|
-
|
|
109
|
-
const gitOrigin = requireUserConfirmation ? await promptForRepoOrigin(options, repoUrl) : repoUrl
|
|
110
|
-
|
|
111
|
-
log.debug('Remote origin: %s', gitOrigin || '<none>')
|
|
112
|
-
|
|
113
|
-
// Output
|
|
114
|
-
const data: PackageData = {user, pluginName, license, description, pkg, gitOrigin}
|
|
115
|
-
let didWrite
|
|
116
|
-
|
|
117
|
-
// Write package.json, if returns the original (data.pkg) if it was unchanged,
|
|
118
|
-
// otherwise it returns the new object
|
|
119
|
-
const newPkg = await writePackageJson(data, options)
|
|
120
|
-
info(newPkg !== pkg, 'Wrote package.json')
|
|
121
|
-
data.pkg = newPkg
|
|
122
|
-
|
|
123
|
-
didWrite = await writeLicense(data, options, licenseChanged)
|
|
124
|
-
info(didWrite, 'Wrote license file (LICENSE)')
|
|
125
|
-
|
|
126
|
-
didWrite = await writeReadme(data, options)
|
|
127
|
-
info(didWrite, 'Wrote readme file (README.md)')
|
|
128
|
-
|
|
129
|
-
didWrite = await writeStaticAssets(options)
|
|
130
|
-
info(didWrite.length > 0, 'Wrote static asset files: %s', didWrite.join(', '))
|
|
131
|
-
|
|
132
|
-
didWrite = await addBuildScripts(newPkg, options)
|
|
133
|
-
info(didWrite, 'Added build scripts to package.json')
|
|
134
|
-
|
|
135
|
-
didWrite = await addCompileDirToGitIgnore(data, options)
|
|
136
|
-
info(didWrite, 'Added compilation output directory to .gitignore')
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
async function writeReadme(data: PackageData, options: InjectOptions) {
|
|
140
|
-
const {basePath} = options
|
|
141
|
-
|
|
142
|
-
const readmePath = path.join(basePath, 'README.md')
|
|
143
|
-
const readme = await readFile(readmePath, 'utf8').catch(errorToUndefined)
|
|
144
|
-
|
|
145
|
-
if (readme && !isDefaultGitHubReadme(readme)) {
|
|
146
|
-
return false
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
await writeFileWithOverwritePrompt(readmePath, generateReadme(data), {
|
|
150
|
-
encoding: 'utf8',
|
|
151
|
-
force: options.flags.force,
|
|
152
|
-
})
|
|
153
|
-
return true
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
async function writeLicense(
|
|
157
|
-
{license}: PackageData,
|
|
158
|
-
options: InjectOptions,
|
|
159
|
-
licenseChanged: boolean,
|
|
160
|
-
) {
|
|
161
|
-
const {basePath, flags} = options
|
|
162
|
-
|
|
163
|
-
if ((flags.license as unknown as boolean) === false || !license) {
|
|
164
|
-
return false
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Prefer whatever path the user is currenly using (LICENSE.md or LICENSE)
|
|
168
|
-
const hasLicenseMdFile = await fileExists(path.join(basePath, 'LICENSE.md'))
|
|
169
|
-
const licensePath = path.join(basePath, hasLicenseMdFile ? 'LICENSE.md' : 'LICENSE')
|
|
170
|
-
|
|
171
|
-
await writeFileWithOverwritePrompt(licensePath, license.text, {
|
|
172
|
-
encoding: 'utf8',
|
|
173
|
-
default: licenseChanged,
|
|
174
|
-
force: flags.force,
|
|
175
|
-
})
|
|
176
|
-
|
|
177
|
-
return true
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async function getLicense(
|
|
181
|
-
flags: InitFlags,
|
|
182
|
-
{
|
|
183
|
-
user,
|
|
184
|
-
pluginName,
|
|
185
|
-
pkg,
|
|
186
|
-
requireUserConfirmation,
|
|
187
|
-
}: PackageData & {requireUserConfirmation?: boolean},
|
|
188
|
-
) {
|
|
189
|
-
const license = await getLicenseIdentifier(flags, pkg, requireUserConfirmation)
|
|
190
|
-
if (!license) {
|
|
191
|
-
return undefined
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
const text = license.body
|
|
195
|
-
.replace(/\[fullname\]/g, user?.name)
|
|
196
|
-
.replace(/\[project\]/g, pluginName)
|
|
197
|
-
.replace(/\[year\]/g, new Date().getFullYear())
|
|
198
|
-
|
|
199
|
-
return {id: license.id, text}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
async function getLicenseIdentifier(
|
|
203
|
-
flags: InitFlags,
|
|
204
|
-
pkg: PackageJson | undefined,
|
|
205
|
-
requireUserConfirmation = false,
|
|
206
|
-
) {
|
|
207
|
-
// --no-license
|
|
208
|
-
if ((flags.license as unknown) === false) {
|
|
209
|
-
return null
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// --license becomes "", --license mit beocomes "mit"
|
|
213
|
-
if (typeof flags.license === 'string') {
|
|
214
|
-
const license = licenses.find(`${flags.license}`)
|
|
215
|
-
if (!license) {
|
|
216
|
-
throw new Error(`License "${flags.license}" not found`)
|
|
217
|
-
}
|
|
218
|
-
return license
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// no --license flag provided, do we have one in package already?
|
|
222
|
-
if (pkg && pkg.license && !requireUserConfirmation) {
|
|
223
|
-
const license = licenses.find(`${pkg.license}`)
|
|
224
|
-
if (license) {
|
|
225
|
-
return license
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
// Warn, then prompt the user
|
|
229
|
-
log.warn(`package.json contains license "${pkg.license}", which is not recognized`)
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
const licenseId = await prompt('Which license do you want to use?', {
|
|
233
|
-
default: pkg && pkg.license && licenses.find(pkg.license) ? pkg.license : preferredLicenses[0],
|
|
234
|
-
choices: [
|
|
235
|
-
prompt.separator(),
|
|
236
|
-
...preferredLicenses.map((value) => ({value, name: licenses.list[value].title})),
|
|
237
|
-
prompt.separator(),
|
|
238
|
-
...otherLicenses.map((value) => ({value, name: licenses.list[value].title})),
|
|
239
|
-
],
|
|
240
|
-
})
|
|
241
|
-
|
|
242
|
-
return licenses.find(licenseId)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
async function getProjectDescription(
|
|
246
|
-
basePath: string,
|
|
247
|
-
pkg: PackageJson | undefined,
|
|
248
|
-
requireUserConfirmation = false,
|
|
249
|
-
) {
|
|
250
|
-
let description = await resolveProjectDescription(basePath, pkg)
|
|
251
|
-
if (requireUserConfirmation) {
|
|
252
|
-
description = await prompt('Plugin description', {default: description || ''})
|
|
253
|
-
}
|
|
254
|
-
return description ?? ''
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
async function resolveProjectDescription(basePath: string, pkg: PackageJson | undefined) {
|
|
258
|
-
// Try to grab from package.json
|
|
259
|
-
if (pkg && typeof pkg.description === 'string' && pkg.description.length > 5) {
|
|
260
|
-
return pkg.description
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// Try to grab a project description from a standard GitHub-generated readme
|
|
264
|
-
try {
|
|
265
|
-
const readmePath = path.join(basePath, 'README.md')
|
|
266
|
-
const readme = await readFile(readmePath, 'utf8')
|
|
267
|
-
const [title, description] = readme.split('\n').filter(Boolean)
|
|
268
|
-
if (!title || !description || !title.match(/^#\s+\w+/)) {
|
|
269
|
-
return null
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// Naive, but this isn't too important
|
|
273
|
-
const unlinked = description.replace(/\[(.*?)\]\(.*?\)/g, '$1')
|
|
274
|
-
if (/^[^#]/.test(unlinked)) {
|
|
275
|
-
return unlinked
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
return null
|
|
279
|
-
} catch (err) {
|
|
280
|
-
return errorToUndefined(err)
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
export async function writeAssets(injectables: Injectable[], {basePath, flags}: InjectOptions) {
|
|
285
|
-
const assetsDir = await findAssetsDir()
|
|
286
|
-
|
|
287
|
-
const from = (...segments: string[]) => path.join(assetsDir, 'inject', ...segments)
|
|
288
|
-
const to = (...segments: string[]) => path.join(basePath, ...segments)
|
|
289
|
-
|
|
290
|
-
const writes: string[] = []
|
|
291
|
-
for (const injectable of injectables) {
|
|
292
|
-
if (injectable.type === 'copy') {
|
|
293
|
-
const fromPath = asArray(injectable.from)
|
|
294
|
-
const toPath = asArray(injectable.to)
|
|
295
|
-
if (await copyFileWithOverwritePrompt(from(...fromPath), to(...toPath), flags)) {
|
|
296
|
-
writes.push(path.join(...toPath))
|
|
297
|
-
}
|
|
298
|
-
continue
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
if (injectable.type === 'template') {
|
|
302
|
-
const toPath = asArray(injectable.to)
|
|
303
|
-
|
|
304
|
-
await writeFileWithOverwritePrompt(to(...toPath), `${injectable.value.trim()}\n`, {
|
|
305
|
-
default: 'n',
|
|
306
|
-
force: injectable.force || flags.force,
|
|
307
|
-
})
|
|
308
|
-
|
|
309
|
-
writes.push(path.join(...toPath))
|
|
310
|
-
continue
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
throw new Error(`Unknown operation type "${(injectable as any).type}"`)
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
return writes
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
async function writeStaticAssets(options: InjectOptions) {
|
|
320
|
-
const {outDir, flags} = options
|
|
321
|
-
|
|
322
|
-
const files: Injectable[] = [
|
|
323
|
-
flags.eslint && eslintrcTemplate({flags: options.flags}),
|
|
324
|
-
flags.eslint && eslintignoreTemplate({outDir, flags: options.flags}),
|
|
325
|
-
{type: 'copy', from: 'editorconfig', to: '.editorconfig'},
|
|
326
|
-
{type: 'copy', from: 'sanity.json', to: 'sanity.json'},
|
|
327
|
-
{type: 'copy', from: 'v2-incompatible.js.template', to: 'v2-incompatible.js'},
|
|
328
|
-
pkgConfigTemplate({outDir, flags: options.flags}),
|
|
329
|
-
flags.gitignore && gitignoreTemplate(),
|
|
330
|
-
flags.typescript && tsconfigTemplate({flags: options.flags}),
|
|
331
|
-
flags.typescript && tsconfigTemplateDist({outDir, flags: options.flags}),
|
|
332
|
-
flags.typescript && tsconfigTemplateSettings({outDir, flags: options.flags}),
|
|
333
|
-
flags.prettier && prettierignoreTemplate({outDir}),
|
|
334
|
-
flags.prettier && {type: 'copy', from: 'prettierrc.json', to: '.prettierrc'},
|
|
335
|
-
]
|
|
336
|
-
.map((f) => (f ? (f as Injectable) : undefined))
|
|
337
|
-
.filter((f): f is Injectable => !!f)
|
|
338
|
-
|
|
339
|
-
const result = writeAssets(files, options)
|
|
340
|
-
|
|
341
|
-
return result
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
function asArray(input: string | string[]): string[] {
|
|
345
|
-
return typeof input === 'string' ? [input] : input
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* assets dir might be in higher or lower in the dir hierarchy depending on
|
|
350
|
-
* if we run from `dist` or `src`
|
|
351
|
-
*/
|
|
352
|
-
async function findAssetsDir(): Promise<string> {
|
|
353
|
-
let maxBackpaddle = 3
|
|
354
|
-
let currDir = __dirname
|
|
355
|
-
let assetsDir: string = ''
|
|
356
|
-
while (!assetsDir && maxBackpaddle) {
|
|
357
|
-
currDir = path.join(currDir, '..')
|
|
358
|
-
const assets = path.join(currDir, 'assets')
|
|
359
|
-
if (await fileExists(assets)) {
|
|
360
|
-
assetsDir = assets
|
|
361
|
-
} else {
|
|
362
|
-
maxBackpaddle--
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
if (!assetsDir) {
|
|
367
|
-
throw new Error('Could not find assets directory!')
|
|
368
|
-
}
|
|
369
|
-
return assetsDir
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
async function addCompileDirToGitIgnore(data: PackageData, options: InjectOptions) {
|
|
373
|
-
const gitIgnorePath = path.join(options.basePath, '.gitignore')
|
|
374
|
-
const gitignore = await readFile(gitIgnorePath, 'utf8').catch(errorToUndefined)
|
|
375
|
-
if (!gitignore) {
|
|
376
|
-
return false
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
const output = data.pkg?.main ?? data.pkg?.module
|
|
380
|
-
if (!output) {
|
|
381
|
-
return false
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
const ignorePath = output.replace(/^[./]+/, '')
|
|
385
|
-
const ignore = ignorePath.split('/')[0]
|
|
386
|
-
if (!ignore) {
|
|
387
|
-
return false
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
const lines = gitignore.trim().split('\n')
|
|
391
|
-
if (lines.includes(ignore)) {
|
|
392
|
-
return false
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
lines.push('', '# Compiled plugin', ignore)
|
|
396
|
-
|
|
397
|
-
await writeFile(gitIgnorePath, lines.join('\n') + '\n', {encoding: 'utf8'})
|
|
398
|
-
return true
|
|
399
|
-
}
|