@form8ion/javascript 7.2.2 → 7.2.5

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
@@ -191,6 +191,87 @@ async function scaffoldUnitTesting ({projectRoot, frameworks, decisions, visibil
191
191
  ]);
192
192
  }
193
193
 
194
+ async function scaffoldEslint ({config, projectRoot, additionalConfiguration}) {
195
+ const {scope} = config;
196
+ const {ignore} = additionalConfiguration;
197
+
198
+ return eslint.scaffold({scope, projectRoot, ignore});
199
+ }
200
+
201
+ function lifter$1 ({results: {buildDirectory, eslintConfigs, eslint: eslint$1}, projectRoot}) {
202
+ return eslint.lift({projectRoot, configs: [...eslintConfigs || [], ...eslint$1?.configs || []], buildDirectory});
203
+ }
204
+
205
+ async function scaffoldRemark ({config, projectRoot, projectType, vcs, dialect}) {
206
+ await configFile.write({
207
+ format: core.fileTypes.JSON,
208
+ path: projectRoot,
209
+ name: 'remark',
210
+ config: {
211
+ settings: {
212
+ listItemIndent: 1,
213
+ emphasis: '_',
214
+ strong: '_',
215
+ bullet: '*',
216
+ incrementListMarker: false
217
+ },
218
+ plugins: [
219
+ config,
220
+ ['remark-toc', {tight: true}],
221
+ ...javascriptCore.projectTypes.PACKAGE === projectType ? [['remark-usage', {heading: 'example'}]] : [],
222
+ ...!vcs ? [['validate-links', {repository: false}]] : []
223
+ ]
224
+ }
225
+ });
226
+
227
+ return deepmerge__default["default"](
228
+ {
229
+ devDependencies: [config, 'remark-cli', 'remark-toc'],
230
+ scripts: {
231
+ 'lint:md': 'remark . --frail',
232
+ 'generate:md': 'remark . --output'
233
+ }
234
+ },
235
+ {
236
+ ...javascriptCore.projectTypes.PACKAGE === projectType && {
237
+ devDependencies: ['remark-usage'],
238
+ ...javascriptCore.dialects.COMMON_JS !== dialect && {scripts: {'pregenerate:md': 'run-s build'}}
239
+ }
240
+ }
241
+ );
242
+ }
243
+
244
+ async function scaffoldCodeStyle ({
245
+ projectRoot,
246
+ projectType,
247
+ dialect,
248
+ configs,
249
+ vcs,
250
+ configureLinting,
251
+ eslint
252
+ }) {
253
+ return deepmerge__default["default"].all(await Promise.all([
254
+ configs.eslint
255
+ && configureLinting
256
+ && scaffoldEslint({projectRoot, config: configs.eslint, additionalConfiguration: eslint}),
257
+ scaffoldRemark({
258
+ projectRoot,
259
+ projectType,
260
+ dialect,
261
+ vcs,
262
+ config: configs.remark || '@form8ion/remark-lint-preset'
263
+ }),
264
+ prettier.scaffold({projectRoot, config: configs.prettier})
265
+ ].filter(Boolean)));
266
+ }
267
+
268
+ var codeStylePlugin = /*#__PURE__*/Object.freeze({
269
+ __proto__: null,
270
+ scaffold: scaffoldCodeStyle,
271
+ lift: lifter$1,
272
+ test: eslint.test
273
+ });
274
+
194
275
  async function test$1({projectRoot}) {
195
276
  const {engines} = JSON.parse(await fs.promises.readFile(`${projectRoot}/package.json`, 'utf8'));
196
277
 
@@ -238,8 +319,8 @@ async function scaffoldBabel ({projectRoot, preset}) {
238
319
  };
239
320
  }
240
321
 
241
- async function lifter ({buildDirectory, projectRoot}) {
242
- await addIgnore({ignore: buildDirectory, projectRoot});
322
+ async function lifter ({results, projectRoot}) {
323
+ await addIgnore({ignore: results.buildDirectory, projectRoot});
243
324
 
244
325
  return {};
245
326
  }
@@ -390,6 +471,52 @@ async function scaffoldPackage ({
390
471
  return {homepage: packageData.homepage};
391
472
  }
392
473
 
474
+ const details = {
475
+ [javascriptCore.packageManagers.NPM]: {
476
+ installationCommand: 'install',
477
+ installationFlags: {
478
+ [javascriptCore.DEV_DEPENDENCY_TYPE]: `save-${javascriptCore.DEV_DEPENDENCY_TYPE}`,
479
+ [javascriptCore.PROD_DEPENDENCY_TYPE]: `save-${javascriptCore.PROD_DEPENDENCY_TYPE}`,
480
+ exact: 'save-exact'
481
+ }
482
+ },
483
+ [javascriptCore.packageManagers.YARN]: {
484
+ installationCommand: 'add',
485
+ installationFlags: {
486
+ [javascriptCore.DEV_DEPENDENCY_TYPE]: javascriptCore.DEV_DEPENDENCY_TYPE,
487
+ [javascriptCore.PROD_DEPENDENCY_TYPE]: javascriptCore.PROD_DEPENDENCY_TYPE,
488
+ exact: 'exact'
489
+ }
490
+ }
491
+ };
492
+
493
+ function getInstallationCommandFor(manager) {
494
+ return details[manager].installationCommand;
495
+ }
496
+
497
+ function getDependencyTypeFlag(manager, type) {
498
+ return details[manager].installationFlags[type];
499
+ }
500
+
501
+ function getExactFlag(manager) {
502
+ return details[manager].installationFlags.exact;
503
+ }
504
+
505
+ async function install$1 (dependencies, dependenciesType, projectRoot, packageManager = javascriptCore.packageManagers.NPM) {
506
+ if (dependencies.length) {
507
+ cliMessages.info(`Installing ${dependenciesType} dependencies`, {level: 'secondary'});
508
+
509
+ await execa__default["default"](
510
+ `. ~/.nvm/nvm.sh && nvm use && ${packageManager} ${
511
+ getInstallationCommandFor(packageManager)
512
+ } ${[...new Set(dependencies)].join(' ')} --${getDependencyTypeFlag(packageManager, dependenciesType)}${
513
+ javascriptCore.DEV_DEPENDENCY_TYPE === dependenciesType ? ` --${getExactFlag(packageManager)}` : ''
514
+ }`,
515
+ {shell: true, cwd: projectRoot}
516
+ );
517
+ } else cliMessages.warn(`No ${dependenciesType} dependencies to install`);
518
+ }
519
+
393
520
  async function liftPackage ({
394
521
  projectRoot,
395
522
  scripts,
@@ -420,8 +547,8 @@ async function liftPackage ({
420
547
  cliMessages.info('Installing dependencies');
421
548
 
422
549
  try {
423
- await javascriptCore.installDependencies(dependencies || [], javascriptCore.PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
424
- await javascriptCore.installDependencies([...devDependencies || []], javascriptCore.DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
550
+ await install$1(dependencies || [], javascriptCore.PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
551
+ await install$1([...devDependencies || []], javascriptCore.DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
425
552
  } catch (e) {
426
553
  cliMessages.error('Failed to install dependencies');
427
554
  }
@@ -447,28 +574,23 @@ async function lift ({projectRoot, vcs, results}) {
447
574
  const {
448
575
  scripts,
449
576
  tags,
450
- eslintConfigs,
451
- eslint: eslint$1,
452
577
  dependencies,
453
578
  devDependencies,
454
- packageManager: manager,
455
- buildDirectory
579
+ packageManager: manager
456
580
  } = results;
457
581
 
458
582
  const packageManager = await resolvePackageManager({projectRoot, packageManager: manager});
459
583
 
460
- const eslintResults = await eslint.lift({projectRoot, configs: [...eslintConfigs || [], ...eslint$1?.configs || []]});
461
584
  const enhancerResults = await core.applyEnhancers({
462
585
  results,
463
- enhancers: [huskyPlugin__namespace, enginesEnhancer, coveragePlugin, commitConventionPlugin__namespace, dialects],
464
- options: {packageManager, projectRoot, vcs, buildDirectory}
586
+ enhancers: [huskyPlugin__namespace, enginesEnhancer, coveragePlugin, commitConventionPlugin__namespace, dialects, codeStylePlugin],
587
+ options: {packageManager, projectRoot, vcs}
465
588
  });
466
589
 
467
590
  await liftPackage(
468
591
  deepmerge__default["default"].all([
469
592
  {projectRoot, scripts, tags, dependencies, devDependencies, packageManager},
470
- enhancerResults,
471
- eslintResults
593
+ enhancerResults
472
594
  ])
473
595
  );
474
596
 
@@ -1281,15 +1403,17 @@ async function scaffoldLockfileLint ({projectRoot, packageManager, registries})
1281
1403
  );
1282
1404
  }
1283
1405
 
1284
- await fs.promises.writeFile(
1285
- `${projectRoot}/.lockfile-lintrc.json`,
1286
- JSON.stringify({
1406
+ await configFile.write({
1407
+ name: 'lockfile-lint',
1408
+ format: core.fileTypes.JSON,
1409
+ path: projectRoot,
1410
+ config: {
1287
1411
  path: determineLockfilePathFor(packageManager),
1288
1412
  type: packageManager,
1289
1413
  'validate-https': true,
1290
1414
  'allowed-hosts': buildAllowedHostsList({packageManager, registries})
1291
- })
1292
- );
1415
+ }
1416
+ });
1293
1417
 
1294
1418
  return {
1295
1419
  devDependencies: ['lockfile-lint'],
@@ -1334,82 +1458,6 @@ async function scaffoldVerification({
1334
1458
  return deepmerge__default["default"].all([testingResults, lintingResults, huskyResults]);
1335
1459
  }
1336
1460
 
1337
- async function scaffoldEslint ({config, projectRoot, buildDirectory, additionalConfiguration}) {
1338
- const {scope} = config;
1339
- const {ignore} = additionalConfiguration;
1340
- const ignores = deepmerge__default["default"](ignore, {directories: [`/${buildDirectory}/`]});
1341
-
1342
- return eslint.scaffold({scope, projectRoot, ignore: {directories: ignores.directories}});
1343
- }
1344
-
1345
- async function scaffoldRemark ({config, projectRoot, projectType, vcs, dialect}) {
1346
- await configFile.write({
1347
- format: core.fileTypes.JSON,
1348
- path: projectRoot,
1349
- name: 'remark',
1350
- config: {
1351
- settings: {
1352
- listItemIndent: 1,
1353
- emphasis: '_',
1354
- strong: '_',
1355
- bullet: '*',
1356
- incrementListMarker: false
1357
- },
1358
- plugins: [
1359
- config,
1360
- ['remark-toc', {tight: true}],
1361
- ...javascriptCore.projectTypes.PACKAGE === projectType ? [['remark-usage', {heading: 'example'}]] : [],
1362
- ...!vcs ? [['validate-links', {repository: false}]] : []
1363
- ]
1364
- }
1365
- });
1366
-
1367
- return deepmerge__default["default"](
1368
- {
1369
- devDependencies: [config, 'remark-cli', 'remark-toc'],
1370
- scripts: {
1371
- 'lint:md': 'remark . --frail',
1372
- 'generate:md': 'remark . --output'
1373
- }
1374
- },
1375
- {
1376
- ...javascriptCore.projectTypes.PACKAGE === projectType && {
1377
- devDependencies: ['remark-usage'],
1378
- ...javascriptCore.dialects.COMMON_JS !== dialect && {scripts: {'pregenerate:md': 'run-s build'}}
1379
- }
1380
- }
1381
- );
1382
- }
1383
-
1384
- async function scaffoldCodeStyle ({
1385
- projectRoot,
1386
- projectType,
1387
- dialect,
1388
- configs,
1389
- vcs,
1390
- configureLinting,
1391
- buildDirectory,
1392
- eslint
1393
- }) {
1394
- return deepmerge__default["default"].all(await Promise.all([
1395
- configs.eslint && configureLinting
1396
- && scaffoldEslint({
1397
- projectRoot,
1398
- config: configs.eslint,
1399
- buildDirectory,
1400
- additionalConfiguration: eslint
1401
- }),
1402
- scaffoldRemark({
1403
- projectRoot,
1404
- projectType,
1405
- dialect,
1406
- vcs,
1407
- config: configs.remark || '@form8ion/remark-lint-preset'
1408
- }),
1409
- prettier.scaffold({projectRoot, config: configs.prettier})
1410
- ].filter(Boolean)));
1411
- }
1412
-
1413
1461
  async function scaffolder (options) {
1414
1462
  cliMessages.info('Initializing JavaScript project');
1415
1463
 
@@ -1510,7 +1558,6 @@ async function scaffolder (options) {
1510
1558
  configs,
1511
1559
  vcs,
1512
1560
  configureLinting,
1513
- buildDirectory: projectTypeResults.buildDirectory,
1514
1561
  eslint: verificationResults.eslint
1515
1562
  }),
1516
1563
  scaffoldProjectTypePlugin({