@form8ion/javascript 2.0.0 → 3.0.0-alpha.1
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.cjs.js +199 -37
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.es.js +207 -47
- package/lib/index.es.js.map +1 -1
- package/package.json +8 -9
package/lib/index.es.js
CHANGED
|
@@ -1,41 +1,36 @@
|
|
|
1
1
|
import { questionNames as questionNames$2, questions } from '@travi/language-scaffolder-prompts';
|
|
2
2
|
import deepmerge from 'deepmerge';
|
|
3
|
-
import { validateOptions, scaffoldChoice,
|
|
4
|
-
import { scaffold
|
|
3
|
+
import { validateOptions, scaffoldChoice, installDependencies, PROD_DEPENDENCY_TYPE, DEV_DEPENDENCY_TYPE, packageManagers, dialects, projectTypes } from '@form8ion/javascript-core';
|
|
4
|
+
import { scaffold } from '@form8ion/codecov';
|
|
5
5
|
import { promises } from 'fs';
|
|
6
|
-
import * as joi from '
|
|
6
|
+
import * as joi from 'joi';
|
|
7
7
|
import { Separator } from 'inquirer';
|
|
8
8
|
import { prompt as prompt$1 } from '@form8ion/overridable-prompts';
|
|
9
|
-
import {
|
|
10
|
-
import { lift } from '@form8ion/
|
|
11
|
-
import {
|
|
9
|
+
import { info, warn } from '@travi/cli-messages';
|
|
10
|
+
import { lift as lift$3, scaffold as scaffold$2 } from '@form8ion/eslint';
|
|
11
|
+
import { fileExists } from '@form8ion/core';
|
|
12
|
+
import { test as test$2, lift as lift$2, scaffold as scaffold$3 } from '@form8ion/husky';
|
|
13
|
+
import { scaffold as scaffold$4 } from '@form8ion/commit-convention';
|
|
12
14
|
import hoek from '@hapi/hoek';
|
|
13
15
|
import execa from 'execa';
|
|
14
16
|
import { stringify } from 'ini';
|
|
15
17
|
import { EOL } from 'os';
|
|
16
18
|
import validatePackageName from 'validate-npm-package-name';
|
|
17
|
-
import { scaffold as scaffold$
|
|
19
|
+
import { scaffold as scaffold$1 } from '@form8ion/rollup';
|
|
18
20
|
import mustache from 'mustache';
|
|
19
21
|
import camelcase from 'camelcase';
|
|
20
22
|
import makeDir from 'make-dir';
|
|
21
23
|
import touch from 'touch';
|
|
22
24
|
import { resolve } from 'path';
|
|
23
|
-
import { scaffold as scaffold$4 } from '@form8ion/husky';
|
|
24
|
-
import { scaffold as scaffold$3 } from '@form8ion/eslint';
|
|
25
25
|
|
|
26
26
|
function ownKeys(object, enumerableOnly) {
|
|
27
27
|
var keys = Object.keys(object);
|
|
28
28
|
|
|
29
29
|
if (Object.getOwnPropertySymbols) {
|
|
30
30
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
keys.push.apply(keys, symbols);
|
|
31
|
+
enumerableOnly && (symbols = symbols.filter(function (sym) {
|
|
32
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
33
|
+
})), keys.push.apply(keys, symbols);
|
|
39
34
|
}
|
|
40
35
|
|
|
41
36
|
return keys;
|
|
@@ -43,19 +38,12 @@ function ownKeys(object, enumerableOnly) {
|
|
|
43
38
|
|
|
44
39
|
function _objectSpread2(target) {
|
|
45
40
|
for (var i = 1; i < arguments.length; i++) {
|
|
46
|
-
var source = arguments[i]
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
} else if (Object.getOwnPropertyDescriptors) {
|
|
53
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
54
|
-
} else {
|
|
55
|
-
ownKeys(Object(source)).forEach(function (key) {
|
|
56
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
57
|
-
});
|
|
58
|
-
}
|
|
41
|
+
var source = null != arguments[i] ? arguments[i] : {};
|
|
42
|
+
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
43
|
+
_defineProperty(target, key, source[key]);
|
|
44
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
45
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
46
|
+
});
|
|
59
47
|
}
|
|
60
48
|
|
|
61
49
|
return target;
|
|
@@ -116,13 +104,15 @@ async function scaffoldC8 ({
|
|
|
116
104
|
async function scaffoldCoverage ({
|
|
117
105
|
projectRoot,
|
|
118
106
|
vcs,
|
|
119
|
-
visibility
|
|
107
|
+
visibility,
|
|
108
|
+
pathWithinParent
|
|
120
109
|
}) {
|
|
121
110
|
return deepmerge(await scaffoldC8({
|
|
122
111
|
projectRoot
|
|
123
|
-
}), await scaffold
|
|
112
|
+
}), await scaffold({
|
|
124
113
|
vcs,
|
|
125
|
-
visibility
|
|
114
|
+
visibility,
|
|
115
|
+
pathWithinParent
|
|
126
116
|
}));
|
|
127
117
|
}
|
|
128
118
|
|
|
@@ -149,7 +139,8 @@ async function scaffoldUnitTesting ({
|
|
|
149
139
|
frameworks,
|
|
150
140
|
decisions,
|
|
151
141
|
visibility,
|
|
152
|
-
vcs
|
|
142
|
+
vcs,
|
|
143
|
+
pathWithinParent
|
|
153
144
|
}) {
|
|
154
145
|
const validatedFrameworks = validateOptions(unitTestFrameworksSchema, frameworks);
|
|
155
146
|
const [framework, coverage] = await Promise.all([chooseFramework({
|
|
@@ -160,7 +151,8 @@ async function scaffoldUnitTesting ({
|
|
|
160
151
|
})), scaffoldCoverage({
|
|
161
152
|
projectRoot,
|
|
162
153
|
vcs,
|
|
163
|
-
visibility
|
|
154
|
+
visibility,
|
|
155
|
+
pathWithinParent
|
|
164
156
|
})]);
|
|
165
157
|
return deepmerge.all([{
|
|
166
158
|
scripts: {
|
|
@@ -169,6 +161,157 @@ async function scaffoldUnitTesting ({
|
|
|
169
161
|
}, framework, coverage]);
|
|
170
162
|
}
|
|
171
163
|
|
|
164
|
+
async function applyEnhancers ({
|
|
165
|
+
results,
|
|
166
|
+
enhancers = {},
|
|
167
|
+
projectRoot
|
|
168
|
+
}) {
|
|
169
|
+
info('Applying Enhancers');
|
|
170
|
+
return Object.values(enhancers).reduce(async (acc, enhancer) => {
|
|
171
|
+
if (await enhancer.test({
|
|
172
|
+
projectRoot
|
|
173
|
+
})) {
|
|
174
|
+
const previousResults = await acc;
|
|
175
|
+
return deepmerge(previousResults, await enhancer.lift({
|
|
176
|
+
results: previousResults,
|
|
177
|
+
projectRoot
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return acc;
|
|
182
|
+
}, results);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async function test$1({
|
|
186
|
+
projectRoot
|
|
187
|
+
}) {
|
|
188
|
+
const {
|
|
189
|
+
engines
|
|
190
|
+
} = JSON.parse(await promises.readFile(`${projectRoot}/package.json`, 'utf8'));
|
|
191
|
+
return !!(engines !== null && engines !== void 0 && engines.node);
|
|
192
|
+
}
|
|
193
|
+
async function lift$1({
|
|
194
|
+
projectRoot
|
|
195
|
+
}) {
|
|
196
|
+
const {
|
|
197
|
+
name
|
|
198
|
+
} = JSON.parse(await promises.readFile(`${projectRoot}/package.json`, 'utf8'));
|
|
199
|
+
return {
|
|
200
|
+
devDependencies: ['ls-engines'],
|
|
201
|
+
scripts: {
|
|
202
|
+
'lint:engines': 'ls-engines'
|
|
203
|
+
},
|
|
204
|
+
badges: {
|
|
205
|
+
consumer: {
|
|
206
|
+
node: {
|
|
207
|
+
img: `https://img.shields.io/node/v/${name}?logo=node.js`,
|
|
208
|
+
text: 'node'
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
var enginesEnhancer = /*#__PURE__*/Object.freeze({
|
|
216
|
+
__proto__: null,
|
|
217
|
+
test: test$1,
|
|
218
|
+
lift: lift$1
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
async function liftPackage ({
|
|
222
|
+
projectRoot,
|
|
223
|
+
scripts,
|
|
224
|
+
tags,
|
|
225
|
+
dependencies,
|
|
226
|
+
devDependencies,
|
|
227
|
+
packageManager
|
|
228
|
+
}) {
|
|
229
|
+
if (scripts || tags) {
|
|
230
|
+
info('Updating `package.json`', {
|
|
231
|
+
level: 'secondary'
|
|
232
|
+
});
|
|
233
|
+
const pathToPackageJson = `${projectRoot}/package.json`;
|
|
234
|
+
const existingPackageJsonContents = JSON.parse(await promises.readFile(pathToPackageJson, 'utf8'));
|
|
235
|
+
await promises.writeFile(pathToPackageJson, JSON.stringify(_objectSpread2(_objectSpread2({}, existingPackageJsonContents), {}, {
|
|
236
|
+
scripts: _objectSpread2(_objectSpread2({}, existingPackageJsonContents.scripts), scripts)
|
|
237
|
+
}, tags && {
|
|
238
|
+
keywords: existingPackageJsonContents.keywords ? [...existingPackageJsonContents.keywords, ...tags] : tags
|
|
239
|
+
}), null, 2));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
info('Installing dependencies');
|
|
243
|
+
await installDependencies(dependencies || [], PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
244
|
+
await installDependencies([...(devDependencies || [])], DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
async function resolvePackageManager ({
|
|
248
|
+
projectRoot,
|
|
249
|
+
packageManager
|
|
250
|
+
}) {
|
|
251
|
+
if (packageManager) return packageManager;
|
|
252
|
+
|
|
253
|
+
if (await fileExists(`${projectRoot}/package-lock.json`)) {
|
|
254
|
+
return packageManagers.NPM;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (await fileExists(`${projectRoot}/yarn.lock`)) {
|
|
258
|
+
return packageManagers.YARN;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
throw new Error('Package-manager could not be determined');
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function enhanceHuskyEnhancer(packageManager) {
|
|
265
|
+
return {
|
|
266
|
+
test: test$2,
|
|
267
|
+
lift: ({
|
|
268
|
+
projectRoot,
|
|
269
|
+
results
|
|
270
|
+
}) => lift$2({
|
|
271
|
+
projectRoot,
|
|
272
|
+
results,
|
|
273
|
+
packageManager
|
|
274
|
+
})
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
async function lift ({
|
|
279
|
+
projectRoot,
|
|
280
|
+
results
|
|
281
|
+
}) {
|
|
282
|
+
info('Lifting JavaScript-specific details');
|
|
283
|
+
const {
|
|
284
|
+
scripts,
|
|
285
|
+
tags,
|
|
286
|
+
eslintConfigs,
|
|
287
|
+
dependencies,
|
|
288
|
+
devDependencies,
|
|
289
|
+
packageManager: manager
|
|
290
|
+
} = results;
|
|
291
|
+
const packageManager = await resolvePackageManager({
|
|
292
|
+
projectRoot,
|
|
293
|
+
packageManager: manager
|
|
294
|
+
});
|
|
295
|
+
const eslintResults = await lift$3({
|
|
296
|
+
projectRoot,
|
|
297
|
+
configs: eslintConfigs
|
|
298
|
+
});
|
|
299
|
+
const enhancerResults = await applyEnhancers({
|
|
300
|
+
results,
|
|
301
|
+
enhancers: [enhanceHuskyEnhancer(packageManager), enginesEnhancer],
|
|
302
|
+
projectRoot
|
|
303
|
+
});
|
|
304
|
+
await liftPackage(deepmerge.all([{
|
|
305
|
+
projectRoot,
|
|
306
|
+
scripts,
|
|
307
|
+
tags,
|
|
308
|
+
dependencies,
|
|
309
|
+
devDependencies,
|
|
310
|
+
packageManager
|
|
311
|
+
}, enhancerResults, eslintResults]));
|
|
312
|
+
return enhancerResults;
|
|
313
|
+
}
|
|
314
|
+
|
|
172
315
|
function validate(options) {
|
|
173
316
|
const schema = joi.object().required().keys({
|
|
174
317
|
projectRoot: joi.string().required(),
|
|
@@ -790,7 +933,7 @@ function defineBadges (packageName, visibility) {
|
|
|
790
933
|
return {
|
|
791
934
|
consumer: _objectSpread2({}, 'Public' === visibility && {
|
|
792
935
|
npm: {
|
|
793
|
-
img: `https://img.shields.io/npm/v/${packageName}
|
|
936
|
+
img: `https://img.shields.io/npm/v/${packageName}?logo=npm`,
|
|
794
937
|
text: 'npm',
|
|
795
938
|
link: `https://www.npmjs.com/package/${packageName}`
|
|
796
939
|
}
|
|
@@ -831,7 +974,7 @@ async function buildDetails ({
|
|
|
831
974
|
projectName
|
|
832
975
|
});
|
|
833
976
|
const pathToCreatedSrcDirectory = await makeDir(`${projectRoot}/src`);
|
|
834
|
-
const [rollupResults] = await Promise.all([scaffold$
|
|
977
|
+
const [rollupResults] = await Promise.all([scaffold$1({
|
|
835
978
|
projectRoot,
|
|
836
979
|
dialect,
|
|
837
980
|
projectType: projectTypes.PACKAGE
|
|
@@ -1025,7 +1168,7 @@ async function scaffoldCliType ({
|
|
|
1025
1168
|
projectRoot,
|
|
1026
1169
|
dialect
|
|
1027
1170
|
}) {
|
|
1028
|
-
const rollupResults = await scaffold$
|
|
1171
|
+
const rollupResults = await scaffold$1({
|
|
1029
1172
|
projectRoot,
|
|
1030
1173
|
dialect,
|
|
1031
1174
|
projectType: projectTypes.CLI
|
|
@@ -1137,7 +1280,8 @@ async function scaffoldTesting ({
|
|
|
1137
1280
|
vcs,
|
|
1138
1281
|
unitTestFrameworks,
|
|
1139
1282
|
decisions,
|
|
1140
|
-
dialect
|
|
1283
|
+
dialect,
|
|
1284
|
+
pathWithinParent
|
|
1141
1285
|
}) {
|
|
1142
1286
|
const unitResults = unit ? await scaffoldUnitTesting({
|
|
1143
1287
|
projectRoot,
|
|
@@ -1145,7 +1289,8 @@ async function scaffoldTesting ({
|
|
|
1145
1289
|
vcs,
|
|
1146
1290
|
frameworks: unitTestFrameworks,
|
|
1147
1291
|
decisions,
|
|
1148
|
-
dialect
|
|
1292
|
+
dialect,
|
|
1293
|
+
pathWithinParent
|
|
1149
1294
|
}) : {};
|
|
1150
1295
|
return deepmerge({
|
|
1151
1296
|
devDependencies: [...(unit || integration ? ['@travi/any'] : [])],
|
|
@@ -1169,7 +1314,7 @@ async function scaffoldEslint ({
|
|
|
1169
1314
|
const ignores = deepmerge(ignore, {
|
|
1170
1315
|
directories: [`/${buildDirectory}/`]
|
|
1171
1316
|
});
|
|
1172
|
-
return scaffold$
|
|
1317
|
+
return scaffold$2({
|
|
1173
1318
|
scope,
|
|
1174
1319
|
projectRoot,
|
|
1175
1320
|
ignore: {
|
|
@@ -1294,7 +1439,8 @@ async function scaffoldVerification({
|
|
|
1294
1439
|
unitTestFrameworks,
|
|
1295
1440
|
decisions,
|
|
1296
1441
|
buildDirectory,
|
|
1297
|
-
eslintConfigs
|
|
1442
|
+
eslintConfigs,
|
|
1443
|
+
pathWithinParent
|
|
1298
1444
|
}) {
|
|
1299
1445
|
const [testingResults, huskyResults] = await Promise.all([scaffoldTesting({
|
|
1300
1446
|
projectRoot,
|
|
@@ -1303,8 +1449,9 @@ async function scaffoldVerification({
|
|
|
1303
1449
|
vcs,
|
|
1304
1450
|
unitTestFrameworks,
|
|
1305
1451
|
decisions,
|
|
1306
|
-
dialect
|
|
1307
|
-
|
|
1452
|
+
dialect,
|
|
1453
|
+
pathWithinParent
|
|
1454
|
+
}), scaffold$3({
|
|
1308
1455
|
projectRoot,
|
|
1309
1456
|
packageManager
|
|
1310
1457
|
})]);
|
|
@@ -1327,7 +1474,7 @@ async function scaffoldVerification({
|
|
|
1327
1474
|
return deepmerge.all([testingResults, lintingResults, huskyResults]);
|
|
1328
1475
|
}
|
|
1329
1476
|
|
|
1330
|
-
async function
|
|
1477
|
+
async function scaffolder (options) {
|
|
1331
1478
|
info('Initializing JavaScript project');
|
|
1332
1479
|
const {
|
|
1333
1480
|
projectRoot,
|
|
@@ -1393,6 +1540,7 @@ async function scaffold(options) {
|
|
|
1393
1540
|
tests,
|
|
1394
1541
|
unitTestFrameworks,
|
|
1395
1542
|
decisions,
|
|
1543
|
+
pathWithinParent,
|
|
1396
1544
|
buildDirectory: projectTypeResults.buildDirectory,
|
|
1397
1545
|
eslintConfigs: projectTypeResults.eslintConfigs
|
|
1398
1546
|
});
|
|
@@ -1425,7 +1573,7 @@ async function scaffold(options) {
|
|
|
1425
1573
|
projectName,
|
|
1426
1574
|
nodeVersion,
|
|
1427
1575
|
tests
|
|
1428
|
-
}), scaffold$
|
|
1576
|
+
}), scaffold$4({
|
|
1429
1577
|
projectRoot,
|
|
1430
1578
|
projectType,
|
|
1431
1579
|
configs,
|
|
@@ -1470,7 +1618,19 @@ async function scaffold(options) {
|
|
|
1470
1618
|
};
|
|
1471
1619
|
}
|
|
1472
1620
|
|
|
1621
|
+
async function test ({
|
|
1622
|
+
projectRoot
|
|
1623
|
+
}) {
|
|
1624
|
+
try {
|
|
1625
|
+
const stats = await promises.stat(`${projectRoot}/.nvmrc`);
|
|
1626
|
+
return stats.isFile();
|
|
1627
|
+
} catch (e) {
|
|
1628
|
+
if ('ENOENT' === e.code) return false;
|
|
1629
|
+
throw e;
|
|
1630
|
+
}
|
|
1631
|
+
}
|
|
1632
|
+
|
|
1473
1633
|
const questionNames = _objectSpread2(_objectSpread2({}, questionNames$2), questionNames$1);
|
|
1474
1634
|
|
|
1475
|
-
export { questionNames, scaffold, scaffoldUnitTesting };
|
|
1635
|
+
export { lift, questionNames, scaffolder as scaffold, scaffoldUnitTesting, test };
|
|
1476
1636
|
//# sourceMappingURL=index.es.js.map
|