@form8ion/javascript 7.2.0 → 7.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -213,6 +213,90 @@ var enginesEnhancer = /*#__PURE__*/Object.freeze({
213
213
  lift: lift$1
214
214
  });
215
215
 
216
+ function write ({projectRoot, config}) {
217
+ return configFile.write({path: projectRoot, name: 'babel', format: core.fileTypes.JSON, config});
218
+ }
219
+
220
+ async function addIgnore ({projectRoot, ignore}) {
221
+ if (ignore) {
222
+ const existingConfig = JSON.parse(await fs.promises.readFile(`${projectRoot}/.babelrc.json`, 'utf-8'));
223
+
224
+ await write({projectRoot, config: {...existingConfig, ignore: [`./${ignore}/`]}});
225
+ }
226
+ }
227
+
228
+ async function scaffoldBabel ({projectRoot, preset}) {
229
+ if (!preset) {
230
+ throw new Error('No babel preset provided. Cannot configure babel transpilation');
231
+ }
232
+
233
+ await write({projectRoot, config: {presets: [preset.name]}});
234
+
235
+ return {
236
+ devDependencies: ['@babel/register', preset.packageName],
237
+ eslint: {}
238
+ };
239
+ }
240
+
241
+ async function lifter ({buildDirectory, projectRoot}) {
242
+ await addIgnore({ignore: buildDirectory, projectRoot});
243
+
244
+ return {};
245
+ }
246
+
247
+ function predicate ({projectRoot}) {
248
+ return core.fileExists(`${projectRoot}/.babelrc.json`);
249
+ }
250
+
251
+ async function scaffoldTypescript ({config, projectType, projectRoot, testFilenamePattern}) {
252
+ const eslintConfigs = ['typescript'];
253
+ const shareableTsConfigPackage = `${config.scope}/tsconfig`;
254
+
255
+ await core.writeConfigFile({
256
+ path: projectRoot,
257
+ name: 'tsconfig',
258
+ format: core.fileTypes.JSON,
259
+ config: {
260
+ $schema: 'https://json.schemastore.org/tsconfig',
261
+ extends: shareableTsConfigPackage,
262
+ compilerOptions: {
263
+ rootDir: 'src',
264
+ ...javascriptCore.projectTypes.PACKAGE === projectType && {
265
+ outDir: 'lib',
266
+ declaration: true
267
+ }
268
+ },
269
+ include: ['src/**/*.ts'],
270
+ ...testFilenamePattern && {exclude: [testFilenamePattern]}
271
+ }
272
+ });
273
+
274
+ return {
275
+ eslint: {configs: eslintConfigs},
276
+ eslintConfigs,
277
+ devDependencies: ['typescript', shareableTsConfigPackage],
278
+ vcsIgnore: {files: ['tsconfig.tsbuildinfo']}
279
+ };
280
+ }
281
+
282
+ function scaffoldDialect ({dialect, projectType, projectRoot, configs, testFilenamePattern}) {
283
+ switch (dialect) {
284
+ case javascriptCore.dialects.BABEL:
285
+ return scaffoldBabel({preset: configs.babelPreset, projectRoot});
286
+ case javascriptCore.dialects.TYPESCRIPT:
287
+ return scaffoldTypescript({config: configs.typescript, projectType, projectRoot, testFilenamePattern});
288
+ default:
289
+ return {};
290
+ }
291
+ }
292
+
293
+ var dialects = /*#__PURE__*/Object.freeze({
294
+ __proto__: null,
295
+ scaffold: scaffoldDialect,
296
+ test: predicate,
297
+ lift: lifter
298
+ });
299
+
216
300
  function scaffoldScripts () {
217
301
  return {};
218
302
  }
@@ -306,6 +390,52 @@ async function scaffoldPackage ({
306
390
  return {homepage: packageData.homepage};
307
391
  }
308
392
 
393
+ const details = {
394
+ [javascriptCore.packageManagers.NPM]: {
395
+ installationCommand: 'install',
396
+ installationFlags: {
397
+ [javascriptCore.DEV_DEPENDENCY_TYPE]: `save-${javascriptCore.DEV_DEPENDENCY_TYPE}`,
398
+ [javascriptCore.PROD_DEPENDENCY_TYPE]: `save-${javascriptCore.PROD_DEPENDENCY_TYPE}`,
399
+ exact: 'save-exact'
400
+ }
401
+ },
402
+ [javascriptCore.packageManagers.YARN]: {
403
+ installationCommand: 'add',
404
+ installationFlags: {
405
+ [javascriptCore.DEV_DEPENDENCY_TYPE]: javascriptCore.DEV_DEPENDENCY_TYPE,
406
+ [javascriptCore.PROD_DEPENDENCY_TYPE]: javascriptCore.PROD_DEPENDENCY_TYPE,
407
+ exact: 'exact'
408
+ }
409
+ }
410
+ };
411
+
412
+ function getInstallationCommandFor(manager) {
413
+ return details[manager].installationCommand;
414
+ }
415
+
416
+ function getDependencyTypeFlag(manager, type) {
417
+ return details[manager].installationFlags[type];
418
+ }
419
+
420
+ function getExactFlag(manager) {
421
+ return details[manager].installationFlags.exact;
422
+ }
423
+
424
+ async function install$1 (dependencies, dependenciesType, projectRoot, packageManager = javascriptCore.packageManagers.NPM) {
425
+ if (dependencies.length) {
426
+ cliMessages.info(`Installing ${dependenciesType} dependencies`, {level: 'secondary'});
427
+
428
+ await execa__default["default"](
429
+ `. ~/.nvm/nvm.sh && nvm use && ${packageManager} ${
430
+ getInstallationCommandFor(packageManager)
431
+ } ${[...new Set(dependencies)].join(' ')} --${getDependencyTypeFlag(packageManager, dependenciesType)}${
432
+ javascriptCore.DEV_DEPENDENCY_TYPE === dependenciesType ? ` --${getExactFlag(packageManager)}` : ''
433
+ }`,
434
+ {shell: true, cwd: projectRoot}
435
+ );
436
+ } else cliMessages.warn(`No ${dependenciesType} dependencies to install`);
437
+ }
438
+
309
439
  async function liftPackage ({
310
440
  projectRoot,
311
441
  scripts,
@@ -336,8 +466,8 @@ async function liftPackage ({
336
466
  cliMessages.info('Installing dependencies');
337
467
 
338
468
  try {
339
- await javascriptCore.installDependencies(dependencies || [], javascriptCore.PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
340
- await javascriptCore.installDependencies([...devDependencies || []], javascriptCore.DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
469
+ await install$1(dependencies || [], javascriptCore.PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
470
+ await install$1([...devDependencies || []], javascriptCore.DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
341
471
  } catch (e) {
342
472
  cliMessages.error('Failed to install dependencies');
343
473
  }
@@ -360,15 +490,24 @@ async function resolvePackageManager ({projectRoot, packageManager}) {
360
490
  async function lift ({projectRoot, vcs, results}) {
361
491
  cliMessages.info('Lifting JavaScript-specific details');
362
492
 
363
- const {scripts, tags, eslintConfigs, eslint: eslint$1, dependencies, devDependencies, packageManager: manager} = results;
493
+ const {
494
+ scripts,
495
+ tags,
496
+ eslintConfigs,
497
+ eslint: eslint$1,
498
+ dependencies,
499
+ devDependencies,
500
+ packageManager: manager,
501
+ buildDirectory
502
+ } = results;
364
503
 
365
504
  const packageManager = await resolvePackageManager({projectRoot, packageManager: manager});
366
505
 
367
506
  const eslintResults = await eslint.lift({projectRoot, configs: [...eslintConfigs || [], ...eslint$1?.configs || []]});
368
507
  const enhancerResults = await core.applyEnhancers({
369
508
  results,
370
- enhancers: [huskyPlugin__namespace, enginesEnhancer, coveragePlugin, commitConventionPlugin__namespace],
371
- options: {packageManager, projectRoot, vcs}
509
+ enhancers: [huskyPlugin__namespace, enginesEnhancer, coveragePlugin, commitConventionPlugin__namespace, dialects],
510
+ options: {packageManager, projectRoot, vcs, buildDirectory}
372
511
  });
373
512
 
374
513
  await liftPackage(
@@ -656,64 +795,6 @@ async function prompt(
656
795
  };
657
796
  }
658
797
 
659
- async function scaffoldBabel ({projectRoot, preset, buildDirectory}) {
660
- if (!preset) {
661
- throw new Error('No babel preset provided. Cannot configure babel transpilation');
662
- }
663
-
664
- await configFile.write({
665
- path: projectRoot,
666
- name: 'babel',
667
- format: core.fileTypes.JSON,
668
- config: {presets: [preset.name], ignore: [`./${buildDirectory}/`]}
669
- });
670
-
671
- return {
672
- devDependencies: ['@babel/register', preset.packageName],
673
- eslint: {}
674
- };
675
- }
676
-
677
- async function scaffoldTypescript ({config, projectType, projectRoot, testFilenamePattern}) {
678
- const eslintConfigs = ['typescript'];
679
- const shareableTsConfigPackage = `${config.scope}/tsconfig`;
680
-
681
- await fs.promises.writeFile(
682
- `${projectRoot}/tsconfig.json`,
683
- JSON.stringify({
684
- $schema: 'https://json.schemastore.org/tsconfig',
685
- extends: shareableTsConfigPackage,
686
- compilerOptions: {
687
- rootDir: 'src',
688
- ...javascriptCore.projectTypes.PACKAGE === projectType && {
689
- outDir: 'lib',
690
- declaration: true
691
- }
692
- },
693
- include: ['src/**/*.ts'],
694
- ...testFilenamePattern && {exclude: [testFilenamePattern]}
695
- })
696
- );
697
-
698
- return {
699
- eslint: {configs: eslintConfigs},
700
- eslintConfigs,
701
- devDependencies: ['typescript', shareableTsConfigPackage],
702
- vcsIgnore: {files: ['tsconfig.tsbuildinfo']}
703
- };
704
- }
705
-
706
- function scaffoldDialect ({dialect, projectType, projectRoot, configs, buildDirectory, testFilenamePattern}) {
707
- switch (dialect) {
708
- case javascriptCore.dialects.BABEL:
709
- return scaffoldBabel({preset: configs.babelPreset, projectRoot, buildDirectory});
710
- case javascriptCore.dialects.TYPESCRIPT:
711
- return scaffoldTypescript({config: configs.typescript, projectType, projectRoot, testFilenamePattern});
712
- default:
713
- return {};
714
- }
715
- }
716
-
717
798
  function projectWillNotBeConsumed(projectType) {
718
799
  return javascriptCore.projectTypes.APPLICATION === projectType || javascriptCore.projectTypes.CLI === projectType;
719
800
  }
@@ -1466,7 +1547,6 @@ async function scaffolder (options) {
1466
1547
  configs,
1467
1548
  projectRoot,
1468
1549
  projectType,
1469
- buildDirectory: projectTypeResults.buildDirectory,
1470
1550
  testFilenamePattern: verificationResults.testFilenamePattern
1471
1551
  }),
1472
1552
  scaffoldCodeStyle({
@@ -1506,8 +1586,8 @@ async function scaffolder (options) {
1506
1586
  javascriptCore.scaffoldChoice(ciServices, ci, {projectRoot, vcs, visibility, projectType, projectName, nodeVersion, tests}),
1507
1587
  commitConventionPlugin.scaffold({projectRoot, projectType, configs, pathWithinParent})
1508
1588
  ])),
1509
- projectTypePluginResults,
1510
1589
  projectTypeResults,
1590
+ projectTypePluginResults,
1511
1591
  verificationResults,
1512
1592
  codeStyleResults,
1513
1593
  npmResults,