@form8ion/project 16.0.1 → 16.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@ opinionated scaffolder for new projects
6
6
 
7
7
  [![Codecov](https://img.shields.io/codecov/c/github/form8ion/project?logo=codecov)](https://codecov.io/github/form8ion/project)
8
8
  [![Node CI Workflow Status][github-actions-ci-badge]][github-actions-ci-link]
9
- [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/form8ion/project/badge)](https://api.securityscorecards.dev/projects/github.com/form8ion/project)
9
+ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/form8ion/project/badge)](https://securityscorecards.dev/viewer/?uri=github.com/form8ion/project)
10
10
  [![SLSA 2](https://slsa.dev/images/gh-badge-level2.svg)](https://slsa.dev)
11
11
 
12
12
  <!--status-badges end -->
@@ -24,9 +24,8 @@ opinionated scaffolder for new projects
24
24
  * [`languages` (_optional_)](#languages-optional)
25
25
  * [`vcsHosts` (_optional_)](#vcshosts-optional)
26
26
  * [`dependencyUpdaters` (_optional_)](#dependencyupdaters-optional)
27
- * [`overrides` (_optional_)](#overrides-optional)
27
+ * [`overrides` (_optional_) (_deprecated_)](#overrides-optional-deprecated)
28
28
  * [`copyrightHolder`](#copyrightholder)
29
- * [`githubAccount`](#githubaccount)
30
29
  * [Contributing](#contributing)
31
30
  * [Dependencies](#dependencies)
32
31
  * [Verification](#verification)
@@ -134,7 +133,7 @@ __object__:
134
133
  * `host`: __string__ host name
135
134
  * `name`: __string__ repository name. equal to `projectName`
136
135
  * `owner`: __string__ account name on the host service for the repository
137
- owner. defaults to `$ git config github.user` or the [overridden value](#githubaccount)
136
+ owner. defaults to `$ git config github.user`
138
137
  * `visibility`: __string__ `Public` or `Private`. defaults to `Private`
139
138
  * `license`: __string__ identifier of the chosen [SPDX License](https://spdx.org/licenses/)
140
139
  or `UNLICENSED`
@@ -166,7 +165,9 @@ __object__:
166
165
  returned from the `prompt` function
167
166
  * `projectRoot`: __string__ path of the working directory where the CLI
168
167
  command was executed
169
- * `projectType`: __string__ primary language for the project
168
+ * `projectType`:
169
+ * __string__ primary language for the project
170
+ * _deprecated_ will be removed with the next major version
170
171
  * `description`: __string__ brief summary of the project
171
172
  * `homepage`: __string__ url of the project homepage
172
173
  * `public`: __boolean__ (_optional_) whether this host should be presented
@@ -195,21 +196,17 @@ __object__:
195
196
  * `host`: __string__ host name
196
197
  * `name`: __string__ repository name. equal to `projectName`
197
198
  * `owner`: __string__ account name on the host service for the repository
198
- owner. defaults to `$ git config github.user` or the [overridden value](#githubaccount)
199
+ owner. defaults to `$ git config github.user`
199
200
 
200
- #### `overrides` (_optional_)
201
+ #### `overrides` (_optional_) (_deprecated_)
202
+
203
+ use `decisions` instead of `overrides`
201
204
 
202
205
  ##### `copyrightHolder`
203
206
 
204
207
  __string__ enables setting the value of the prompt default for the copyright
205
208
  holder. if not provided, the default will be empty.
206
209
 
207
- ##### `githubAccount`
208
-
209
- __string__ enables setting the GitHub account for the prompt default to define
210
- the owner of scaffolded repositories. if not provided, the default will use the
211
- result of `$ git config github.user`
212
-
213
210
  ## Contributing
214
211
 
215
212
  <!--contribution-badges start -->
package/lib/index.js CHANGED
@@ -3,45 +3,25 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var core = require('@form8ion/core');
6
- var path = require('path');
7
- var fs = require('fs');
8
- var filedirname = require('filedirname');
9
6
  var deepmerge = require('deepmerge');
10
7
  var resultsReporter = require('@form8ion/results-reporter');
11
8
  var cliMessages = require('@travi/cli-messages');
12
9
  var execa = require('@form8ion/execa-wrapper');
10
+ var overridablePrompts = require('@form8ion/overridable-prompts');
13
11
  var readme = require('@form8ion/readme');
14
12
  var node_fs = require('node:fs');
15
13
  var simpleGit = require('simple-git');
16
14
  var hostedGitInfo = require('hosted-git-info');
17
- var overridablePrompts = require('@form8ion/overridable-prompts');
15
+ var fs = require('fs');
18
16
  var wrap = require('word-wrap');
19
17
  var mustache = require('mustache');
20
18
  var spdxLicenseList = require('spdx-license-list/full.js');
21
19
  var joi = require('joi');
22
- var hoek = require('@hapi/hoek');
20
+ var path = require('path');
21
+ var filedirname = require('filedirname');
23
22
 
24
23
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
24
 
26
- function _interopNamespace(e) {
27
- if (e && e.__esModule) return e;
28
- var n = Object.create(null);
29
- if (e) {
30
- Object.keys(e).forEach(function (k) {
31
- if (k !== 'default') {
32
- var d = Object.getOwnPropertyDescriptor(e, k);
33
- Object.defineProperty(n, k, d.get ? d : {
34
- enumerable: true,
35
- get: function () { return e[k]; }
36
- });
37
- }
38
- });
39
- }
40
- n["default"] = e;
41
- return Object.freeze(n);
42
- }
43
-
44
- var filedirname__default = /*#__PURE__*/_interopDefaultLegacy(filedirname);
45
25
  var deepmerge__default = /*#__PURE__*/_interopDefaultLegacy(deepmerge);
46
26
  var execa__default = /*#__PURE__*/_interopDefaultLegacy(execa);
47
27
  var hostedGitInfo__default = /*#__PURE__*/_interopDefaultLegacy(hostedGitInfo);
@@ -49,7 +29,7 @@ var wrap__default = /*#__PURE__*/_interopDefaultLegacy(wrap);
49
29
  var mustache__default = /*#__PURE__*/_interopDefaultLegacy(mustache);
50
30
  var spdxLicenseList__default = /*#__PURE__*/_interopDefaultLegacy(spdxLicenseList);
51
31
  var joi__default = /*#__PURE__*/_interopDefaultLegacy(joi);
52
- var hoek__namespace = /*#__PURE__*/_interopNamespace(hoek);
32
+ var filedirname__default = /*#__PURE__*/_interopDefaultLegacy(filedirname);
53
33
 
54
34
  const questionNames$1 = {
55
35
  GIT_REPO: 'gitRepo',
@@ -59,7 +39,7 @@ const questionNames$1 = {
59
39
  DEPENDENCY_UPDATER: 'dependencyUpdater'
60
40
  };
61
41
 
62
- function scaffold$2(scaffolders, chosenLanguage, options) {
42
+ function scaffoldLanguage (scaffolders, chosenLanguage, options) {
63
43
  const scaffolder = scaffolders[chosenLanguage];
64
44
 
65
45
  if (scaffolder) return scaffolder(options);
@@ -67,8 +47,21 @@ function scaffold$2(scaffolders, chosenLanguage, options) {
67
47
  return undefined;
68
48
  }
69
49
 
50
+ function promptForLanguageDetails (languages, decisions) {
51
+ return overridablePrompts.prompt([{
52
+ name: questionNames$1.PROJECT_LANGUAGE,
53
+ type: 'list',
54
+ message: 'What type of project is this?',
55
+ choices: [...Object.keys(languages), new overridablePrompts.Separator(), 'Other']
56
+ }], decisions);
57
+ }
58
+
59
+ function scaffoldReadme$1 ({projectRoot, projectName, description}) {
60
+ return readme.scaffold({projectRoot, projectName, description});
61
+ }
62
+
70
63
  async function scaffoldReadme ({projectName, projectRoot, description, badges, documentation}) {
71
- await readme.scaffold({projectRoot, projectName, description});
64
+ await scaffoldReadme$1({projectRoot, projectName, description});
72
65
 
73
66
  return readme.lift({projectRoot, results: {badges, documentation}});
74
67
  }
@@ -83,23 +76,7 @@ function filterChoicesByVisibility(choices, visibility) {
83
76
  ];
84
77
  }
85
78
 
86
- function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
87
- return overridablePrompts.prompt([
88
- ...core.questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
89
- {name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
90
- ], decisions);
91
- }
92
-
93
- function promptForLanguageDetails(languages, decisions) {
94
- return overridablePrompts.prompt([{
95
- name: questionNames$1.PROJECT_LANGUAGE,
96
- type: 'list',
97
- message: 'What type of project is this?',
98
- choices: [...Object.keys(languages), new overridablePrompts.Separator(), 'Other']
99
- }], decisions);
100
- }
101
-
102
- async function promptForVcsHostDetails(hosts, visibility, decisions) {
79
+ async function promptForVcsHostDetails (hosts, visibility, decisions) {
103
80
  const answers = await overridablePrompts.prompt([{
104
81
  name: questionNames$1.REPO_HOST,
105
82
  type: 'list',
@@ -219,11 +196,7 @@ async function scaffoldLicense ({projectRoot, license, copyright, vcs}) {
219
196
  if (license) {
220
197
  cliMessages.info('Generating License');
221
198
 
222
- let licenseContent = spdxLicenseList__default["default"][license].licenseText;
223
-
224
- if ('MIT' === license) {
225
- licenseContent = licenseContent.replace('(including the next paragraph) ', '');
226
- }
199
+ const licenseContent = spdxLicenseList__default["default"][license].licenseText;
227
200
 
228
201
  await fs.promises.writeFile(
229
202
  `${projectRoot}/LICENSE`,
@@ -284,29 +257,52 @@ async function scaffoldDependencyUpdater (scaffolders, decisions, options) {
284
257
  return undefined;
285
258
  }
286
259
 
260
+ function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
261
+ return overridablePrompts.prompt([
262
+ ...core.questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
263
+ {name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
264
+ ], decisions);
265
+ }
266
+
267
+ var languagePluginsSchema = joi__default["default"].object().pattern(/^/, joi__default["default"].func().arity(1));
268
+
269
+ var vcsHostPluginsSchema = joi__default["default"].object().pattern(/^/, joi__default["default"].object({
270
+ scaffolder: joi__default["default"].func().arity(1).required(),
271
+ prompt: joi__default["default"].func().required(),
272
+ public: joi__default["default"].bool(),
273
+ private: joi__default["default"].bool()
274
+ }));
275
+
276
+ var dependencyUpdaterPluginsSchema = joi__default["default"].object().pattern(/^/, joi__default["default"].object({
277
+ scaffolder: joi__default["default"].func().arity(1).required()
278
+ })).default({});
279
+
280
+ const overridesSchema = joi__default["default"].object({copyrightHolder: joi__default["default"].string()});
281
+
282
+ const decisionsSchema = joi__default["default"].object();
283
+
287
284
  function validate(options) {
288
- const schema = joi__default["default"].object({
289
- languages: joi__default["default"].object().pattern(/^/, joi__default["default"].func().arity(1)),
290
- overrides: joi__default["default"].object({copyrightHolder: joi__default["default"].string()}),
291
- vcsHosts: joi__default["default"].object().pattern(/^/, joi__default["default"].object({
292
- scaffolder: joi__default["default"].func().arity(1).required(),
293
- prompt: joi__default["default"].func().required(),
294
- public: joi__default["default"].boolean(),
295
- private: joi__default["default"].boolean()
296
- })),
297
- decisions: joi__default["default"].object(),
298
- dependencyUpdaters: joi__default["default"].object().pattern(/^/, joi__default["default"].object({
299
- scaffolder: joi__default["default"].func().arity(1).required()
300
- })).default({})
301
- });
302
- const validated = schema.validate(options);
285
+ return core.validateOptions(joi__default["default"].object({
286
+ languages: languagePluginsSchema,
287
+ /**
288
+ * @deprecated overrides should no longer be necessary. use decisions instead
289
+ */
290
+ overrides: overridesSchema,
291
+ vcsHosts: vcsHostPluginsSchema,
292
+ decisions: decisionsSchema,
293
+ dependencyUpdaters: dependencyUpdaterPluginsSchema
294
+ }), options) || {};
295
+ }
303
296
 
304
- hoek__namespace.assert(!validated.error, validated.error);
297
+ function determinePathToTemplateFile (fileName) {
298
+ const [, __dirname] = filedirname__default["default"]();
305
299
 
306
- return validated.value || {};
300
+ return path.resolve(__dirname, '..', 'templates', fileName);
307
301
  }
308
302
 
309
- const [, __dirname$1] = filedirname__default["default"]();
303
+ function scaffoldEditorConfig ({projectRoot}) {
304
+ return node_fs.promises.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);
305
+ }
310
306
 
311
307
  async function scaffold(options) {
312
308
  const projectRoot = process.cwd();
@@ -330,7 +326,7 @@ async function scaffold(options) {
330
326
 
331
327
  const [license, language] = await Promise.all([
332
328
  scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),
333
- scaffold$2(
329
+ scaffoldLanguage(
334
330
  languages,
335
331
  projectLanguage,
336
332
  {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}
@@ -352,6 +348,10 @@ async function scaffold(options) {
352
348
  const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {
353
349
  ...vcs,
354
350
  projectRoot,
351
+ /**
352
+ * @deprecated vcs-host plugins should no longer expect `projectType` to be provided.
353
+ * will be removed with the next major version
354
+ */
355
355
  projectType: projectLanguage,
356
356
  description,
357
357
  visibility,
@@ -374,7 +374,7 @@ async function scaffold(options) {
374
374
  ...'Public' === visibility && {
375
375
  PRs: {
376
376
  text: 'PRs Welcome',
377
- link: 'http://makeapullrequest.com',
377
+ link: 'https://makeapullrequest.com',
378
378
  img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'
379
379
  }
380
380
  }
@@ -385,7 +385,7 @@ async function scaffold(options) {
385
385
  ...contributors.map(contributor => contributor.badges).filter(Boolean)
386
386
  ])
387
387
  }),
388
- fs.promises.copyFile(path.resolve(__dirname$1, '..', 'templates', 'editorconfig.txt'), `${projectRoot}/.editorconfig`)
388
+ scaffoldEditorConfig({projectRoot})
389
389
  ]);
390
390
 
391
391
  const gitResults = gitRepo && await scaffold$1({
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/prompts/question-names.mjs","../src/language-scaffolder.js","../src/readme.js","../src/prompts/conditionals.js","../src/prompts/questions.js","../src/vcs/git.js","../src/license.js","../src/vcs/host.js","../src/dependency-updater/prompt.js","../src/dependency-updater/scaffolder.js","../src/options-validator.js","../src/scaffolder.js","../src/lift.js","../src/index.js"],"sourcesContent":["export const questionNames = {\n GIT_REPO: 'gitRepo',\n REPO_HOST: 'repoHost',\n REPO_OWNER: 'repoOwner',\n PROJECT_LANGUAGE: 'projectLanguage',\n DEPENDENCY_UPDATER: 'dependencyUpdater'\n};\n","export function scaffold(scaffolders, chosenLanguage, options) {\n const scaffolder = scaffolders[chosenLanguage];\n\n if (scaffolder) return scaffolder(options);\n\n return undefined;\n}\n","import {lift as liftReadme, scaffold as scaffoldReadme} from '@form8ion/readme';\n\nexport default async function ({projectName, projectRoot, description, badges, documentation}) {\n await scaffoldReadme({projectRoot, projectName, description});\n\n return liftReadme({projectRoot, results: {badges, documentation}});\n}\n","import {Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function unlicensedConfirmationShouldBePresented(answers) {\n return 'Private' === answers[questionNames.VISIBILITY];\n}\n\nexport function licenseChoicesShouldBePresented(answers) {\n return 'Public' === answers[questionNames.VISIBILITY] || !answers[questionNames.UNLICENSED];\n}\n\nexport function copyrightInformationShouldBeRequested(answers) {\n return !!answers[questionNames.LICENSE];\n}\n\nexport function filterChoicesByVisibility(choices, visibility) {\n return [\n ...Object.entries(choices)\n .filter(([, choice]) => choice[visibility.toLowerCase()])\n .reduce((acc, [name]) => ([...acc, name]), []),\n new Separator(),\n 'Other'\n ];\n}\n","import {questionsForBaseDetails} from '@form8ion/core';\nimport {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {filterChoicesByVisibility} from './conditionals';\nimport {questionNames} from './question-names';\n\nexport function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {\n return prompt([\n ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),\n {name: questionNames.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}\n ], decisions);\n}\n\nexport function promptForLanguageDetails(languages, decisions) {\n return prompt([{\n name: questionNames.PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), new Separator(), 'Other']\n }], decisions);\n}\n\nexport async function promptForVcsHostDetails(hosts, visibility, decisions) {\n const answers = await prompt([{\n name: questionNames.REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: filterChoicesByVisibility(hosts, visibility)\n }], decisions);\n const host = hosts[answers[questionNames.REPO_HOST]];\n\n return {...answers, ...host && await host.prompt({decisions})};\n}\n","import {promises as fs} from 'node:fs';\n\nimport {simpleGit} from 'simple-git';\nimport hostedGitInfo from 'hosted-git-info';\nimport {info, warn} from '@travi/cli-messages';\n\nimport {promptForVcsHostDetails} from '../prompts/questions';\nimport {questionNames} from '../prompts/question-names';\n\nfunction createIgnoreFile(projectRoot, ignore) {\n const {directories, files} = ignore;\n\n return fs.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\\n')}\\n\\n${files.join('\\n')}`);\n}\n\nfunction generateConfigFiles(projectRoot, ignore) {\n info('Generating Git config files', {level: 'secondary'});\n\n return Promise.all([\n fs.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),\n ignore ? createIgnoreFile(projectRoot, ignore) : undefined\n ].filter(Boolean));\n}\n\nasync function getExistingRemotes(git) {\n try {\n return await git.listRemote();\n } catch (e) {\n if ('fatal: No remote configured to list refs from.\\n' === e.message) {\n return [];\n }\n\n throw e;\n }\n}\n\nasync function defineRemoteOrigin(projectRoot, origin) {\n const git = simpleGit(projectRoot);\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\n\n if (origin.sshUrl) {\n info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});\n\n await git.addRemote('origin', origin.sshUrl);\n\n // info('Setting the local `master` branch to track `origin/master`');\n //\n // await gitBranch.setUpstream(\n // await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),\n // 'origin/master'\n // );\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n }\n\n warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n}\n\nexport async function initialize(\n gitRepoShouldBeInitialized,\n projectRoot,\n projectName,\n vcsHosts,\n visibility,\n decisions\n) {\n if (gitRepoShouldBeInitialized) {\n const git = simpleGit(projectRoot);\n if (await git.checkIsRepo('root')) {\n info('Git repository already exists');\n\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);\n\n return {owner: user, name: project, host: type};\n }\n\n info('Initializing Git Repository');\n\n const [answers] = await Promise.all([\n promptForVcsHostDetails(vcsHosts, visibility, decisions),\n git.init()\n ]);\n\n return {\n host: answers[questionNames.REPO_HOST].toLowerCase(),\n owner: answers[questionNames.REPO_OWNER],\n name: projectName\n };\n }\n\n return undefined;\n}\n\nexport async function scaffold({projectRoot, ignore, origin}) {\n info('Finishing Git Configuration');\n\n const [remoteOriginResults] = await Promise.all([\n defineRemoteOrigin(projectRoot, origin),\n generateConfigFiles(projectRoot, ignore)\n ]);\n\n return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};\n}\n","import {promises} from 'fs';\nimport wrap from 'word-wrap';\nimport mustache from 'mustache';\n// eslint-disable-next-line import/extensions\nimport spdxLicenseList from 'spdx-license-list/full.js';\nimport {info} from '@travi/cli-messages';\n\nexport default async function ({projectRoot, license, copyright, vcs}) {\n if (license) {\n info('Generating License');\n\n let licenseContent = spdxLicenseList[license].licenseText;\n\n if ('MIT' === license) {\n licenseContent = licenseContent.replace('(including the next paragraph) ', '');\n }\n\n await promises.writeFile(\n `${projectRoot}/LICENSE`,\n `${wrap(\n mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),\n {width: 80, indent: ''}\n )}\\n`\n );\n\n return {\n ...vcs && 'github' === vcs.host && {\n badges: {\n consumer: {\n license: {\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,\n text: `${license} license`,\n link: 'LICENSE'\n }\n }\n }\n }\n };\n }\n\n return {};\n}\n","export default function (hosts, options) {\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const {host: chosenHost, ...rest} = options;\n const host = lowercasedHosts[chosenHost];\n\n if (host) return host.scaffolder(rest);\n\n return {};\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {questionNames} from '../prompts/question-names';\n\nexport async function promptForDependencyUpdaterChoice(updaters, decisions) {\n return prompt([{\n name: questionNames.DEPENDENCY_UPDATER,\n type: 'list',\n message: 'Which dependency-update service do you want to manage this project?',\n choices: [...Object.keys(updaters), new Separator(), 'Other']\n }], decisions);\n}\n","import {questionNames} from '../prompts/question-names';\nimport {promptForDependencyUpdaterChoice} from './prompt';\n\nexport default async function (scaffolders, decisions, options) {\n if (!Object.keys(scaffolders).length) return undefined;\n\n const scaffolderDetails = scaffolders[\n (await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames.DEPENDENCY_UPDATER]\n ];\n\n if (scaffolderDetails) return scaffolderDetails.scaffolder(options);\n\n return undefined;\n}\n","import joi from 'joi';\nimport * as hoek from '@hapi/hoek';\n\nexport function validate(options) {\n const schema = joi.object({\n languages: joi.object().pattern(/^/, joi.func().arity(1)),\n overrides: joi.object({copyrightHolder: joi.string()}),\n vcsHosts: joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required(),\n prompt: joi.func().required(),\n public: joi.boolean(),\n private: joi.boolean()\n })),\n decisions: joi.object(),\n dependencyUpdaters: joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required()\n })).default({})\n });\n const validated = schema.validate(options);\n\n hoek.assert(!validated.error, validated.error);\n\n return validated.value || {};\n}\n","import {resolve} from 'path';\nimport {promises as fs} from 'fs';\n\nimport filedirname from 'filedirname';\nimport deepmerge from 'deepmerge';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {reportResults} from '@form8ion/results-reporter';\nimport {info} from '@travi/cli-messages';\n\nimport execa from '../thirdparty-wrappers/execa';\nimport {scaffold as scaffoldLanguage} from './language-scaffolder';\nimport scaffoldReadme from './readme';\nimport {initialize as initializeGit, scaffold as scaffoldGit} from './vcs/git';\nimport scaffoldLicense from './license';\nimport scaffoldVcsHost from './vcs/host';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder';\nimport {promptForBaseDetails, promptForLanguageDetails} from './prompts/questions';\nimport {validate} from './options-validator';\nimport {questionNames} from './prompts/question-names';\n\nconst [, __dirname] = filedirname();\n\nexport async function scaffold(options) {\n const projectRoot = process.cwd();\n const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);\n const {copyrightHolder} = overrides;\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [questionNames.GIT_REPO]: gitRepo,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const vcs = await initializeGit(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);\n\n const {[questionNames.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);\n\n const [license, language] = await Promise.all([\n scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),\n scaffoldLanguage(\n languages,\n projectLanguage,\n {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}\n )\n ]);\n\n const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n decisions,\n {projectRoot, vcs}\n );\n\n const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);\n const contributedTasks = contributors\n .map(contributor => contributor.nextSteps)\n .filter(Boolean)\n .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);\n\n const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {\n ...vcs,\n projectRoot,\n projectType: projectLanguage,\n description,\n visibility,\n ...language && {\n homepage: language.projectDetails && language.projectDetails.homepage,\n tags: language.tags\n },\n nextSteps: contributedTasks\n });\n\n await Promise.all([\n scaffoldReadme({\n projectName,\n projectRoot,\n description,\n ...language && {documentation: language.documentation},\n badges: deepmerge.all([\n {\n contribution: {\n ...'Public' === visibility && {\n PRs: {\n text: 'PRs Welcome',\n link: 'http://makeapullrequest.com',\n img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'\n }\n }\n },\n status: {},\n consumer: {}\n },\n ...contributors.map(contributor => contributor.badges).filter(Boolean)\n ])\n }),\n fs.copyFile(resolve(__dirname, '..', 'templates', 'editorconfig.txt'), `${projectRoot}/.editorconfig`)\n ]);\n\n const gitResults = gitRepo && await scaffoldGit({\n projectRoot,\n ...language && {ignore: language.vcsIgnore},\n origin: vcsHostResults\n });\n\n if (language && language.verificationCommand) {\n info('Verifying the generated project');\n\n const subprocess = execa(language.verificationCommand, {shell: true});\n subprocess.stdout.pipe(process.stdout);\n await subprocess;\n }\n\n reportResults({\n nextSteps: [\n ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],\n ...contributedTasks\n ]\n });\n}\n","import deepmerge from 'deepmerge';\nimport {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\n\nexport default async function ({projectRoot, results, enhancers, vcs}) {\n const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});\n\n await liftReadme({projectRoot, results: deepmerge.all([results, enhancerResults])});\n\n return enhancerResults;\n}\n","import {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {questionNames as projectScaffolderQuestionNames} from './prompts/question-names';\n\nexport * from './scaffolder';\nexport {default as lift} from './lift';\nexport const questionNames = {\n ...coreQuestionNames,\n ...projectScaffolderQuestionNames\n};\n"],"names":["questionNames","scaffold","scaffoldReadme","liftReadme","Separator","prompt","questionsForBaseDetails","fs","info","simpleGit","warn","hostedGitInfo","spdxLicenseList","promises","wrap","mustache","joi","hoek","__dirname","filedirname","coreQuestionNames","initializeGit","scaffoldLanguage","deepmerge","resolve","scaffoldGit","execa","reportResults","applyEnhancers","projectScaffolderQuestionNames"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/prompts/question-names.mjs","../src/language/scaffolder.js","../src/language/prompt.js","../src/readme/scaffolder.js","../src/readme.js","../src/prompts/conditionals.js","../src/vcs/host/prompt.js","../src/vcs/git.js","../src/license/scaffolder.js","../src/vcs/host/scaffolder.js","../src/dependency-updater/prompt.js","../src/dependency-updater/scaffolder.js","../src/prompts/questions.js","../src/language/schema.js","../src/vcs/host/schema.js","../src/dependency-updater/schema.js","../src/options-schemas.js","../src/options-validator.js","../src/template-path.js","../src/editorconfig/scaffolder.js","../src/scaffolder.js","../src/lift.js","../src/index.js"],"sourcesContent":["export const questionNames = {\n GIT_REPO: 'gitRepo',\n REPO_HOST: 'repoHost',\n REPO_OWNER: 'repoOwner',\n PROJECT_LANGUAGE: 'projectLanguage',\n DEPENDENCY_UPDATER: 'dependencyUpdater'\n};\n","export default function (scaffolders, chosenLanguage, options) {\n const scaffolder = scaffolders[chosenLanguage];\n\n if (scaffolder) return scaffolder(options);\n\n return undefined;\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../prompts/question-names';\n\nexport default function (languages, decisions) {\n return prompt([{\n name: questionNames.PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), new Separator(), 'Other']\n }], decisions);\n}\n","import {scaffold as scaffoldReadme} from '@form8ion/readme';\n\nexport default function ({projectRoot, projectName, description}) {\n return scaffoldReadme({projectRoot, projectName, description});\n}\n","import {lift as liftReadme} from '@form8ion/readme';\n\nimport {scaffold as scaffoldReadme} from './readme/index';\n\nexport default async function ({projectName, projectRoot, description, badges, documentation}) {\n await scaffoldReadme({projectRoot, projectName, description});\n\n return liftReadme({projectRoot, results: {badges, documentation}});\n}\n","import {Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function unlicensedConfirmationShouldBePresented(answers) {\n return 'Private' === answers[questionNames.VISIBILITY];\n}\n\nexport function licenseChoicesShouldBePresented(answers) {\n return 'Public' === answers[questionNames.VISIBILITY] || !answers[questionNames.UNLICENSED];\n}\n\nexport function copyrightInformationShouldBeRequested(answers) {\n return !!answers[questionNames.LICENSE];\n}\n\nexport function filterChoicesByVisibility(choices, visibility) {\n return [\n ...Object.entries(choices)\n .filter(([, choice]) => choice[visibility.toLowerCase()])\n .reduce((acc, [name]) => ([...acc, name]), []),\n new Separator(),\n 'Other'\n ];\n}\n","import {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../../prompts/question-names';\nimport {filterChoicesByVisibility} from '../../prompts/conditionals';\n\nexport default async function (hosts, visibility, decisions) {\n const answers = await prompt([{\n name: questionNames.REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: filterChoicesByVisibility(hosts, visibility)\n }], decisions);\n const host = hosts[answers[questionNames.REPO_HOST]];\n\n return {...answers, ...host && await host.prompt({decisions})};\n}\n","import {promises as fs} from 'node:fs';\n\nimport {simpleGit} from 'simple-git';\nimport hostedGitInfo from 'hosted-git-info';\nimport {info, warn} from '@travi/cli-messages';\n\nimport promptForVcsHostDetails from './host/prompt';\nimport {questionNames} from '../prompts/question-names';\n\nfunction createIgnoreFile(projectRoot, ignore) {\n const {directories, files} = ignore;\n\n return fs.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\\n')}\\n\\n${files.join('\\n')}`);\n}\n\nfunction generateConfigFiles(projectRoot, ignore) {\n info('Generating Git config files', {level: 'secondary'});\n\n return Promise.all([\n fs.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),\n ignore ? createIgnoreFile(projectRoot, ignore) : undefined\n ].filter(Boolean));\n}\n\nasync function getExistingRemotes(git) {\n try {\n return await git.listRemote();\n } catch (e) {\n if ('fatal: No remote configured to list refs from.\\n' === e.message) {\n return [];\n }\n\n throw e;\n }\n}\n\nasync function defineRemoteOrigin(projectRoot, origin) {\n const git = simpleGit(projectRoot);\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\n\n if (origin.sshUrl) {\n info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});\n\n await git.addRemote('origin', origin.sshUrl);\n\n // info('Setting the local `master` branch to track `origin/master`');\n //\n // await gitBranch.setUpstream(\n // await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),\n // 'origin/master'\n // );\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n }\n\n warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n}\n\nexport async function initialize(\n gitRepoShouldBeInitialized,\n projectRoot,\n projectName,\n vcsHosts,\n visibility,\n decisions\n) {\n if (gitRepoShouldBeInitialized) {\n const git = simpleGit(projectRoot);\n if (await git.checkIsRepo('root')) {\n info('Git repository already exists');\n\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);\n\n return {owner: user, name: project, host: type};\n }\n\n info('Initializing Git Repository');\n\n const [answers] = await Promise.all([\n promptForVcsHostDetails(vcsHosts, visibility, decisions),\n git.init()\n ]);\n\n return {\n host: answers[questionNames.REPO_HOST].toLowerCase(),\n owner: answers[questionNames.REPO_OWNER],\n name: projectName\n };\n }\n\n return undefined;\n}\n\nexport async function scaffold({projectRoot, ignore, origin}) {\n info('Finishing Git Configuration');\n\n const [remoteOriginResults] = await Promise.all([\n defineRemoteOrigin(projectRoot, origin),\n generateConfigFiles(projectRoot, ignore)\n ]);\n\n return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};\n}\n","import {promises as fs} from 'fs';\nimport wrap from 'word-wrap';\nimport mustache from 'mustache';\n// eslint-disable-next-line import/extensions\nimport spdxLicenseList from 'spdx-license-list/full.js';\nimport {info} from '@travi/cli-messages';\n\nexport default async function ({projectRoot, license, copyright, vcs}) {\n if (license) {\n info('Generating License');\n\n const licenseContent = spdxLicenseList[license].licenseText;\n\n await fs.writeFile(\n `${projectRoot}/LICENSE`,\n `${wrap(\n mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),\n {width: 80, indent: ''}\n )}\\n`\n );\n\n return {\n ...vcs && 'github' === vcs.host && {\n badges: {\n consumer: {\n license: {\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,\n text: `${license} license`,\n link: 'LICENSE'\n }\n }\n }\n }\n };\n }\n\n return {};\n}\n","export default function (hosts, options) {\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const {host: chosenHost, ...rest} = options;\n const host = lowercasedHosts[chosenHost];\n\n if (host) return host.scaffolder(rest);\n\n return {};\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {questionNames} from '../prompts/question-names';\n\nexport async function promptForDependencyUpdaterChoice(updaters, decisions) {\n return prompt([{\n name: questionNames.DEPENDENCY_UPDATER,\n type: 'list',\n message: 'Which dependency-update service do you want to manage this project?',\n choices: [...Object.keys(updaters), new Separator(), 'Other']\n }], decisions);\n}\n","import {questionNames} from '../prompts/question-names';\nimport {promptForDependencyUpdaterChoice} from './prompt';\n\nexport default async function (scaffolders, decisions, options) {\n if (!Object.keys(scaffolders).length) return undefined;\n\n const scaffolderDetails = scaffolders[\n (await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames.DEPENDENCY_UPDATER]\n ];\n\n if (scaffolderDetails) return scaffolderDetails.scaffolder(options);\n\n return undefined;\n}\n","import {questionsForBaseDetails} from '@form8ion/core';\nimport {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {\n return prompt([\n ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),\n {name: questionNames.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}\n ], decisions);\n}\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.func().arity(1));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required(),\n prompt: joi.func().required(),\n public: joi.bool(),\n private: joi.bool()\n}));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required()\n})).default({});\n","import joi from 'joi';\n\nexport const overridesSchema = joi.object({copyrightHolder: joi.string()});\n\nexport const decisionsSchema = joi.object();\n","import {validateOptions} from '@form8ion/core';\nimport joi from 'joi';\n\nimport languagePluginsSchema from './language/schema';\nimport vcsHostPluginsSchema from './vcs/host/schema';\nimport dependencyUpdaterPluginsSchema from './dependency-updater/schema';\nimport {decisionsSchema, overridesSchema} from './options-schemas';\n\nexport function validate(options) {\n return validateOptions(joi.object({\n languages: languagePluginsSchema,\n /**\n * @deprecated overrides should no longer be necessary. use decisions instead\n */\n overrides: overridesSchema,\n vcsHosts: vcsHostPluginsSchema,\n decisions: decisionsSchema,\n dependencyUpdaters: dependencyUpdaterPluginsSchema\n }), options) || {};\n}\n","import {resolve} from 'path';\nimport filedirname from 'filedirname';\n\nexport default function (fileName) {\n const [, __dirname] = filedirname();\n\n return resolve(__dirname, '..', 'templates', fileName);\n}\n","import {promises as fs} from 'node:fs';\n\nimport determinePathToTemplateFile from '../template-path';\n\nexport default function ({projectRoot}) {\n return fs.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);\n}\n","import deepmerge from 'deepmerge';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {reportResults} from '@form8ion/results-reporter';\nimport {info} from '@travi/cli-messages';\n\nimport execa from '../thirdparty-wrappers/execa';\nimport {scaffold as scaffoldLanguage, prompt as promptForLanguageDetails} from './language';\nimport scaffoldReadme from './readme';\nimport {initialize as initializeGit, scaffold as scaffoldGit} from './vcs/git';\nimport {scaffold as scaffoldLicense} from './license';\nimport {scaffold as scaffoldVcsHost} from './vcs/host';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder';\nimport {promptForBaseDetails} from './prompts/questions';\nimport {validate} from './options-validator';\nimport {questionNames} from './prompts/question-names';\nimport {scaffold as scaffoldEditorConfig} from './editorconfig';\n\nexport async function scaffold(options) {\n const projectRoot = process.cwd();\n const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);\n const {copyrightHolder} = overrides;\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [questionNames.GIT_REPO]: gitRepo,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const vcs = await initializeGit(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);\n\n const {[questionNames.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);\n\n const [license, language] = await Promise.all([\n scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),\n scaffoldLanguage(\n languages,\n projectLanguage,\n {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}\n )\n ]);\n\n const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n decisions,\n {projectRoot, vcs}\n );\n\n const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);\n const contributedTasks = contributors\n .map(contributor => contributor.nextSteps)\n .filter(Boolean)\n .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);\n\n const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {\n ...vcs,\n projectRoot,\n /**\n * @deprecated vcs-host plugins should no longer expect `projectType` to be provided.\n * will be removed with the next major version\n */\n projectType: projectLanguage,\n description,\n visibility,\n ...language && {\n homepage: language.projectDetails && language.projectDetails.homepage,\n tags: language.tags\n },\n nextSteps: contributedTasks\n });\n\n await Promise.all([\n scaffoldReadme({\n projectName,\n projectRoot,\n description,\n ...language && {documentation: language.documentation},\n badges: deepmerge.all([\n {\n contribution: {\n ...'Public' === visibility && {\n PRs: {\n text: 'PRs Welcome',\n link: 'https://makeapullrequest.com',\n img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'\n }\n }\n },\n status: {},\n consumer: {}\n },\n ...contributors.map(contributor => contributor.badges).filter(Boolean)\n ])\n }),\n scaffoldEditorConfig({projectRoot})\n ]);\n\n const gitResults = gitRepo && await scaffoldGit({\n projectRoot,\n ...language && {ignore: language.vcsIgnore},\n origin: vcsHostResults\n });\n\n if (language && language.verificationCommand) {\n info('Verifying the generated project');\n\n const subprocess = execa(language.verificationCommand, {shell: true});\n subprocess.stdout.pipe(process.stdout);\n await subprocess;\n }\n\n reportResults({\n nextSteps: [\n ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],\n ...contributedTasks\n ]\n });\n}\n","import deepmerge from 'deepmerge';\nimport {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\n\nexport default async function ({projectRoot, results, enhancers, vcs}) {\n const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});\n\n await liftReadme({projectRoot, results: deepmerge.all([results, enhancerResults])});\n\n return enhancerResults;\n}\n","import {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {questionNames as projectScaffolderQuestionNames} from './prompts/question-names';\n\nexport * from './scaffolder';\nexport {default as lift} from './lift';\nexport const questionNames = {\n ...coreQuestionNames,\n ...projectScaffolderQuestionNames\n};\n"],"names":["questionNames","prompt","Separator","scaffoldReadme","liftReadme","fs","info","simpleGit","warn","hostedGitInfo","scaffold","spdxLicenseList","wrap","mustache","questionsForBaseDetails","joi","validateOptions","filedirname","resolve","coreQuestionNames","initializeGit","deepmerge","scaffoldGit","execa","reportResults","applyEnhancers","projectScaffolderQuestionNames"],"mappings":"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"}
package/lib/index.mjs CHANGED
@@ -1,21 +1,20 @@
1
- import { questionsForBaseDetails, questionNames as questionNames$2, applyEnhancers } from '@form8ion/core';
2
- import { resolve } from 'path';
3
- import { promises as promises$1 } from 'fs';
4
- import filedirname from 'filedirname';
1
+ import { questionsForBaseDetails, validateOptions, questionNames as questionNames$2, applyEnhancers } from '@form8ion/core';
5
2
  import deepmerge from 'deepmerge';
6
3
  import { reportResults } from '@form8ion/results-reporter';
7
4
  import { info, warn } from '@travi/cli-messages';
8
5
  import execa from '@form8ion/execa-wrapper';
9
- import { scaffold as scaffold$3, lift as lift$1 } from '@form8ion/readme';
6
+ import { prompt, Separator } from '@form8ion/overridable-prompts';
7
+ import { scaffold as scaffold$2, lift as lift$1 } from '@form8ion/readme';
10
8
  import { promises } from 'node:fs';
11
9
  import { simpleGit } from 'simple-git';
12
10
  import hostedGitInfo from 'hosted-git-info';
13
- import { Separator, prompt } from '@form8ion/overridable-prompts';
11
+ import { promises as promises$1 } from 'fs';
14
12
  import wrap from 'word-wrap';
15
13
  import mustache from 'mustache';
16
14
  import spdxLicenseList from 'spdx-license-list/full.js';
17
15
  import joi from 'joi';
18
- import * as hoek from '@hapi/hoek';
16
+ import { resolve } from 'path';
17
+ import filedirname from 'filedirname';
19
18
 
20
19
  const questionNames$1 = {
21
20
  GIT_REPO: 'gitRepo',
@@ -25,7 +24,7 @@ const questionNames$1 = {
25
24
  DEPENDENCY_UPDATER: 'dependencyUpdater'
26
25
  };
27
26
 
28
- function scaffold$2(scaffolders, chosenLanguage, options) {
27
+ function scaffoldLanguage (scaffolders, chosenLanguage, options) {
29
28
  const scaffolder = scaffolders[chosenLanguage];
30
29
 
31
30
  if (scaffolder) return scaffolder(options);
@@ -33,8 +32,21 @@ function scaffold$2(scaffolders, chosenLanguage, options) {
33
32
  return undefined;
34
33
  }
35
34
 
35
+ function promptForLanguageDetails (languages, decisions) {
36
+ return prompt([{
37
+ name: questionNames$1.PROJECT_LANGUAGE,
38
+ type: 'list',
39
+ message: 'What type of project is this?',
40
+ choices: [...Object.keys(languages), new Separator(), 'Other']
41
+ }], decisions);
42
+ }
43
+
44
+ function scaffoldReadme$1 ({projectRoot, projectName, description}) {
45
+ return scaffold$2({projectRoot, projectName, description});
46
+ }
47
+
36
48
  async function scaffoldReadme ({projectName, projectRoot, description, badges, documentation}) {
37
- await scaffold$3({projectRoot, projectName, description});
49
+ await scaffoldReadme$1({projectRoot, projectName, description});
38
50
 
39
51
  return lift$1({projectRoot, results: {badges, documentation}});
40
52
  }
@@ -49,23 +61,7 @@ function filterChoicesByVisibility(choices, visibility) {
49
61
  ];
50
62
  }
51
63
 
52
- function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
53
- return prompt([
54
- ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
55
- {name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
56
- ], decisions);
57
- }
58
-
59
- function promptForLanguageDetails(languages, decisions) {
60
- return prompt([{
61
- name: questionNames$1.PROJECT_LANGUAGE,
62
- type: 'list',
63
- message: 'What type of project is this?',
64
- choices: [...Object.keys(languages), new Separator(), 'Other']
65
- }], decisions);
66
- }
67
-
68
- async function promptForVcsHostDetails(hosts, visibility, decisions) {
64
+ async function promptForVcsHostDetails (hosts, visibility, decisions) {
69
65
  const answers = await prompt([{
70
66
  name: questionNames$1.REPO_HOST,
71
67
  type: 'list',
@@ -185,11 +181,7 @@ async function scaffoldLicense ({projectRoot, license, copyright, vcs}) {
185
181
  if (license) {
186
182
  info('Generating License');
187
183
 
188
- let licenseContent = spdxLicenseList[license].licenseText;
189
-
190
- if ('MIT' === license) {
191
- licenseContent = licenseContent.replace('(including the next paragraph) ', '');
192
- }
184
+ const licenseContent = spdxLicenseList[license].licenseText;
193
185
 
194
186
  await promises$1.writeFile(
195
187
  `${projectRoot}/LICENSE`,
@@ -250,29 +242,52 @@ async function scaffoldDependencyUpdater (scaffolders, decisions, options) {
250
242
  return undefined;
251
243
  }
252
244
 
245
+ function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
246
+ return prompt([
247
+ ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
248
+ {name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
249
+ ], decisions);
250
+ }
251
+
252
+ var languagePluginsSchema = joi.object().pattern(/^/, joi.func().arity(1));
253
+
254
+ var vcsHostPluginsSchema = joi.object().pattern(/^/, joi.object({
255
+ scaffolder: joi.func().arity(1).required(),
256
+ prompt: joi.func().required(),
257
+ public: joi.bool(),
258
+ private: joi.bool()
259
+ }));
260
+
261
+ var dependencyUpdaterPluginsSchema = joi.object().pattern(/^/, joi.object({
262
+ scaffolder: joi.func().arity(1).required()
263
+ })).default({});
264
+
265
+ const overridesSchema = joi.object({copyrightHolder: joi.string()});
266
+
267
+ const decisionsSchema = joi.object();
268
+
253
269
  function validate(options) {
254
- const schema = joi.object({
255
- languages: joi.object().pattern(/^/, joi.func().arity(1)),
256
- overrides: joi.object({copyrightHolder: joi.string()}),
257
- vcsHosts: joi.object().pattern(/^/, joi.object({
258
- scaffolder: joi.func().arity(1).required(),
259
- prompt: joi.func().required(),
260
- public: joi.boolean(),
261
- private: joi.boolean()
262
- })),
263
- decisions: joi.object(),
264
- dependencyUpdaters: joi.object().pattern(/^/, joi.object({
265
- scaffolder: joi.func().arity(1).required()
266
- })).default({})
267
- });
268
- const validated = schema.validate(options);
270
+ return validateOptions(joi.object({
271
+ languages: languagePluginsSchema,
272
+ /**
273
+ * @deprecated overrides should no longer be necessary. use decisions instead
274
+ */
275
+ overrides: overridesSchema,
276
+ vcsHosts: vcsHostPluginsSchema,
277
+ decisions: decisionsSchema,
278
+ dependencyUpdaters: dependencyUpdaterPluginsSchema
279
+ }), options) || {};
280
+ }
269
281
 
270
- hoek.assert(!validated.error, validated.error);
282
+ function determinePathToTemplateFile (fileName) {
283
+ const [, __dirname] = filedirname();
271
284
 
272
- return validated.value || {};
285
+ return resolve(__dirname, '..', 'templates', fileName);
273
286
  }
274
287
 
275
- const [, __dirname] = filedirname();
288
+ function scaffoldEditorConfig ({projectRoot}) {
289
+ return promises.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);
290
+ }
276
291
 
277
292
  async function scaffold(options) {
278
293
  const projectRoot = process.cwd();
@@ -296,7 +311,7 @@ async function scaffold(options) {
296
311
 
297
312
  const [license, language] = await Promise.all([
298
313
  scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),
299
- scaffold$2(
314
+ scaffoldLanguage(
300
315
  languages,
301
316
  projectLanguage,
302
317
  {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}
@@ -318,6 +333,10 @@ async function scaffold(options) {
318
333
  const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {
319
334
  ...vcs,
320
335
  projectRoot,
336
+ /**
337
+ * @deprecated vcs-host plugins should no longer expect `projectType` to be provided.
338
+ * will be removed with the next major version
339
+ */
321
340
  projectType: projectLanguage,
322
341
  description,
323
342
  visibility,
@@ -340,7 +359,7 @@ async function scaffold(options) {
340
359
  ...'Public' === visibility && {
341
360
  PRs: {
342
361
  text: 'PRs Welcome',
343
- link: 'http://makeapullrequest.com',
362
+ link: 'https://makeapullrequest.com',
344
363
  img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'
345
364
  }
346
365
  }
@@ -351,7 +370,7 @@ async function scaffold(options) {
351
370
  ...contributors.map(contributor => contributor.badges).filter(Boolean)
352
371
  ])
353
372
  }),
354
- promises$1.copyFile(resolve(__dirname, '..', 'templates', 'editorconfig.txt'), `${projectRoot}/.editorconfig`)
373
+ scaffoldEditorConfig({projectRoot})
355
374
  ]);
356
375
 
357
376
  const gitResults = gitRepo && await scaffold$1({
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/prompts/question-names.mjs","../src/language-scaffolder.js","../src/readme.js","../src/prompts/conditionals.js","../src/prompts/questions.js","../src/vcs/git.js","../src/license.js","../src/vcs/host.js","../src/dependency-updater/prompt.js","../src/dependency-updater/scaffolder.js","../src/options-validator.js","../src/scaffolder.js","../src/lift.js","../src/index.js"],"sourcesContent":["export const questionNames = {\n GIT_REPO: 'gitRepo',\n REPO_HOST: 'repoHost',\n REPO_OWNER: 'repoOwner',\n PROJECT_LANGUAGE: 'projectLanguage',\n DEPENDENCY_UPDATER: 'dependencyUpdater'\n};\n","export function scaffold(scaffolders, chosenLanguage, options) {\n const scaffolder = scaffolders[chosenLanguage];\n\n if (scaffolder) return scaffolder(options);\n\n return undefined;\n}\n","import {lift as liftReadme, scaffold as scaffoldReadme} from '@form8ion/readme';\n\nexport default async function ({projectName, projectRoot, description, badges, documentation}) {\n await scaffoldReadme({projectRoot, projectName, description});\n\n return liftReadme({projectRoot, results: {badges, documentation}});\n}\n","import {Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function unlicensedConfirmationShouldBePresented(answers) {\n return 'Private' === answers[questionNames.VISIBILITY];\n}\n\nexport function licenseChoicesShouldBePresented(answers) {\n return 'Public' === answers[questionNames.VISIBILITY] || !answers[questionNames.UNLICENSED];\n}\n\nexport function copyrightInformationShouldBeRequested(answers) {\n return !!answers[questionNames.LICENSE];\n}\n\nexport function filterChoicesByVisibility(choices, visibility) {\n return [\n ...Object.entries(choices)\n .filter(([, choice]) => choice[visibility.toLowerCase()])\n .reduce((acc, [name]) => ([...acc, name]), []),\n new Separator(),\n 'Other'\n ];\n}\n","import {questionsForBaseDetails} from '@form8ion/core';\nimport {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {filterChoicesByVisibility} from './conditionals';\nimport {questionNames} from './question-names';\n\nexport function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {\n return prompt([\n ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),\n {name: questionNames.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}\n ], decisions);\n}\n\nexport function promptForLanguageDetails(languages, decisions) {\n return prompt([{\n name: questionNames.PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), new Separator(), 'Other']\n }], decisions);\n}\n\nexport async function promptForVcsHostDetails(hosts, visibility, decisions) {\n const answers = await prompt([{\n name: questionNames.REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: filterChoicesByVisibility(hosts, visibility)\n }], decisions);\n const host = hosts[answers[questionNames.REPO_HOST]];\n\n return {...answers, ...host && await host.prompt({decisions})};\n}\n","import {promises as fs} from 'node:fs';\n\nimport {simpleGit} from 'simple-git';\nimport hostedGitInfo from 'hosted-git-info';\nimport {info, warn} from '@travi/cli-messages';\n\nimport {promptForVcsHostDetails} from '../prompts/questions';\nimport {questionNames} from '../prompts/question-names';\n\nfunction createIgnoreFile(projectRoot, ignore) {\n const {directories, files} = ignore;\n\n return fs.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\\n')}\\n\\n${files.join('\\n')}`);\n}\n\nfunction generateConfigFiles(projectRoot, ignore) {\n info('Generating Git config files', {level: 'secondary'});\n\n return Promise.all([\n fs.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),\n ignore ? createIgnoreFile(projectRoot, ignore) : undefined\n ].filter(Boolean));\n}\n\nasync function getExistingRemotes(git) {\n try {\n return await git.listRemote();\n } catch (e) {\n if ('fatal: No remote configured to list refs from.\\n' === e.message) {\n return [];\n }\n\n throw e;\n }\n}\n\nasync function defineRemoteOrigin(projectRoot, origin) {\n const git = simpleGit(projectRoot);\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\n\n if (origin.sshUrl) {\n info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});\n\n await git.addRemote('origin', origin.sshUrl);\n\n // info('Setting the local `master` branch to track `origin/master`');\n //\n // await gitBranch.setUpstream(\n // await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),\n // 'origin/master'\n // );\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n }\n\n warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n}\n\nexport async function initialize(\n gitRepoShouldBeInitialized,\n projectRoot,\n projectName,\n vcsHosts,\n visibility,\n decisions\n) {\n if (gitRepoShouldBeInitialized) {\n const git = simpleGit(projectRoot);\n if (await git.checkIsRepo('root')) {\n info('Git repository already exists');\n\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);\n\n return {owner: user, name: project, host: type};\n }\n\n info('Initializing Git Repository');\n\n const [answers] = await Promise.all([\n promptForVcsHostDetails(vcsHosts, visibility, decisions),\n git.init()\n ]);\n\n return {\n host: answers[questionNames.REPO_HOST].toLowerCase(),\n owner: answers[questionNames.REPO_OWNER],\n name: projectName\n };\n }\n\n return undefined;\n}\n\nexport async function scaffold({projectRoot, ignore, origin}) {\n info('Finishing Git Configuration');\n\n const [remoteOriginResults] = await Promise.all([\n defineRemoteOrigin(projectRoot, origin),\n generateConfigFiles(projectRoot, ignore)\n ]);\n\n return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};\n}\n","import {promises} from 'fs';\nimport wrap from 'word-wrap';\nimport mustache from 'mustache';\n// eslint-disable-next-line import/extensions\nimport spdxLicenseList from 'spdx-license-list/full.js';\nimport {info} from '@travi/cli-messages';\n\nexport default async function ({projectRoot, license, copyright, vcs}) {\n if (license) {\n info('Generating License');\n\n let licenseContent = spdxLicenseList[license].licenseText;\n\n if ('MIT' === license) {\n licenseContent = licenseContent.replace('(including the next paragraph) ', '');\n }\n\n await promises.writeFile(\n `${projectRoot}/LICENSE`,\n `${wrap(\n mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),\n {width: 80, indent: ''}\n )}\\n`\n );\n\n return {\n ...vcs && 'github' === vcs.host && {\n badges: {\n consumer: {\n license: {\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,\n text: `${license} license`,\n link: 'LICENSE'\n }\n }\n }\n }\n };\n }\n\n return {};\n}\n","export default function (hosts, options) {\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const {host: chosenHost, ...rest} = options;\n const host = lowercasedHosts[chosenHost];\n\n if (host) return host.scaffolder(rest);\n\n return {};\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {questionNames} from '../prompts/question-names';\n\nexport async function promptForDependencyUpdaterChoice(updaters, decisions) {\n return prompt([{\n name: questionNames.DEPENDENCY_UPDATER,\n type: 'list',\n message: 'Which dependency-update service do you want to manage this project?',\n choices: [...Object.keys(updaters), new Separator(), 'Other']\n }], decisions);\n}\n","import {questionNames} from '../prompts/question-names';\nimport {promptForDependencyUpdaterChoice} from './prompt';\n\nexport default async function (scaffolders, decisions, options) {\n if (!Object.keys(scaffolders).length) return undefined;\n\n const scaffolderDetails = scaffolders[\n (await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames.DEPENDENCY_UPDATER]\n ];\n\n if (scaffolderDetails) return scaffolderDetails.scaffolder(options);\n\n return undefined;\n}\n","import joi from 'joi';\nimport * as hoek from '@hapi/hoek';\n\nexport function validate(options) {\n const schema = joi.object({\n languages: joi.object().pattern(/^/, joi.func().arity(1)),\n overrides: joi.object({copyrightHolder: joi.string()}),\n vcsHosts: joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required(),\n prompt: joi.func().required(),\n public: joi.boolean(),\n private: joi.boolean()\n })),\n decisions: joi.object(),\n dependencyUpdaters: joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required()\n })).default({})\n });\n const validated = schema.validate(options);\n\n hoek.assert(!validated.error, validated.error);\n\n return validated.value || {};\n}\n","import {resolve} from 'path';\nimport {promises as fs} from 'fs';\n\nimport filedirname from 'filedirname';\nimport deepmerge from 'deepmerge';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {reportResults} from '@form8ion/results-reporter';\nimport {info} from '@travi/cli-messages';\n\nimport execa from '../thirdparty-wrappers/execa';\nimport {scaffold as scaffoldLanguage} from './language-scaffolder';\nimport scaffoldReadme from './readme';\nimport {initialize as initializeGit, scaffold as scaffoldGit} from './vcs/git';\nimport scaffoldLicense from './license';\nimport scaffoldVcsHost from './vcs/host';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder';\nimport {promptForBaseDetails, promptForLanguageDetails} from './prompts/questions';\nimport {validate} from './options-validator';\nimport {questionNames} from './prompts/question-names';\n\nconst [, __dirname] = filedirname();\n\nexport async function scaffold(options) {\n const projectRoot = process.cwd();\n const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);\n const {copyrightHolder} = overrides;\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [questionNames.GIT_REPO]: gitRepo,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const vcs = await initializeGit(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);\n\n const {[questionNames.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);\n\n const [license, language] = await Promise.all([\n scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),\n scaffoldLanguage(\n languages,\n projectLanguage,\n {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}\n )\n ]);\n\n const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n decisions,\n {projectRoot, vcs}\n );\n\n const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);\n const contributedTasks = contributors\n .map(contributor => contributor.nextSteps)\n .filter(Boolean)\n .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);\n\n const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {\n ...vcs,\n projectRoot,\n projectType: projectLanguage,\n description,\n visibility,\n ...language && {\n homepage: language.projectDetails && language.projectDetails.homepage,\n tags: language.tags\n },\n nextSteps: contributedTasks\n });\n\n await Promise.all([\n scaffoldReadme({\n projectName,\n projectRoot,\n description,\n ...language && {documentation: language.documentation},\n badges: deepmerge.all([\n {\n contribution: {\n ...'Public' === visibility && {\n PRs: {\n text: 'PRs Welcome',\n link: 'http://makeapullrequest.com',\n img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'\n }\n }\n },\n status: {},\n consumer: {}\n },\n ...contributors.map(contributor => contributor.badges).filter(Boolean)\n ])\n }),\n fs.copyFile(resolve(__dirname, '..', 'templates', 'editorconfig.txt'), `${projectRoot}/.editorconfig`)\n ]);\n\n const gitResults = gitRepo && await scaffoldGit({\n projectRoot,\n ...language && {ignore: language.vcsIgnore},\n origin: vcsHostResults\n });\n\n if (language && language.verificationCommand) {\n info('Verifying the generated project');\n\n const subprocess = execa(language.verificationCommand, {shell: true});\n subprocess.stdout.pipe(process.stdout);\n await subprocess;\n }\n\n reportResults({\n nextSteps: [\n ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],\n ...contributedTasks\n ]\n });\n}\n","import deepmerge from 'deepmerge';\nimport {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\n\nexport default async function ({projectRoot, results, enhancers, vcs}) {\n const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});\n\n await liftReadme({projectRoot, results: deepmerge.all([results, enhancerResults])});\n\n return enhancerResults;\n}\n","import {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {questionNames as projectScaffolderQuestionNames} from './prompts/question-names';\n\nexport * from './scaffolder';\nexport {default as lift} from './lift';\nexport const questionNames = {\n ...coreQuestionNames,\n ...projectScaffolderQuestionNames\n};\n"],"names":["questionNames","scaffold","scaffoldReadme","liftReadme","fs","promises","coreQuestionNames","initializeGit","scaffoldLanguage","scaffoldGit","projectScaffolderQuestionNames"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/prompts/question-names.mjs","../src/language/scaffolder.js","../src/language/prompt.js","../src/readme/scaffolder.js","../src/readme.js","../src/prompts/conditionals.js","../src/vcs/host/prompt.js","../src/vcs/git.js","../src/license/scaffolder.js","../src/vcs/host/scaffolder.js","../src/dependency-updater/prompt.js","../src/dependency-updater/scaffolder.js","../src/prompts/questions.js","../src/language/schema.js","../src/vcs/host/schema.js","../src/dependency-updater/schema.js","../src/options-schemas.js","../src/options-validator.js","../src/template-path.js","../src/editorconfig/scaffolder.js","../src/scaffolder.js","../src/lift.js","../src/index.js"],"sourcesContent":["export const questionNames = {\n GIT_REPO: 'gitRepo',\n REPO_HOST: 'repoHost',\n REPO_OWNER: 'repoOwner',\n PROJECT_LANGUAGE: 'projectLanguage',\n DEPENDENCY_UPDATER: 'dependencyUpdater'\n};\n","export default function (scaffolders, chosenLanguage, options) {\n const scaffolder = scaffolders[chosenLanguage];\n\n if (scaffolder) return scaffolder(options);\n\n return undefined;\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../prompts/question-names';\n\nexport default function (languages, decisions) {\n return prompt([{\n name: questionNames.PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), new Separator(), 'Other']\n }], decisions);\n}\n","import {scaffold as scaffoldReadme} from '@form8ion/readme';\n\nexport default function ({projectRoot, projectName, description}) {\n return scaffoldReadme({projectRoot, projectName, description});\n}\n","import {lift as liftReadme} from '@form8ion/readme';\n\nimport {scaffold as scaffoldReadme} from './readme/index';\n\nexport default async function ({projectName, projectRoot, description, badges, documentation}) {\n await scaffoldReadme({projectRoot, projectName, description});\n\n return liftReadme({projectRoot, results: {badges, documentation}});\n}\n","import {Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function unlicensedConfirmationShouldBePresented(answers) {\n return 'Private' === answers[questionNames.VISIBILITY];\n}\n\nexport function licenseChoicesShouldBePresented(answers) {\n return 'Public' === answers[questionNames.VISIBILITY] || !answers[questionNames.UNLICENSED];\n}\n\nexport function copyrightInformationShouldBeRequested(answers) {\n return !!answers[questionNames.LICENSE];\n}\n\nexport function filterChoicesByVisibility(choices, visibility) {\n return [\n ...Object.entries(choices)\n .filter(([, choice]) => choice[visibility.toLowerCase()])\n .reduce((acc, [name]) => ([...acc, name]), []),\n new Separator(),\n 'Other'\n ];\n}\n","import {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../../prompts/question-names';\nimport {filterChoicesByVisibility} from '../../prompts/conditionals';\n\nexport default async function (hosts, visibility, decisions) {\n const answers = await prompt([{\n name: questionNames.REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: filterChoicesByVisibility(hosts, visibility)\n }], decisions);\n const host = hosts[answers[questionNames.REPO_HOST]];\n\n return {...answers, ...host && await host.prompt({decisions})};\n}\n","import {promises as fs} from 'node:fs';\n\nimport {simpleGit} from 'simple-git';\nimport hostedGitInfo from 'hosted-git-info';\nimport {info, warn} from '@travi/cli-messages';\n\nimport promptForVcsHostDetails from './host/prompt';\nimport {questionNames} from '../prompts/question-names';\n\nfunction createIgnoreFile(projectRoot, ignore) {\n const {directories, files} = ignore;\n\n return fs.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\\n')}\\n\\n${files.join('\\n')}`);\n}\n\nfunction generateConfigFiles(projectRoot, ignore) {\n info('Generating Git config files', {level: 'secondary'});\n\n return Promise.all([\n fs.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),\n ignore ? createIgnoreFile(projectRoot, ignore) : undefined\n ].filter(Boolean));\n}\n\nasync function getExistingRemotes(git) {\n try {\n return await git.listRemote();\n } catch (e) {\n if ('fatal: No remote configured to list refs from.\\n' === e.message) {\n return [];\n }\n\n throw e;\n }\n}\n\nasync function defineRemoteOrigin(projectRoot, origin) {\n const git = simpleGit(projectRoot);\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\n\n if (origin.sshUrl) {\n info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});\n\n await git.addRemote('origin', origin.sshUrl);\n\n // info('Setting the local `master` branch to track `origin/master`');\n //\n // await gitBranch.setUpstream(\n // await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),\n // 'origin/master'\n // );\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n }\n\n warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n}\n\nexport async function initialize(\n gitRepoShouldBeInitialized,\n projectRoot,\n projectName,\n vcsHosts,\n visibility,\n decisions\n) {\n if (gitRepoShouldBeInitialized) {\n const git = simpleGit(projectRoot);\n if (await git.checkIsRepo('root')) {\n info('Git repository already exists');\n\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);\n\n return {owner: user, name: project, host: type};\n }\n\n info('Initializing Git Repository');\n\n const [answers] = await Promise.all([\n promptForVcsHostDetails(vcsHosts, visibility, decisions),\n git.init()\n ]);\n\n return {\n host: answers[questionNames.REPO_HOST].toLowerCase(),\n owner: answers[questionNames.REPO_OWNER],\n name: projectName\n };\n }\n\n return undefined;\n}\n\nexport async function scaffold({projectRoot, ignore, origin}) {\n info('Finishing Git Configuration');\n\n const [remoteOriginResults] = await Promise.all([\n defineRemoteOrigin(projectRoot, origin),\n generateConfigFiles(projectRoot, ignore)\n ]);\n\n return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};\n}\n","import {promises as fs} from 'fs';\nimport wrap from 'word-wrap';\nimport mustache from 'mustache';\n// eslint-disable-next-line import/extensions\nimport spdxLicenseList from 'spdx-license-list/full.js';\nimport {info} from '@travi/cli-messages';\n\nexport default async function ({projectRoot, license, copyright, vcs}) {\n if (license) {\n info('Generating License');\n\n const licenseContent = spdxLicenseList[license].licenseText;\n\n await fs.writeFile(\n `${projectRoot}/LICENSE`,\n `${wrap(\n mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),\n {width: 80, indent: ''}\n )}\\n`\n );\n\n return {\n ...vcs && 'github' === vcs.host && {\n badges: {\n consumer: {\n license: {\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,\n text: `${license} license`,\n link: 'LICENSE'\n }\n }\n }\n }\n };\n }\n\n return {};\n}\n","export default function (hosts, options) {\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const {host: chosenHost, ...rest} = options;\n const host = lowercasedHosts[chosenHost];\n\n if (host) return host.scaffolder(rest);\n\n return {};\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {questionNames} from '../prompts/question-names';\n\nexport async function promptForDependencyUpdaterChoice(updaters, decisions) {\n return prompt([{\n name: questionNames.DEPENDENCY_UPDATER,\n type: 'list',\n message: 'Which dependency-update service do you want to manage this project?',\n choices: [...Object.keys(updaters), new Separator(), 'Other']\n }], decisions);\n}\n","import {questionNames} from '../prompts/question-names';\nimport {promptForDependencyUpdaterChoice} from './prompt';\n\nexport default async function (scaffolders, decisions, options) {\n if (!Object.keys(scaffolders).length) return undefined;\n\n const scaffolderDetails = scaffolders[\n (await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames.DEPENDENCY_UPDATER]\n ];\n\n if (scaffolderDetails) return scaffolderDetails.scaffolder(options);\n\n return undefined;\n}\n","import {questionsForBaseDetails} from '@form8ion/core';\nimport {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {\n return prompt([\n ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),\n {name: questionNames.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}\n ], decisions);\n}\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.func().arity(1));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required(),\n prompt: joi.func().required(),\n public: joi.bool(),\n private: joi.bool()\n}));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required()\n})).default({});\n","import joi from 'joi';\n\nexport const overridesSchema = joi.object({copyrightHolder: joi.string()});\n\nexport const decisionsSchema = joi.object();\n","import {validateOptions} from '@form8ion/core';\nimport joi from 'joi';\n\nimport languagePluginsSchema from './language/schema';\nimport vcsHostPluginsSchema from './vcs/host/schema';\nimport dependencyUpdaterPluginsSchema from './dependency-updater/schema';\nimport {decisionsSchema, overridesSchema} from './options-schemas';\n\nexport function validate(options) {\n return validateOptions(joi.object({\n languages: languagePluginsSchema,\n /**\n * @deprecated overrides should no longer be necessary. use decisions instead\n */\n overrides: overridesSchema,\n vcsHosts: vcsHostPluginsSchema,\n decisions: decisionsSchema,\n dependencyUpdaters: dependencyUpdaterPluginsSchema\n }), options) || {};\n}\n","import {resolve} from 'path';\nimport filedirname from 'filedirname';\n\nexport default function (fileName) {\n const [, __dirname] = filedirname();\n\n return resolve(__dirname, '..', 'templates', fileName);\n}\n","import {promises as fs} from 'node:fs';\n\nimport determinePathToTemplateFile from '../template-path';\n\nexport default function ({projectRoot}) {\n return fs.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);\n}\n","import deepmerge from 'deepmerge';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {reportResults} from '@form8ion/results-reporter';\nimport {info} from '@travi/cli-messages';\n\nimport execa from '../thirdparty-wrappers/execa';\nimport {scaffold as scaffoldLanguage, prompt as promptForLanguageDetails} from './language';\nimport scaffoldReadme from './readme';\nimport {initialize as initializeGit, scaffold as scaffoldGit} from './vcs/git';\nimport {scaffold as scaffoldLicense} from './license';\nimport {scaffold as scaffoldVcsHost} from './vcs/host';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder';\nimport {promptForBaseDetails} from './prompts/questions';\nimport {validate} from './options-validator';\nimport {questionNames} from './prompts/question-names';\nimport {scaffold as scaffoldEditorConfig} from './editorconfig';\n\nexport async function scaffold(options) {\n const projectRoot = process.cwd();\n const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);\n const {copyrightHolder} = overrides;\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [questionNames.GIT_REPO]: gitRepo,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const vcs = await initializeGit(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);\n\n const {[questionNames.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);\n\n const [license, language] = await Promise.all([\n scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),\n scaffoldLanguage(\n languages,\n projectLanguage,\n {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}\n )\n ]);\n\n const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n decisions,\n {projectRoot, vcs}\n );\n\n const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);\n const contributedTasks = contributors\n .map(contributor => contributor.nextSteps)\n .filter(Boolean)\n .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);\n\n const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {\n ...vcs,\n projectRoot,\n /**\n * @deprecated vcs-host plugins should no longer expect `projectType` to be provided.\n * will be removed with the next major version\n */\n projectType: projectLanguage,\n description,\n visibility,\n ...language && {\n homepage: language.projectDetails && language.projectDetails.homepage,\n tags: language.tags\n },\n nextSteps: contributedTasks\n });\n\n await Promise.all([\n scaffoldReadme({\n projectName,\n projectRoot,\n description,\n ...language && {documentation: language.documentation},\n badges: deepmerge.all([\n {\n contribution: {\n ...'Public' === visibility && {\n PRs: {\n text: 'PRs Welcome',\n link: 'https://makeapullrequest.com',\n img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'\n }\n }\n },\n status: {},\n consumer: {}\n },\n ...contributors.map(contributor => contributor.badges).filter(Boolean)\n ])\n }),\n scaffoldEditorConfig({projectRoot})\n ]);\n\n const gitResults = gitRepo && await scaffoldGit({\n projectRoot,\n ...language && {ignore: language.vcsIgnore},\n origin: vcsHostResults\n });\n\n if (language && language.verificationCommand) {\n info('Verifying the generated project');\n\n const subprocess = execa(language.verificationCommand, {shell: true});\n subprocess.stdout.pipe(process.stdout);\n await subprocess;\n }\n\n reportResults({\n nextSteps: [\n ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],\n ...contributedTasks\n ]\n });\n}\n","import deepmerge from 'deepmerge';\nimport {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\n\nexport default async function ({projectRoot, results, enhancers, vcs}) {\n const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});\n\n await liftReadme({projectRoot, results: deepmerge.all([results, enhancerResults])});\n\n return enhancerResults;\n}\n","import {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {questionNames as projectScaffolderQuestionNames} from './prompts/question-names';\n\nexport * from './scaffolder';\nexport {default as lift} from './lift';\nexport const questionNames = {\n ...coreQuestionNames,\n ...projectScaffolderQuestionNames\n};\n"],"names":["questionNames","scaffoldReadme","liftReadme","fs","scaffold","coreQuestionNames","initializeGit","scaffoldGit","projectScaffolderQuestionNames"],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@form8ion/project",
3
3
  "description": "opinionated scaffolder for new projects",
4
4
  "license": "MIT",
5
- "version": "16.0.1",
5
+ "version": "16.0.3",
6
6
  "engines": {
7
7
  "node": "^16.14.0 || >=18"
8
8
  },
@@ -62,7 +62,7 @@
62
62
  }
63
63
  },
64
64
  "dependencies": {
65
- "@form8ion/core": "^2.0.0",
65
+ "@form8ion/core": "^3.1.0",
66
66
  "@form8ion/execa-wrapper": "^1.0.0",
67
67
  "@form8ion/overridable-prompts": "^1.1.0",
68
68
  "@form8ion/readme": "2.0.1",
@@ -81,32 +81,32 @@
81
81
  },
82
82
  "devDependencies": {
83
83
  "@babel/register": "7.22.5",
84
- "@cucumber/cucumber": "9.1.2",
85
- "@form8ion/babel-preset": "1.6.104",
86
- "@form8ion/commitlint-config": "1.0.51",
87
- "@form8ion/eslint-config": "5.0.34",
84
+ "@cucumber/cucumber": "9.2.0",
85
+ "@form8ion/babel-preset": "1.6.106",
86
+ "@form8ion/commitlint-config": "1.0.52",
87
+ "@form8ion/eslint-config": "5.0.35",
88
88
  "@form8ion/eslint-config-cucumber": "1.4.1",
89
89
  "@form8ion/eslint-config-mocha": "2.0.3",
90
90
  "@form8ion/remark-lint-preset": "5.0.9",
91
+ "@rollup/plugin-node-resolve": "15.1.0",
91
92
  "@travi/any": "2.1.8",
92
93
  "c8": "8.0.0",
93
94
  "chai": "4.3.7",
94
- "chai-as-promised": "7.1.1",
95
95
  "cross-env": "7.0.3",
96
96
  "cz-conventional-changelog": "3.3.0",
97
97
  "gherkin-lint": "4.2.2",
98
98
  "husky": "8.0.3",
99
99
  "jest-when": "3.5.2",
100
- "lockfile-lint": "4.10.5",
100
+ "lockfile-lint": "4.10.6",
101
101
  "ls-engines": "0.9.0",
102
- "make-dir": "3.1.0",
102
+ "make-dir": "4.0.0",
103
103
  "mdast-util-from-markdown": "1.3.1",
104
104
  "mdast-util-heading-range": "3.1.1",
105
105
  "mdast-zone": "5.1.1",
106
106
  "mocha": "10.2.0",
107
107
  "mock-fs": "5.2.0",
108
108
  "npm-run-all": "4.1.5",
109
- "publint": "0.1.12",
109
+ "publint": "0.1.16",
110
110
  "remark-cli": "11.0.0",
111
111
  "remark-toc": "8.0.1",
112
112
  "remark-usage": "10.0.1",
@@ -115,7 +115,7 @@
115
115
  "rollup-plugin-auto-external": "2.0.0",
116
116
  "sinon": "15.2.0",
117
117
  "testdouble": "3.18.0",
118
- "unist-util-find": "1.0.3",
119
- "vitest": "0.32.2"
118
+ "unist-util-find": "2.0.0",
119
+ "vitest": "0.32.4"
120
120
  }
121
121
  }