@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.
Files changed (39) hide show
  1. package/README.md +43 -11
  2. package/lib/index.js +139 -102
  3. package/lib/index.js.map +1 -1
  4. package/package.json +9 -9
  5. package/src/ci-provider/prompt.js +17 -0
  6. package/src/ci-provider/prompt.test.js +27 -0
  7. package/src/ci-provider/schema.js +4 -0
  8. package/src/ci-provider/schema.test.js +43 -0
  9. package/src/contributing/scaffolder.js +1 -1
  10. package/src/dependency-updater/prompt.js +3 -1
  11. package/src/dependency-updater/prompt.test.js +4 -2
  12. package/src/dependency-updater/scaffolder.js +4 -2
  13. package/src/dependency-updater/scaffolder.test.js +11 -4
  14. package/src/editorconfig/index.js +1 -0
  15. package/src/editorconfig/scaffolder.js +1 -1
  16. package/src/editorconfig/tester.js +5 -0
  17. package/src/editorconfig/tester.test.js +25 -0
  18. package/src/index.js +1 -5
  19. package/src/language/prompt.js +3 -1
  20. package/src/language/prompt.test.js +3 -1
  21. package/src/language/scaffolder.js +4 -2
  22. package/src/language/scaffolder.test.js +10 -5
  23. package/src/license/lifter.js +1 -1
  24. package/src/license/tester.js +1 -1
  25. package/src/lift.js +5 -0
  26. package/src/lift.test.js +23 -11
  27. package/src/options-validator.js +3 -1
  28. package/src/options-validator.test.js +3 -1
  29. package/src/prompts/index.js +7 -8
  30. package/src/prompts/question-names.js +19 -5
  31. package/src/scaffolder.js +5 -5
  32. package/src/scaffolder.test.js +6 -4
  33. package/src/template-path.js +1 -1
  34. package/src/vcs/host/prompt.js +4 -2
  35. package/src/vcs/host/prompt.test.js +6 -4
  36. package/src/vcs/host/scaffolder.js +3 -1
  37. package/src/vcs/host/scaffolder.test.js +4 -2
  38. package/src/vcs/prompt.js +4 -2
  39. 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, questionNames, scaffold} from '@form8ion/project';
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
- [questionNames.PROJECT_NAME]: 'my-project',
101
- [questionNames.LICENSE]: 'MIT',
102
- [questionNames.VISIBILITY]: 'Public',
103
- [questionNames.DESCRIPTION]: 'My project',
104
- [questionNames.GIT_REPO]: false,
105
- [questionNames.COPYRIGHT_HOLDER]: 'John Smith',
106
- [questionNames.COPYRIGHT_YEAR]: '2022',
107
- [questionNames.PROJECT_LANGUAGE]: 'foo'
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 BASE_DETAILS_PROMPT_ID = 'BASE_DETAILS';
19
-
20
- function promptForBaseDetails(projectRoot, {prompt}) {
21
- return prompt({
22
- id: BASE_DETAILS_PROMPT_ID,
23
- questions: questionsForBaseDetails(projectRoot)
24
- });
25
- }
26
-
27
- const questionNames$1 = {
28
- GIT_REPO: 'gitRepo',
29
- REPO_HOST: 'repoHost',
30
- REPO_OWNER: 'repoOwner',
31
- PROJECT_LANGUAGE: 'projectLanguage',
32
- DEPENDENCY_UPDATER: 'dependencyUpdater'
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: questionNames$1.PROJECT_LANGUAGE,
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 REPOSITORY_HOST_PROMPT_ID = 'REPOSITORY_HOST';
54
+ const {PROJECT_LANGUAGE} = questionNames.PROJECT_LANGUAGE;
66
55
 
67
- async function promptForVcsHostChoice(hosts, {prompt}) {
68
- const answers = await prompt({
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
- return {...answers, ...host};
80
- }
59
+ const plugin = languagePlugins[chosenLanguage];
81
60
 
82
- const DEPENDENCY_UPDATER_PROMPT_ID = 'DEPENDENCY_UPDATER';
61
+ if (plugin) return plugin.scaffold(options);
83
62
 
84
- async function promptForDependencyUpdaterChoice(updaters, {prompt}) {
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 ids = {
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
- const plugin = languagePlugins[chosenLanguage];
68
+ const {GIT_REPO} = questionNames.GIT_REPOSITORY;
113
69
 
114
- if (plugin) return plugin.scaffold(options);
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 undefined;
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 {[questionNames$1.REPO_HOST]: chosenHost} = await promptForVcsHostChoice(hosts, {prompt});
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 tester ({projectRoot}) {
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 lifter ({vcs}) {
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: lifter,
237
+ lift: liftLicense,
252
238
  scaffold: scaffoldLicense,
253
- test: tester
239
+ test: licenseDefined
254
240
  });
255
241
 
256
- async function scaffoldDependencyUpdater (plugins, options, {prompt}) {
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}))[questionNames$1.DEPENDENCY_UPDATER]
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 determinePathToTemplateFile (fileName) {
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 ({projectRoot}) {
291
- return promises$1.copyFile(determinePathToTemplateFile('editorconfig.ini'), `${projectRoot}/.editorconfig`);
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 scaffoldContributing ({visibility}) {
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$2.PROJECT_NAME]: projectName,
331
- [questionNames$2.LICENSE]: chosenLicense,
332
- [questionNames$2.VISIBILITY]: visibility,
333
- [questionNames$2.DESCRIPTION]: description,
334
- [questionNames$2.COPYRIGHT_YEAR]: copyrightYear,
335
- [questionNames$2.COPYRIGHT_HOLDER]: copyHolder
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
- scaffoldContributing({visibility}),
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 && await scaffoldDependencyUpdater(
348
- dependencyUpdaters,
349
- {projectRoot},
350
- {prompt}
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 promptConstants = {ids};
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, questionNames, scaffold };
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.12",
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.11.0+sha512.f36811c4aae1fde639527368ae44c571d050006a608d67a191f195a801a52637a312d259186254aa3a3799b05335b7390539cf28656d18f0591a1125ba35f973",
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.7.0",
82
- "@form8ion/commitlint-config": "2.0.9",
83
- "@form8ion/eslint-config": "7.0.14",
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.1.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.59.0",
108
+ "rollup": "4.60.2",
109
109
  "rollup-plugin-auto-external": "2.0.0",
110
- "sinon": "21.0.2",
110
+ "sinon": "21.1.2",
111
111
  "testdouble": "3.20.2",
112
112
  "unist-util-find": "3.0.0",
113
- "vitest": "4.0.18",
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
+ }