123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- /**
- Original: https://github.com/npm/init-package-json/blob/c649fbe/default-input.js
- The contents of this file are compiled into a function with this signature:
- (function(
- yes,
- filename,
- dirname,
- basename,
- package,
- config,
- prompt,
- __filename,
- __dirname,
- __basename,
- module,
- require,
- exports
- ) {
- Because of the `package` parameter, we can't "use strict",
- as `package` is a reserved word in strict mode.
- Conveniently, all of these parameters are also available on `this`.
- We exploit this fact to avoid eslint breaking on the reserved word.
- */
- const validateLicense = require("validate-npm-package-license");
- const validateName = require("validate-npm-package-name");
- const npa = require("npm-package-arg");
- const semver = require("semver");
- const niceName = (rudeName) =>
- rudeName
- .replace(/^node-|[.-]js$/g, "")
- .replace(" ", "-")
- .toLowerCase();
- let name = this.package.name || this.basename;
- let spec;
- try {
- spec = npa(name);
- } catch (e) {
- spec = {};
- }
- let scope = this.config.get("scope");
- if (scope) {
- if (scope.charAt(0) !== "@") {
- scope = `@${scope}`;
- }
- if (spec.scope) {
- name = `${scope}/${spec.name.split("/")[1]}`;
- } else {
- name = `${scope}/${name}`;
- }
- }
- exports.name = this.yes
- ? name
- : this.prompt("package name", niceName(name), (data) => {
- const its = validateName(data);
- if (its.validForNewPackages) {
- return data;
- }
- const errors = (its.errors || []).concat(its.warnings || []);
- const er = new Error(`Sorry, ${errors.join(" and ")}.`);
- er.notValid = true;
- return er;
- });
- const version = this.package.version || this.config.get("init-version") || "1.0.0";
- exports.version = this.yes
- ? version
- : this.prompt("version", version, (data) => {
- if (semver.valid(data)) {
- return data;
- }
- const er = new Error(`Invalid version: "${data}"`);
- er.notValid = true;
- return er;
- });
- if (this.config.get("private")) {
- exports.private = true;
- }
- if (!this.package.description) {
- exports.description = this.yes ? this.config.get("description") : this.prompt("description");
- }
- if (!this.package.keywords) {
- const keywords = this.config.get("keywords") || "";
- exports.keywords = this.yes
- ? keywords
- : this.prompt("keywords", keywords, (data) => {
- if (!data) {
- return undefined;
- }
- if (Array.isArray(data)) {
- // eslint-disable-next-line no-param-reassign
- data = data.join(" ");
- }
- if (typeof data !== "string") {
- return data;
- }
- return data.split(/[\s,]+/);
- });
- }
- if (!this.package.author) {
- let authorConfig;
- if (this.config.get("init-author-name")) {
- authorConfig = {
- name: this.config.get("init-author-name"),
- email: this.config.get("init-author-email"),
- url: this.config.get("init-author-url"),
- };
- }
- exports.author = authorConfig || (this.yes ? "" : this.prompt("author"));
- }
- if (!this.package.homepage) {
- const homepage = this.config.get("homepage");
- exports.homepage = this.yes ? homepage : this.prompt("homepage", homepage);
- }
- const license = this.package.license || this.config.get("init-license") || "ISC";
- exports.license = this.yes
- ? license
- : this.prompt("license", license, (data) => {
- const its = validateLicense(data);
- if (its.validForNewPackages) {
- return data;
- }
- const errors = (its.errors || []).concat(its.warnings || []);
- const er = new Error(`Sorry, ${errors.join(" and ")}.`);
- er.notValid = true;
- return er;
- });
- if (!this.package.main && this.config.get("init-main")) {
- const mainEntry = this.config.get("init-main");
- exports.main = this.yes ? mainEntry : this.prompt("entry point", mainEntry);
- }
- if (!this.package.module && this.config.get("init-es-module")) {
- const moduleEntry = this.config.get("init-es-module");
- exports.module = this.yes ? moduleEntry : this.prompt("module entry", moduleEntry);
- }
- if (!this.package.bin && this.config.get("bin")) {
- exports.bin = this.config.get("bin");
- }
- if (!this.package.directories && this.config.get("directories")) {
- exports.directories = this.config.get("directories");
- }
- if (!this.package.files && this.config.get("files")) {
- exports.files = (cb) => {
- // callback MUST yield the thread for some inexplicable reason
- process.nextTick(cb, null, this.config.get("files"));
- };
- }
- if (!this.package.publishConfig && this.config.get("publishConfig")) {
- exports.publishConfig = this.config.get("publishConfig");
- }
- if (!this.package.repository) {
- exports.repository = (cb) => {
- let val = this.config.get("repository");
- if (val && val.match(/^git@github.com:/)) {
- val = val.replace(/^git@github.com:/, "https://github.com/");
- }
- return cb(null, this.yes ? val : this.prompt("git repository", val));
- };
- }
- if (!this.package.scripts) {
- exports.scripts = {
- test: 'echo "Error: run tests from root" && exit 1',
- };
- }
- if (!this.package.dependencies && this.config.get("dependencies")) {
- exports.dependencies = this.config.get("dependencies");
- }
|