@form8ion/javascript 7.2.1 → 7.2.4
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 +155 -78
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +171 -94
- package/lib/index.mjs.map +1 -1
- package/package.json +5 -5
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
|
|
340
|
-
await
|
|
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,28 @@ 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 {
|
|
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
|
-
const eslintResults = await eslint.lift({
|
|
506
|
+
const eslintResults = await eslint.lift({
|
|
507
|
+
projectRoot,
|
|
508
|
+
configs: [...eslintConfigs || [], ...eslint$1?.configs || []],
|
|
509
|
+
buildDirectory
|
|
510
|
+
});
|
|
368
511
|
const enhancerResults = await core.applyEnhancers({
|
|
369
512
|
results,
|
|
370
|
-
enhancers: [huskyPlugin__namespace, enginesEnhancer, coveragePlugin, commitConventionPlugin__namespace],
|
|
371
|
-
options: {packageManager, projectRoot, vcs}
|
|
513
|
+
enhancers: [huskyPlugin__namespace, enginesEnhancer, coveragePlugin, commitConventionPlugin__namespace, dialects],
|
|
514
|
+
options: {packageManager, projectRoot, vcs, buildDirectory}
|
|
372
515
|
});
|
|
373
516
|
|
|
374
517
|
await liftPackage(
|
|
@@ -656,64 +799,6 @@ async function prompt(
|
|
|
656
799
|
};
|
|
657
800
|
}
|
|
658
801
|
|
|
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
802
|
function projectWillNotBeConsumed(projectType) {
|
|
718
803
|
return javascriptCore.projectTypes.APPLICATION === projectType || javascriptCore.projectTypes.CLI === projectType;
|
|
719
804
|
}
|
|
@@ -1299,12 +1384,11 @@ async function scaffoldVerification({
|
|
|
1299
1384
|
return deepmerge__default["default"].all([testingResults, lintingResults, huskyResults]);
|
|
1300
1385
|
}
|
|
1301
1386
|
|
|
1302
|
-
async function scaffoldEslint ({config, projectRoot,
|
|
1387
|
+
async function scaffoldEslint ({config, projectRoot, additionalConfiguration}) {
|
|
1303
1388
|
const {scope} = config;
|
|
1304
1389
|
const {ignore} = additionalConfiguration;
|
|
1305
|
-
const ignores = deepmerge__default["default"](ignore, {directories: [`/${buildDirectory}/`]});
|
|
1306
1390
|
|
|
1307
|
-
return eslint.scaffold({scope, projectRoot, ignore
|
|
1391
|
+
return eslint.scaffold({scope, projectRoot, ignore});
|
|
1308
1392
|
}
|
|
1309
1393
|
|
|
1310
1394
|
async function scaffoldRemark ({config, projectRoot, projectType, vcs, dialect}) {
|
|
@@ -1353,17 +1437,12 @@ async function scaffoldCodeStyle ({
|
|
|
1353
1437
|
configs,
|
|
1354
1438
|
vcs,
|
|
1355
1439
|
configureLinting,
|
|
1356
|
-
buildDirectory,
|
|
1357
1440
|
eslint
|
|
1358
1441
|
}) {
|
|
1359
1442
|
return deepmerge__default["default"].all(await Promise.all([
|
|
1360
|
-
configs.eslint
|
|
1361
|
-
&&
|
|
1362
|
-
|
|
1363
|
-
config: configs.eslint,
|
|
1364
|
-
buildDirectory,
|
|
1365
|
-
additionalConfiguration: eslint
|
|
1366
|
-
}),
|
|
1443
|
+
configs.eslint
|
|
1444
|
+
&& configureLinting
|
|
1445
|
+
&& scaffoldEslint({projectRoot, config: configs.eslint, additionalConfiguration: eslint}),
|
|
1367
1446
|
scaffoldRemark({
|
|
1368
1447
|
projectRoot,
|
|
1369
1448
|
projectType,
|
|
@@ -1466,7 +1545,6 @@ async function scaffolder (options) {
|
|
|
1466
1545
|
configs,
|
|
1467
1546
|
projectRoot,
|
|
1468
1547
|
projectType,
|
|
1469
|
-
buildDirectory: projectTypeResults.buildDirectory,
|
|
1470
1548
|
testFilenamePattern: verificationResults.testFilenamePattern
|
|
1471
1549
|
}),
|
|
1472
1550
|
scaffoldCodeStyle({
|
|
@@ -1476,7 +1554,6 @@ async function scaffolder (options) {
|
|
|
1476
1554
|
configs,
|
|
1477
1555
|
vcs,
|
|
1478
1556
|
configureLinting,
|
|
1479
|
-
buildDirectory: projectTypeResults.buildDirectory,
|
|
1480
1557
|
eslint: verificationResults.eslint
|
|
1481
1558
|
}),
|
|
1482
1559
|
scaffoldProjectTypePlugin({
|
|
@@ -1506,8 +1583,8 @@ async function scaffolder (options) {
|
|
|
1506
1583
|
javascriptCore.scaffoldChoice(ciServices, ci, {projectRoot, vcs, visibility, projectType, projectName, nodeVersion, tests}),
|
|
1507
1584
|
commitConventionPlugin.scaffold({projectRoot, projectType, configs, pathWithinParent})
|
|
1508
1585
|
])),
|
|
1509
|
-
projectTypePluginResults,
|
|
1510
1586
|
projectTypeResults,
|
|
1587
|
+
projectTypePluginResults,
|
|
1511
1588
|
verificationResults,
|
|
1512
1589
|
codeStyleResults,
|
|
1513
1590
|
npmResults,
|