@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 +6 -11
- package/lib/index.js +109 -133
- package/lib/index.js.map +1 -1
- package/package.json +7 -15
- package/lib/index.mjs +0 -407
- package/lib/index.mjs.map +0 -1
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`
|
|
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`
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
59
|
+
new Separator(),
|
|
95
60
|
'Other'
|
|
96
61
|
];
|
|
97
62
|
}
|
|
98
63
|
|
|
99
64
|
async function promptForVcsHostDetails (hosts, visibility, decisions) {
|
|
100
|
-
const answers = await
|
|
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
|
|
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
|
-
|
|
83
|
+
info('Generating Git config files', {level: 'secondary'});
|
|
119
84
|
|
|
120
85
|
return Promise.all([
|
|
121
|
-
|
|
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
|
|
104
|
+
const git = simpleGit(projectRoot);
|
|
140
105
|
const existingRemotes = await getExistingRemotes(git);
|
|
141
106
|
|
|
142
107
|
if (existingRemotes.includes('origin')) {
|
|
143
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
142
|
+
const git = simpleGit(projectRoot);
|
|
178
143
|
if (await git.checkIsRepo('root')) {
|
|
179
|
-
|
|
144
|
+
info('Git repository already exists');
|
|
180
145
|
|
|
181
146
|
const remoteOrigin = await git.remote(['get-url', 'origin']);
|
|
182
|
-
const {user, project, type} =
|
|
147
|
+
const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);
|
|
183
148
|
|
|
184
149
|
return {owner: user, name: project, host: type};
|
|
185
150
|
}
|
|
186
151
|
|
|
187
|
-
|
|
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
|
-
|
|
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
|
-
|
|
182
|
+
info('Generating License');
|
|
218
183
|
|
|
219
|
-
const licenseContent =
|
|
184
|
+
const licenseContent = spdxLicenseList[license].licenseText;
|
|
220
185
|
|
|
221
|
-
await
|
|
186
|
+
await promises$1.writeFile(
|
|
222
187
|
`${projectRoot}/LICENSE`,
|
|
223
|
-
`${
|
|
224
|
-
|
|
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
|
|
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
|
|
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
|
|
282
|
-
...
|
|
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 =
|
|
252
|
+
var languagePluginsSchema = joi.object().pattern(/^/, joi.func().arity(1));
|
|
288
253
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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
|
-
|
|
267
|
+
const decisionsSchema = joi.object();
|
|
307
268
|
|
|
308
|
-
|
|
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] =
|
|
283
|
+
const [, __dirname] = filedirname();
|
|
313
284
|
|
|
314
|
-
return
|
|
285
|
+
return resolve(__dirname, '..', 'templates', fileName);
|
|
315
286
|
}
|
|
316
287
|
|
|
317
288
|
function scaffoldEditorConfig ({projectRoot}) {
|
|
318
|
-
return
|
|
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
|
-
[
|
|
328
|
-
[
|
|
329
|
-
[
|
|
330
|
-
[
|
|
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
|
-
[
|
|
333
|
-
[
|
|
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:
|
|
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
|
-
|
|
390
|
+
info('Verifying the generated project');
|
|
413
391
|
|
|
414
|
-
const subprocess =
|
|
392
|
+
const subprocess = execa(language.verificationCommand, {shell: true});
|
|
415
393
|
subprocess.stdout.pipe(process.stdout);
|
|
416
394
|
await subprocess;
|
|
417
395
|
}
|
|
418
396
|
|
|
419
|
-
|
|
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
|
|
406
|
+
const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});
|
|
429
407
|
|
|
430
|
-
await
|
|
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
|
-
...
|
|
414
|
+
...questionNames$2,
|
|
437
415
|
...questionNames$1
|
|
438
416
|
};
|
|
439
417
|
|
|
440
|
-
|
|
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":"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"}
|
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": "
|
|
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
|
-
|
|
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": "
|
|
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": "
|
|
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.
|
|
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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"}
|