@form8ion/javascript 7.1.1 → 7.2.2
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 +100 -64
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +115 -79
- package/lib/index.mjs.map +1 -1
- package/package.json +6 -6
package/lib/index.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { questionNames as questionNames$2, questions } from '@travi/language-scaffolder-prompts';
|
|
2
2
|
import deepmerge from 'deepmerge';
|
|
3
|
-
import { validateOptions, scaffoldChoice,
|
|
3
|
+
import { validateOptions, scaffoldChoice, projectTypes, dialects as dialects$1, writePackageJson, installDependencies, PROD_DEPENDENCY_TYPE, DEV_DEPENDENCY_TYPE, packageManagers, mergeIntoExistingPackageJson } from '@form8ion/javascript-core';
|
|
4
4
|
import joi from 'joi';
|
|
5
5
|
import { prompt as prompt$1, Separator } from '@form8ion/overridable-prompts';
|
|
6
6
|
import { scaffold, lift as lift$3 } from '@form8ion/codecov';
|
|
7
7
|
import { promises } from 'fs';
|
|
8
|
-
import { fileExists,
|
|
8
|
+
import { fileExists, fileTypes, writeConfigFile, applyEnhancers } from '@form8ion/core';
|
|
9
9
|
import { info, error, warn } from '@travi/cli-messages';
|
|
10
10
|
import * as commitConventionPlugin from '@form8ion/commit-convention';
|
|
11
11
|
import { scaffold as scaffold$5 } from '@form8ion/commit-convention';
|
|
@@ -24,7 +24,7 @@ import { resolve } from 'path';
|
|
|
24
24
|
import filedirname from 'filedirname';
|
|
25
25
|
import * as huskyPlugin from '@form8ion/husky';
|
|
26
26
|
import { scaffold as scaffold$2 } from '@form8ion/husky';
|
|
27
|
-
import { write } from '@form8ion/config-file';
|
|
27
|
+
import { write as write$1 } from '@form8ion/config-file';
|
|
28
28
|
import { scaffold as scaffold$4 } from '@form8ion/prettier';
|
|
29
29
|
import { lift as lift$4, scaffold as scaffold$3 } from '@form8ion/eslint';
|
|
30
30
|
|
|
@@ -177,6 +177,90 @@ var enginesEnhancer = /*#__PURE__*/Object.freeze({
|
|
|
177
177
|
lift: lift$1
|
|
178
178
|
});
|
|
179
179
|
|
|
180
|
+
function write ({projectRoot, config}) {
|
|
181
|
+
return write$1({path: projectRoot, name: 'babel', format: fileTypes.JSON, config});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function addIgnore ({projectRoot, ignore}) {
|
|
185
|
+
if (ignore) {
|
|
186
|
+
const existingConfig = JSON.parse(await promises.readFile(`${projectRoot}/.babelrc.json`, 'utf-8'));
|
|
187
|
+
|
|
188
|
+
await write({projectRoot, config: {...existingConfig, ignore: [`./${ignore}/`]}});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async function scaffoldBabel ({projectRoot, preset}) {
|
|
193
|
+
if (!preset) {
|
|
194
|
+
throw new Error('No babel preset provided. Cannot configure babel transpilation');
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
await write({projectRoot, config: {presets: [preset.name]}});
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
devDependencies: ['@babel/register', preset.packageName],
|
|
201
|
+
eslint: {}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async function lifter ({buildDirectory, projectRoot}) {
|
|
206
|
+
await addIgnore({ignore: buildDirectory, projectRoot});
|
|
207
|
+
|
|
208
|
+
return {};
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function predicate ({projectRoot}) {
|
|
212
|
+
return fileExists(`${projectRoot}/.babelrc.json`);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async function scaffoldTypescript ({config, projectType, projectRoot, testFilenamePattern}) {
|
|
216
|
+
const eslintConfigs = ['typescript'];
|
|
217
|
+
const shareableTsConfigPackage = `${config.scope}/tsconfig`;
|
|
218
|
+
|
|
219
|
+
await writeConfigFile({
|
|
220
|
+
path: projectRoot,
|
|
221
|
+
name: 'tsconfig',
|
|
222
|
+
format: fileTypes.JSON,
|
|
223
|
+
config: {
|
|
224
|
+
$schema: 'https://json.schemastore.org/tsconfig',
|
|
225
|
+
extends: shareableTsConfigPackage,
|
|
226
|
+
compilerOptions: {
|
|
227
|
+
rootDir: 'src',
|
|
228
|
+
...projectTypes.PACKAGE === projectType && {
|
|
229
|
+
outDir: 'lib',
|
|
230
|
+
declaration: true
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
include: ['src/**/*.ts'],
|
|
234
|
+
...testFilenamePattern && {exclude: [testFilenamePattern]}
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
return {
|
|
239
|
+
eslint: {configs: eslintConfigs},
|
|
240
|
+
eslintConfigs,
|
|
241
|
+
devDependencies: ['typescript', shareableTsConfigPackage],
|
|
242
|
+
vcsIgnore: {files: ['tsconfig.tsbuildinfo']}
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function scaffoldDialect ({dialect, projectType, projectRoot, configs, testFilenamePattern}) {
|
|
247
|
+
switch (dialect) {
|
|
248
|
+
case dialects$1.BABEL:
|
|
249
|
+
return scaffoldBabel({preset: configs.babelPreset, projectRoot});
|
|
250
|
+
case dialects$1.TYPESCRIPT:
|
|
251
|
+
return scaffoldTypescript({config: configs.typescript, projectType, projectRoot, testFilenamePattern});
|
|
252
|
+
default:
|
|
253
|
+
return {};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
var dialects = /*#__PURE__*/Object.freeze({
|
|
258
|
+
__proto__: null,
|
|
259
|
+
scaffold: scaffoldDialect,
|
|
260
|
+
test: predicate,
|
|
261
|
+
lift: lifter
|
|
262
|
+
});
|
|
263
|
+
|
|
180
264
|
function scaffoldScripts () {
|
|
181
265
|
return {};
|
|
182
266
|
}
|
|
@@ -234,7 +318,7 @@ function buildPackageDetails ({
|
|
|
234
318
|
name: packageName,
|
|
235
319
|
description,
|
|
236
320
|
license,
|
|
237
|
-
type: dialects.ESM === dialect ? 'module' : 'commonjs',
|
|
321
|
+
type: dialects$1.ESM === dialect ? 'module' : 'commonjs',
|
|
238
322
|
...defineVcsHostDetails(vcs, projectType, packageName, pathWithinParent),
|
|
239
323
|
author: `${author.name}${author.email ? ` <${author.email}>` : ''}${author.url ? ` (${author.url})` : ''}`,
|
|
240
324
|
scripts: scaffoldScripts()
|
|
@@ -324,15 +408,24 @@ async function resolvePackageManager ({projectRoot, packageManager}) {
|
|
|
324
408
|
async function lift ({projectRoot, vcs, results}) {
|
|
325
409
|
info('Lifting JavaScript-specific details');
|
|
326
410
|
|
|
327
|
-
const {
|
|
411
|
+
const {
|
|
412
|
+
scripts,
|
|
413
|
+
tags,
|
|
414
|
+
eslintConfigs,
|
|
415
|
+
eslint,
|
|
416
|
+
dependencies,
|
|
417
|
+
devDependencies,
|
|
418
|
+
packageManager: manager,
|
|
419
|
+
buildDirectory
|
|
420
|
+
} = results;
|
|
328
421
|
|
|
329
422
|
const packageManager = await resolvePackageManager({projectRoot, packageManager: manager});
|
|
330
423
|
|
|
331
424
|
const eslintResults = await lift$4({projectRoot, configs: [...eslintConfigs || [], ...eslint?.configs || []]});
|
|
332
425
|
const enhancerResults = await applyEnhancers({
|
|
333
426
|
results,
|
|
334
|
-
enhancers: [huskyPlugin, enginesEnhancer, coveragePlugin, commitConventionPlugin],
|
|
335
|
-
options: {packageManager, projectRoot, vcs}
|
|
427
|
+
enhancers: [huskyPlugin, enginesEnhancer, coveragePlugin, commitConventionPlugin, dialects],
|
|
428
|
+
options: {packageManager, projectRoot, vcs, buildDirectory}
|
|
336
429
|
});
|
|
337
430
|
|
|
338
431
|
await liftPackage(
|
|
@@ -434,10 +527,10 @@ function validate(options) {
|
|
|
434
527
|
|
|
435
528
|
function buildDialectChoices ({babelPreset, typescript}) {
|
|
436
529
|
return [
|
|
437
|
-
{name: 'Common JS (no transpilation)', value: dialects.COMMON_JS, short: 'cjs'},
|
|
438
|
-
...babelPreset ? [{name: 'Modern JavaScript (transpiled)', value: dialects.BABEL, short: 'modern'}] : [],
|
|
439
|
-
{name: 'ESM-only (no transpilation)', value: dialects.ESM, short: 'esm'},
|
|
440
|
-
...typescript ? [{name: 'TypeScript', value: dialects.TYPESCRIPT, short: 'ts'}] : []
|
|
530
|
+
{name: 'Common JS (no transpilation)', value: dialects$1.COMMON_JS, short: 'cjs'},
|
|
531
|
+
...babelPreset ? [{name: 'Modern JavaScript (transpiled)', value: dialects$1.BABEL, short: 'modern'}] : [],
|
|
532
|
+
{name: 'ESM-only (no transpilation)', value: dialects$1.ESM, short: 'esm'},
|
|
533
|
+
...typescript ? [{name: 'TypeScript', value: dialects$1.TYPESCRIPT, short: 'ts'}] : []
|
|
441
534
|
];
|
|
442
535
|
}
|
|
443
536
|
|
|
@@ -620,64 +713,6 @@ async function prompt(
|
|
|
620
713
|
};
|
|
621
714
|
}
|
|
622
715
|
|
|
623
|
-
async function scaffoldBabel ({projectRoot, preset, buildDirectory}) {
|
|
624
|
-
if (!preset) {
|
|
625
|
-
throw new Error('No babel preset provided. Cannot configure babel transpilation');
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
await write({
|
|
629
|
-
path: projectRoot,
|
|
630
|
-
name: 'babel',
|
|
631
|
-
format: fileTypes.JSON,
|
|
632
|
-
config: {presets: [preset.name], ignore: [`./${buildDirectory}/`]}
|
|
633
|
-
});
|
|
634
|
-
|
|
635
|
-
return {
|
|
636
|
-
devDependencies: ['@babel/register', preset.packageName],
|
|
637
|
-
eslint: {}
|
|
638
|
-
};
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
async function scaffoldTypescript ({config, projectType, projectRoot, testFilenamePattern}) {
|
|
642
|
-
const eslintConfigs = ['typescript'];
|
|
643
|
-
const shareableTsConfigPackage = `${config.scope}/tsconfig`;
|
|
644
|
-
|
|
645
|
-
await promises.writeFile(
|
|
646
|
-
`${projectRoot}/tsconfig.json`,
|
|
647
|
-
JSON.stringify({
|
|
648
|
-
$schema: 'https://json.schemastore.org/tsconfig',
|
|
649
|
-
extends: shareableTsConfigPackage,
|
|
650
|
-
compilerOptions: {
|
|
651
|
-
rootDir: 'src',
|
|
652
|
-
...projectTypes.PACKAGE === projectType && {
|
|
653
|
-
outDir: 'lib',
|
|
654
|
-
declaration: true
|
|
655
|
-
}
|
|
656
|
-
},
|
|
657
|
-
include: ['src/**/*.ts'],
|
|
658
|
-
...testFilenamePattern && {exclude: [testFilenamePattern]}
|
|
659
|
-
})
|
|
660
|
-
);
|
|
661
|
-
|
|
662
|
-
return {
|
|
663
|
-
eslint: {configs: eslintConfigs},
|
|
664
|
-
eslintConfigs,
|
|
665
|
-
devDependencies: ['typescript', shareableTsConfigPackage],
|
|
666
|
-
vcsIgnore: {files: ['tsconfig.tsbuildinfo']}
|
|
667
|
-
};
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
function scaffoldDialect ({dialect, projectType, projectRoot, configs, buildDirectory, testFilenamePattern}) {
|
|
671
|
-
switch (dialect) {
|
|
672
|
-
case dialects.BABEL:
|
|
673
|
-
return scaffoldBabel({preset: configs.babelPreset, projectRoot, buildDirectory});
|
|
674
|
-
case dialects.TYPESCRIPT:
|
|
675
|
-
return scaffoldTypescript({config: configs.typescript, projectType, projectRoot, testFilenamePattern});
|
|
676
|
-
default:
|
|
677
|
-
return {};
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
|
|
681
716
|
function projectWillNotBeConsumed(projectType) {
|
|
682
717
|
return projectTypes.APPLICATION === projectType || projectTypes.CLI === projectType;
|
|
683
718
|
}
|
|
@@ -885,7 +920,7 @@ async function buildDetails ({
|
|
|
885
920
|
dialect,
|
|
886
921
|
decisions
|
|
887
922
|
}) {
|
|
888
|
-
if (dialects.COMMON_JS === dialect) return buildDetailsForCommonJsProject({projectRoot, projectName});
|
|
923
|
+
if (dialects$1.COMMON_JS === dialect) return buildDetailsForCommonJsProject({projectRoot, projectName});
|
|
889
924
|
|
|
890
925
|
const chosenBundler = await chooseBundler({bundlers: packageBundlers, decisions});
|
|
891
926
|
|
|
@@ -942,14 +977,14 @@ async function scaffoldPackageType ({
|
|
|
942
977
|
mergeIntoExistingPackageJson({
|
|
943
978
|
projectRoot,
|
|
944
979
|
config: {
|
|
945
|
-
files: ['example.js', ...dialects.COMMON_JS === dialect ? ['index.js'] : ['lib/']],
|
|
980
|
+
files: ['example.js', ...dialects$1.COMMON_JS === dialect ? ['index.js'] : ['lib/']],
|
|
946
981
|
publishConfig: {
|
|
947
982
|
access: 'Public' === visibility ? 'public' : 'restricted',
|
|
948
983
|
...publishRegistry && {registry: publishRegistry}
|
|
949
984
|
},
|
|
950
985
|
sideEffects: false,
|
|
951
986
|
...'Public' === visibility && {runkitExampleFilename: './example.js'},
|
|
952
|
-
...dialects.BABEL === dialect && {
|
|
987
|
+
...dialects$1.BABEL === dialect && {
|
|
953
988
|
main: './lib/index.js',
|
|
954
989
|
module: './lib/index.mjs',
|
|
955
990
|
exports: {
|
|
@@ -957,11 +992,11 @@ async function scaffoldPackageType ({
|
|
|
957
992
|
import: './lib/index.mjs'
|
|
958
993
|
}
|
|
959
994
|
},
|
|
960
|
-
...dialects.ESM === dialect && {
|
|
995
|
+
...dialects$1.ESM === dialect && {
|
|
961
996
|
main: './lib/index.mjs',
|
|
962
997
|
exports: './lib/index.mjs'
|
|
963
998
|
},
|
|
964
|
-
...dialects.TYPESCRIPT === dialect && {
|
|
999
|
+
...dialects$1.TYPESCRIPT === dialect && {
|
|
965
1000
|
main: './lib/index.js',
|
|
966
1001
|
module: './lib/index.mjs',
|
|
967
1002
|
types: './lib/index.d.ts',
|
|
@@ -1131,6 +1166,7 @@ async function scaffoldProjectTypePlugin ({
|
|
|
1131
1166
|
packageName,
|
|
1132
1167
|
packageManager,
|
|
1133
1168
|
scope,
|
|
1169
|
+
dialect,
|
|
1134
1170
|
tests,
|
|
1135
1171
|
decisions,
|
|
1136
1172
|
plugins
|
|
@@ -1144,7 +1180,7 @@ async function scaffoldProjectTypePlugin ({
|
|
|
1144
1180
|
return scaffoldChoice(
|
|
1145
1181
|
pluginsForProjectType,
|
|
1146
1182
|
chosenType,
|
|
1147
|
-
{projectRoot, projectName, packageName, packageManager, scope, tests}
|
|
1183
|
+
{projectRoot, projectName, packageName, packageManager, scope, tests, dialect}
|
|
1148
1184
|
);
|
|
1149
1185
|
}
|
|
1150
1186
|
|
|
@@ -1271,7 +1307,7 @@ async function scaffoldEslint ({config, projectRoot, buildDirectory, additionalC
|
|
|
1271
1307
|
}
|
|
1272
1308
|
|
|
1273
1309
|
async function scaffoldRemark ({config, projectRoot, projectType, vcs, dialect}) {
|
|
1274
|
-
await write({
|
|
1310
|
+
await write$1({
|
|
1275
1311
|
format: fileTypes.JSON,
|
|
1276
1312
|
path: projectRoot,
|
|
1277
1313
|
name: 'remark',
|
|
@@ -1303,7 +1339,7 @@ async function scaffoldRemark ({config, projectRoot, projectType, vcs, dialect})
|
|
|
1303
1339
|
{
|
|
1304
1340
|
...projectTypes.PACKAGE === projectType && {
|
|
1305
1341
|
devDependencies: ['remark-usage'],
|
|
1306
|
-
...dialects.COMMON_JS !== dialect && {scripts: {'pregenerate:md': 'run-s build'}}
|
|
1342
|
+
...dialects$1.COMMON_JS !== dialect && {scripts: {'pregenerate:md': 'run-s build'}}
|
|
1307
1343
|
}
|
|
1308
1344
|
}
|
|
1309
1345
|
);
|
|
@@ -1429,7 +1465,6 @@ async function scaffolder (options) {
|
|
|
1429
1465
|
configs,
|
|
1430
1466
|
projectRoot,
|
|
1431
1467
|
projectType,
|
|
1432
|
-
buildDirectory: projectTypeResults.buildDirectory,
|
|
1433
1468
|
testFilenamePattern: verificationResults.testFilenamePattern
|
|
1434
1469
|
}),
|
|
1435
1470
|
scaffoldCodeStyle({
|
|
@@ -1449,6 +1484,7 @@ async function scaffolder (options) {
|
|
|
1449
1484
|
packageName,
|
|
1450
1485
|
packageManager,
|
|
1451
1486
|
scope,
|
|
1487
|
+
dialect,
|
|
1452
1488
|
tests,
|
|
1453
1489
|
decisions,
|
|
1454
1490
|
plugins: {
|
|
@@ -1468,8 +1504,8 @@ async function scaffolder (options) {
|
|
|
1468
1504
|
scaffoldChoice(ciServices, ci, {projectRoot, vcs, visibility, projectType, projectName, nodeVersion, tests}),
|
|
1469
1505
|
scaffold$5({projectRoot, projectType, configs, pathWithinParent})
|
|
1470
1506
|
])),
|
|
1471
|
-
projectTypePluginResults,
|
|
1472
1507
|
projectTypeResults,
|
|
1508
|
+
projectTypePluginResults,
|
|
1473
1509
|
verificationResults,
|
|
1474
1510
|
codeStyleResults,
|
|
1475
1511
|
npmResults,
|