@form8ion/project 16.0.2 → 17.0.0-beta.1

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
@@ -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`
@@ -197,21 +196,17 @@ __object__:
197
196
  * `host`: __string__ host name
198
197
  * `name`: __string__ repository name. equal to `projectName`
199
198
  * `owner`: __string__ account name on the host service for the repository
200
- owner. defaults to `$ git config github.user` or the [overridden value](#githubaccount)
199
+ owner. defaults to `$ git config github.user`
201
200
 
202
- #### `overrides` (_optional_)
201
+ #### `overrides` (_optional_) (_deprecated_)
202
+
203
+ use `decisions` instead of `overrides`
203
204
 
204
205
  ##### `copyrightHolder`
205
206
 
206
207
  __string__ enables setting the value of the prompt default for the copyright
207
208
  holder. if not provided, the default will be empty.
208
209
 
209
- ##### `githubAccount`
210
-
211
- __string__ enables setting the GitHub account for the prompt default to define
212
- the owner of scaffolded repositories. if not provided, the default will use the
213
- result of `$ git config github.user`
214
-
215
210
  ## Contributing
216
211
 
217
212
  <!--contribution-badges start -->
package/lib/index.js CHANGED
@@ -1,55 +1,20 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var core = require('@form8ion/core');
6
- var deepmerge = require('deepmerge');
7
- var resultsReporter = require('@form8ion/results-reporter');
8
- var cliMessages = require('@travi/cli-messages');
9
- var execa = require('@form8ion/execa-wrapper');
10
- var overridablePrompts = require('@form8ion/overridable-prompts');
11
- var readme = require('@form8ion/readme');
12
- var node_fs = require('node:fs');
13
- var simpleGit = require('simple-git');
14
- var hostedGitInfo = require('hosted-git-info');
15
- var fs = require('fs');
16
- var wrap = require('word-wrap');
17
- var mustache = require('mustache');
18
- var spdxLicenseList = require('spdx-license-list/full.js');
19
- var joi = require('joi');
20
- var hoek = require('@hapi/hoek');
21
- var path = require('path');
22
- var filedirname = require('filedirname');
23
-
24
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
-
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 deepmerge__default = /*#__PURE__*/_interopDefaultLegacy(deepmerge);
45
- var execa__default = /*#__PURE__*/_interopDefaultLegacy(execa);
46
- var hostedGitInfo__default = /*#__PURE__*/_interopDefaultLegacy(hostedGitInfo);
47
- var wrap__default = /*#__PURE__*/_interopDefaultLegacy(wrap);
48
- var mustache__default = /*#__PURE__*/_interopDefaultLegacy(mustache);
49
- var spdxLicenseList__default = /*#__PURE__*/_interopDefaultLegacy(spdxLicenseList);
50
- var joi__default = /*#__PURE__*/_interopDefaultLegacy(joi);
51
- var hoek__namespace = /*#__PURE__*/_interopNamespace(hoek);
52
- var filedirname__default = /*#__PURE__*/_interopDefaultLegacy(filedirname);
1
+ import { questionsForBaseDetails, validateOptions, questionNames as questionNames$2, applyEnhancers } from '@form8ion/core';
2
+ import deepmerge from 'deepmerge';
3
+ import execa from '@form8ion/execa-wrapper';
4
+ import { reportResults } from '@form8ion/results-reporter';
5
+ import { info, warn } from '@travi/cli-messages';
6
+ import { prompt, Separator } from '@form8ion/overridable-prompts';
7
+ import { scaffold as scaffold$2, lift as lift$1 } from '@form8ion/readme';
8
+ import { promises } from 'node:fs';
9
+ import { simpleGit } from 'simple-git';
10
+ import hostedGitInfo from 'hosted-git-info';
11
+ import { promises as promises$1 } from 'fs';
12
+ import wrap from 'word-wrap';
13
+ import mustache from 'mustache';
14
+ import spdxLicenseList from 'spdx-license-list/full.js';
15
+ import joi from 'joi';
16
+ import { resolve } from 'path';
17
+ import filedirname from 'filedirname';
53
18
 
54
19
  const questionNames$1 = {
55
20
  GIT_REPO: 'gitRepo',
@@ -68,22 +33,22 @@ function scaffoldLanguage (scaffolders, chosenLanguage, options) {
68
33
  }
69
34
 
70
35
  function promptForLanguageDetails (languages, decisions) {
71
- return overridablePrompts.prompt([{
36
+ return prompt([{
72
37
  name: questionNames$1.PROJECT_LANGUAGE,
73
38
  type: 'list',
74
39
  message: 'What type of project is this?',
75
- choices: [...Object.keys(languages), new overridablePrompts.Separator(), 'Other']
40
+ choices: [...Object.keys(languages), new Separator(), 'Other']
76
41
  }], decisions);
77
42
  }
78
43
 
79
44
  function scaffoldReadme$1 ({projectRoot, projectName, description}) {
80
- return readme.scaffold({projectRoot, projectName, description});
45
+ return scaffold$2({projectRoot, projectName, description});
81
46
  }
82
47
 
83
48
  async function scaffoldReadme ({projectName, projectRoot, description, badges, documentation}) {
84
49
  await scaffoldReadme$1({projectRoot, projectName, description});
85
50
 
86
- return readme.lift({projectRoot, results: {badges, documentation}});
51
+ return lift$1({projectRoot, results: {badges, documentation}});
87
52
  }
88
53
 
89
54
  function filterChoicesByVisibility(choices, visibility) {
@@ -91,13 +56,13 @@ function filterChoicesByVisibility(choices, visibility) {
91
56
  ...Object.entries(choices)
92
57
  .filter(([, choice]) => choice[visibility.toLowerCase()])
93
58
  .reduce((acc, [name]) => ([...acc, name]), []),
94
- new overridablePrompts.Separator(),
59
+ new Separator(),
95
60
  'Other'
96
61
  ];
97
62
  }
98
63
 
99
64
  async function promptForVcsHostDetails (hosts, visibility, decisions) {
100
- const answers = await overridablePrompts.prompt([{
65
+ const answers = await prompt([{
101
66
  name: questionNames$1.REPO_HOST,
102
67
  type: 'list',
103
68
  message: 'Where will the repository be hosted?',
@@ -111,14 +76,14 @@ async function promptForVcsHostDetails (hosts, visibility, decisions) {
111
76
  function createIgnoreFile(projectRoot, ignore) {
112
77
  const {directories, files} = ignore;
113
78
 
114
- return node_fs.promises.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\n')}\n\n${files.join('\n')}`);
79
+ return promises.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\n')}\n\n${files.join('\n')}`);
115
80
  }
116
81
 
117
82
  function generateConfigFiles(projectRoot, ignore) {
118
- cliMessages.info('Generating Git config files', {level: 'secondary'});
83
+ info('Generating Git config files', {level: 'secondary'});
119
84
 
120
85
  return Promise.all([
121
- node_fs.promises.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),
86
+ promises.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),
122
87
  ignore ? createIgnoreFile(projectRoot, ignore) : undefined
123
88
  ].filter(Boolean));
124
89
  }
@@ -136,17 +101,17 @@ async function getExistingRemotes(git) {
136
101
  }
137
102
 
138
103
  async function defineRemoteOrigin(projectRoot, origin) {
139
- const git = simpleGit.simpleGit(projectRoot);
104
+ const git = simpleGit(projectRoot);
140
105
  const existingRemotes = await getExistingRemotes(git);
141
106
 
142
107
  if (existingRemotes.includes('origin')) {
143
- cliMessages.warn('The `origin` remote is already defined for this repository');
108
+ warn('The `origin` remote is already defined for this repository');
144
109
 
145
110
  return {nextSteps: []};
146
111
  }
147
112
 
148
113
  if (origin.sshUrl) {
149
- cliMessages.info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});
114
+ info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});
150
115
 
151
116
  await git.addRemote('origin', origin.sshUrl);
152
117
 
@@ -160,7 +125,7 @@ async function defineRemoteOrigin(projectRoot, origin) {
160
125
  return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};
161
126
  }
162
127
 
163
- cliMessages.warn('URL not available to configure remote `origin`');
128
+ warn('URL not available to configure remote `origin`');
164
129
 
165
130
  return {nextSteps: []};
166
131
  }
@@ -174,17 +139,17 @@ async function initialize(
174
139
  decisions
175
140
  ) {
176
141
  if (gitRepoShouldBeInitialized) {
177
- const git = simpleGit.simpleGit(projectRoot);
142
+ const git = simpleGit(projectRoot);
178
143
  if (await git.checkIsRepo('root')) {
179
- cliMessages.info('Git repository already exists');
144
+ info('Git repository already exists');
180
145
 
181
146
  const remoteOrigin = await git.remote(['get-url', 'origin']);
182
- const {user, project, type} = hostedGitInfo__default["default"].fromUrl(remoteOrigin);
147
+ const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);
183
148
 
184
149
  return {owner: user, name: project, host: type};
185
150
  }
186
151
 
187
- cliMessages.info('Initializing Git Repository');
152
+ info('Initializing Git Repository');
188
153
 
189
154
  const [answers] = await Promise.all([
190
155
  promptForVcsHostDetails(vcsHosts, visibility, decisions),
@@ -202,7 +167,7 @@ async function initialize(
202
167
  }
203
168
 
204
169
  async function scaffold$1({projectRoot, ignore, origin}) {
205
- cliMessages.info('Finishing Git Configuration');
170
+ info('Finishing Git Configuration');
206
171
 
207
172
  const [remoteOriginResults] = await Promise.all([
208
173
  defineRemoteOrigin(projectRoot, origin),
@@ -214,14 +179,14 @@ async function scaffold$1({projectRoot, ignore, origin}) {
214
179
 
215
180
  async function scaffoldLicense ({projectRoot, license, copyright, vcs}) {
216
181
  if (license) {
217
- cliMessages.info('Generating License');
182
+ info('Generating License');
218
183
 
219
- const licenseContent = spdxLicenseList__default["default"][license].licenseText;
184
+ const licenseContent = spdxLicenseList[license].licenseText;
220
185
 
221
- await fs.promises.writeFile(
186
+ await promises$1.writeFile(
222
187
  `${projectRoot}/LICENSE`,
223
- `${wrap__default["default"](
224
- mustache__default["default"].render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),
188
+ `${wrap(
189
+ mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),
225
190
  {width: 80, indent: ''}
226
191
  )}\n`
227
192
  );
@@ -257,11 +222,11 @@ function scaffoldVcsHost (hosts, options) {
257
222
  }
258
223
 
259
224
  async function promptForDependencyUpdaterChoice(updaters, decisions) {
260
- return overridablePrompts.prompt([{
225
+ return prompt([{
261
226
  name: questionNames$1.DEPENDENCY_UPDATER,
262
227
  type: 'list',
263
228
  message: 'Which dependency-update service do you want to manage this project?',
264
- choices: [...Object.keys(updaters), new overridablePrompts.Separator(), 'Other']
229
+ choices: [...Object.keys(updaters), new Separator(), 'Other']
265
230
  }], decisions);
266
231
  }
267
232
 
@@ -278,44 +243,68 @@ async function scaffoldDependencyUpdater (scaffolders, decisions, options) {
278
243
  }
279
244
 
280
245
  function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
281
- return overridablePrompts.prompt([
282
- ...core.questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
246
+ return prompt([
247
+ ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
283
248
  {name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
284
249
  ], decisions);
285
250
  }
286
251
 
287
- var languagePluginsSchema = joi__default["default"].object().pattern(/^/, joi__default["default"].func().arity(1));
252
+ var languagePluginsSchema = joi.object().pattern(/^/, joi.func().arity(1));
288
253
 
289
- function validate(options) {
290
- const schema = joi__default["default"].object({
291
- languages: languagePluginsSchema,
292
- overrides: joi__default["default"].object({copyrightHolder: joi__default["default"].string()}),
293
- vcsHosts: joi__default["default"].object().pattern(/^/, joi__default["default"].object({
294
- scaffolder: joi__default["default"].func().arity(1).required(),
295
- prompt: joi__default["default"].func().required(),
296
- public: joi__default["default"].boolean(),
297
- private: joi__default["default"].boolean()
298
- })),
299
- decisions: joi__default["default"].object(),
300
- dependencyUpdaters: joi__default["default"].object().pattern(/^/, joi__default["default"].object({
301
- scaffolder: joi__default["default"].func().arity(1).required()
302
- })).default({})
303
- });
304
- const validated = schema.validate(options);
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()});
305
266
 
306
- hoek__namespace.assert(!validated.error, validated.error);
267
+ const decisionsSchema = joi.object();
307
268
 
308
- return validated.value || {};
269
+ function 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) || {};
309
280
  }
310
281
 
311
282
  function determinePathToTemplateFile (fileName) {
312
- const [, __dirname] = filedirname__default["default"]();
283
+ const [, __dirname] = filedirname();
313
284
 
314
- return path.resolve(__dirname, '..', 'templates', fileName);
285
+ return resolve(__dirname, '..', 'templates', fileName);
315
286
  }
316
287
 
317
288
  function scaffoldEditorConfig ({projectRoot}) {
318
- return node_fs.promises.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);
289
+ return promises.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);
290
+ }
291
+
292
+ function scaffoldContributing ({visibility}) {
293
+ if ('Public' === visibility) {
294
+ return {
295
+ badges: {
296
+ contribution: {
297
+ PRs: {
298
+ text: 'PRs Welcome',
299
+ link: 'https://makeapullrequest.com',
300
+ img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'
301
+ }
302
+ }
303
+ }
304
+ };
305
+ }
306
+
307
+ return {};
319
308
  }
320
309
 
321
310
  async function scaffold(options) {
@@ -324,13 +313,13 @@ async function scaffold(options) {
324
313
  const {copyrightHolder} = overrides;
325
314
 
326
315
  const {
327
- [core.questionNames.PROJECT_NAME]: projectName,
328
- [core.questionNames.LICENSE]: chosenLicense,
329
- [core.questionNames.VISIBILITY]: visibility,
330
- [core.questionNames.DESCRIPTION]: description,
316
+ [questionNames$2.PROJECT_NAME]: projectName,
317
+ [questionNames$2.LICENSE]: chosenLicense,
318
+ [questionNames$2.VISIBILITY]: visibility,
319
+ [questionNames$2.DESCRIPTION]: description,
331
320
  [questionNames$1.GIT_REPO]: gitRepo,
332
- [core.questionNames.COPYRIGHT_YEAR]: copyrightYear,
333
- [core.questionNames.COPYRIGHT_HOLDER]: copyHolder
321
+ [questionNames$2.COPYRIGHT_YEAR]: copyrightYear,
322
+ [questionNames$2.COPYRIGHT_HOLDER]: copyHolder
334
323
  } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);
335
324
  const copyright = {year: copyrightYear, holder: copyHolder};
336
325
 
@@ -338,13 +327,14 @@ async function scaffold(options) {
338
327
 
339
328
  const {[questionNames$1.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);
340
329
 
341
- const [license, language] = await Promise.all([
330
+ const [license, language, contributing] = await Promise.all([
342
331
  scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),
343
332
  scaffoldLanguage(
344
333
  languages,
345
334
  projectLanguage,
346
335
  {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}
347
- )
336
+ ),
337
+ scaffoldContributing({visibility})
348
338
  ]);
349
339
 
350
340
  const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(
@@ -353,7 +343,7 @@ async function scaffold(options) {
353
343
  {projectRoot, vcs}
354
344
  );
355
345
 
356
- const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);
346
+ const contributors = [license, language, dependencyUpdaterResults, contributing].filter(Boolean);
357
347
  const contributedTasks = contributors
358
348
  .map(contributor => contributor.nextSteps)
359
349
  .filter(Boolean)
@@ -382,20 +372,8 @@ async function scaffold(options) {
382
372
  projectRoot,
383
373
  description,
384
374
  ...language && {documentation: language.documentation},
385
- badges: deepmerge__default["default"].all([
386
- {
387
- contribution: {
388
- ...'Public' === visibility && {
389
- PRs: {
390
- text: 'PRs Welcome',
391
- link: 'http://makeapullrequest.com',
392
- img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'
393
- }
394
- }
395
- },
396
- status: {},
397
- consumer: {}
398
- },
375
+ badges: deepmerge.all([
376
+ {contribution: {}, status: {}, consumer: {}},
399
377
  ...contributors.map(contributor => contributor.badges).filter(Boolean)
400
378
  ])
401
379
  }),
@@ -409,14 +387,14 @@ async function scaffold(options) {
409
387
  });
410
388
 
411
389
  if (language && language.verificationCommand) {
412
- cliMessages.info('Verifying the generated project');
390
+ info('Verifying the generated project');
413
391
 
414
- const subprocess = execa__default["default"](language.verificationCommand, {shell: true});
392
+ const subprocess = execa(language.verificationCommand, {shell: true});
415
393
  subprocess.stdout.pipe(process.stdout);
416
394
  await subprocess;
417
395
  }
418
396
 
419
- resultsReporter.reportResults({
397
+ reportResults({
420
398
  nextSteps: [
421
399
  ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],
422
400
  ...contributedTasks
@@ -425,19 +403,17 @@ async function scaffold(options) {
425
403
  }
426
404
 
427
405
  async function lift ({projectRoot, results, enhancers, vcs}) {
428
- const enhancerResults = await core.applyEnhancers({results, enhancers, options: {projectRoot, vcs}});
406
+ const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});
429
407
 
430
- await readme.lift({projectRoot, results: deepmerge__default["default"].all([results, enhancerResults])});
408
+ await lift$1({projectRoot, results: deepmerge.all([results, enhancerResults])});
431
409
 
432
410
  return enhancerResults;
433
411
  }
434
412
 
435
413
  const questionNames = {
436
- ...core.questionNames,
414
+ ...questionNames$2,
437
415
  ...questionNames$1
438
416
  };
439
417
 
440
- exports.lift = lift;
441
- exports.questionNames = questionNames;
442
- exports.scaffold = scaffold;
418
+ export { lift, questionNames, scaffold };
443
419
  //# sourceMappingURL=index.js.map
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/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/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';\nimport * as hoek from '@hapi/hoek';\n\nimport languagePluginsSchema from './language/schema';\n\nexport function validate(options) {\n const schema = joi.object({\n languages: languagePluginsSchema,\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 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: '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 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","hoek","filedirname","resolve","coreQuestionNames","initializeGit","deepmerge","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/contributing/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","export default function ({visibility}) {\n if ('Public' === visibility) {\n return {\n badges: {\n contribution: {\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 };\n }\n\n return {};\n}\n","import deepmerge from 'deepmerge';\nimport execa from '@form8ion/execa-wrapper';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {reportResults} from '@form8ion/results-reporter';\nimport {info} from '@travi/cli-messages';\n\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';\nimport {scaffold as scaffoldContributing} from './contributing';\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, contributing] = 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 scaffoldContributing({visibility})\n ]);\n\n const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n decisions,\n {projectRoot, vcs}\n );\n\n const contributors = [license, language, dependencyUpdaterResults, contributing].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 {contribution: {}, status: {}, consumer: {}},\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":";;;;;;;;;;;;;;;;;;AAAO,MAAMA,eAAa,GAAG;AAC7B,EAAE,QAAQ,EAAE,SAAS;AACrB,EAAE,SAAS,EAAE,UAAU;AACvB,EAAE,UAAU,EAAE,WAAW;AACzB,EAAE,gBAAgB,EAAE,iBAAiB;AACrC,EAAE,kBAAkB,EAAE,mBAAmB;AACzC,CAAC;;ACNc,yBAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE;AAC/D,EAAE,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AACjD;AACA,EAAE,IAAI,UAAU,EAAE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C;AACA,EAAE,OAAO,SAAS,CAAC;AACnB;;ACFe,iCAAQ,EAAE,SAAS,EAAE,SAAS,EAAE;AAC/C,EAAE,OAAO,MAAM,CAAC,CAAC;AACjB,IAAI,IAAI,EAAEA,eAAa,CAAC,gBAAgB;AACxC,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,+BAA+B;AAC5C,IAAI,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,SAAS,EAAE,EAAE,OAAO,CAAC;AAClE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;AACjB;;ACTe,yBAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE;AAClE,EAAE,OAAOC,UAAc,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AACjE;;ACAe,6BAAc,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE;AAC/F,EAAE,MAAMA,gBAAc,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAChE;AACA,EAAE,OAAOC,MAAU,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AACrE;;ACQO,SAAS,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE;AAC/D,EAAE,OAAO;AACT,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;AAC9B,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/D,OAAO,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AACpD,IAAI,IAAI,SAAS,EAAE;AACnB,IAAI,OAAO;AACX,GAAG,CAAC;AACJ;;ACnBe,sCAAc,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE;AAC7D,EAAE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,CAAC;AAChC,IAAI,IAAI,EAAEF,eAAa,CAAC,SAAS;AACjC,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,sCAAsC;AACnD,IAAI,OAAO,EAAE,yBAAyB,CAAC,KAAK,EAAE,UAAU,CAAC;AACzD,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;AACjB,EAAE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAACA,eAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AACvD;AACA,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjE;;ACNA,SAAS,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE;AAC/C,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC;AACtC;AACA,EAAE,OAAOG,QAAE,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvG,CAAC;AACD;AACA,SAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE;AAClD,EAAE,IAAI,CAAC,6BAA6B,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAC5D;AACA,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;AACrB,IAAIA,QAAE,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;AAChE,IAAI,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,SAAS;AAC9D,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACrB,CAAC;AACD;AACA,eAAe,kBAAkB,CAAC,GAAG,EAAE;AACvC,EAAE,IAAI;AACN,IAAI,OAAO,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;AAClC,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,IAAI,IAAI,kDAAkD,KAAK,CAAC,CAAC,OAAO,EAAE;AAC1E,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL;AACA,IAAI,MAAM,CAAC,CAAC;AACZ,GAAG;AACH,CAAC;AACD;AACA,eAAe,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE;AACvD,EAAE,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AACrC,EAAE,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACxD;AACA,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC1C,IAAI,IAAI,CAAC,4DAA4D,CAAC,CAAC;AACvE;AACA,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE;AACrB,IAAI,IAAI,CAAC,CAAC,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAC5E;AACA,IAAI,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,6DAA6D,CAAC,CAAC,CAAC,CAAC;AACnG,GAAG;AACH;AACA,EAAE,IAAI,CAAC,gDAAgD,CAAC,CAAC;AACzD;AACA,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC;AACD;AACO,eAAe,UAAU;AAChC,EAAE,0BAA0B;AAC5B,EAAE,WAAW;AACb,EAAE,WAAW;AACb,EAAE,QAAQ;AACV,EAAE,UAAU;AACZ,EAAE,SAAS;AACX,EAAE;AACF,EAAE,IAAI,0BAA0B,EAAE;AAClC,IAAI,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AACvC,IAAI,IAAI,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AACvC,MAAM,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAC5C;AACA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,MAAM,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACxE;AACA,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtD,KAAK;AACL;AACA,IAAI,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACxC;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACxC,MAAM,uBAAuB,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;AAC9D,MAAM,GAAG,CAAC,IAAI,EAAE;AAChB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO;AACX,MAAM,IAAI,EAAE,OAAO,CAACH,eAAa,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;AAC1D,MAAM,KAAK,EAAE,OAAO,CAACA,eAAa,CAAC,UAAU,CAAC;AAC9C,MAAM,IAAI,EAAE,WAAW;AACvB,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;AACO,eAAeI,UAAQ,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;AAC9D,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACtC;AACA,EAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AAClD,IAAI,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC;AAC3C,IAAI,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC;AAC5C,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,yBAAyB,CAAC,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/F;;ACxGe,8BAAc,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE;AACvE,EAAE,IAAI,OAAO,EAAE;AACf,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC/B;AACA,IAAI,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC;AAChE;AACA,IAAI,MAAMD,UAAE,CAAC,SAAS;AACtB,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC;AAC9B,MAAM,CAAC,EAAE,IAAI;AACb,QAAQ,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,mBAAmB,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACtH,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC;AACX,KAAK,CAAC;AACN;AACA,IAAI,OAAO;AACX,MAAM,GAAG,GAAG,IAAI,QAAQ,KAAK,GAAG,CAAC,IAAI,IAAI;AACzC,QAAQ,MAAM,EAAE;AAChB,UAAU,QAAQ,EAAE;AACpB,YAAY,OAAO,EAAE;AACrB,cAAc,GAAG,EAAE,CAAC,sCAAsC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACvF,cAAc,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC;AACxC,cAAc,IAAI,EAAE,SAAS;AAC7B,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,OAAO,EAAE,CAAC;AACZ;;ACrCe,wBAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;AACzC,EAAE,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW;AAC5C,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AACjF,GAAG,CAAC;AACJ,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;AAC9C,EAAE,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;AAC3C;AACA,EAAE,IAAI,IAAI,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC;AACA,EAAE,OAAO,EAAE,CAAC;AACZ;;ACPO,eAAe,gCAAgC,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC5E,EAAE,OAAO,MAAM,CAAC,CAAC;AACjB,IAAI,IAAI,EAAEH,eAAa,CAAC,kBAAkB;AAC1C,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,OAAO,EAAE,qEAAqE;AAClF,IAAI,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,SAAS,EAAE,EAAE,OAAO,CAAC;AACjE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;AACjB;;ACPe,wCAAc,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE;AAChE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC;AACzD;AACA,EAAE,MAAM,iBAAiB,GAAG,WAAW;AACvC,IAAI,CAAC,MAAM,gCAAgC,CAAC,WAAW,EAAE,SAAS,CAAC,EAAEA,eAAa,CAAC,kBAAkB,CAAC;AACtG,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,iBAAiB,EAAE,OAAO,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACtE;AACA,EAAE,OAAO,SAAS,CAAC;AACnB;;ACRO,SAAS,oBAAoB,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE;AAC9E,EAAE,OAAO,MAAM,CAAC;AAChB,IAAI,GAAG,uBAAuB,CAAC,SAAS,EAAE,WAAW,EAAE,eAAe,CAAC;AACvE,IAAI,CAAC,IAAI,EAAEA,eAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,yCAAyC,CAAC;AACtH,GAAG,EAAE,SAAS,CAAC,CAAC;AAChB;;ACRA,4BAAe,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;ACA7D,2BAAe,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;AACpD,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC5C,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;AAC/B,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE;AACpB,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE;AACrB,CAAC,CAAC,CAAC;;ACLH,qCAAe,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;AACpD,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC5C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;;ACFR,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3E;AACO,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE;;ACIpC,SAAS,QAAQ,CAAC,OAAO,EAAE;AAClC,EAAE,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,IAAI,SAAS,EAAE,qBAAqB;AACpC;AACA;AACA;AACA,IAAI,SAAS,EAAE,eAAe;AAC9B,IAAI,QAAQ,EAAE,oBAAoB;AAClC,IAAI,SAAS,EAAE,eAAe;AAC9B,IAAI,kBAAkB,EAAE,8BAA8B;AACtD,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACrB;;AChBe,oCAAQ,EAAE,QAAQ,EAAE;AACnC,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,WAAW,EAAE,CAAC;AACtC;AACA,EAAE,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACzD;;ACHe,6BAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;AACxC,EAAE,OAAOG,QAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;AACtG;;ACNe,6BAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;AACvC,EAAE,IAAI,QAAQ,KAAK,UAAU,EAAE;AAC/B,IAAI,OAAO;AACX,MAAM,MAAM,EAAE;AACd,QAAQ,YAAY,EAAE;AACtB,UAAU,GAAG,EAAE;AACf,YAAY,IAAI,EAAE,aAAa;AAC/B,YAAY,IAAI,EAAE,8BAA8B;AAChD,YAAY,GAAG,EAAE,0DAA0D;AAC3E,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,OAAO,EAAE,CAAC;AACZ;;ACEO,eAAe,QAAQ,CAAC,OAAO,EAAE;AACxC,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AACpC,EAAE,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3G,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;AACtC;AACA,EAAE,MAAM;AACR,IAAI,CAACE,eAAiB,CAAC,YAAY,GAAG,WAAW;AACjD,IAAI,CAACA,eAAiB,CAAC,OAAO,GAAG,aAAa;AAC9C,IAAI,CAACA,eAAiB,CAAC,UAAU,GAAG,UAAU;AAC9C,IAAI,CAACA,eAAiB,CAAC,WAAW,GAAG,WAAW;AAChD,IAAI,CAACL,eAAa,CAAC,QAAQ,GAAG,OAAO;AACrC,IAAI,CAACK,eAAiB,CAAC,cAAc,GAAG,aAAa;AACrD,IAAI,CAACA,eAAiB,CAAC,gBAAgB,GAAG,UAAU;AACpD,GAAG,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AAC1E,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAC9D;AACA,EAAE,MAAM,GAAG,GAAG,MAAMC,UAAa,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACtG;AACA,EAAE,MAAM,CAAC,CAACN,eAAa,CAAC,gBAAgB,GAAG,eAAe,CAAC,GAAG,MAAM,wBAAwB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnH;AACA,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AAC9D,IAAI,eAAe,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC1E,IAAI,gBAAgB;AACpB,MAAM,SAAS;AACf,MAAM,eAAe;AACrB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,IAAI,YAAY,EAAE,WAAW,CAAC;AACtG,KAAK;AACL,IAAI,oBAAoB,CAAC,CAAC,UAAU,CAAC,CAAC;AACtC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,wBAAwB,GAAG,GAAG,IAAI,MAAM,yBAAyB;AACzE,IAAI,kBAAkB;AACtB,IAAI,SAAS;AACb,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;AACtB,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnG,EAAE,MAAM,gBAAgB,GAAG,YAAY;AACvC,KAAK,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC;AAC9C,KAAK,MAAM,CAAC,OAAO,CAAC;AACpB,KAAK,MAAM,CAAC,CAAC,GAAG,EAAE,oBAAoB,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpF;AACA,EAAE,MAAM,cAAc,GAAG,GAAG,IAAI,MAAM,eAAe,CAAC,QAAQ,EAAE;AAChE,IAAI,GAAG,GAAG;AACV,IAAI,WAAW;AACf;AACA;AACA;AACA;AACA,IAAI,WAAW,EAAE,eAAe;AAChC,IAAI,WAAW;AACf,IAAI,UAAU;AACd,IAAI,GAAG,QAAQ,IAAI;AACnB,MAAM,QAAQ,EAAE,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ;AAC3E,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI;AACzB,KAAK;AACL,IAAI,SAAS,EAAE,gBAAgB;AAC/B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;AACpB,IAAI,cAAc,CAAC;AACnB,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,GAAG,QAAQ,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC;AAC5D,MAAM,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;AAC5B,QAAQ,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;AACpD,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9E,OAAO,CAAC;AACR,KAAK,CAAC;AACN,IAAI,oBAAoB,CAAC,CAAC,WAAW,CAAC,CAAC;AACvC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,UAAU,GAAG,OAAO,IAAI,MAAMO,UAAW,CAAC;AAClD,IAAI,WAAW;AACf,IAAI,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;AAC/C,IAAI,MAAM,EAAE,cAAc;AAC1B,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,QAAQ,IAAI,QAAQ,CAAC,mBAAmB,EAAE;AAChD,IAAI,IAAI,CAAC,iCAAiC,CAAC,CAAC;AAC5C;AACA,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1E,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,IAAI,MAAM,UAAU,CAAC;AACrB,GAAG;AACH;AACA,EAAE,aAAa,CAAC;AAChB,IAAI,SAAS,EAAE;AACf,MAAM,GAAG,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,GAAG,EAAE;AACzE,MAAM,GAAG,gBAAgB;AACzB,KAAK;AACL,GAAG,CAAC,CAAC;AACL;;AC3Ge,mBAAc,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE;AACvE,EAAE,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClG;AACA,EAAE,MAAML,MAAU,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF;AACA,EAAE,OAAO,eAAe,CAAC;AACzB;;ACLY,MAAC,aAAa,GAAG;AAC7B,EAAE,GAAGG,eAAiB;AACtB,EAAE,GAAGG,eAA8B;AACnC;;;;"}
package/package.json CHANGED
@@ -2,7 +2,8 @@
2
2
  "name": "@form8ion/project",
3
3
  "description": "opinionated scaffolder for new projects",
4
4
  "license": "MIT",
5
- "version": "16.0.2",
5
+ "version": "17.0.0-beta.1",
6
+ "type": "module",
6
7
  "engines": {
7
8
  "node": "^16.14.0 || >=18"
8
9
  },
@@ -16,12 +17,8 @@
16
17
  "funding": {
17
18
  "url": "https://github.com/sponsors/travi"
18
19
  },
19
- "exports": {
20
- "require": "./lib/index.js",
21
- "import": "./lib/index.mjs"
22
- },
23
- "main": "lib/index.js",
24
- "module": "lib/index.mjs",
20
+ "exports": "./lib/index.js",
21
+ "main": "./lib/index.js",
25
22
  "scripts": {
26
23
  "clean": "rimraf lib/",
27
24
  "lint:js": "eslint . --cache",
@@ -32,9 +29,7 @@
32
29
  "lint:peer": "npm ls >/dev/null",
33
30
  "lint:publish": "publint",
34
31
  "test": "npm-run-all --print-label build --parallel lint:* --parallel test:*",
35
- "test:unit:base": "npm-run-all --print-label build --parallel test:unit:vitest test:unit:mocha",
36
- "test:unit:mocha": "mocha 'src/**/*-test.js'",
37
- "test:unit:vitest": "DEBUG=any vitest run",
32
+ "test:unit:base": "DEBUG=any vitest run",
38
33
  "test:unit": "cross-env NODE_ENV=test c8 run-s test:unit:base",
39
34
  "test:integration:base": "NODE_OPTIONS=\"--loader=testdouble --enable-source-maps\" cucumber-js test/integration",
40
35
  "test:integration:wip": "run-s 'test:integration:base -- --profile wip'",
@@ -80,9 +75,7 @@
80
75
  "write-yaml": "1.0.0"
81
76
  },
82
77
  "devDependencies": {
83
- "@babel/register": "7.22.5",
84
78
  "@cucumber/cucumber": "9.2.0",
85
- "@form8ion/babel-preset": "1.6.105",
86
79
  "@form8ion/commitlint-config": "1.0.52",
87
80
  "@form8ion/eslint-config": "5.0.35",
88
81
  "@form8ion/eslint-config-cucumber": "1.4.1",
@@ -101,9 +94,8 @@
101
94
  "ls-engines": "0.9.0",
102
95
  "make-dir": "4.0.0",
103
96
  "mdast-util-from-markdown": "1.3.1",
104
- "mdast-util-heading-range": "3.1.1",
97
+ "mdast-util-heading-range": "4.0.0",
105
98
  "mdast-zone": "5.1.1",
106
- "mocha": "10.2.0",
107
99
  "mock-fs": "5.2.0",
108
100
  "npm-run-all": "4.1.5",
109
101
  "publint": "0.1.16",
@@ -116,6 +108,6 @@
116
108
  "sinon": "15.2.0",
117
109
  "testdouble": "3.18.0",
118
110
  "unist-util-find": "2.0.0",
119
- "vitest": "0.32.4"
111
+ "vitest": "0.33.0"
120
112
  }
121
113
  }
package/lib/index.mjs DELETED
@@ -1,407 +0,0 @@
1
- import { questionsForBaseDetails, questionNames as questionNames$2, applyEnhancers } from '@form8ion/core';
2
- import deepmerge from 'deepmerge';
3
- import { reportResults } from '@form8ion/results-reporter';
4
- import { info, warn } from '@travi/cli-messages';
5
- import execa from '@form8ion/execa-wrapper';
6
- import { prompt, Separator } from '@form8ion/overridable-prompts';
7
- import { scaffold as scaffold$2, lift as lift$1 } from '@form8ion/readme';
8
- import { promises } from 'node:fs';
9
- import { simpleGit } from 'simple-git';
10
- import hostedGitInfo from 'hosted-git-info';
11
- import { promises as promises$1 } from 'fs';
12
- import wrap from 'word-wrap';
13
- import mustache from 'mustache';
14
- import spdxLicenseList from 'spdx-license-list/full.js';
15
- import joi from 'joi';
16
- import * as hoek from '@hapi/hoek';
17
- import { resolve } from 'path';
18
- import filedirname from 'filedirname';
19
-
20
- const questionNames$1 = {
21
- GIT_REPO: 'gitRepo',
22
- REPO_HOST: 'repoHost',
23
- REPO_OWNER: 'repoOwner',
24
- PROJECT_LANGUAGE: 'projectLanguage',
25
- DEPENDENCY_UPDATER: 'dependencyUpdater'
26
- };
27
-
28
- function scaffoldLanguage (scaffolders, chosenLanguage, options) {
29
- const scaffolder = scaffolders[chosenLanguage];
30
-
31
- if (scaffolder) return scaffolder(options);
32
-
33
- return undefined;
34
- }
35
-
36
- function promptForLanguageDetails (languages, decisions) {
37
- return prompt([{
38
- name: questionNames$1.PROJECT_LANGUAGE,
39
- type: 'list',
40
- message: 'What type of project is this?',
41
- choices: [...Object.keys(languages), new Separator(), 'Other']
42
- }], decisions);
43
- }
44
-
45
- function scaffoldReadme$1 ({projectRoot, projectName, description}) {
46
- return scaffold$2({projectRoot, projectName, description});
47
- }
48
-
49
- async function scaffoldReadme ({projectName, projectRoot, description, badges, documentation}) {
50
- await scaffoldReadme$1({projectRoot, projectName, description});
51
-
52
- return lift$1({projectRoot, results: {badges, documentation}});
53
- }
54
-
55
- function filterChoicesByVisibility(choices, visibility) {
56
- return [
57
- ...Object.entries(choices)
58
- .filter(([, choice]) => choice[visibility.toLowerCase()])
59
- .reduce((acc, [name]) => ([...acc, name]), []),
60
- new Separator(),
61
- 'Other'
62
- ];
63
- }
64
-
65
- async function promptForVcsHostDetails (hosts, visibility, decisions) {
66
- const answers = await prompt([{
67
- name: questionNames$1.REPO_HOST,
68
- type: 'list',
69
- message: 'Where will the repository be hosted?',
70
- choices: filterChoicesByVisibility(hosts, visibility)
71
- }], decisions);
72
- const host = hosts[answers[questionNames$1.REPO_HOST]];
73
-
74
- return {...answers, ...host && await host.prompt({decisions})};
75
- }
76
-
77
- function createIgnoreFile(projectRoot, ignore) {
78
- const {directories, files} = ignore;
79
-
80
- return promises.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\n')}\n\n${files.join('\n')}`);
81
- }
82
-
83
- function generateConfigFiles(projectRoot, ignore) {
84
- info('Generating Git config files', {level: 'secondary'});
85
-
86
- return Promise.all([
87
- promises.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),
88
- ignore ? createIgnoreFile(projectRoot, ignore) : undefined
89
- ].filter(Boolean));
90
- }
91
-
92
- async function getExistingRemotes(git) {
93
- try {
94
- return await git.listRemote();
95
- } catch (e) {
96
- if ('fatal: No remote configured to list refs from.\n' === e.message) {
97
- return [];
98
- }
99
-
100
- throw e;
101
- }
102
- }
103
-
104
- async function defineRemoteOrigin(projectRoot, origin) {
105
- const git = simpleGit(projectRoot);
106
- const existingRemotes = await getExistingRemotes(git);
107
-
108
- if (existingRemotes.includes('origin')) {
109
- warn('The `origin` remote is already defined for this repository');
110
-
111
- return {nextSteps: []};
112
- }
113
-
114
- if (origin.sshUrl) {
115
- info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});
116
-
117
- await git.addRemote('origin', origin.sshUrl);
118
-
119
- // info('Setting the local `master` branch to track `origin/master`');
120
- //
121
- // await gitBranch.setUpstream(
122
- // await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),
123
- // 'origin/master'
124
- // );
125
-
126
- return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};
127
- }
128
-
129
- warn('URL not available to configure remote `origin`');
130
-
131
- return {nextSteps: []};
132
- }
133
-
134
- async function initialize(
135
- gitRepoShouldBeInitialized,
136
- projectRoot,
137
- projectName,
138
- vcsHosts,
139
- visibility,
140
- decisions
141
- ) {
142
- if (gitRepoShouldBeInitialized) {
143
- const git = simpleGit(projectRoot);
144
- if (await git.checkIsRepo('root')) {
145
- info('Git repository already exists');
146
-
147
- const remoteOrigin = await git.remote(['get-url', 'origin']);
148
- const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);
149
-
150
- return {owner: user, name: project, host: type};
151
- }
152
-
153
- info('Initializing Git Repository');
154
-
155
- const [answers] = await Promise.all([
156
- promptForVcsHostDetails(vcsHosts, visibility, decisions),
157
- git.init()
158
- ]);
159
-
160
- return {
161
- host: answers[questionNames$1.REPO_HOST].toLowerCase(),
162
- owner: answers[questionNames$1.REPO_OWNER],
163
- name: projectName
164
- };
165
- }
166
-
167
- return undefined;
168
- }
169
-
170
- async function scaffold$1({projectRoot, ignore, origin}) {
171
- info('Finishing Git Configuration');
172
-
173
- const [remoteOriginResults] = await Promise.all([
174
- defineRemoteOrigin(projectRoot, origin),
175
- generateConfigFiles(projectRoot, ignore)
176
- ]);
177
-
178
- return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};
179
- }
180
-
181
- async function scaffoldLicense ({projectRoot, license, copyright, vcs}) {
182
- if (license) {
183
- info('Generating License');
184
-
185
- const licenseContent = spdxLicenseList[license].licenseText;
186
-
187
- await promises$1.writeFile(
188
- `${projectRoot}/LICENSE`,
189
- `${wrap(
190
- mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),
191
- {width: 80, indent: ''}
192
- )}\n`
193
- );
194
-
195
- return {
196
- ...vcs && 'github' === vcs.host && {
197
- badges: {
198
- consumer: {
199
- license: {
200
- img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,
201
- text: `${license} license`,
202
- link: 'LICENSE'
203
- }
204
- }
205
- }
206
- }
207
- };
208
- }
209
-
210
- return {};
211
- }
212
-
213
- function scaffoldVcsHost (hosts, options) {
214
- const lowercasedHosts = Object.fromEntries(
215
- Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])
216
- );
217
- const {host: chosenHost, ...rest} = options;
218
- const host = lowercasedHosts[chosenHost];
219
-
220
- if (host) return host.scaffolder(rest);
221
-
222
- return {};
223
- }
224
-
225
- async function promptForDependencyUpdaterChoice(updaters, decisions) {
226
- return prompt([{
227
- name: questionNames$1.DEPENDENCY_UPDATER,
228
- type: 'list',
229
- message: 'Which dependency-update service do you want to manage this project?',
230
- choices: [...Object.keys(updaters), new Separator(), 'Other']
231
- }], decisions);
232
- }
233
-
234
- async function scaffoldDependencyUpdater (scaffolders, decisions, options) {
235
- if (!Object.keys(scaffolders).length) return undefined;
236
-
237
- const scaffolderDetails = scaffolders[
238
- (await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames$1.DEPENDENCY_UPDATER]
239
- ];
240
-
241
- if (scaffolderDetails) return scaffolderDetails.scaffolder(options);
242
-
243
- return undefined;
244
- }
245
-
246
- function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
247
- return prompt([
248
- ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
249
- {name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
250
- ], decisions);
251
- }
252
-
253
- var languagePluginsSchema = joi.object().pattern(/^/, joi.func().arity(1));
254
-
255
- function validate(options) {
256
- const schema = joi.object({
257
- languages: languagePluginsSchema,
258
- overrides: joi.object({copyrightHolder: joi.string()}),
259
- vcsHosts: joi.object().pattern(/^/, joi.object({
260
- scaffolder: joi.func().arity(1).required(),
261
- prompt: joi.func().required(),
262
- public: joi.boolean(),
263
- private: joi.boolean()
264
- })),
265
- decisions: joi.object(),
266
- dependencyUpdaters: joi.object().pattern(/^/, joi.object({
267
- scaffolder: joi.func().arity(1).required()
268
- })).default({})
269
- });
270
- const validated = schema.validate(options);
271
-
272
- hoek.assert(!validated.error, validated.error);
273
-
274
- return validated.value || {};
275
- }
276
-
277
- function determinePathToTemplateFile (fileName) {
278
- const [, __dirname] = filedirname();
279
-
280
- return resolve(__dirname, '..', 'templates', fileName);
281
- }
282
-
283
- function scaffoldEditorConfig ({projectRoot}) {
284
- return promises.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);
285
- }
286
-
287
- async function scaffold(options) {
288
- const projectRoot = process.cwd();
289
- const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);
290
- const {copyrightHolder} = overrides;
291
-
292
- const {
293
- [questionNames$2.PROJECT_NAME]: projectName,
294
- [questionNames$2.LICENSE]: chosenLicense,
295
- [questionNames$2.VISIBILITY]: visibility,
296
- [questionNames$2.DESCRIPTION]: description,
297
- [questionNames$1.GIT_REPO]: gitRepo,
298
- [questionNames$2.COPYRIGHT_YEAR]: copyrightYear,
299
- [questionNames$2.COPYRIGHT_HOLDER]: copyHolder
300
- } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);
301
- const copyright = {year: copyrightYear, holder: copyHolder};
302
-
303
- const vcs = await initialize(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);
304
-
305
- const {[questionNames$1.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);
306
-
307
- const [license, language] = await Promise.all([
308
- scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),
309
- scaffoldLanguage(
310
- languages,
311
- projectLanguage,
312
- {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}
313
- )
314
- ]);
315
-
316
- const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(
317
- dependencyUpdaters,
318
- decisions,
319
- {projectRoot, vcs}
320
- );
321
-
322
- const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);
323
- const contributedTasks = contributors
324
- .map(contributor => contributor.nextSteps)
325
- .filter(Boolean)
326
- .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);
327
-
328
- const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {
329
- ...vcs,
330
- projectRoot,
331
- /**
332
- * @deprecated vcs-host plugins should no longer expect `projectType` to be provided.
333
- * will be removed with the next major version
334
- */
335
- projectType: projectLanguage,
336
- description,
337
- visibility,
338
- ...language && {
339
- homepage: language.projectDetails && language.projectDetails.homepage,
340
- tags: language.tags
341
- },
342
- nextSteps: contributedTasks
343
- });
344
-
345
- await Promise.all([
346
- scaffoldReadme({
347
- projectName,
348
- projectRoot,
349
- description,
350
- ...language && {documentation: language.documentation},
351
- badges: deepmerge.all([
352
- {
353
- contribution: {
354
- ...'Public' === visibility && {
355
- PRs: {
356
- text: 'PRs Welcome',
357
- link: 'http://makeapullrequest.com',
358
- img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'
359
- }
360
- }
361
- },
362
- status: {},
363
- consumer: {}
364
- },
365
- ...contributors.map(contributor => contributor.badges).filter(Boolean)
366
- ])
367
- }),
368
- scaffoldEditorConfig({projectRoot})
369
- ]);
370
-
371
- const gitResults = gitRepo && await scaffold$1({
372
- projectRoot,
373
- ...language && {ignore: language.vcsIgnore},
374
- origin: vcsHostResults
375
- });
376
-
377
- if (language && language.verificationCommand) {
378
- info('Verifying the generated project');
379
-
380
- const subprocess = execa(language.verificationCommand, {shell: true});
381
- subprocess.stdout.pipe(process.stdout);
382
- await subprocess;
383
- }
384
-
385
- reportResults({
386
- nextSteps: [
387
- ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],
388
- ...contributedTasks
389
- ]
390
- });
391
- }
392
-
393
- async function lift ({projectRoot, results, enhancers, vcs}) {
394
- const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});
395
-
396
- await lift$1({projectRoot, results: deepmerge.all([results, enhancerResults])});
397
-
398
- return enhancerResults;
399
- }
400
-
401
- const questionNames = {
402
- ...questionNames$2,
403
- ...questionNames$1
404
- };
405
-
406
- export { lift, questionNames, scaffold };
407
- //# sourceMappingURL=index.mjs.map
package/lib/index.mjs.map DELETED
@@ -1 +0,0 @@
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/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';\nimport * as hoek from '@hapi/hoek';\n\nimport languagePluginsSchema from './language/schema';\n\nexport function validate(options) {\n const schema = joi.object({\n languages: languagePluginsSchema,\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 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: '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 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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"}