@form8ion/project 16.0.3 → 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/lib/index.js +95 -105
- package/lib/index.js.map +1 -1
- package/package.json +7 -15
- package/lib/index.mjs +0 -412
- package/lib/index.mjs.map +0 -1
package/lib/index.js
CHANGED
|
@@ -1,35 +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 path = require('path');
|
|
21
|
-
var filedirname = require('filedirname');
|
|
22
|
-
|
|
23
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
24
|
-
|
|
25
|
-
var deepmerge__default = /*#__PURE__*/_interopDefaultLegacy(deepmerge);
|
|
26
|
-
var execa__default = /*#__PURE__*/_interopDefaultLegacy(execa);
|
|
27
|
-
var hostedGitInfo__default = /*#__PURE__*/_interopDefaultLegacy(hostedGitInfo);
|
|
28
|
-
var wrap__default = /*#__PURE__*/_interopDefaultLegacy(wrap);
|
|
29
|
-
var mustache__default = /*#__PURE__*/_interopDefaultLegacy(mustache);
|
|
30
|
-
var spdxLicenseList__default = /*#__PURE__*/_interopDefaultLegacy(spdxLicenseList);
|
|
31
|
-
var joi__default = /*#__PURE__*/_interopDefaultLegacy(joi);
|
|
32
|
-
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';
|
|
33
18
|
|
|
34
19
|
const questionNames$1 = {
|
|
35
20
|
GIT_REPO: 'gitRepo',
|
|
@@ -48,22 +33,22 @@ function scaffoldLanguage (scaffolders, chosenLanguage, options) {
|
|
|
48
33
|
}
|
|
49
34
|
|
|
50
35
|
function promptForLanguageDetails (languages, decisions) {
|
|
51
|
-
return
|
|
36
|
+
return prompt([{
|
|
52
37
|
name: questionNames$1.PROJECT_LANGUAGE,
|
|
53
38
|
type: 'list',
|
|
54
39
|
message: 'What type of project is this?',
|
|
55
|
-
choices: [...Object.keys(languages), new
|
|
40
|
+
choices: [...Object.keys(languages), new Separator(), 'Other']
|
|
56
41
|
}], decisions);
|
|
57
42
|
}
|
|
58
43
|
|
|
59
44
|
function scaffoldReadme$1 ({projectRoot, projectName, description}) {
|
|
60
|
-
return
|
|
45
|
+
return scaffold$2({projectRoot, projectName, description});
|
|
61
46
|
}
|
|
62
47
|
|
|
63
48
|
async function scaffoldReadme ({projectName, projectRoot, description, badges, documentation}) {
|
|
64
49
|
await scaffoldReadme$1({projectRoot, projectName, description});
|
|
65
50
|
|
|
66
|
-
return
|
|
51
|
+
return lift$1({projectRoot, results: {badges, documentation}});
|
|
67
52
|
}
|
|
68
53
|
|
|
69
54
|
function filterChoicesByVisibility(choices, visibility) {
|
|
@@ -71,13 +56,13 @@ function filterChoicesByVisibility(choices, visibility) {
|
|
|
71
56
|
...Object.entries(choices)
|
|
72
57
|
.filter(([, choice]) => choice[visibility.toLowerCase()])
|
|
73
58
|
.reduce((acc, [name]) => ([...acc, name]), []),
|
|
74
|
-
new
|
|
59
|
+
new Separator(),
|
|
75
60
|
'Other'
|
|
76
61
|
];
|
|
77
62
|
}
|
|
78
63
|
|
|
79
64
|
async function promptForVcsHostDetails (hosts, visibility, decisions) {
|
|
80
|
-
const answers = await
|
|
65
|
+
const answers = await prompt([{
|
|
81
66
|
name: questionNames$1.REPO_HOST,
|
|
82
67
|
type: 'list',
|
|
83
68
|
message: 'Where will the repository be hosted?',
|
|
@@ -91,14 +76,14 @@ async function promptForVcsHostDetails (hosts, visibility, decisions) {
|
|
|
91
76
|
function createIgnoreFile(projectRoot, ignore) {
|
|
92
77
|
const {directories, files} = ignore;
|
|
93
78
|
|
|
94
|
-
return
|
|
79
|
+
return promises.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\n')}\n\n${files.join('\n')}`);
|
|
95
80
|
}
|
|
96
81
|
|
|
97
82
|
function generateConfigFiles(projectRoot, ignore) {
|
|
98
|
-
|
|
83
|
+
info('Generating Git config files', {level: 'secondary'});
|
|
99
84
|
|
|
100
85
|
return Promise.all([
|
|
101
|
-
|
|
86
|
+
promises.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),
|
|
102
87
|
ignore ? createIgnoreFile(projectRoot, ignore) : undefined
|
|
103
88
|
].filter(Boolean));
|
|
104
89
|
}
|
|
@@ -116,17 +101,17 @@ async function getExistingRemotes(git) {
|
|
|
116
101
|
}
|
|
117
102
|
|
|
118
103
|
async function defineRemoteOrigin(projectRoot, origin) {
|
|
119
|
-
const git = simpleGit
|
|
104
|
+
const git = simpleGit(projectRoot);
|
|
120
105
|
const existingRemotes = await getExistingRemotes(git);
|
|
121
106
|
|
|
122
107
|
if (existingRemotes.includes('origin')) {
|
|
123
|
-
|
|
108
|
+
warn('The `origin` remote is already defined for this repository');
|
|
124
109
|
|
|
125
110
|
return {nextSteps: []};
|
|
126
111
|
}
|
|
127
112
|
|
|
128
113
|
if (origin.sshUrl) {
|
|
129
|
-
|
|
114
|
+
info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});
|
|
130
115
|
|
|
131
116
|
await git.addRemote('origin', origin.sshUrl);
|
|
132
117
|
|
|
@@ -140,7 +125,7 @@ async function defineRemoteOrigin(projectRoot, origin) {
|
|
|
140
125
|
return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};
|
|
141
126
|
}
|
|
142
127
|
|
|
143
|
-
|
|
128
|
+
warn('URL not available to configure remote `origin`');
|
|
144
129
|
|
|
145
130
|
return {nextSteps: []};
|
|
146
131
|
}
|
|
@@ -154,17 +139,17 @@ async function initialize(
|
|
|
154
139
|
decisions
|
|
155
140
|
) {
|
|
156
141
|
if (gitRepoShouldBeInitialized) {
|
|
157
|
-
const git = simpleGit
|
|
142
|
+
const git = simpleGit(projectRoot);
|
|
158
143
|
if (await git.checkIsRepo('root')) {
|
|
159
|
-
|
|
144
|
+
info('Git repository already exists');
|
|
160
145
|
|
|
161
146
|
const remoteOrigin = await git.remote(['get-url', 'origin']);
|
|
162
|
-
const {user, project, type} =
|
|
147
|
+
const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);
|
|
163
148
|
|
|
164
149
|
return {owner: user, name: project, host: type};
|
|
165
150
|
}
|
|
166
151
|
|
|
167
|
-
|
|
152
|
+
info('Initializing Git Repository');
|
|
168
153
|
|
|
169
154
|
const [answers] = await Promise.all([
|
|
170
155
|
promptForVcsHostDetails(vcsHosts, visibility, decisions),
|
|
@@ -182,7 +167,7 @@ async function initialize(
|
|
|
182
167
|
}
|
|
183
168
|
|
|
184
169
|
async function scaffold$1({projectRoot, ignore, origin}) {
|
|
185
|
-
|
|
170
|
+
info('Finishing Git Configuration');
|
|
186
171
|
|
|
187
172
|
const [remoteOriginResults] = await Promise.all([
|
|
188
173
|
defineRemoteOrigin(projectRoot, origin),
|
|
@@ -194,14 +179,14 @@ async function scaffold$1({projectRoot, ignore, origin}) {
|
|
|
194
179
|
|
|
195
180
|
async function scaffoldLicense ({projectRoot, license, copyright, vcs}) {
|
|
196
181
|
if (license) {
|
|
197
|
-
|
|
182
|
+
info('Generating License');
|
|
198
183
|
|
|
199
|
-
const licenseContent =
|
|
184
|
+
const licenseContent = spdxLicenseList[license].licenseText;
|
|
200
185
|
|
|
201
|
-
await
|
|
186
|
+
await promises$1.writeFile(
|
|
202
187
|
`${projectRoot}/LICENSE`,
|
|
203
|
-
`${
|
|
204
|
-
|
|
188
|
+
`${wrap(
|
|
189
|
+
mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),
|
|
205
190
|
{width: 80, indent: ''}
|
|
206
191
|
)}\n`
|
|
207
192
|
);
|
|
@@ -237,11 +222,11 @@ function scaffoldVcsHost (hosts, options) {
|
|
|
237
222
|
}
|
|
238
223
|
|
|
239
224
|
async function promptForDependencyUpdaterChoice(updaters, decisions) {
|
|
240
|
-
return
|
|
225
|
+
return prompt([{
|
|
241
226
|
name: questionNames$1.DEPENDENCY_UPDATER,
|
|
242
227
|
type: 'list',
|
|
243
228
|
message: 'Which dependency-update service do you want to manage this project?',
|
|
244
|
-
choices: [...Object.keys(updaters), new
|
|
229
|
+
choices: [...Object.keys(updaters), new Separator(), 'Other']
|
|
245
230
|
}], decisions);
|
|
246
231
|
}
|
|
247
232
|
|
|
@@ -258,31 +243,31 @@ async function scaffoldDependencyUpdater (scaffolders, decisions, options) {
|
|
|
258
243
|
}
|
|
259
244
|
|
|
260
245
|
function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
|
|
261
|
-
return
|
|
262
|
-
...
|
|
246
|
+
return prompt([
|
|
247
|
+
...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
|
|
263
248
|
{name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
|
|
264
249
|
], decisions);
|
|
265
250
|
}
|
|
266
251
|
|
|
267
|
-
var languagePluginsSchema =
|
|
252
|
+
var languagePluginsSchema = joi.object().pattern(/^/, joi.func().arity(1));
|
|
268
253
|
|
|
269
|
-
var vcsHostPluginsSchema =
|
|
270
|
-
scaffolder:
|
|
271
|
-
prompt:
|
|
272
|
-
public:
|
|
273
|
-
private:
|
|
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()
|
|
274
259
|
}));
|
|
275
260
|
|
|
276
|
-
var dependencyUpdaterPluginsSchema =
|
|
277
|
-
scaffolder:
|
|
261
|
+
var dependencyUpdaterPluginsSchema = joi.object().pattern(/^/, joi.object({
|
|
262
|
+
scaffolder: joi.func().arity(1).required()
|
|
278
263
|
})).default({});
|
|
279
264
|
|
|
280
|
-
const overridesSchema =
|
|
265
|
+
const overridesSchema = joi.object({copyrightHolder: joi.string()});
|
|
281
266
|
|
|
282
|
-
const decisionsSchema =
|
|
267
|
+
const decisionsSchema = joi.object();
|
|
283
268
|
|
|
284
269
|
function validate(options) {
|
|
285
|
-
return
|
|
270
|
+
return validateOptions(joi.object({
|
|
286
271
|
languages: languagePluginsSchema,
|
|
287
272
|
/**
|
|
288
273
|
* @deprecated overrides should no longer be necessary. use decisions instead
|
|
@@ -295,13 +280,31 @@ function validate(options) {
|
|
|
295
280
|
}
|
|
296
281
|
|
|
297
282
|
function determinePathToTemplateFile (fileName) {
|
|
298
|
-
const [, __dirname] =
|
|
283
|
+
const [, __dirname] = filedirname();
|
|
299
284
|
|
|
300
|
-
return
|
|
285
|
+
return resolve(__dirname, '..', 'templates', fileName);
|
|
301
286
|
}
|
|
302
287
|
|
|
303
288
|
function scaffoldEditorConfig ({projectRoot}) {
|
|
304
|
-
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 {};
|
|
305
308
|
}
|
|
306
309
|
|
|
307
310
|
async function scaffold(options) {
|
|
@@ -310,13 +313,13 @@ async function scaffold(options) {
|
|
|
310
313
|
const {copyrightHolder} = overrides;
|
|
311
314
|
|
|
312
315
|
const {
|
|
313
|
-
[
|
|
314
|
-
[
|
|
315
|
-
[
|
|
316
|
-
[
|
|
316
|
+
[questionNames$2.PROJECT_NAME]: projectName,
|
|
317
|
+
[questionNames$2.LICENSE]: chosenLicense,
|
|
318
|
+
[questionNames$2.VISIBILITY]: visibility,
|
|
319
|
+
[questionNames$2.DESCRIPTION]: description,
|
|
317
320
|
[questionNames$1.GIT_REPO]: gitRepo,
|
|
318
|
-
[
|
|
319
|
-
[
|
|
321
|
+
[questionNames$2.COPYRIGHT_YEAR]: copyrightYear,
|
|
322
|
+
[questionNames$2.COPYRIGHT_HOLDER]: copyHolder
|
|
320
323
|
} = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);
|
|
321
324
|
const copyright = {year: copyrightYear, holder: copyHolder};
|
|
322
325
|
|
|
@@ -324,13 +327,14 @@ async function scaffold(options) {
|
|
|
324
327
|
|
|
325
328
|
const {[questionNames$1.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);
|
|
326
329
|
|
|
327
|
-
const [license, language] = await Promise.all([
|
|
330
|
+
const [license, language, contributing] = await Promise.all([
|
|
328
331
|
scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),
|
|
329
332
|
scaffoldLanguage(
|
|
330
333
|
languages,
|
|
331
334
|
projectLanguage,
|
|
332
335
|
{projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}
|
|
333
|
-
)
|
|
336
|
+
),
|
|
337
|
+
scaffoldContributing({visibility})
|
|
334
338
|
]);
|
|
335
339
|
|
|
336
340
|
const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(
|
|
@@ -339,7 +343,7 @@ async function scaffold(options) {
|
|
|
339
343
|
{projectRoot, vcs}
|
|
340
344
|
);
|
|
341
345
|
|
|
342
|
-
const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);
|
|
346
|
+
const contributors = [license, language, dependencyUpdaterResults, contributing].filter(Boolean);
|
|
343
347
|
const contributedTasks = contributors
|
|
344
348
|
.map(contributor => contributor.nextSteps)
|
|
345
349
|
.filter(Boolean)
|
|
@@ -368,20 +372,8 @@ async function scaffold(options) {
|
|
|
368
372
|
projectRoot,
|
|
369
373
|
description,
|
|
370
374
|
...language && {documentation: language.documentation},
|
|
371
|
-
badges:
|
|
372
|
-
{
|
|
373
|
-
contribution: {
|
|
374
|
-
...'Public' === visibility && {
|
|
375
|
-
PRs: {
|
|
376
|
-
text: 'PRs Welcome',
|
|
377
|
-
link: 'https://makeapullrequest.com',
|
|
378
|
-
img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
},
|
|
382
|
-
status: {},
|
|
383
|
-
consumer: {}
|
|
384
|
-
},
|
|
375
|
+
badges: deepmerge.all([
|
|
376
|
+
{contribution: {}, status: {}, consumer: {}},
|
|
385
377
|
...contributors.map(contributor => contributor.badges).filter(Boolean)
|
|
386
378
|
])
|
|
387
379
|
}),
|
|
@@ -395,14 +387,14 @@ async function scaffold(options) {
|
|
|
395
387
|
});
|
|
396
388
|
|
|
397
389
|
if (language && language.verificationCommand) {
|
|
398
|
-
|
|
390
|
+
info('Verifying the generated project');
|
|
399
391
|
|
|
400
|
-
const subprocess =
|
|
392
|
+
const subprocess = execa(language.verificationCommand, {shell: true});
|
|
401
393
|
subprocess.stdout.pipe(process.stdout);
|
|
402
394
|
await subprocess;
|
|
403
395
|
}
|
|
404
396
|
|
|
405
|
-
|
|
397
|
+
reportResults({
|
|
406
398
|
nextSteps: [
|
|
407
399
|
...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],
|
|
408
400
|
...contributedTasks
|
|
@@ -411,19 +403,17 @@ async function scaffold(options) {
|
|
|
411
403
|
}
|
|
412
404
|
|
|
413
405
|
async function lift ({projectRoot, results, enhancers, vcs}) {
|
|
414
|
-
const enhancerResults = await
|
|
406
|
+
const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});
|
|
415
407
|
|
|
416
|
-
await
|
|
408
|
+
await lift$1({projectRoot, results: deepmerge.all([results, enhancerResults])});
|
|
417
409
|
|
|
418
410
|
return enhancerResults;
|
|
419
411
|
}
|
|
420
412
|
|
|
421
413
|
const questionNames = {
|
|
422
|
-
...
|
|
414
|
+
...questionNames$2,
|
|
423
415
|
...questionNames$1
|
|
424
416
|
};
|
|
425
417
|
|
|
426
|
-
|
|
427
|
-
exports.questionNames = questionNames;
|
|
428
|
-
exports.scaffold = scaffold;
|
|
418
|
+
export { lift, questionNames, scaffold };
|
|
429
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/vcs/host/schema.js","../src/dependency-updater/schema.js","../src/options-schemas.js","../src/options-validator.js","../src/template-path.js","../src/editorconfig/scaffolder.js","../src/scaffolder.js","../src/lift.js","../src/index.js"],"sourcesContent":["export const questionNames = {\n GIT_REPO: 'gitRepo',\n REPO_HOST: 'repoHost',\n REPO_OWNER: 'repoOwner',\n PROJECT_LANGUAGE: 'projectLanguage',\n DEPENDENCY_UPDATER: 'dependencyUpdater'\n};\n","export default function (scaffolders, chosenLanguage, options) {\n const scaffolder = scaffolders[chosenLanguage];\n\n if (scaffolder) return scaffolder(options);\n\n return undefined;\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../prompts/question-names';\n\nexport default function (languages, decisions) {\n return prompt([{\n name: questionNames.PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), new Separator(), 'Other']\n }], decisions);\n}\n","import {scaffold as scaffoldReadme} from '@form8ion/readme';\n\nexport default function ({projectRoot, projectName, description}) {\n return scaffoldReadme({projectRoot, projectName, description});\n}\n","import {lift as liftReadme} from '@form8ion/readme';\n\nimport {scaffold as scaffoldReadme} from './readme/index';\n\nexport default async function ({projectName, projectRoot, description, badges, documentation}) {\n await scaffoldReadme({projectRoot, projectName, description});\n\n return liftReadme({projectRoot, results: {badges, documentation}});\n}\n","import {Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function unlicensedConfirmationShouldBePresented(answers) {\n return 'Private' === answers[questionNames.VISIBILITY];\n}\n\nexport function licenseChoicesShouldBePresented(answers) {\n return 'Public' === answers[questionNames.VISIBILITY] || !answers[questionNames.UNLICENSED];\n}\n\nexport function copyrightInformationShouldBeRequested(answers) {\n return !!answers[questionNames.LICENSE];\n}\n\nexport function filterChoicesByVisibility(choices, visibility) {\n return [\n ...Object.entries(choices)\n .filter(([, choice]) => choice[visibility.toLowerCase()])\n .reduce((acc, [name]) => ([...acc, name]), []),\n new Separator(),\n 'Other'\n ];\n}\n","import {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../../prompts/question-names';\nimport {filterChoicesByVisibility} from '../../prompts/conditionals';\n\nexport default async function (hosts, visibility, decisions) {\n const answers = await prompt([{\n name: questionNames.REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: filterChoicesByVisibility(hosts, visibility)\n }], decisions);\n const host = hosts[answers[questionNames.REPO_HOST]];\n\n return {...answers, ...host && await host.prompt({decisions})};\n}\n","import {promises as fs} from 'node:fs';\n\nimport {simpleGit} from 'simple-git';\nimport hostedGitInfo from 'hosted-git-info';\nimport {info, warn} from '@travi/cli-messages';\n\nimport promptForVcsHostDetails from './host/prompt';\nimport {questionNames} from '../prompts/question-names';\n\nfunction createIgnoreFile(projectRoot, ignore) {\n const {directories, files} = ignore;\n\n return fs.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\\n')}\\n\\n${files.join('\\n')}`);\n}\n\nfunction generateConfigFiles(projectRoot, ignore) {\n info('Generating Git config files', {level: 'secondary'});\n\n return Promise.all([\n fs.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),\n ignore ? createIgnoreFile(projectRoot, ignore) : undefined\n ].filter(Boolean));\n}\n\nasync function getExistingRemotes(git) {\n try {\n return await git.listRemote();\n } catch (e) {\n if ('fatal: No remote configured to list refs from.\\n' === e.message) {\n return [];\n }\n\n throw e;\n }\n}\n\nasync function defineRemoteOrigin(projectRoot, origin) {\n const git = simpleGit(projectRoot);\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\n\n if (origin.sshUrl) {\n info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});\n\n await git.addRemote('origin', origin.sshUrl);\n\n // info('Setting the local `master` branch to track `origin/master`');\n //\n // await gitBranch.setUpstream(\n // await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),\n // 'origin/master'\n // );\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n }\n\n warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n}\n\nexport async function initialize(\n gitRepoShouldBeInitialized,\n projectRoot,\n projectName,\n vcsHosts,\n visibility,\n decisions\n) {\n if (gitRepoShouldBeInitialized) {\n const git = simpleGit(projectRoot);\n if (await git.checkIsRepo('root')) {\n info('Git repository already exists');\n\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);\n\n return {owner: user, name: project, host: type};\n }\n\n info('Initializing Git Repository');\n\n const [answers] = await Promise.all([\n promptForVcsHostDetails(vcsHosts, visibility, decisions),\n git.init()\n ]);\n\n return {\n host: answers[questionNames.REPO_HOST].toLowerCase(),\n owner: answers[questionNames.REPO_OWNER],\n name: projectName\n };\n }\n\n return undefined;\n}\n\nexport async function scaffold({projectRoot, ignore, origin}) {\n info('Finishing Git Configuration');\n\n const [remoteOriginResults] = await Promise.all([\n defineRemoteOrigin(projectRoot, origin),\n generateConfigFiles(projectRoot, ignore)\n ]);\n\n return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};\n}\n","import {promises as fs} from 'fs';\nimport wrap from 'word-wrap';\nimport mustache from 'mustache';\n// eslint-disable-next-line import/extensions\nimport spdxLicenseList from 'spdx-license-list/full.js';\nimport {info} from '@travi/cli-messages';\n\nexport default async function ({projectRoot, license, copyright, vcs}) {\n if (license) {\n info('Generating License');\n\n const licenseContent = spdxLicenseList[license].licenseText;\n\n await fs.writeFile(\n `${projectRoot}/LICENSE`,\n `${wrap(\n mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),\n {width: 80, indent: ''}\n )}\\n`\n );\n\n return {\n ...vcs && 'github' === vcs.host && {\n badges: {\n consumer: {\n license: {\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,\n text: `${license} license`,\n link: 'LICENSE'\n }\n }\n }\n }\n };\n }\n\n return {};\n}\n","export default function (hosts, options) {\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const {host: chosenHost, ...rest} = options;\n const host = lowercasedHosts[chosenHost];\n\n if (host) return host.scaffolder(rest);\n\n return {};\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {questionNames} from '../prompts/question-names';\n\nexport async function promptForDependencyUpdaterChoice(updaters, decisions) {\n return prompt([{\n name: questionNames.DEPENDENCY_UPDATER,\n type: 'list',\n message: 'Which dependency-update service do you want to manage this project?',\n choices: [...Object.keys(updaters), new Separator(), 'Other']\n }], decisions);\n}\n","import {questionNames} from '../prompts/question-names';\nimport {promptForDependencyUpdaterChoice} from './prompt';\n\nexport default async function (scaffolders, decisions, options) {\n if (!Object.keys(scaffolders).length) return undefined;\n\n const scaffolderDetails = scaffolders[\n (await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames.DEPENDENCY_UPDATER]\n ];\n\n if (scaffolderDetails) return scaffolderDetails.scaffolder(options);\n\n return undefined;\n}\n","import {questionsForBaseDetails} from '@form8ion/core';\nimport {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {\n return prompt([\n ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),\n {name: questionNames.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}\n ], decisions);\n}\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.func().arity(1));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required(),\n prompt: joi.func().required(),\n public: joi.bool(),\n private: joi.bool()\n}));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required()\n})).default({});\n","import joi from 'joi';\n\nexport const overridesSchema = joi.object({copyrightHolder: joi.string()});\n\nexport const decisionsSchema = joi.object();\n","import {validateOptions} from '@form8ion/core';\nimport joi from 'joi';\n\nimport languagePluginsSchema from './language/schema';\nimport vcsHostPluginsSchema from './vcs/host/schema';\nimport dependencyUpdaterPluginsSchema from './dependency-updater/schema';\nimport {decisionsSchema, overridesSchema} from './options-schemas';\n\nexport function validate(options) {\n return validateOptions(joi.object({\n languages: languagePluginsSchema,\n /**\n * @deprecated overrides should no longer be necessary. use decisions instead\n */\n overrides: overridesSchema,\n vcsHosts: vcsHostPluginsSchema,\n decisions: decisionsSchema,\n dependencyUpdaters: dependencyUpdaterPluginsSchema\n }), options) || {};\n}\n","import {resolve} from 'path';\nimport filedirname from 'filedirname';\n\nexport default function (fileName) {\n const [, __dirname] = filedirname();\n\n return resolve(__dirname, '..', 'templates', fileName);\n}\n","import {promises as fs} from 'node:fs';\n\nimport determinePathToTemplateFile from '../template-path';\n\nexport default function ({projectRoot}) {\n return fs.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);\n}\n","import deepmerge from 'deepmerge';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {reportResults} from '@form8ion/results-reporter';\nimport {info} from '@travi/cli-messages';\n\nimport execa from '../thirdparty-wrappers/execa';\nimport {scaffold as scaffoldLanguage, prompt as promptForLanguageDetails} from './language';\nimport scaffoldReadme from './readme';\nimport {initialize as initializeGit, scaffold as scaffoldGit} from './vcs/git';\nimport {scaffold as scaffoldLicense} from './license';\nimport {scaffold as scaffoldVcsHost} from './vcs/host';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder';\nimport {promptForBaseDetails} from './prompts/questions';\nimport {validate} from './options-validator';\nimport {questionNames} from './prompts/question-names';\nimport {scaffold as scaffoldEditorConfig} from './editorconfig';\n\nexport async function scaffold(options) {\n const projectRoot = process.cwd();\n const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);\n const {copyrightHolder} = overrides;\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [questionNames.GIT_REPO]: gitRepo,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const vcs = await initializeGit(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);\n\n const {[questionNames.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);\n\n const [license, language] = await Promise.all([\n scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),\n scaffoldLanguage(\n languages,\n projectLanguage,\n {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}\n )\n ]);\n\n const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n decisions,\n {projectRoot, vcs}\n );\n\n const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);\n const contributedTasks = contributors\n .map(contributor => contributor.nextSteps)\n .filter(Boolean)\n .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);\n\n const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {\n ...vcs,\n projectRoot,\n /**\n * @deprecated vcs-host plugins should no longer expect `projectType` to be provided.\n * will be removed with the next major version\n */\n projectType: projectLanguage,\n description,\n visibility,\n ...language && {\n homepage: language.projectDetails && language.projectDetails.homepage,\n tags: language.tags\n },\n nextSteps: contributedTasks\n });\n\n await Promise.all([\n scaffoldReadme({\n projectName,\n projectRoot,\n description,\n ...language && {documentation: language.documentation},\n badges: deepmerge.all([\n {\n contribution: {\n ...'Public' === visibility && {\n PRs: {\n text: 'PRs Welcome',\n link: 'https://makeapullrequest.com',\n img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'\n }\n }\n },\n status: {},\n consumer: {}\n },\n ...contributors.map(contributor => contributor.badges).filter(Boolean)\n ])\n }),\n scaffoldEditorConfig({projectRoot})\n ]);\n\n const gitResults = gitRepo && await scaffoldGit({\n projectRoot,\n ...language && {ignore: language.vcsIgnore},\n origin: vcsHostResults\n });\n\n if (language && language.verificationCommand) {\n info('Verifying the generated project');\n\n const subprocess = execa(language.verificationCommand, {shell: true});\n subprocess.stdout.pipe(process.stdout);\n await subprocess;\n }\n\n reportResults({\n nextSteps: [\n ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],\n ...contributedTasks\n ]\n });\n}\n","import deepmerge from 'deepmerge';\nimport {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\n\nexport default async function ({projectRoot, results, enhancers, vcs}) {\n const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});\n\n await liftReadme({projectRoot, results: deepmerge.all([results, enhancerResults])});\n\n return enhancerResults;\n}\n","import {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {questionNames as projectScaffolderQuestionNames} from './prompts/question-names';\n\nexport * from './scaffolder';\nexport {default as lift} from './lift';\nexport const questionNames = {\n ...coreQuestionNames,\n ...projectScaffolderQuestionNames\n};\n"],"names":["questionNames","prompt","Separator","scaffoldReadme","liftReadme","fs","info","simpleGit","warn","hostedGitInfo","scaffold","spdxLicenseList","wrap","mustache","questionsForBaseDetails","joi","validateOptions","filedirname","resolve","coreQuestionNames","initializeGit","deepmerge","scaffoldGit","execa","reportResults","applyEnhancers","projectScaffolderQuestionNames"],"mappings":"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"}
|
|
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.106",
|
|
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,412 +0,0 @@
|
|
|
1
|
-
import { questionsForBaseDetails, validateOptions, 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 { resolve } from 'path';
|
|
17
|
-
import filedirname from 'filedirname';
|
|
18
|
-
|
|
19
|
-
const questionNames$1 = {
|
|
20
|
-
GIT_REPO: 'gitRepo',
|
|
21
|
-
REPO_HOST: 'repoHost',
|
|
22
|
-
REPO_OWNER: 'repoOwner',
|
|
23
|
-
PROJECT_LANGUAGE: 'projectLanguage',
|
|
24
|
-
DEPENDENCY_UPDATER: 'dependencyUpdater'
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
function scaffoldLanguage (scaffolders, chosenLanguage, options) {
|
|
28
|
-
const scaffolder = scaffolders[chosenLanguage];
|
|
29
|
-
|
|
30
|
-
if (scaffolder) return scaffolder(options);
|
|
31
|
-
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function promptForLanguageDetails (languages, decisions) {
|
|
36
|
-
return prompt([{
|
|
37
|
-
name: questionNames$1.PROJECT_LANGUAGE,
|
|
38
|
-
type: 'list',
|
|
39
|
-
message: 'What type of project is this?',
|
|
40
|
-
choices: [...Object.keys(languages), new Separator(), 'Other']
|
|
41
|
-
}], decisions);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function scaffoldReadme$1 ({projectRoot, projectName, description}) {
|
|
45
|
-
return scaffold$2({projectRoot, projectName, description});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async function scaffoldReadme ({projectName, projectRoot, description, badges, documentation}) {
|
|
49
|
-
await scaffoldReadme$1({projectRoot, projectName, description});
|
|
50
|
-
|
|
51
|
-
return lift$1({projectRoot, results: {badges, documentation}});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function filterChoicesByVisibility(choices, visibility) {
|
|
55
|
-
return [
|
|
56
|
-
...Object.entries(choices)
|
|
57
|
-
.filter(([, choice]) => choice[visibility.toLowerCase()])
|
|
58
|
-
.reduce((acc, [name]) => ([...acc, name]), []),
|
|
59
|
-
new Separator(),
|
|
60
|
-
'Other'
|
|
61
|
-
];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async function promptForVcsHostDetails (hosts, visibility, decisions) {
|
|
65
|
-
const answers = await prompt([{
|
|
66
|
-
name: questionNames$1.REPO_HOST,
|
|
67
|
-
type: 'list',
|
|
68
|
-
message: 'Where will the repository be hosted?',
|
|
69
|
-
choices: filterChoicesByVisibility(hosts, visibility)
|
|
70
|
-
}], decisions);
|
|
71
|
-
const host = hosts[answers[questionNames$1.REPO_HOST]];
|
|
72
|
-
|
|
73
|
-
return {...answers, ...host && await host.prompt({decisions})};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function createIgnoreFile(projectRoot, ignore) {
|
|
77
|
-
const {directories, files} = ignore;
|
|
78
|
-
|
|
79
|
-
return promises.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\n')}\n\n${files.join('\n')}`);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function generateConfigFiles(projectRoot, ignore) {
|
|
83
|
-
info('Generating Git config files', {level: 'secondary'});
|
|
84
|
-
|
|
85
|
-
return Promise.all([
|
|
86
|
-
promises.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),
|
|
87
|
-
ignore ? createIgnoreFile(projectRoot, ignore) : undefined
|
|
88
|
-
].filter(Boolean));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
async function getExistingRemotes(git) {
|
|
92
|
-
try {
|
|
93
|
-
return await git.listRemote();
|
|
94
|
-
} catch (e) {
|
|
95
|
-
if ('fatal: No remote configured to list refs from.\n' === e.message) {
|
|
96
|
-
return [];
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
throw e;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
async function defineRemoteOrigin(projectRoot, origin) {
|
|
104
|
-
const git = simpleGit(projectRoot);
|
|
105
|
-
const existingRemotes = await getExistingRemotes(git);
|
|
106
|
-
|
|
107
|
-
if (existingRemotes.includes('origin')) {
|
|
108
|
-
warn('The `origin` remote is already defined for this repository');
|
|
109
|
-
|
|
110
|
-
return {nextSteps: []};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (origin.sshUrl) {
|
|
114
|
-
info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});
|
|
115
|
-
|
|
116
|
-
await git.addRemote('origin', origin.sshUrl);
|
|
117
|
-
|
|
118
|
-
// info('Setting the local `master` branch to track `origin/master`');
|
|
119
|
-
//
|
|
120
|
-
// await gitBranch.setUpstream(
|
|
121
|
-
// await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),
|
|
122
|
-
// 'origin/master'
|
|
123
|
-
// );
|
|
124
|
-
|
|
125
|
-
return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
warn('URL not available to configure remote `origin`');
|
|
129
|
-
|
|
130
|
-
return {nextSteps: []};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async function initialize(
|
|
134
|
-
gitRepoShouldBeInitialized,
|
|
135
|
-
projectRoot,
|
|
136
|
-
projectName,
|
|
137
|
-
vcsHosts,
|
|
138
|
-
visibility,
|
|
139
|
-
decisions
|
|
140
|
-
) {
|
|
141
|
-
if (gitRepoShouldBeInitialized) {
|
|
142
|
-
const git = simpleGit(projectRoot);
|
|
143
|
-
if (await git.checkIsRepo('root')) {
|
|
144
|
-
info('Git repository already exists');
|
|
145
|
-
|
|
146
|
-
const remoteOrigin = await git.remote(['get-url', 'origin']);
|
|
147
|
-
const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);
|
|
148
|
-
|
|
149
|
-
return {owner: user, name: project, host: type};
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
info('Initializing Git Repository');
|
|
153
|
-
|
|
154
|
-
const [answers] = await Promise.all([
|
|
155
|
-
promptForVcsHostDetails(vcsHosts, visibility, decisions),
|
|
156
|
-
git.init()
|
|
157
|
-
]);
|
|
158
|
-
|
|
159
|
-
return {
|
|
160
|
-
host: answers[questionNames$1.REPO_HOST].toLowerCase(),
|
|
161
|
-
owner: answers[questionNames$1.REPO_OWNER],
|
|
162
|
-
name: projectName
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return undefined;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
async function scaffold$1({projectRoot, ignore, origin}) {
|
|
170
|
-
info('Finishing Git Configuration');
|
|
171
|
-
|
|
172
|
-
const [remoteOriginResults] = await Promise.all([
|
|
173
|
-
defineRemoteOrigin(projectRoot, origin),
|
|
174
|
-
generateConfigFiles(projectRoot, ignore)
|
|
175
|
-
]);
|
|
176
|
-
|
|
177
|
-
return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
async function scaffoldLicense ({projectRoot, license, copyright, vcs}) {
|
|
181
|
-
if (license) {
|
|
182
|
-
info('Generating License');
|
|
183
|
-
|
|
184
|
-
const licenseContent = spdxLicenseList[license].licenseText;
|
|
185
|
-
|
|
186
|
-
await promises$1.writeFile(
|
|
187
|
-
`${projectRoot}/LICENSE`,
|
|
188
|
-
`${wrap(
|
|
189
|
-
mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),
|
|
190
|
-
{width: 80, indent: ''}
|
|
191
|
-
)}\n`
|
|
192
|
-
);
|
|
193
|
-
|
|
194
|
-
return {
|
|
195
|
-
...vcs && 'github' === vcs.host && {
|
|
196
|
-
badges: {
|
|
197
|
-
consumer: {
|
|
198
|
-
license: {
|
|
199
|
-
img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,
|
|
200
|
-
text: `${license} license`,
|
|
201
|
-
link: 'LICENSE'
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
return {};
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
function scaffoldVcsHost (hosts, options) {
|
|
213
|
-
const lowercasedHosts = Object.fromEntries(
|
|
214
|
-
Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])
|
|
215
|
-
);
|
|
216
|
-
const {host: chosenHost, ...rest} = options;
|
|
217
|
-
const host = lowercasedHosts[chosenHost];
|
|
218
|
-
|
|
219
|
-
if (host) return host.scaffolder(rest);
|
|
220
|
-
|
|
221
|
-
return {};
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
async function promptForDependencyUpdaterChoice(updaters, decisions) {
|
|
225
|
-
return prompt([{
|
|
226
|
-
name: questionNames$1.DEPENDENCY_UPDATER,
|
|
227
|
-
type: 'list',
|
|
228
|
-
message: 'Which dependency-update service do you want to manage this project?',
|
|
229
|
-
choices: [...Object.keys(updaters), new Separator(), 'Other']
|
|
230
|
-
}], decisions);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
async function scaffoldDependencyUpdater (scaffolders, decisions, options) {
|
|
234
|
-
if (!Object.keys(scaffolders).length) return undefined;
|
|
235
|
-
|
|
236
|
-
const scaffolderDetails = scaffolders[
|
|
237
|
-
(await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames$1.DEPENDENCY_UPDATER]
|
|
238
|
-
];
|
|
239
|
-
|
|
240
|
-
if (scaffolderDetails) return scaffolderDetails.scaffolder(options);
|
|
241
|
-
|
|
242
|
-
return undefined;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {
|
|
246
|
-
return prompt([
|
|
247
|
-
...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),
|
|
248
|
-
{name: questionNames$1.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}
|
|
249
|
-
], decisions);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
var languagePluginsSchema = joi.object().pattern(/^/, joi.func().arity(1));
|
|
253
|
-
|
|
254
|
-
var vcsHostPluginsSchema = joi.object().pattern(/^/, joi.object({
|
|
255
|
-
scaffolder: joi.func().arity(1).required(),
|
|
256
|
-
prompt: joi.func().required(),
|
|
257
|
-
public: joi.bool(),
|
|
258
|
-
private: joi.bool()
|
|
259
|
-
}));
|
|
260
|
-
|
|
261
|
-
var dependencyUpdaterPluginsSchema = joi.object().pattern(/^/, joi.object({
|
|
262
|
-
scaffolder: joi.func().arity(1).required()
|
|
263
|
-
})).default({});
|
|
264
|
-
|
|
265
|
-
const overridesSchema = joi.object({copyrightHolder: joi.string()});
|
|
266
|
-
|
|
267
|
-
const decisionsSchema = joi.object();
|
|
268
|
-
|
|
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) || {};
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
function determinePathToTemplateFile (fileName) {
|
|
283
|
-
const [, __dirname] = filedirname();
|
|
284
|
-
|
|
285
|
-
return resolve(__dirname, '..', 'templates', fileName);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
function scaffoldEditorConfig ({projectRoot}) {
|
|
289
|
-
return promises.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
async function scaffold(options) {
|
|
293
|
-
const projectRoot = process.cwd();
|
|
294
|
-
const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);
|
|
295
|
-
const {copyrightHolder} = overrides;
|
|
296
|
-
|
|
297
|
-
const {
|
|
298
|
-
[questionNames$2.PROJECT_NAME]: projectName,
|
|
299
|
-
[questionNames$2.LICENSE]: chosenLicense,
|
|
300
|
-
[questionNames$2.VISIBILITY]: visibility,
|
|
301
|
-
[questionNames$2.DESCRIPTION]: description,
|
|
302
|
-
[questionNames$1.GIT_REPO]: gitRepo,
|
|
303
|
-
[questionNames$2.COPYRIGHT_YEAR]: copyrightYear,
|
|
304
|
-
[questionNames$2.COPYRIGHT_HOLDER]: copyHolder
|
|
305
|
-
} = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);
|
|
306
|
-
const copyright = {year: copyrightYear, holder: copyHolder};
|
|
307
|
-
|
|
308
|
-
const vcs = await initialize(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);
|
|
309
|
-
|
|
310
|
-
const {[questionNames$1.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);
|
|
311
|
-
|
|
312
|
-
const [license, language] = await Promise.all([
|
|
313
|
-
scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),
|
|
314
|
-
scaffoldLanguage(
|
|
315
|
-
languages,
|
|
316
|
-
projectLanguage,
|
|
317
|
-
{projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}
|
|
318
|
-
)
|
|
319
|
-
]);
|
|
320
|
-
|
|
321
|
-
const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(
|
|
322
|
-
dependencyUpdaters,
|
|
323
|
-
decisions,
|
|
324
|
-
{projectRoot, vcs}
|
|
325
|
-
);
|
|
326
|
-
|
|
327
|
-
const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);
|
|
328
|
-
const contributedTasks = contributors
|
|
329
|
-
.map(contributor => contributor.nextSteps)
|
|
330
|
-
.filter(Boolean)
|
|
331
|
-
.reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);
|
|
332
|
-
|
|
333
|
-
const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {
|
|
334
|
-
...vcs,
|
|
335
|
-
projectRoot,
|
|
336
|
-
/**
|
|
337
|
-
* @deprecated vcs-host plugins should no longer expect `projectType` to be provided.
|
|
338
|
-
* will be removed with the next major version
|
|
339
|
-
*/
|
|
340
|
-
projectType: projectLanguage,
|
|
341
|
-
description,
|
|
342
|
-
visibility,
|
|
343
|
-
...language && {
|
|
344
|
-
homepage: language.projectDetails && language.projectDetails.homepage,
|
|
345
|
-
tags: language.tags
|
|
346
|
-
},
|
|
347
|
-
nextSteps: contributedTasks
|
|
348
|
-
});
|
|
349
|
-
|
|
350
|
-
await Promise.all([
|
|
351
|
-
scaffoldReadme({
|
|
352
|
-
projectName,
|
|
353
|
-
projectRoot,
|
|
354
|
-
description,
|
|
355
|
-
...language && {documentation: language.documentation},
|
|
356
|
-
badges: deepmerge.all([
|
|
357
|
-
{
|
|
358
|
-
contribution: {
|
|
359
|
-
...'Public' === visibility && {
|
|
360
|
-
PRs: {
|
|
361
|
-
text: 'PRs Welcome',
|
|
362
|
-
link: 'https://makeapullrequest.com',
|
|
363
|
-
img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
},
|
|
367
|
-
status: {},
|
|
368
|
-
consumer: {}
|
|
369
|
-
},
|
|
370
|
-
...contributors.map(contributor => contributor.badges).filter(Boolean)
|
|
371
|
-
])
|
|
372
|
-
}),
|
|
373
|
-
scaffoldEditorConfig({projectRoot})
|
|
374
|
-
]);
|
|
375
|
-
|
|
376
|
-
const gitResults = gitRepo && await scaffold$1({
|
|
377
|
-
projectRoot,
|
|
378
|
-
...language && {ignore: language.vcsIgnore},
|
|
379
|
-
origin: vcsHostResults
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
if (language && language.verificationCommand) {
|
|
383
|
-
info('Verifying the generated project');
|
|
384
|
-
|
|
385
|
-
const subprocess = execa(language.verificationCommand, {shell: true});
|
|
386
|
-
subprocess.stdout.pipe(process.stdout);
|
|
387
|
-
await subprocess;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
reportResults({
|
|
391
|
-
nextSteps: [
|
|
392
|
-
...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],
|
|
393
|
-
...contributedTasks
|
|
394
|
-
]
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
async function lift ({projectRoot, results, enhancers, vcs}) {
|
|
399
|
-
const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});
|
|
400
|
-
|
|
401
|
-
await lift$1({projectRoot, results: deepmerge.all([results, enhancerResults])});
|
|
402
|
-
|
|
403
|
-
return enhancerResults;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
const questionNames = {
|
|
407
|
-
...questionNames$2,
|
|
408
|
-
...questionNames$1
|
|
409
|
-
};
|
|
410
|
-
|
|
411
|
-
export { lift, questionNames, scaffold };
|
|
412
|
-
//# 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/vcs/host/schema.js","../src/dependency-updater/schema.js","../src/options-schemas.js","../src/options-validator.js","../src/template-path.js","../src/editorconfig/scaffolder.js","../src/scaffolder.js","../src/lift.js","../src/index.js"],"sourcesContent":["export const questionNames = {\n GIT_REPO: 'gitRepo',\n REPO_HOST: 'repoHost',\n REPO_OWNER: 'repoOwner',\n PROJECT_LANGUAGE: 'projectLanguage',\n DEPENDENCY_UPDATER: 'dependencyUpdater'\n};\n","export default function (scaffolders, chosenLanguage, options) {\n const scaffolder = scaffolders[chosenLanguage];\n\n if (scaffolder) return scaffolder(options);\n\n return undefined;\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../prompts/question-names';\n\nexport default function (languages, decisions) {\n return prompt([{\n name: questionNames.PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), new Separator(), 'Other']\n }], decisions);\n}\n","import {scaffold as scaffoldReadme} from '@form8ion/readme';\n\nexport default function ({projectRoot, projectName, description}) {\n return scaffoldReadme({projectRoot, projectName, description});\n}\n","import {lift as liftReadme} from '@form8ion/readme';\n\nimport {scaffold as scaffoldReadme} from './readme/index';\n\nexport default async function ({projectName, projectRoot, description, badges, documentation}) {\n await scaffoldReadme({projectRoot, projectName, description});\n\n return liftReadme({projectRoot, results: {badges, documentation}});\n}\n","import {Separator} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function unlicensedConfirmationShouldBePresented(answers) {\n return 'Private' === answers[questionNames.VISIBILITY];\n}\n\nexport function licenseChoicesShouldBePresented(answers) {\n return 'Public' === answers[questionNames.VISIBILITY] || !answers[questionNames.UNLICENSED];\n}\n\nexport function copyrightInformationShouldBeRequested(answers) {\n return !!answers[questionNames.LICENSE];\n}\n\nexport function filterChoicesByVisibility(choices, visibility) {\n return [\n ...Object.entries(choices)\n .filter(([, choice]) => choice[visibility.toLowerCase()])\n .reduce((acc, [name]) => ([...acc, name]), []),\n new Separator(),\n 'Other'\n ];\n}\n","import {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from '../../prompts/question-names';\nimport {filterChoicesByVisibility} from '../../prompts/conditionals';\n\nexport default async function (hosts, visibility, decisions) {\n const answers = await prompt([{\n name: questionNames.REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: filterChoicesByVisibility(hosts, visibility)\n }], decisions);\n const host = hosts[answers[questionNames.REPO_HOST]];\n\n return {...answers, ...host && await host.prompt({decisions})};\n}\n","import {promises as fs} from 'node:fs';\n\nimport {simpleGit} from 'simple-git';\nimport hostedGitInfo from 'hosted-git-info';\nimport {info, warn} from '@travi/cli-messages';\n\nimport promptForVcsHostDetails from './host/prompt';\nimport {questionNames} from '../prompts/question-names';\n\nfunction createIgnoreFile(projectRoot, ignore) {\n const {directories, files} = ignore;\n\n return fs.writeFile(`${projectRoot}/.gitignore`, `${directories.join('\\n')}\\n\\n${files.join('\\n')}`);\n}\n\nfunction generateConfigFiles(projectRoot, ignore) {\n info('Generating Git config files', {level: 'secondary'});\n\n return Promise.all([\n fs.writeFile(`${projectRoot}/.gitattributes`, '* text=auto'),\n ignore ? createIgnoreFile(projectRoot, ignore) : undefined\n ].filter(Boolean));\n}\n\nasync function getExistingRemotes(git) {\n try {\n return await git.listRemote();\n } catch (e) {\n if ('fatal: No remote configured to list refs from.\\n' === e.message) {\n return [];\n }\n\n throw e;\n }\n}\n\nasync function defineRemoteOrigin(projectRoot, origin) {\n const git = simpleGit(projectRoot);\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\n\n if (origin.sshUrl) {\n info(`Setting remote origin to ${origin.sshUrl}`, {level: 'secondary'});\n\n await git.addRemote('origin', origin.sshUrl);\n\n // info('Setting the local `master` branch to track `origin/master`');\n //\n // await gitBranch.setUpstream(\n // await gitBranch.lookup(repository, 'master', gitBranch.BRANCH.LOCAL),\n // 'origin/master'\n // );\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n }\n\n warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n}\n\nexport async function initialize(\n gitRepoShouldBeInitialized,\n projectRoot,\n projectName,\n vcsHosts,\n visibility,\n decisions\n) {\n if (gitRepoShouldBeInitialized) {\n const git = simpleGit(projectRoot);\n if (await git.checkIsRepo('root')) {\n info('Git repository already exists');\n\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {user, project, type} = hostedGitInfo.fromUrl(remoteOrigin);\n\n return {owner: user, name: project, host: type};\n }\n\n info('Initializing Git Repository');\n\n const [answers] = await Promise.all([\n promptForVcsHostDetails(vcsHosts, visibility, decisions),\n git.init()\n ]);\n\n return {\n host: answers[questionNames.REPO_HOST].toLowerCase(),\n owner: answers[questionNames.REPO_OWNER],\n name: projectName\n };\n }\n\n return undefined;\n}\n\nexport async function scaffold({projectRoot, ignore, origin}) {\n info('Finishing Git Configuration');\n\n const [remoteOriginResults] = await Promise.all([\n defineRemoteOrigin(projectRoot, origin),\n generateConfigFiles(projectRoot, ignore)\n ]);\n\n return {nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]};\n}\n","import {promises as fs} from 'fs';\nimport wrap from 'word-wrap';\nimport mustache from 'mustache';\n// eslint-disable-next-line import/extensions\nimport spdxLicenseList from 'spdx-license-list/full.js';\nimport {info} from '@travi/cli-messages';\n\nexport default async function ({projectRoot, license, copyright, vcs}) {\n if (license) {\n info('Generating License');\n\n const licenseContent = spdxLicenseList[license].licenseText;\n\n await fs.writeFile(\n `${projectRoot}/LICENSE`,\n `${wrap(\n mustache.render(licenseContent, {year: copyright.year, 'copyright holders': copyright.holder}, {}, ['<', '>']),\n {width: 80, indent: ''}\n )}\\n`\n );\n\n return {\n ...vcs && 'github' === vcs.host && {\n badges: {\n consumer: {\n license: {\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg`,\n text: `${license} license`,\n link: 'LICENSE'\n }\n }\n }\n }\n };\n }\n\n return {};\n}\n","export default function (hosts, options) {\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const {host: chosenHost, ...rest} = options;\n const host = lowercasedHosts[chosenHost];\n\n if (host) return host.scaffolder(rest);\n\n return {};\n}\n","import {prompt, Separator} from '@form8ion/overridable-prompts';\nimport {questionNames} from '../prompts/question-names';\n\nexport async function promptForDependencyUpdaterChoice(updaters, decisions) {\n return prompt([{\n name: questionNames.DEPENDENCY_UPDATER,\n type: 'list',\n message: 'Which dependency-update service do you want to manage this project?',\n choices: [...Object.keys(updaters), new Separator(), 'Other']\n }], decisions);\n}\n","import {questionNames} from '../prompts/question-names';\nimport {promptForDependencyUpdaterChoice} from './prompt';\n\nexport default async function (scaffolders, decisions, options) {\n if (!Object.keys(scaffolders).length) return undefined;\n\n const scaffolderDetails = scaffolders[\n (await promptForDependencyUpdaterChoice(scaffolders, decisions))[questionNames.DEPENDENCY_UPDATER]\n ];\n\n if (scaffolderDetails) return scaffolderDetails.scaffolder(options);\n\n return undefined;\n}\n","import {questionsForBaseDetails} from '@form8ion/core';\nimport {prompt} from '@form8ion/overridable-prompts';\n\nimport {questionNames} from './question-names';\n\nexport function promptForBaseDetails(projectRoot, copyrightHolder, decisions) {\n return prompt([\n ...questionsForBaseDetails(decisions, projectRoot, copyrightHolder),\n {name: questionNames.GIT_REPO, type: 'confirm', default: true, message: 'Should a git repository be initialized?'}\n ], decisions);\n}\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.func().arity(1));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required(),\n prompt: joi.func().required(),\n public: joi.bool(),\n private: joi.bool()\n}));\n","import joi from 'joi';\n\nexport default joi.object().pattern(/^/, joi.object({\n scaffolder: joi.func().arity(1).required()\n})).default({});\n","import joi from 'joi';\n\nexport const overridesSchema = joi.object({copyrightHolder: joi.string()});\n\nexport const decisionsSchema = joi.object();\n","import {validateOptions} from '@form8ion/core';\nimport joi from 'joi';\n\nimport languagePluginsSchema from './language/schema';\nimport vcsHostPluginsSchema from './vcs/host/schema';\nimport dependencyUpdaterPluginsSchema from './dependency-updater/schema';\nimport {decisionsSchema, overridesSchema} from './options-schemas';\n\nexport function validate(options) {\n return validateOptions(joi.object({\n languages: languagePluginsSchema,\n /**\n * @deprecated overrides should no longer be necessary. use decisions instead\n */\n overrides: overridesSchema,\n vcsHosts: vcsHostPluginsSchema,\n decisions: decisionsSchema,\n dependencyUpdaters: dependencyUpdaterPluginsSchema\n }), options) || {};\n}\n","import {resolve} from 'path';\nimport filedirname from 'filedirname';\n\nexport default function (fileName) {\n const [, __dirname] = filedirname();\n\n return resolve(__dirname, '..', 'templates', fileName);\n}\n","import {promises as fs} from 'node:fs';\n\nimport determinePathToTemplateFile from '../template-path';\n\nexport default function ({projectRoot}) {\n return fs.copyFile(determinePathToTemplateFile('editorconfig.txt'), `${projectRoot}/.editorconfig`);\n}\n","import deepmerge from 'deepmerge';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {reportResults} from '@form8ion/results-reporter';\nimport {info} from '@travi/cli-messages';\n\nimport execa from '../thirdparty-wrappers/execa';\nimport {scaffold as scaffoldLanguage, prompt as promptForLanguageDetails} from './language';\nimport scaffoldReadme from './readme';\nimport {initialize as initializeGit, scaffold as scaffoldGit} from './vcs/git';\nimport {scaffold as scaffoldLicense} from './license';\nimport {scaffold as scaffoldVcsHost} from './vcs/host';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder';\nimport {promptForBaseDetails} from './prompts/questions';\nimport {validate} from './options-validator';\nimport {questionNames} from './prompts/question-names';\nimport {scaffold as scaffoldEditorConfig} from './editorconfig';\n\nexport async function scaffold(options) {\n const projectRoot = process.cwd();\n const {languages = {}, overrides = {}, vcsHosts = {}, decisions, dependencyUpdaters} = validate(options);\n const {copyrightHolder} = overrides;\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [questionNames.GIT_REPO]: gitRepo,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, copyrightHolder, decisions);\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const vcs = await initializeGit(gitRepo, projectRoot, projectName, vcsHosts, visibility, decisions);\n\n const {[questionNames.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions);\n\n const [license, language] = await Promise.all([\n scaffoldLicense({projectRoot, license: chosenLicense, copyright, vcs}),\n scaffoldLanguage(\n languages,\n projectLanguage,\n {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description}\n )\n ]);\n\n const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n decisions,\n {projectRoot, vcs}\n );\n\n const contributors = [license, language, dependencyUpdaterResults].filter(Boolean);\n const contributedTasks = contributors\n .map(contributor => contributor.nextSteps)\n .filter(Boolean)\n .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []);\n\n const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, {\n ...vcs,\n projectRoot,\n /**\n * @deprecated vcs-host plugins should no longer expect `projectType` to be provided.\n * will be removed with the next major version\n */\n projectType: projectLanguage,\n description,\n visibility,\n ...language && {\n homepage: language.projectDetails && language.projectDetails.homepage,\n tags: language.tags\n },\n nextSteps: contributedTasks\n });\n\n await Promise.all([\n scaffoldReadme({\n projectName,\n projectRoot,\n description,\n ...language && {documentation: language.documentation},\n badges: deepmerge.all([\n {\n contribution: {\n ...'Public' === visibility && {\n PRs: {\n text: 'PRs Welcome',\n link: 'https://makeapullrequest.com',\n img: 'https://img.shields.io/badge/PRs-welcome-brightgreen.svg'\n }\n }\n },\n status: {},\n consumer: {}\n },\n ...contributors.map(contributor => contributor.badges).filter(Boolean)\n ])\n }),\n scaffoldEditorConfig({projectRoot})\n ]);\n\n const gitResults = gitRepo && await scaffoldGit({\n projectRoot,\n ...language && {ignore: language.vcsIgnore},\n origin: vcsHostResults\n });\n\n if (language && language.verificationCommand) {\n info('Verifying the generated project');\n\n const subprocess = execa(language.verificationCommand, {shell: true});\n subprocess.stdout.pipe(process.stdout);\n await subprocess;\n }\n\n reportResults({\n nextSteps: [\n ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [],\n ...contributedTasks\n ]\n });\n}\n","import deepmerge from 'deepmerge';\nimport {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\n\nexport default async function ({projectRoot, results, enhancers, vcs}) {\n const enhancerResults = await applyEnhancers({results, enhancers, options: {projectRoot, vcs}});\n\n await liftReadme({projectRoot, results: deepmerge.all([results, enhancerResults])});\n\n return enhancerResults;\n}\n","import {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {questionNames as projectScaffolderQuestionNames} from './prompts/question-names';\n\nexport * from './scaffolder';\nexport {default as lift} from './lift';\nexport const questionNames = {\n ...coreQuestionNames,\n ...projectScaffolderQuestionNames\n};\n"],"names":["questionNames","scaffoldReadme","liftReadme","fs","scaffold","coreQuestionNames","initializeGit","scaffoldGit","projectScaffolderQuestionNames"],"mappings":"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"}
|