@form8ion/javascript 12.2.0 → 12.4.0

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.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { questionNames as questionNames$2, questions } from '@travi/language-scaffolder-prompts';
2
2
  import deepmerge from 'deepmerge';
3
3
  import { fileTypes, fileExists, validateOptions, applyEnhancers, writeConfigFile } from '@form8ion/core';
4
- import { scaffoldChoice, projectTypes as projectTypes$1, packageManagers, mergeIntoExistingPackageJson, dialects as dialects$1, writePackageJson, DEV_DEPENDENCY_TYPE, PROD_DEPENDENCY_TYPE } from '@form8ion/javascript-core';
4
+ import { scaffoldChoice, projectTypes as projectTypes$1, packageManagers as packageManagers$1, mergeIntoExistingPackageJson, dialects as dialects$1, writePackageJson, DEV_DEPENDENCY_TYPE, PROD_DEPENDENCY_TYPE } from '@form8ion/javascript-core';
5
5
  import joi from 'joi';
6
6
  import { prompt as prompt$1, Separator } from '@form8ion/overridable-prompts';
7
7
  import { scaffold, lift as lift$3 } from '@form8ion/codecov';
@@ -22,11 +22,11 @@ import { resolve } from 'path';
22
22
  import filedirname from 'filedirname';
23
23
  import * as huskyPlugin from '@form8ion/husky';
24
24
  import { scaffold as scaffold$3 } from '@form8ion/husky';
25
+ import { promises as promises$1 } from 'node:fs';
25
26
  import { stringify, parse } from 'ini';
26
27
  import { scaffold as scaffold$2 } from '@form8ion/prettier';
27
28
  import * as eslintPlugin from '@form8ion/eslint';
28
29
  import { scaffold as scaffold$1, test as test$1 } from '@form8ion/eslint';
29
- import { promises as promises$1 } from 'node:fs';
30
30
  import sortProperties from 'sort-object-keys';
31
31
 
32
32
  const questionNames$1 = {
@@ -214,7 +214,7 @@ async function scaffoldCodeStyle ({
214
214
  ].filter(Boolean)));
215
215
  }
216
216
 
217
- function lifter$3 (options) {
217
+ function lifter$4 (options) {
218
218
  return applyEnhancers({options, enhancers: [eslintPlugin]});
219
219
  }
220
220
 
@@ -225,7 +225,7 @@ function tester$3 (options) {
225
225
  var codeStylePlugin = /*#__PURE__*/Object.freeze({
226
226
  __proto__: null,
227
227
  scaffold: scaffoldCodeStyle,
228
- lift: lifter$3,
228
+ lift: lifter$4,
229
229
  test: tester$3
230
230
  });
231
231
 
@@ -260,7 +260,7 @@ function tester$2 ({projectRoot}) {
260
260
  return fileExists(`${projectRoot}/.npmrc`);
261
261
  }
262
262
 
263
- async function lifter$2 ({projectRoot}) {
263
+ async function lifter$3 ({projectRoot}) {
264
264
  const pathToConfig = `${projectRoot}/.npmrc`;
265
265
 
266
266
  const {
@@ -278,7 +278,7 @@ var npmConfigPlugin = /*#__PURE__*/Object.freeze({
278
278
  __proto__: null,
279
279
  scaffold: scaffoldNpmConfig,
280
280
  test: tester$2,
281
- lift: lifter$2
281
+ lift: lifter$3
282
282
  });
283
283
 
284
284
  async function test({projectRoot}) {
@@ -302,22 +302,22 @@ var enginesEnhancer = /*#__PURE__*/Object.freeze({
302
302
  });
303
303
 
304
304
  function buildDocumentationCommand (packageManager) {
305
- if (packageManagers.NPM === packageManager) return 'npm run generate:md';
306
- if (packageManagers.YARN === packageManager) return 'yarn generate:md';
305
+ if (packageManagers$1.NPM === packageManager) return 'npm run generate:md';
306
+ if (packageManagers$1.YARN === packageManager) return 'yarn generate:md';
307
307
 
308
308
  throw new Error(
309
309
  `The ${packageManager} package manager is currently not supported. `
310
- + `Only ${Object.values(packageManagers).join(' and ')} are currently supported.`
310
+ + `Only ${Object.values(packageManagers$1).join(' and ')} are currently supported.`
311
311
  );
312
312
  }
313
313
 
314
314
  function getInstallationCommand(packageManager) {
315
- if (packageManagers.NPM === packageManager) return 'npm install';
316
- if (packageManagers.YARN === packageManager) return 'yarn add';
315
+ if (packageManagers$1.NPM === packageManager) return 'npm install';
316
+ if (packageManagers$1.YARN === packageManager) return 'yarn add';
317
317
 
318
318
  throw new Error(
319
319
  `The ${packageManager} package manager is currently not supported. `
320
- + `Only ${Object.values(packageManagers).join(' and ')} are currently supported.`
320
+ + `Only ${Object.values(packageManagers$1).join(' and ')} are currently supported.`
321
321
  );
322
322
  }
323
323
 
@@ -751,7 +751,7 @@ function vcsRepositoryHostedOnGithub(vcs) {
751
751
  return vcs && 'github' === vcs.host;
752
752
  }
753
753
 
754
- async function lifter$1 ({projectRoot, packageDetails, vcs}) {
754
+ async function lifter$2 ({projectRoot, packageDetails, vcs}) {
755
755
  if (await isPackage({projectRoot, packageDetails})) return liftPackage$1({projectRoot, packageDetails});
756
756
  if (await isCli({projectRoot, packageDetails})) return liftCli({projectRoot, packageDetails});
757
757
 
@@ -770,7 +770,7 @@ var projectTypes = /*#__PURE__*/Object.freeze({
770
770
  __proto__: null,
771
771
  scaffold: scaffoldProjectType,
772
772
  test: tester$1,
773
- lift: lifter$1
773
+ lift: lifter$2
774
774
  });
775
775
 
776
776
  function write ({projectRoot, config}) {
@@ -798,7 +798,7 @@ async function scaffoldBabel ({projectRoot, preset}) {
798
798
  };
799
799
  }
800
800
 
801
- async function lifter ({results, projectRoot}) {
801
+ async function lifter$1 ({results, projectRoot}) {
802
802
  await addIgnore({ignore: results.buildDirectory, projectRoot});
803
803
 
804
804
  return {};
@@ -852,7 +852,7 @@ var dialects = /*#__PURE__*/Object.freeze({
852
852
  __proto__: null,
853
853
  scaffold: scaffoldDialect,
854
854
  test: predicate,
855
- lift: lifter
855
+ lift: lifter$1
856
856
  });
857
857
 
858
858
  function buildPackageDetails ({
@@ -945,7 +945,7 @@ function defineVcsHostDetails (vcs, pathWithinParent) {
945
945
  }
946
946
 
947
947
  const details = {
948
- [packageManagers.NPM]: {
948
+ [packageManagers$1.NPM]: {
949
949
  installationCommand: 'install',
950
950
  installationFlags: {
951
951
  [DEV_DEPENDENCY_TYPE]: `save-${DEV_DEPENDENCY_TYPE}`,
@@ -953,7 +953,7 @@ const details = {
953
953
  exact: 'save-exact'
954
954
  }
955
955
  },
956
- [packageManagers.YARN]: {
956
+ [packageManagers$1.YARN]: {
957
957
  installationCommand: 'add',
958
958
  installationFlags: {
959
959
  [DEV_DEPENDENCY_TYPE]: DEV_DEPENDENCY_TYPE,
@@ -975,7 +975,7 @@ function getExactFlag(manager) {
975
975
  return details[manager].installationFlags.exact;
976
976
  }
977
977
 
978
- async function install$1 (dependencies, dependenciesType, projectRoot, packageManager = packageManagers.NPM) {
978
+ async function install$1 (dependencies, dependenciesType, projectRoot, packageManager = packageManagers$1.NPM) {
979
979
  if (dependencies.length) {
980
980
  info(`Installing ${dependenciesType} dependencies`, {level: 'secondary'});
981
981
 
@@ -1057,20 +1057,64 @@ async function liftPackage ({
1057
1057
  }
1058
1058
  }
1059
1059
 
1060
+ function determineLockfilePathFor (packageManager) {
1061
+ const lockfilePaths = {
1062
+ [packageManagers$1.NPM]: 'package-lock.json',
1063
+ [packageManagers$1.YARN]: 'yarn.lock'
1064
+ };
1065
+
1066
+ return lockfilePaths[packageManager];
1067
+ }
1068
+
1069
+ function npmIsUsed ({projectRoot}) {
1070
+ return fileExists(`${projectRoot}/${determineLockfilePathFor(packageManagers$1.NPM)}`);
1071
+ }
1072
+
1073
+ function yarnIsUsed ({projectRoot}) {
1074
+ return fileExists(`${projectRoot}/${determineLockfilePathFor(packageManagers$1.YARN)}`);
1075
+ }
1076
+
1077
+ async function jsPackageManagerIsUsed ({projectRoot}) {
1078
+ const [npmFound, yarnFound] = await Promise.all([
1079
+ npmIsUsed({projectRoot}),
1080
+ yarnIsUsed({projectRoot})
1081
+ ]);
1082
+
1083
+ return npmFound || yarnFound;
1084
+ }
1085
+
1086
+ async function liftCorepack () {
1087
+ await execa('corepack', ['use', 'npm@latest']);
1088
+ }
1089
+
1090
+ async function lifter () {
1091
+ await liftCorepack();
1092
+
1093
+ return {};
1094
+ }
1095
+
1060
1096
  async function resolvePackageManager ({projectRoot, packageManager}) {
1061
1097
  if (packageManager) return packageManager;
1062
1098
 
1063
- if (await fileExists(`${projectRoot}/package-lock.json`)) {
1064
- return packageManagers.NPM;
1099
+ if (await npmIsUsed({projectRoot})) {
1100
+ return packageManagers$1.NPM;
1065
1101
  }
1066
1102
 
1067
- if (await fileExists(`${projectRoot}/yarn.lock`)) {
1068
- return packageManagers.YARN;
1103
+ if (await yarnIsUsed({projectRoot})) {
1104
+ return packageManagers$1.YARN;
1069
1105
  }
1070
1106
 
1071
1107
  throw new Error('Package-manager could not be determined');
1072
1108
  }
1073
1109
 
1110
+ var packageManagers = /*#__PURE__*/Object.freeze({
1111
+ __proto__: null,
1112
+ test: jsPackageManagerIsUsed,
1113
+ lift: lifter,
1114
+ determineCurrent: resolvePackageManager,
1115
+ defineLockfilePath: determineLockfilePathFor
1116
+ });
1117
+
1074
1118
  async function lift ({projectRoot, vcs, results, pathWithinParent}) {
1075
1119
  info('Lifting JavaScript-specific details');
1076
1120
 
@@ -1097,7 +1141,8 @@ async function lift ({projectRoot, vcs, results, pathWithinParent}) {
1097
1141
  dialects,
1098
1142
  codeStylePlugin,
1099
1143
  npmConfigPlugin,
1100
- projectTypes
1144
+ projectTypes,
1145
+ packageManagers
1101
1146
  ],
1102
1147
  options: {packageManager, projectRoot, vcs, packageDetails: JSON.parse(packageContents)}
1103
1148
  });
@@ -1326,8 +1371,8 @@ async function prompt(
1326
1371
  name: questionNames$1.PACKAGE_MANAGER,
1327
1372
  message: 'Which package manager will be used with this project?',
1328
1373
  type: 'list',
1329
- choices: Object.values(packageManagers),
1330
- default: packageManagers.NPM
1374
+ choices: Object.values(packageManagers$1),
1375
+ default: packageManagers$1.NPM
1331
1376
  },
1332
1377
  {
1333
1378
  name: questionNames$1.PROJECT_TYPE,
@@ -1441,13 +1486,17 @@ async function scaffoldNodeVersion ({projectRoot, nodeVersionCategory}) {
1441
1486
 
1442
1487
  const version = await determineLatestVersionOf(nodeVersionCategory);
1443
1488
 
1444
- await promises.writeFile(`${projectRoot}/.nvmrc`, version);
1489
+ await promises$1.writeFile(`${projectRoot}/.nvmrc`, version);
1445
1490
 
1446
1491
  await install(nodeVersionCategory);
1447
1492
 
1448
1493
  return version;
1449
1494
  }
1450
1495
 
1496
+ function nvmIsUsed ({projectRoot}) {
1497
+ return fileExists(`${projectRoot}/.nvmrc`);
1498
+ }
1499
+
1451
1500
  function buildBadgesDetails (contributors) {
1452
1501
  return deepmerge.all(contributors).badges;
1453
1502
  }
@@ -1540,16 +1589,7 @@ function buildAllowedHostsList ({packageManager, registries}) {
1540
1589
  ];
1541
1590
  }
1542
1591
 
1543
- const lockfileLintSupportedPackageManagers = [packageManagers.NPM, packageManagers.YARN];
1544
-
1545
- function determineLockfilePathFor(packageManager) {
1546
- const lockfilePaths = {
1547
- [packageManagers.NPM]: 'package-lock.json',
1548
- [packageManagers.YARN]: 'yarn.lock'
1549
- };
1550
-
1551
- return lockfilePaths[packageManager];
1552
- }
1592
+ const lockfileLintSupportedPackageManagers = [packageManagers$1.NPM, packageManagers$1.YARN];
1553
1593
 
1554
1594
  function lockfileLintSupports(packageManager) {
1555
1595
  return lockfileLintSupportedPackageManagers.includes(packageManager);
@@ -1761,13 +1801,16 @@ async function scaffolder (options) {
1761
1801
  }
1762
1802
 
1763
1803
  async function tester ({projectRoot}) {
1764
- const [nvmIsConfigured, packageLockExists, yarnLockExists] = await Promise.all([
1765
- fileExists(`${projectRoot}/.nvmrc`),
1766
- fileExists(`${projectRoot}/package-lock.json`),
1767
- fileExists(`${projectRoot}/yarn.lock`)
1804
+ const [nvmFound, jsPackageManagerFound] = await Promise.all([
1805
+ nvmIsUsed({projectRoot}),
1806
+ jsPackageManagerIsUsed({projectRoot})
1768
1807
  ]);
1769
1808
 
1770
- return nvmIsConfigured || packageLockExists || yarnLockExists;
1809
+ const jsProjectFound = nvmFound || jsPackageManagerFound;
1810
+
1811
+ if (jsProjectFound) info('JavaScript Project Detected');
1812
+
1813
+ return jsProjectFound;
1771
1814
  }
1772
1815
 
1773
1816
  const questionNames = {...questionNames$2, ...questionNames$1};