@form8ion/project 22.0.0-beta.12 → 22.0.0-beta.14
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 +43 -11
- package/lib/index.js +139 -102
- package/lib/index.js.map +1 -1
- package/package.json +9 -9
- package/src/ci-provider/prompt.js +17 -0
- package/src/ci-provider/prompt.test.js +27 -0
- package/src/ci-provider/schema.js +4 -0
- package/src/ci-provider/schema.test.js +43 -0
- package/src/contributing/scaffolder.js +1 -1
- package/src/dependency-updater/prompt.js +3 -1
- package/src/dependency-updater/prompt.test.js +4 -2
- package/src/dependency-updater/scaffolder.js +4 -2
- package/src/dependency-updater/scaffolder.test.js +11 -4
- package/src/editorconfig/index.js +1 -0
- package/src/editorconfig/scaffolder.js +1 -1
- package/src/editorconfig/tester.js +5 -0
- package/src/editorconfig/tester.test.js +25 -0
- package/src/index.js +1 -5
- package/src/language/prompt.js +3 -1
- package/src/language/prompt.test.js +3 -1
- package/src/language/scaffolder.js +4 -2
- package/src/language/scaffolder.test.js +10 -5
- package/src/license/lifter.js +1 -1
- package/src/license/tester.js +1 -1
- package/src/lift.js +5 -0
- package/src/lift.test.js +23 -11
- package/src/options-validator.js +3 -1
- package/src/options-validator.test.js +3 -1
- package/src/prompts/index.js +7 -8
- package/src/prompts/question-names.js +19 -5
- package/src/scaffolder.js +5 -5
- package/src/scaffolder.test.js +6 -4
- package/src/template-path.js +1 -1
- package/src/vcs/host/prompt.js +4 -2
- package/src/vcs/host/prompt.test.js +6 -4
- package/src/vcs/host/scaffolder.js +3 -1
- package/src/vcs/host/scaffolder.test.js +4 -2
- package/src/vcs/prompt.js +4 -2
- package/src/vcs/prompt.test.js +4 -2
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ a wrapper.
|
|
|
72
72
|
|
|
73
73
|
```javascript
|
|
74
74
|
import {ungroupObject} from '@form8ion/core';
|
|
75
|
-
import {lift,
|
|
75
|
+
import {lift, promptConstants, scaffold} from '@form8ion/project';
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
#### Execute
|
|
@@ -96,16 +96,48 @@ const plugins = {
|
|
|
96
96
|
await scaffold(
|
|
97
97
|
{plugins},
|
|
98
98
|
{
|
|
99
|
-
prompt: () =>
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
99
|
+
prompt: async ({id}) => {
|
|
100
|
+
const {questionNames, ids} = promptConstants;
|
|
101
|
+
const {
|
|
102
|
+
BASE_DETAILS: baseDetailsPromptId,
|
|
103
|
+
GIT_REPOSITORY: gitRepositoryPromptId,
|
|
104
|
+
PROJECT_LANGUAGE: projectLanguagePromptId
|
|
105
|
+
} = ids;
|
|
106
|
+
|
|
107
|
+
switch (id) {
|
|
108
|
+
case baseDetailsPromptId: {
|
|
109
|
+
const {
|
|
110
|
+
PROJECT_NAME,
|
|
111
|
+
LICENSE,
|
|
112
|
+
VISIBILITY,
|
|
113
|
+
DESCRIPTION,
|
|
114
|
+
COPYRIGHT_HOLDER,
|
|
115
|
+
COPYRIGHT_YEAR
|
|
116
|
+
} = questionNames[baseDetailsPromptId];
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
[PROJECT_NAME]: 'my-project',
|
|
120
|
+
[LICENSE]: 'MIT',
|
|
121
|
+
[VISIBILITY]: 'Public',
|
|
122
|
+
[DESCRIPTION]: 'My project',
|
|
123
|
+
[COPYRIGHT_HOLDER]: 'John Smith',
|
|
124
|
+
[COPYRIGHT_YEAR]: '2022'
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
case gitRepositoryPromptId: {
|
|
128
|
+
const {GIT_REPO} = questionNames[gitRepositoryPromptId];
|
|
129
|
+
|
|
130
|
+
return {[GIT_REPO]: false};
|
|
131
|
+
}
|
|
132
|
+
case projectLanguagePromptId: {
|
|
133
|
+
const {PROJECT_LANGUAGE} = questionNames[projectLanguagePromptId];
|
|
134
|
+
|
|
135
|
+
return {[PROJECT_LANGUAGE]: 'foo'};
|
|
136
|
+
}
|
|
137
|
+
default:
|
|
138
|
+
throw new Error(`Unknown prompt with ID: ${id}`);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
109
141
|
logger: {
|
|
110
142
|
info: () => undefined,
|
|
111
143
|
success: () => undefined,
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { questionsForBaseDetails, questionNames as questionNames$2, fileExists, optionsSchemas, validateOptions, applyEnhancers } from '@form8ion/core';
|
|
2
1
|
import deepmerge from 'deepmerge';
|
|
3
2
|
import { execa } from 'execa';
|
|
3
|
+
import { questionNames as questionNames$1, fileExists, questionsForBaseDetails, optionsSchemas, validateOptions, applyEnhancers } from '@form8ion/core';
|
|
4
4
|
import { lift as lift$1, scaffold as scaffold$2 } from '@form8ion/readme';
|
|
5
5
|
import * as gitPlugin from '@form8ion/git';
|
|
6
6
|
import { test, scaffold as scaffold$1 } from '@form8ion/git';
|
|
@@ -15,46 +15,35 @@ import { promises as promises$1 } from 'node:fs';
|
|
|
15
15
|
import { resolve } from 'path';
|
|
16
16
|
import filedirname from 'filedirname';
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
18
|
+
const questionNames = {
|
|
19
|
+
BASE_DETAILS: questionNames$1,
|
|
20
|
+
GIT_REPOSITORY: {
|
|
21
|
+
GIT_REPO: 'gitRepo'
|
|
22
|
+
},
|
|
23
|
+
REPOSITORY_HOST: {
|
|
24
|
+
REPO_HOST: 'repoHost',
|
|
25
|
+
REPO_OWNER: 'repoOwner'
|
|
26
|
+
},
|
|
27
|
+
PROJECT_LANGUAGE: {
|
|
28
|
+
PROJECT_LANGUAGE: 'projectLanguage'
|
|
29
|
+
},
|
|
30
|
+
DEPENDENCY_UPDATER: {
|
|
31
|
+
DEPENDENCY_UPDATER: 'dependencyUpdater'
|
|
32
|
+
},
|
|
33
|
+
CI_PROVIDER: {
|
|
34
|
+
CI_PROVIDER: 'ciProvider'
|
|
35
|
+
}
|
|
33
36
|
};
|
|
34
37
|
|
|
35
|
-
const GIT_REPOSITORY_PROMPT_ID = 'GIT_REPOSITORY';
|
|
36
|
-
|
|
37
|
-
async function promptForRepoCreation({prompt}) {
|
|
38
|
-
const {[questionNames$1.GIT_REPO]: gitRepoShouldBeCreated} = await prompt({
|
|
39
|
-
id: GIT_REPOSITORY_PROMPT_ID,
|
|
40
|
-
questions: [{
|
|
41
|
-
name: questionNames$1.GIT_REPO,
|
|
42
|
-
type: 'confirm',
|
|
43
|
-
default: true,
|
|
44
|
-
message: 'Should a git repository be initialized?'
|
|
45
|
-
}]
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
return gitRepoShouldBeCreated;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
38
|
const PROJECT_LANGUAGE_PROMPT_ID = 'PROJECT_LANGUAGE';
|
|
52
39
|
|
|
40
|
+
const {PROJECT_LANGUAGE: PROJECT_LANGUAGE$1} = questionNames.PROJECT_LANGUAGE;
|
|
41
|
+
|
|
53
42
|
function promptForProjectLanguage(languages, {prompt}) {
|
|
54
43
|
return prompt({
|
|
55
44
|
id: PROJECT_LANGUAGE_PROMPT_ID,
|
|
56
45
|
questions: [{
|
|
57
|
-
name:
|
|
46
|
+
name: PROJECT_LANGUAGE$1,
|
|
58
47
|
type: 'list',
|
|
59
48
|
message: 'What type of project is this?',
|
|
60
49
|
choices: [...Object.keys(languages), 'Other']
|
|
@@ -62,58 +51,34 @@ function promptForProjectLanguage(languages, {prompt}) {
|
|
|
62
51
|
});
|
|
63
52
|
}
|
|
64
53
|
|
|
65
|
-
const
|
|
54
|
+
const {PROJECT_LANGUAGE} = questionNames.PROJECT_LANGUAGE;
|
|
66
55
|
|
|
67
|
-
async function
|
|
68
|
-
const
|
|
69
|
-
id: REPOSITORY_HOST_PROMPT_ID,
|
|
70
|
-
questions: [{
|
|
71
|
-
name: questionNames$1.REPO_HOST,
|
|
72
|
-
type: 'list',
|
|
73
|
-
message: 'Where will the repository be hosted?',
|
|
74
|
-
choices: Object.keys(hosts)
|
|
75
|
-
}]
|
|
76
|
-
});
|
|
77
|
-
const host = hosts[answers[questionNames$1.REPO_HOST]];
|
|
56
|
+
async function scaffoldLanguage(languagePlugins, options, {prompt}) {
|
|
57
|
+
const {[PROJECT_LANGUAGE]: chosenLanguage} = await promptForProjectLanguage(languagePlugins, {prompt});
|
|
78
58
|
|
|
79
|
-
|
|
80
|
-
}
|
|
59
|
+
const plugin = languagePlugins[chosenLanguage];
|
|
81
60
|
|
|
82
|
-
|
|
61
|
+
if (plugin) return plugin.scaffold(options);
|
|
83
62
|
|
|
84
|
-
|
|
85
|
-
return prompt({
|
|
86
|
-
id: DEPENDENCY_UPDATER_PROMPT_ID,
|
|
87
|
-
questions: [{
|
|
88
|
-
name: questionNames$1.DEPENDENCY_UPDATER,
|
|
89
|
-
type: 'list',
|
|
90
|
-
message: 'Which dependency-update service do you want to manage this project?',
|
|
91
|
-
choices: [...Object.keys(updaters), 'Other']
|
|
92
|
-
}]
|
|
93
|
-
});
|
|
63
|
+
return undefined;
|
|
94
64
|
}
|
|
95
65
|
|
|
96
|
-
const
|
|
97
|
-
BASE_DETAILS: BASE_DETAILS_PROMPT_ID,
|
|
98
|
-
GIT_REPOSITORY: GIT_REPOSITORY_PROMPT_ID,
|
|
99
|
-
REPOSITORY_HOST: REPOSITORY_HOST_PROMPT_ID,
|
|
100
|
-
PROJECT_LANGUAGE: PROJECT_LANGUAGE_PROMPT_ID,
|
|
101
|
-
DEPENDENCY_UPDATER: DEPENDENCY_UPDATER_PROMPT_ID
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const questionNames = {
|
|
105
|
-
...questionNames$2,
|
|
106
|
-
...questionNames$1
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
async function scaffoldLanguage (languagePlugins, options, {prompt}) {
|
|
110
|
-
const {[questionNames$1.PROJECT_LANGUAGE]: chosenLanguage} = await promptForProjectLanguage(languagePlugins, {prompt});
|
|
66
|
+
const GIT_REPOSITORY_PROMPT_ID = 'GIT_REPOSITORY';
|
|
111
67
|
|
|
112
|
-
|
|
68
|
+
const {GIT_REPO} = questionNames.GIT_REPOSITORY;
|
|
113
69
|
|
|
114
|
-
|
|
70
|
+
async function promptForRepoCreation({prompt}) {
|
|
71
|
+
const {[GIT_REPO]: gitRepoShouldBeCreated} = await prompt({
|
|
72
|
+
id: GIT_REPOSITORY_PROMPT_ID,
|
|
73
|
+
questions: [{
|
|
74
|
+
name: GIT_REPO,
|
|
75
|
+
type: 'confirm',
|
|
76
|
+
default: true,
|
|
77
|
+
message: 'Should a git repository be initialized?'
|
|
78
|
+
}]
|
|
79
|
+
});
|
|
115
80
|
|
|
116
|
-
return
|
|
81
|
+
return gitRepoShouldBeCreated;
|
|
117
82
|
}
|
|
118
83
|
|
|
119
84
|
async function getExistingRemotes(git) {
|
|
@@ -164,8 +129,29 @@ async function defineRemoteOrigin(projectRoot, sshUrl, {logger}) {
|
|
|
164
129
|
return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};
|
|
165
130
|
}
|
|
166
131
|
|
|
132
|
+
const REPOSITORY_HOST_PROMPT_ID = 'REPOSITORY_HOST';
|
|
133
|
+
|
|
134
|
+
const {REPO_HOST: REPO_HOST$1} = questionNames.REPOSITORY_HOST;
|
|
135
|
+
|
|
136
|
+
async function promptForVcsHostChoice(hosts, {prompt}) {
|
|
137
|
+
const answers = await prompt({
|
|
138
|
+
id: REPOSITORY_HOST_PROMPT_ID,
|
|
139
|
+
questions: [{
|
|
140
|
+
name: REPO_HOST$1,
|
|
141
|
+
type: 'list',
|
|
142
|
+
message: 'Where will the repository be hosted?',
|
|
143
|
+
choices: Object.keys(hosts)
|
|
144
|
+
}]
|
|
145
|
+
});
|
|
146
|
+
const host = hosts[answers[REPO_HOST$1]];
|
|
147
|
+
|
|
148
|
+
return {...answers, ...host};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const {REPO_HOST} = questionNames.REPOSITORY_HOST;
|
|
152
|
+
|
|
167
153
|
async function scaffoldVcsHost(hosts, options, {prompt}) {
|
|
168
|
-
const {[
|
|
154
|
+
const {[REPO_HOST]: chosenHost} = await promptForVcsHostChoice(hosts, {prompt});
|
|
169
155
|
|
|
170
156
|
const lowercasedHosts = Object.fromEntries(
|
|
171
157
|
Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])
|
|
@@ -222,7 +208,7 @@ async function scaffoldLicense({projectRoot, license, copyright}, {logger}) {
|
|
|
222
208
|
return {};
|
|
223
209
|
}
|
|
224
210
|
|
|
225
|
-
function
|
|
211
|
+
function licenseDefined({projectRoot}) {
|
|
226
212
|
return fileExists(`${projectRoot}/LICENSE`);
|
|
227
213
|
}
|
|
228
214
|
|
|
@@ -230,7 +216,7 @@ function repositoryIsHostedOnGithub(vcs) {
|
|
|
230
216
|
return vcs && 'github' === vcs.host;
|
|
231
217
|
}
|
|
232
218
|
|
|
233
|
-
function
|
|
219
|
+
function liftLicense({vcs}) {
|
|
234
220
|
return {
|
|
235
221
|
...repositoryIsHostedOnGithub(vcs) && {
|
|
236
222
|
badges: {
|
|
@@ -248,16 +234,34 @@ function lifter ({vcs}) {
|
|
|
248
234
|
|
|
249
235
|
var licensePlugin = /*#__PURE__*/Object.freeze({
|
|
250
236
|
__proto__: null,
|
|
251
|
-
lift:
|
|
237
|
+
lift: liftLicense,
|
|
252
238
|
scaffold: scaffoldLicense,
|
|
253
|
-
test:
|
|
239
|
+
test: licenseDefined
|
|
254
240
|
});
|
|
255
241
|
|
|
256
|
-
|
|
242
|
+
const DEPENDENCY_UPDATER_PROMPT_ID = 'DEPENDENCY_UPDATER';
|
|
243
|
+
|
|
244
|
+
const {DEPENDENCY_UPDATER: DEPENDENCY_UPDATER$1} = questionNames.DEPENDENCY_UPDATER;
|
|
245
|
+
|
|
246
|
+
async function promptForDependencyUpdaterChoice(updaters, {prompt}) {
|
|
247
|
+
return prompt({
|
|
248
|
+
id: DEPENDENCY_UPDATER_PROMPT_ID,
|
|
249
|
+
questions: [{
|
|
250
|
+
name: DEPENDENCY_UPDATER$1,
|
|
251
|
+
type: 'list',
|
|
252
|
+
message: 'Which dependency-update service do you want to manage this project?',
|
|
253
|
+
choices: [...Object.keys(updaters), 'Other']
|
|
254
|
+
}]
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const {DEPENDENCY_UPDATER} = questionNames.DEPENDENCY_UPDATER;
|
|
259
|
+
|
|
260
|
+
async function scaffoldDependencyUpdater(plugins, options, {prompt}) {
|
|
257
261
|
if (!Object.keys(plugins).length) return undefined;
|
|
258
262
|
|
|
259
263
|
const plugin = plugins[
|
|
260
|
-
(await promptForDependencyUpdaterChoice(plugins, {prompt}))[
|
|
264
|
+
(await promptForDependencyUpdaterChoice(plugins, {prompt}))[DEPENDENCY_UPDATER]
|
|
261
265
|
];
|
|
262
266
|
|
|
263
267
|
if (plugin) return plugin.scaffold(options);
|
|
@@ -265,33 +269,49 @@ async function scaffoldDependencyUpdater (plugins, options, {prompt}) {
|
|
|
265
269
|
return undefined;
|
|
266
270
|
}
|
|
267
271
|
|
|
272
|
+
const BASE_DETAILS_PROMPT_ID = 'BASE_DETAILS';
|
|
273
|
+
|
|
274
|
+
function promptForBaseDetails(projectRoot, {prompt}) {
|
|
275
|
+
return prompt({
|
|
276
|
+
id: BASE_DETAILS_PROMPT_ID,
|
|
277
|
+
questions: questionsForBaseDetails(projectRoot)
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
|
|
268
281
|
var languagePluginsSchema = joi.object().pattern(/^/, optionsSchemas.form8ionPlugin).default({});
|
|
269
282
|
|
|
270
283
|
var vcsHostPluginsSchema = joi.object().pattern(/^/, optionsSchemas.form8ionPlugin);
|
|
271
284
|
|
|
272
285
|
var dependencyUpdaterPluginsSchema = joi.object().pattern(joi.string(), optionsSchemas.form8ionPlugin).default({});
|
|
273
286
|
|
|
287
|
+
var ciProviderPluginsSchema = joi.object().pattern(joi.string(), optionsSchemas.form8ionPlugin).default({});
|
|
288
|
+
|
|
274
289
|
function validate(options) {
|
|
275
290
|
return validateOptions(joi.object({
|
|
276
291
|
plugins: joi.object({
|
|
277
292
|
dependencyUpdaters: dependencyUpdaterPluginsSchema,
|
|
278
293
|
languages: languagePluginsSchema,
|
|
279
|
-
vcsHosts: vcsHostPluginsSchema
|
|
294
|
+
vcsHosts: vcsHostPluginsSchema,
|
|
295
|
+
ciProviders: ciProviderPluginsSchema
|
|
280
296
|
})
|
|
281
297
|
}), options) || {};
|
|
282
298
|
}
|
|
283
299
|
|
|
284
|
-
function
|
|
300
|
+
function determinePathToTemplate(fileName) {
|
|
285
301
|
const [, __dirname] = filedirname();
|
|
286
302
|
|
|
287
303
|
return resolve(__dirname, '..', 'templates', fileName);
|
|
288
304
|
}
|
|
289
305
|
|
|
290
|
-
function scaffoldEditorConfig
|
|
291
|
-
return promises$1.copyFile(
|
|
306
|
+
function scaffoldEditorConfig({projectRoot}) {
|
|
307
|
+
return promises$1.copyFile(determinePathToTemplate('editorconfig.ini'), `${projectRoot}/.editorconfig`);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function editorconfigInUse({projectRoot}) {
|
|
311
|
+
return fileExists(`${projectRoot}/.editorconfig`);
|
|
292
312
|
}
|
|
293
313
|
|
|
294
|
-
function
|
|
314
|
+
function scaffoldContribution({visibility}) {
|
|
295
315
|
if ('Public' === visibility) {
|
|
296
316
|
return {
|
|
297
317
|
badges: {
|
|
@@ -310,6 +330,10 @@ function scaffoldContributing ({visibility}) {
|
|
|
310
330
|
}
|
|
311
331
|
|
|
312
332
|
async function lift({projectRoot, results, enhancers, vcs, dependencies}) {
|
|
333
|
+
if (!await editorconfigInUse({projectRoot})) {
|
|
334
|
+
await scaffoldEditorConfig({projectRoot});
|
|
335
|
+
}
|
|
336
|
+
|
|
313
337
|
const enhancerResults = await applyEnhancers({
|
|
314
338
|
results,
|
|
315
339
|
enhancers: {...enhancers, gitPlugin, licensePlugin},
|
|
@@ -327,28 +351,28 @@ async function scaffold(options, {prompt, logger}) {
|
|
|
327
351
|
const {plugins: {dependencyUpdaters, languages, vcsHosts = {}}} = validate(options);
|
|
328
352
|
|
|
329
353
|
const {
|
|
330
|
-
[questionNames$
|
|
331
|
-
[questionNames$
|
|
332
|
-
[questionNames$
|
|
333
|
-
[questionNames$
|
|
334
|
-
[questionNames$
|
|
335
|
-
[questionNames$
|
|
354
|
+
[questionNames$1.PROJECT_NAME]: projectName,
|
|
355
|
+
[questionNames$1.LICENSE]: chosenLicense,
|
|
356
|
+
[questionNames$1.VISIBILITY]: visibility,
|
|
357
|
+
[questionNames$1.DESCRIPTION]: description,
|
|
358
|
+
[questionNames$1.COPYRIGHT_YEAR]: copyrightYear,
|
|
359
|
+
[questionNames$1.COPYRIGHT_HOLDER]: copyHolder
|
|
336
360
|
} = await promptForBaseDetails(projectRoot, {prompt});
|
|
337
361
|
const copyright = {year: copyrightYear, holder: copyHolder};
|
|
338
362
|
|
|
339
363
|
const [vcsResults, contributing, license] = await Promise.all([
|
|
340
364
|
scaffoldVcs({projectRoot, projectName, vcsHosts, visibility, description}, {prompt, logger}),
|
|
341
|
-
|
|
365
|
+
scaffoldContribution({visibility}),
|
|
342
366
|
scaffoldLicense({projectRoot, license: chosenLicense, copyright}, {logger}),
|
|
343
367
|
scaffold$2({projectName, projectRoot, description}),
|
|
344
368
|
scaffoldEditorConfig({projectRoot})
|
|
345
369
|
]);
|
|
346
370
|
|
|
347
|
-
const dependencyUpdaterResults = vcsResults.vcs
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
371
|
+
const [dependencyUpdaterResults] = vcsResults.vcs
|
|
372
|
+
? await Promise.all([
|
|
373
|
+
scaffoldDependencyUpdater(dependencyUpdaters, {projectRoot}, {prompt})
|
|
374
|
+
])
|
|
375
|
+
: [];
|
|
352
376
|
|
|
353
377
|
const language = await scaffoldLanguage(
|
|
354
378
|
languages,
|
|
@@ -382,7 +406,20 @@ async function scaffold(options, {prompt, logger}) {
|
|
|
382
406
|
return mergedResults;
|
|
383
407
|
}
|
|
384
408
|
|
|
385
|
-
const
|
|
409
|
+
const CI_PROVIDER_PROMPT_ID = 'CI_PROVIDER';
|
|
410
|
+
|
|
411
|
+
const {CI_PROVIDER} = questionNames.CI_PROVIDER;
|
|
412
|
+
|
|
413
|
+
const ids = {
|
|
414
|
+
BASE_DETAILS: BASE_DETAILS_PROMPT_ID,
|
|
415
|
+
GIT_REPOSITORY: GIT_REPOSITORY_PROMPT_ID,
|
|
416
|
+
REPOSITORY_HOST: REPOSITORY_HOST_PROMPT_ID,
|
|
417
|
+
PROJECT_LANGUAGE: PROJECT_LANGUAGE_PROMPT_ID,
|
|
418
|
+
DEPENDENCY_UPDATER: DEPENDENCY_UPDATER_PROMPT_ID,
|
|
419
|
+
CI_PROVIDER: CI_PROVIDER_PROMPT_ID
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
const constants = {ids, questionNames};
|
|
386
423
|
|
|
387
|
-
export { lift, promptConstants,
|
|
424
|
+
export { lift, constants as promptConstants, scaffold };
|
|
388
425
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/prompts/questions.js","../src/prompts/question-names.js","../src/vcs/prompt.js","../src/language/prompt.js","../src/vcs/host/prompt.js","../src/dependency-updater/prompt.js","../src/prompts/index.js","../src/language/scaffolder.js","../src/vcs/git/remotes.js","../src/vcs/host/scaffolder.js","../src/vcs/scaffolder.js","../src/license/scaffolder.js","../src/license/tester.js","../src/license/lifter.js","../src/dependency-updater/scaffolder.js","../src/language/schema.js","../src/vcs/host/schema.js","../src/dependency-updater/schema.js","../src/options-validator.js","../src/template-path.js","../src/editorconfig/scaffolder.js","../src/contributing/scaffolder.js","../src/lift.js","../src/scaffolder.js","../src/index.js"],"sourcesContent":["import {questionsForBaseDetails} from '@form8ion/core';\n\nexport const BASE_DETAILS_PROMPT_ID = 'BASE_DETAILS';\n\nexport function promptForBaseDetails(projectRoot, {prompt}) {\n return prompt({\n id: BASE_DETAILS_PROMPT_ID,\n questions: questionsForBaseDetails(projectRoot)\n });\n}\n","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","import {questionNames} from '../prompts/question-names.js';\n\nexport const GIT_REPOSITORY_PROMPT_ID = 'GIT_REPOSITORY';\n\nexport default async function promptForRepoCreation({prompt}) {\n const {[questionNames.GIT_REPO]: gitRepoShouldBeCreated} = await prompt({\n id: GIT_REPOSITORY_PROMPT_ID,\n questions: [{\n name: questionNames.GIT_REPO,\n type: 'confirm',\n default: true,\n message: 'Should a git repository be initialized?'\n }]\n });\n\n return gitRepoShouldBeCreated;\n}\n","import {questionNames} from '../prompts/question-names.js';\n\nexport const PROJECT_LANGUAGE_PROMPT_ID = 'PROJECT_LANGUAGE';\n\nexport default function promptForProjectLanguage(languages, {prompt}) {\n return prompt({\n id: PROJECT_LANGUAGE_PROMPT_ID,\n questions: [{\n name: questionNames.PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), 'Other']\n }]\n });\n}\n","import {questionNames} from '../../prompts/question-names.js';\n\nexport const REPOSITORY_HOST_PROMPT_ID = 'REPOSITORY_HOST';\n\nexport default async function promptForVcsHostChoice(hosts, {prompt}) {\n const answers = await prompt({\n id: REPOSITORY_HOST_PROMPT_ID,\n questions: [{\n name: questionNames.REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: Object.keys(hosts)\n }]\n });\n const host = hosts[answers[questionNames.REPO_HOST]];\n\n return {...answers, ...host};\n}\n","import {questionNames} from '../prompts/question-names.js';\n\nexport const DEPENDENCY_UPDATER_PROMPT_ID = 'DEPENDENCY_UPDATER';\n\nexport async function promptForDependencyUpdaterChoice(updaters, {prompt}) {\n return prompt({\n id: DEPENDENCY_UPDATER_PROMPT_ID,\n questions: [{\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), 'Other']\n }]\n });\n}\n","import {questionNames as coreQuestionNames} from '@form8ion/core';\n\nimport {BASE_DETAILS_PROMPT_ID} from './questions.js';\nimport {GIT_REPOSITORY_PROMPT_ID} from '../vcs/prompt.js';\nimport {PROJECT_LANGUAGE_PROMPT_ID} from '../language/prompt.js';\nimport {REPOSITORY_HOST_PROMPT_ID} from '../vcs/host/prompt.js';\nimport {DEPENDENCY_UPDATER_PROMPT_ID} from '../dependency-updater/prompt.js';\nimport {questionNames as projectScaffolderQuestionNames} from './question-names.js';\n\nexport const ids = {\n BASE_DETAILS: BASE_DETAILS_PROMPT_ID,\n GIT_REPOSITORY: GIT_REPOSITORY_PROMPT_ID,\n REPOSITORY_HOST: REPOSITORY_HOST_PROMPT_ID,\n PROJECT_LANGUAGE: PROJECT_LANGUAGE_PROMPT_ID,\n DEPENDENCY_UPDATER: DEPENDENCY_UPDATER_PROMPT_ID\n};\n\nexport const questionNames = {\n ...coreQuestionNames,\n ...projectScaffolderQuestionNames\n};\n","import {questionNames} from '../prompts/question-names.js';\nimport promptForLanguageDetails from './prompt.js';\n\nexport default async function (languagePlugins, options, {prompt}) {\n const {[questionNames.PROJECT_LANGUAGE]: chosenLanguage} = await promptForLanguageDetails(languagePlugins, {prompt});\n\n const plugin = languagePlugins[chosenLanguage];\n\n if (plugin) return plugin.scaffold(options);\n\n return undefined;\n}\n","import {simpleGit} from 'simple-git';\nimport parseGitUrl from 'git-url-parse';\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\nexport async function determineExistingVcsDetails({projectRoot}) {\n const git = simpleGit({baseDir: projectRoot});\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {owner, name, host} = parseGitUrl(remoteOrigin.trimEnd());\n\n return {vcs: {owner, name, host: 'github.com' === host ? 'github' : host}};\n}\n\nexport async function defineRemoteOrigin(projectRoot, sshUrl, {logger}) {\n if (!sshUrl) {\n logger.warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n }\n\n const git = simpleGit({baseDir: projectRoot});\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n logger.warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\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 await git.addRemote('origin', sshUrl);\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n}\n","import {questionNames} from '../../prompts/question-names.js';\nimport promptForVcsHostDetails from './prompt.js';\n\nexport default async function scaffoldVcsHost(hosts, options, {prompt}) {\n const {[questionNames.REPO_HOST]: chosenHost} = await promptForVcsHostDetails(hosts, {prompt});\n\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const host = lowercasedHosts[chosenHost.toLowerCase()];\n\n if (host) return host.scaffold(options);\n\n return {vcs: {}};\n}\n","import {scaffold as scaffoldGit, test as alreadyVersionedByGit} from '@form8ion/git';\n\nimport repositoryShouldBeCreated from './prompt.js';\nimport {determineExistingVcsDetails, defineRemoteOrigin} from './git/index.js';\nimport {scaffold as scaffoldVcsHost} from './host/index.js';\n\nexport default async function scaffoldVcs(\n {projectRoot, projectName, vcsHosts, visibility, description},\n {prompt, logger}\n) {\n if (await repositoryShouldBeCreated({prompt})) {\n if (await alreadyVersionedByGit({projectRoot})) {\n logger.info('Git repository already exists');\n\n return determineExistingVcsDetails({projectRoot});\n }\n\n const [{vcs: {host, owner, name, sshUrl}}] = await Promise.all([\n scaffoldVcsHost(vcsHosts, {projectName, projectRoot, description, visibility}, {prompt}),\n scaffoldGit({projectRoot})\n ]);\n\n const remoteOriginResults = await defineRemoteOrigin(projectRoot, sshUrl, {logger});\n\n return {\n vcs: {host, owner, name},\n nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]\n };\n }\n\n return {};\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';\n\nexport default async function scaffoldLicense({projectRoot, license, copyright}, {logger}) {\n if (license) {\n logger.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\n return {};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default function ({projectRoot}) {\n return fileExists(`${projectRoot}/LICENSE`);\n}\n","function repositoryIsHostedOnGithub(vcs) {\n return vcs && 'github' === vcs.host;\n}\n\nexport default function ({vcs}) {\n return {\n ...repositoryIsHostedOnGithub(vcs) && {\n badges: {\n consumer: {\n license: {\n link: 'LICENSE',\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg?logo=opensourceinitiative`,\n text: 'license'\n }\n }\n }\n }\n };\n}\n","import {questionNames} from '../prompts/question-names.js';\nimport {promptForDependencyUpdaterChoice} from './prompt.js';\n\nexport default async function (plugins, options, {prompt}) {\n if (!Object.keys(plugins).length) return undefined;\n\n const plugin = plugins[\n (await promptForDependencyUpdaterChoice(plugins, {prompt}))[questionNames.DEPENDENCY_UPDATER]\n ];\n\n if (plugin) return plugin.scaffold(options);\n\n return undefined;\n}\n","import joi from 'joi';\nimport {optionsSchemas} from '@form8ion/core';\n\nexport default joi.object().pattern(/^/, optionsSchemas.form8ionPlugin).default({});\n","import joi from 'joi';\nimport {optionsSchemas} from '@form8ion/core';\n\nexport default joi.object().pattern(/^/, optionsSchemas.form8ionPlugin);\n","import joi from 'joi';\nimport {optionsSchemas} from '@form8ion/core';\n\nexport default joi.object().pattern(joi.string(), optionsSchemas.form8ionPlugin).default({});\n","import {validateOptions} from '@form8ion/core';\nimport joi from 'joi';\n\nimport languagePluginsSchema from './language/schema.js';\nimport vcsHostPluginsSchema from './vcs/host/schema.js';\nimport dependencyUpdaterPluginsSchema from './dependency-updater/schema.js';\n\nexport function validate(options) {\n return validateOptions(joi.object({\n plugins: joi.object({\n dependencyUpdaters: dependencyUpdaterPluginsSchema,\n languages: languagePluginsSchema,\n vcsHosts: vcsHostPluginsSchema\n })\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.js';\n\nexport default function ({projectRoot}) {\n return fs.copyFile(determinePathToTemplateFile('editorconfig.ini'), `${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 {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\nimport * as gitPlugin from '@form8ion/git';\n\nimport * as licensePlugin from './license/index.js';\n\nexport default async function lift({projectRoot, results, enhancers, vcs, dependencies}) {\n const enhancerResults = await applyEnhancers({\n results,\n enhancers: {...enhancers, gitPlugin, licensePlugin},\n options: {projectRoot, vcs},\n dependencies\n });\n\n await liftReadme({projectRoot, results: enhancerResults});\n\n return enhancerResults;\n}\n","import deepmerge from 'deepmerge';\nimport {execa} from 'execa';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {scaffold as scaffoldReadme} from '@form8ion/readme';\n\nimport {scaffold as scaffoldLanguage} from './language/index.js';\nimport {scaffold as scaffoldVcs} from './vcs/index.js';\nimport {scaffold as scaffoldLicense} from './license/index.js';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder.js';\nimport {promptForBaseDetails} from './prompts/questions.js';\nimport {validate} from './options-validator.js';\nimport {scaffold as scaffoldEditorConfig} from './editorconfig/index.js';\nimport {scaffold as scaffoldContributing} from './contributing/index.js';\nimport lift from './lift.js';\n\nexport async function scaffold(options, {prompt, logger}) {\n const projectRoot = process.cwd();\n const {plugins: {dependencyUpdaters, languages, vcsHosts = {}}} = validate(options);\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, {prompt});\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const [vcsResults, contributing, license] = await Promise.all([\n scaffoldVcs({projectRoot, projectName, vcsHosts, visibility, description}, {prompt, logger}),\n scaffoldContributing({visibility}),\n scaffoldLicense({projectRoot, license: chosenLicense, copyright}, {logger}),\n scaffoldReadme({projectName, projectRoot, description}),\n scaffoldEditorConfig({projectRoot})\n ]);\n\n const dependencyUpdaterResults = vcsResults.vcs && await scaffoldDependencyUpdater(\n dependencyUpdaters,\n {projectRoot},\n {prompt}\n );\n\n const language = await scaffoldLanguage(\n languages,\n {projectRoot, projectName, vcs: vcsResults.vcs, visibility, license: chosenLicense || 'UNLICENSED', description},\n {prompt}\n );\n\n const mergedResults = deepmerge.all([\n license,\n language,\n dependencyUpdaterResults,\n contributing,\n vcsResults\n ].filter(Boolean));\n\n await lift({\n projectRoot,\n vcs: vcsResults.vcs,\n results: mergedResults,\n enhancers: {...dependencyUpdaters, ...languages, ...vcsHosts}\n });\n\n if (language && language.verificationCommand) {\n logger.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 return mergedResults;\n}\n","import {ids} from './prompts/index.js';\n\nexport * from './scaffolder.js';\nexport {default as lift} from './lift.js';\nexport const promptConstants = {ids};\n\nexport {questionNames} from './prompts/index.js';\n"],"names":["questionNames","coreQuestionNames","projectScaffolderQuestionNames","promptForLanguageDetails","promptForVcsHostDetails","repositoryShouldBeCreated","alreadyVersionedByGit","scaffoldGit","fs","liftReadme","scaffoldReadme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/prompts/question-names.js","../src/language/prompt.js","../src/language/scaffolder.js","../src/vcs/prompt.js","../src/vcs/git/remotes.js","../src/vcs/host/prompt.js","../src/vcs/host/scaffolder.js","../src/vcs/scaffolder.js","../src/license/scaffolder.js","../src/license/tester.js","../src/license/lifter.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/ci-provider/schema.js","../src/options-validator.js","../src/template-path.js","../src/editorconfig/scaffolder.js","../src/editorconfig/tester.js","../src/contributing/scaffolder.js","../src/lift.js","../src/scaffolder.js","../src/ci-provider/prompt.js","../src/prompts/index.js"],"sourcesContent":["import {questionNames as coreQuestionNames} from '@form8ion/core';\n\nexport const questionNames = {\n BASE_DETAILS: coreQuestionNames,\n GIT_REPOSITORY: {\n GIT_REPO: 'gitRepo'\n },\n REPOSITORY_HOST: {\n REPO_HOST: 'repoHost',\n REPO_OWNER: 'repoOwner'\n },\n PROJECT_LANGUAGE: {\n PROJECT_LANGUAGE: 'projectLanguage'\n },\n DEPENDENCY_UPDATER: {\n DEPENDENCY_UPDATER: 'dependencyUpdater'\n },\n CI_PROVIDER: {\n CI_PROVIDER: 'ciProvider'\n }\n};\n","import {questionNames} from '../prompts/question-names.js';\n\nexport const PROJECT_LANGUAGE_PROMPT_ID = 'PROJECT_LANGUAGE';\n\nconst {PROJECT_LANGUAGE} = questionNames.PROJECT_LANGUAGE;\n\nexport default function promptForProjectLanguage(languages, {prompt}) {\n return prompt({\n id: PROJECT_LANGUAGE_PROMPT_ID,\n questions: [{\n name: PROJECT_LANGUAGE,\n type: 'list',\n message: 'What type of project is this?',\n choices: [...Object.keys(languages), 'Other']\n }]\n });\n}\n","import {questionNames} from '../prompts/question-names.js';\nimport promptForLanguageDetails from './prompt.js';\n\nconst {PROJECT_LANGUAGE} = questionNames.PROJECT_LANGUAGE;\n\nexport default async function scaffoldLanguage(languagePlugins, options, {prompt}) {\n const {[PROJECT_LANGUAGE]: chosenLanguage} = await promptForLanguageDetails(languagePlugins, {prompt});\n\n const plugin = languagePlugins[chosenLanguage];\n\n if (plugin) return plugin.scaffold(options);\n\n return undefined;\n}\n","import {questionNames} from '../prompts/question-names.js';\n\nexport const GIT_REPOSITORY_PROMPT_ID = 'GIT_REPOSITORY';\n\nconst {GIT_REPO} = questionNames.GIT_REPOSITORY;\n\nexport default async function promptForRepoCreation({prompt}) {\n const {[GIT_REPO]: gitRepoShouldBeCreated} = await prompt({\n id: GIT_REPOSITORY_PROMPT_ID,\n questions: [{\n name: GIT_REPO,\n type: 'confirm',\n default: true,\n message: 'Should a git repository be initialized?'\n }]\n });\n\n return gitRepoShouldBeCreated;\n}\n","import {simpleGit} from 'simple-git';\nimport parseGitUrl from 'git-url-parse';\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\nexport async function determineExistingVcsDetails({projectRoot}) {\n const git = simpleGit({baseDir: projectRoot});\n const remoteOrigin = await git.remote(['get-url', 'origin']);\n const {owner, name, host} = parseGitUrl(remoteOrigin.trimEnd());\n\n return {vcs: {owner, name, host: 'github.com' === host ? 'github' : host}};\n}\n\nexport async function defineRemoteOrigin(projectRoot, sshUrl, {logger}) {\n if (!sshUrl) {\n logger.warn('URL not available to configure remote `origin`');\n\n return {nextSteps: []};\n }\n\n const git = simpleGit({baseDir: projectRoot});\n const existingRemotes = await getExistingRemotes(git);\n\n if (existingRemotes.includes('origin')) {\n logger.warn('The `origin` remote is already defined for this repository');\n\n return {nextSteps: []};\n }\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 await git.addRemote('origin', sshUrl);\n\n return {nextSteps: [{summary: 'Set local `master` branch to track upstream `origin/master`'}]};\n}\n","import {questionNames} from '../../prompts/question-names.js';\n\nexport const REPOSITORY_HOST_PROMPT_ID = 'REPOSITORY_HOST';\n\nconst {REPO_HOST} = questionNames.REPOSITORY_HOST;\n\nexport default async function promptForVcsHostChoice(hosts, {prompt}) {\n const answers = await prompt({\n id: REPOSITORY_HOST_PROMPT_ID,\n questions: [{\n name: REPO_HOST,\n type: 'list',\n message: 'Where will the repository be hosted?',\n choices: Object.keys(hosts)\n }]\n });\n const host = hosts[answers[REPO_HOST]];\n\n return {...answers, ...host};\n}\n","import {questionNames} from '../../prompts/question-names.js';\nimport promptForVcsHostDetails from './prompt.js';\n\nconst {REPO_HOST} = questionNames.REPOSITORY_HOST;\n\nexport default async function scaffoldVcsHost(hosts, options, {prompt}) {\n const {[REPO_HOST]: chosenHost} = await promptForVcsHostDetails(hosts, {prompt});\n\n const lowercasedHosts = Object.fromEntries(\n Object.entries(hosts).map(([name, details]) => [name.toLowerCase(), details])\n );\n const host = lowercasedHosts[chosenHost.toLowerCase()];\n\n if (host) return host.scaffold(options);\n\n return {vcs: {}};\n}\n","import {scaffold as scaffoldGit, test as alreadyVersionedByGit} from '@form8ion/git';\n\nimport repositoryShouldBeCreated from './prompt.js';\nimport {determineExistingVcsDetails, defineRemoteOrigin} from './git/index.js';\nimport {scaffold as scaffoldVcsHost} from './host/index.js';\n\nexport default async function scaffoldVcs(\n {projectRoot, projectName, vcsHosts, visibility, description},\n {prompt, logger}\n) {\n if (await repositoryShouldBeCreated({prompt})) {\n if (await alreadyVersionedByGit({projectRoot})) {\n logger.info('Git repository already exists');\n\n return determineExistingVcsDetails({projectRoot});\n }\n\n const [{vcs: {host, owner, name, sshUrl}}] = await Promise.all([\n scaffoldVcsHost(vcsHosts, {projectName, projectRoot, description, visibility}, {prompt}),\n scaffoldGit({projectRoot})\n ]);\n\n const remoteOriginResults = await defineRemoteOrigin(projectRoot, sshUrl, {logger});\n\n return {\n vcs: {host, owner, name},\n nextSteps: [{summary: 'Commit scaffolded files'}, ...remoteOriginResults.nextSteps]\n };\n }\n\n return {};\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';\n\nexport default async function scaffoldLicense({projectRoot, license, copyright}, {logger}) {\n if (license) {\n logger.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\n return {};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default function licenseDefined({projectRoot}) {\n return fileExists(`${projectRoot}/LICENSE`);\n}\n","function repositoryIsHostedOnGithub(vcs) {\n return vcs && 'github' === vcs.host;\n}\n\nexport default function liftLicense({vcs}) {\n return {\n ...repositoryIsHostedOnGithub(vcs) && {\n badges: {\n consumer: {\n license: {\n link: 'LICENSE',\n img: `https://img.shields.io/github/license/${vcs.owner}/${vcs.name}.svg?logo=opensourceinitiative`,\n text: 'license'\n }\n }\n }\n }\n };\n}\n","import {questionNames} from '../prompts/question-names.js';\n\nexport const DEPENDENCY_UPDATER_PROMPT_ID = 'DEPENDENCY_UPDATER';\n\nconst {DEPENDENCY_UPDATER} = questionNames.DEPENDENCY_UPDATER;\n\nexport async function promptForDependencyUpdaterChoice(updaters, {prompt}) {\n return prompt({\n id: DEPENDENCY_UPDATER_PROMPT_ID,\n questions: [{\n name: DEPENDENCY_UPDATER,\n type: 'list',\n message: 'Which dependency-update service do you want to manage this project?',\n choices: [...Object.keys(updaters), 'Other']\n }]\n });\n}\n","import {questionNames} from '../prompts/question-names.js';\nimport {promptForDependencyUpdaterChoice} from './prompt.js';\n\nconst {DEPENDENCY_UPDATER} = questionNames.DEPENDENCY_UPDATER;\n\nexport default async function scaffoldDependencyUpdater(plugins, options, {prompt}) {\n if (!Object.keys(plugins).length) return undefined;\n\n const plugin = plugins[\n (await promptForDependencyUpdaterChoice(plugins, {prompt}))[DEPENDENCY_UPDATER]\n ];\n\n if (plugin) return plugin.scaffold(options);\n\n return undefined;\n}\n","import {questionsForBaseDetails} from '@form8ion/core';\n\nexport const BASE_DETAILS_PROMPT_ID = 'BASE_DETAILS';\n\nexport function promptForBaseDetails(projectRoot, {prompt}) {\n return prompt({\n id: BASE_DETAILS_PROMPT_ID,\n questions: questionsForBaseDetails(projectRoot)\n });\n}\n","import joi from 'joi';\nimport {optionsSchemas} from '@form8ion/core';\n\nexport default joi.object().pattern(/^/, optionsSchemas.form8ionPlugin).default({});\n","import joi from 'joi';\nimport {optionsSchemas} from '@form8ion/core';\n\nexport default joi.object().pattern(/^/, optionsSchemas.form8ionPlugin);\n","import joi from 'joi';\nimport {optionsSchemas} from '@form8ion/core';\n\nexport default joi.object().pattern(joi.string(), optionsSchemas.form8ionPlugin).default({});\n","import joi from 'joi';\nimport {optionsSchemas} from '@form8ion/core';\n\nexport default joi.object().pattern(joi.string(), optionsSchemas.form8ionPlugin).default({});\n","import {validateOptions} from '@form8ion/core';\nimport joi from 'joi';\n\nimport languagePluginsSchema from './language/schema.js';\nimport vcsHostPluginsSchema from './vcs/host/schema.js';\nimport dependencyUpdaterPluginsSchema from './dependency-updater/schema.js';\nimport ciProviderPluginsSchema from './ci-provider/schema.js';\n\nexport function validate(options) {\n return validateOptions(joi.object({\n plugins: joi.object({\n dependencyUpdaters: dependencyUpdaterPluginsSchema,\n languages: languagePluginsSchema,\n vcsHosts: vcsHostPluginsSchema,\n ciProviders: ciProviderPluginsSchema\n })\n }), options) || {};\n}\n","import {resolve} from 'path';\nimport filedirname from 'filedirname';\n\nexport default function determinePathToTemplate(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.js';\n\nexport default function scaffoldEditorConfig({projectRoot}) {\n return fs.copyFile(determinePathToTemplateFile('editorconfig.ini'), `${projectRoot}/.editorconfig`);\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default function editorconfigInUse({projectRoot}) {\n return fileExists(`${projectRoot}/.editorconfig`);\n}\n","export default function scaffoldContribution({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 {applyEnhancers} from '@form8ion/core';\nimport {lift as liftReadme} from '@form8ion/readme';\nimport * as gitPlugin from '@form8ion/git';\n\nimport {scaffold as scaffoldEditorconfig, test as editorconfigInUse} from './editorconfig/index.js';\nimport * as licensePlugin from './license/index.js';\n\nexport default async function lift({projectRoot, results, enhancers, vcs, dependencies}) {\n if (!await editorconfigInUse({projectRoot})) {\n await scaffoldEditorconfig({projectRoot});\n }\n\n const enhancerResults = await applyEnhancers({\n results,\n enhancers: {...enhancers, gitPlugin, licensePlugin},\n options: {projectRoot, vcs},\n dependencies\n });\n\n await liftReadme({projectRoot, results: enhancerResults});\n\n return enhancerResults;\n}\n","import deepmerge from 'deepmerge';\nimport {execa} from 'execa';\nimport {questionNames as coreQuestionNames} from '@form8ion/core';\nimport {scaffold as scaffoldReadme} from '@form8ion/readme';\n\nimport {scaffold as scaffoldLanguage} from './language/index.js';\nimport {scaffold as scaffoldVcs} from './vcs/index.js';\nimport {scaffold as scaffoldLicense} from './license/index.js';\nimport scaffoldDependencyUpdater from './dependency-updater/scaffolder.js';\nimport {promptForBaseDetails} from './prompts/questions.js';\nimport {validate} from './options-validator.js';\nimport {scaffold as scaffoldEditorConfig} from './editorconfig/index.js';\nimport {scaffold as scaffoldContributing} from './contributing/index.js';\nimport lift from './lift.js';\n\nexport async function scaffold(options, {prompt, logger}) {\n const projectRoot = process.cwd();\n const {plugins: {dependencyUpdaters, languages, vcsHosts = {}}} = validate(options);\n\n const {\n [coreQuestionNames.PROJECT_NAME]: projectName,\n [coreQuestionNames.LICENSE]: chosenLicense,\n [coreQuestionNames.VISIBILITY]: visibility,\n [coreQuestionNames.DESCRIPTION]: description,\n [coreQuestionNames.COPYRIGHT_YEAR]: copyrightYear,\n [coreQuestionNames.COPYRIGHT_HOLDER]: copyHolder\n } = await promptForBaseDetails(projectRoot, {prompt});\n const copyright = {year: copyrightYear, holder: copyHolder};\n\n const [vcsResults, contributing, license] = await Promise.all([\n scaffoldVcs({projectRoot, projectName, vcsHosts, visibility, description}, {prompt, logger}),\n scaffoldContributing({visibility}),\n scaffoldLicense({projectRoot, license: chosenLicense, copyright}, {logger}),\n scaffoldReadme({projectName, projectRoot, description}),\n scaffoldEditorConfig({projectRoot})\n ]);\n\n const [dependencyUpdaterResults] = vcsResults.vcs\n ? await Promise.all([\n scaffoldDependencyUpdater(dependencyUpdaters, {projectRoot}, {prompt})\n ])\n : [];\n\n const language = await scaffoldLanguage(\n languages,\n {projectRoot, projectName, vcs: vcsResults.vcs, visibility, license: chosenLicense || 'UNLICENSED', description},\n {prompt}\n );\n\n const mergedResults = deepmerge.all([\n license,\n language,\n dependencyUpdaterResults,\n contributing,\n vcsResults\n ].filter(Boolean));\n\n await lift({\n projectRoot,\n vcs: vcsResults.vcs,\n results: mergedResults,\n enhancers: {...dependencyUpdaters, ...languages, ...vcsHosts}\n });\n\n if (language && language.verificationCommand) {\n logger.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 return mergedResults;\n}\n","import {questionNames} from '../prompts/question-names.js';\n\nexport const CI_PROVIDER_PROMPT_ID = 'CI_PROVIDER';\n\nconst {CI_PROVIDER} = questionNames.CI_PROVIDER;\n\nexport default function promptForCiProvider(providers, {prompt}) {\n return prompt({\n id: CI_PROVIDER_PROMPT_ID,\n questions: [{\n name: CI_PROVIDER,\n type: 'list',\n message: 'Which CI service do you want use with this project?',\n choices: [...Object.keys(providers), 'Other']\n }]\n });\n}\n","import {BASE_DETAILS_PROMPT_ID} from './questions.js';\nimport {GIT_REPOSITORY_PROMPT_ID} from '../vcs/prompt.js';\nimport {PROJECT_LANGUAGE_PROMPT_ID} from '../language/prompt.js';\nimport {REPOSITORY_HOST_PROMPT_ID} from '../vcs/host/prompt.js';\nimport {DEPENDENCY_UPDATER_PROMPT_ID} from '../dependency-updater/prompt.js';\nimport {CI_PROVIDER_PROMPT_ID} from '../ci-provider/prompt.js';\nimport {questionNames} from './question-names.js';\n\nexport const ids = {\n BASE_DETAILS: BASE_DETAILS_PROMPT_ID,\n GIT_REPOSITORY: GIT_REPOSITORY_PROMPT_ID,\n REPOSITORY_HOST: REPOSITORY_HOST_PROMPT_ID,\n PROJECT_LANGUAGE: PROJECT_LANGUAGE_PROMPT_ID,\n DEPENDENCY_UPDATER: DEPENDENCY_UPDATER_PROMPT_ID,\n CI_PROVIDER: CI_PROVIDER_PROMPT_ID\n};\n\nexport {questionNames};\n\nexport const constants = {ids, questionNames};\n"],"names":["coreQuestionNames","PROJECT_LANGUAGE","promptForLanguageDetails","REPO_HOST","promptForVcsHostDetails","repositoryShouldBeCreated","alreadyVersionedByGit","scaffoldGit","fs","DEPENDENCY_UPDATER","determinePathToTemplateFile","scaffoldEditorconfig","liftReadme","scaffoldContributing","scaffoldReadme"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@form8ion/project",
|
|
3
3
|
"description": "opinionated scaffolder for new projects",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "22.0.0-beta.
|
|
5
|
+
"version": "22.0.0-beta.14",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": "^22.21.0 || >=24.12"
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"access": "public",
|
|
56
56
|
"provenance": true
|
|
57
57
|
},
|
|
58
|
-
"packageManager": "npm@11.
|
|
58
|
+
"packageManager": "npm@11.13.0+sha512.7119a16a0843580d65160977520e3f5710c974f04afd4fad36d9eb97d917ba716a856c35c78c4be6dc64367eeaccfb957ef5ce997ca31e9330b2e936ba2b1b92",
|
|
59
59
|
"config": {
|
|
60
60
|
"commitizen": {
|
|
61
61
|
"path": "./node_modules/cz-conventional-changelog"
|
|
@@ -78,14 +78,14 @@
|
|
|
78
78
|
"write-yaml": "1.0.0"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@cucumber/cucumber": "12.
|
|
82
|
-
"@form8ion/commitlint-config": "2.0.
|
|
83
|
-
"@form8ion/eslint-config": "7.0.
|
|
81
|
+
"@cucumber/cucumber": "12.8.2",
|
|
82
|
+
"@form8ion/commitlint-config": "2.0.13",
|
|
83
|
+
"@form8ion/eslint-config": "7.1.0-beta.1",
|
|
84
84
|
"@form8ion/eslint-config-cucumber": "1.4.1",
|
|
85
85
|
"@form8ion/eslint-config-vitest": "1.1.0",
|
|
86
86
|
"@form8ion/remark-lint-preset": "6.0.7",
|
|
87
87
|
"@rollup/plugin-node-resolve": "16.0.3",
|
|
88
|
-
"@travi/any": "3.
|
|
88
|
+
"@travi/any": "3.3.0",
|
|
89
89
|
"c8": "11.0.0",
|
|
90
90
|
"chai": "6.2.2",
|
|
91
91
|
"cross-env": "10.1.0",
|
|
@@ -105,12 +105,12 @@
|
|
|
105
105
|
"remark-toc": "9.0.0",
|
|
106
106
|
"remark-usage": "11.0.1",
|
|
107
107
|
"rimraf": "6.1.3",
|
|
108
|
-
"rollup": "4.
|
|
108
|
+
"rollup": "4.60.2",
|
|
109
109
|
"rollup-plugin-auto-external": "2.0.0",
|
|
110
|
-
"sinon": "21.
|
|
110
|
+
"sinon": "21.1.2",
|
|
111
111
|
"testdouble": "3.20.2",
|
|
112
112
|
"unist-util-find": "3.0.0",
|
|
113
|
-
"vitest": "4.
|
|
113
|
+
"vitest": "4.1.5",
|
|
114
114
|
"vitest-when": "0.10.0"
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {questionNames} from '../prompts/question-names.js';
|
|
2
|
+
|
|
3
|
+
export const CI_PROVIDER_PROMPT_ID = 'CI_PROVIDER';
|
|
4
|
+
|
|
5
|
+
const {CI_PROVIDER} = questionNames.CI_PROVIDER;
|
|
6
|
+
|
|
7
|
+
export default function promptForCiProvider(providers, {prompt}) {
|
|
8
|
+
return prompt({
|
|
9
|
+
id: CI_PROVIDER_PROMPT_ID,
|
|
10
|
+
questions: [{
|
|
11
|
+
name: CI_PROVIDER,
|
|
12
|
+
type: 'list',
|
|
13
|
+
message: 'Which CI service do you want use with this project?',
|
|
14
|
+
choices: [...Object.keys(providers), 'Other']
|
|
15
|
+
}]
|
|
16
|
+
});
|
|
17
|
+
}
|