@form8ion/javascript 2.2.0 → 3.1.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/README.md +23 -2
- package/example.js +25 -3
- package/lib/index.cjs.js +199 -4
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.es.js +201 -8
- package/lib/index.es.js.map +1 -1
- package/package.json +6 -7
package/README.md
CHANGED
|
@@ -45,7 +45,13 @@ $ npm install @form8ion/javascript --save
|
|
|
45
45
|
|
|
46
46
|
```javascript
|
|
47
47
|
const {dialects, projectTypes} = require('@form8ion/javascript-core');
|
|
48
|
-
const {
|
|
48
|
+
const {
|
|
49
|
+
scaffold: scaffoldJavaScript,
|
|
50
|
+
lift: liftJavascript,
|
|
51
|
+
test: thisIsAJavaScriptProject,
|
|
52
|
+
scaffoldUnitTesting,
|
|
53
|
+
questionNames
|
|
54
|
+
} = require('@form8ion/javascript');
|
|
49
55
|
```
|
|
50
56
|
|
|
51
57
|
#### Execute
|
|
@@ -53,9 +59,10 @@ const {scaffold: scaffoldJavaScript, scaffoldUnitTesting, questionNames} = requi
|
|
|
53
59
|
```javascript
|
|
54
60
|
(async () => {
|
|
55
61
|
const accountName = 'form8ion';
|
|
62
|
+
const projectRoot = process.cwd();
|
|
56
63
|
|
|
57
64
|
await scaffoldJavaScript({
|
|
58
|
-
projectRoot
|
|
65
|
+
projectRoot,
|
|
59
66
|
projectName: 'project-name',
|
|
60
67
|
visibility: 'Public',
|
|
61
68
|
license: 'MIT',
|
|
@@ -83,6 +90,20 @@ const {scaffold: scaffoldJavaScript, scaffoldUnitTesting, questionNames} = requi
|
|
|
83
90
|
}
|
|
84
91
|
});
|
|
85
92
|
|
|
93
|
+
if (await thisIsAJavaScriptProject({projectRoot})) {
|
|
94
|
+
await liftJavascript({
|
|
95
|
+
projectRoot,
|
|
96
|
+
configs: {eslint: {scope: '@foo'}},
|
|
97
|
+
results: {
|
|
98
|
+
dependencies: [],
|
|
99
|
+
devDependencies: [],
|
|
100
|
+
scripts: {},
|
|
101
|
+
eslintConfigs: [],
|
|
102
|
+
packageManager: 'npm'
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
86
107
|
await scaffoldUnitTesting({
|
|
87
108
|
projectRoot: process.cwd(),
|
|
88
109
|
frameworks: {
|
package/example.js
CHANGED
|
@@ -5,9 +5,10 @@ import stubbedFs from 'mock-fs';
|
|
|
5
5
|
import td from 'testdouble';
|
|
6
6
|
import 'validate-npm-package-name';
|
|
7
7
|
|
|
8
|
-
// remark-usage-ignore-next
|
|
8
|
+
// remark-usage-ignore-next 10
|
|
9
9
|
stubbedFs({
|
|
10
10
|
node_modules: stubbedFs.load(resolve(...[__dirname, 'node_modules'])),
|
|
11
|
+
'.nvmrc': 'v1.2.3',
|
|
11
12
|
lib: stubbedFs.load(resolve(...[__dirname, 'lib'])),
|
|
12
13
|
templates: stubbedFs.load(resolve(...[__dirname, 'templates']))
|
|
13
14
|
});
|
|
@@ -17,14 +18,21 @@ td.when(execa('. ~/.nvm/nvm.sh && nvm ls-remote --lts', {shell: true}))
|
|
|
17
18
|
td.when(execa('. ~/.nvm/nvm.sh && nvm install', {shell: true})).thenReturn({stdout: {pipe: () => undefined}});
|
|
18
19
|
|
|
19
20
|
const {dialects, projectTypes} = require('@form8ion/javascript-core');
|
|
20
|
-
const {
|
|
21
|
+
const {
|
|
22
|
+
scaffold: scaffoldJavaScript,
|
|
23
|
+
lift: liftJavascript,
|
|
24
|
+
test: thisIsAJavaScriptProject,
|
|
25
|
+
scaffoldUnitTesting,
|
|
26
|
+
questionNames
|
|
27
|
+
} = require('./lib/index.cjs');
|
|
21
28
|
|
|
22
29
|
// #### Execute
|
|
23
30
|
(async () => {
|
|
24
31
|
const accountName = 'form8ion';
|
|
32
|
+
const projectRoot = process.cwd();
|
|
25
33
|
|
|
26
34
|
await scaffoldJavaScript({
|
|
27
|
-
projectRoot
|
|
35
|
+
projectRoot,
|
|
28
36
|
projectName: 'project-name',
|
|
29
37
|
visibility: 'Public',
|
|
30
38
|
license: 'MIT',
|
|
@@ -52,6 +60,20 @@ const {scaffold: scaffoldJavaScript, scaffoldUnitTesting, questionNames} = requi
|
|
|
52
60
|
}
|
|
53
61
|
});
|
|
54
62
|
|
|
63
|
+
if (await thisIsAJavaScriptProject({projectRoot})) {
|
|
64
|
+
await liftJavascript({
|
|
65
|
+
projectRoot,
|
|
66
|
+
configs: {eslint: {scope: '@foo'}},
|
|
67
|
+
results: {
|
|
68
|
+
dependencies: [],
|
|
69
|
+
devDependencies: [],
|
|
70
|
+
scripts: {},
|
|
71
|
+
eslintConfigs: [],
|
|
72
|
+
packageManager: 'npm'
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
55
77
|
await scaffoldUnitTesting({
|
|
56
78
|
projectRoot: process.cwd(),
|
|
57
79
|
frameworks: {
|
package/lib/index.cjs.js
CHANGED
|
@@ -5,13 +5,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var languageScaffolderPrompts = require('@travi/language-scaffolder-prompts');
|
|
6
6
|
var deepmerge = require('deepmerge');
|
|
7
7
|
var javascriptCore = require('@form8ion/javascript-core');
|
|
8
|
-
var codecov = require('@form8ion/codecov');
|
|
9
|
-
var fs = require('fs');
|
|
10
8
|
var joi = require('joi');
|
|
11
9
|
var inquirer = require('inquirer');
|
|
12
10
|
var overridablePrompts = require('@form8ion/overridable-prompts');
|
|
11
|
+
var codecov = require('@form8ion/codecov');
|
|
12
|
+
var fs = require('fs');
|
|
13
|
+
var core = require('@form8ion/core');
|
|
13
14
|
var cliMessages = require('@travi/cli-messages');
|
|
14
|
-
var liftJavascript = require('@form8ion/lift-javascript');
|
|
15
15
|
var commitConvention = require('@form8ion/commit-convention');
|
|
16
16
|
var hoek = require('@hapi/hoek');
|
|
17
17
|
var execa = require('execa');
|
|
@@ -150,6 +150,42 @@ async function scaffoldCoverage ({
|
|
|
150
150
|
}));
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
function nycIsConfigured ({
|
|
154
|
+
projectRoot
|
|
155
|
+
}) {
|
|
156
|
+
return core.fileExists(`${projectRoot}/.nycrc`);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
async function removeNyc ({
|
|
160
|
+
projectRoot
|
|
161
|
+
}) {
|
|
162
|
+
await fs.promises.unlink(`${projectRoot}/.nycrc`);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
async function lift$2({
|
|
166
|
+
projectRoot
|
|
167
|
+
}) {
|
|
168
|
+
if (await nycIsConfigured({
|
|
169
|
+
projectRoot
|
|
170
|
+
})) {
|
|
171
|
+
const [c8Results] = await Promise.all([scaffoldC8({
|
|
172
|
+
projectRoot
|
|
173
|
+
}), removeNyc({
|
|
174
|
+
projectRoot
|
|
175
|
+
})]);
|
|
176
|
+
return c8Results;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return {};
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
var coveragePlugin = /*#__PURE__*/Object.freeze({
|
|
183
|
+
__proto__: null,
|
|
184
|
+
scaffold: scaffoldCoverage,
|
|
185
|
+
lift: lift$2,
|
|
186
|
+
test: nycIsConfigured
|
|
187
|
+
});
|
|
188
|
+
|
|
153
189
|
const unitTestFrameworksSchema = joi__namespace.object().required().pattern(/^/, joi__namespace.object({
|
|
154
190
|
scaffolder: joi__namespace.func().arity(1).required()
|
|
155
191
|
}));
|
|
@@ -195,6 +231,157 @@ async function scaffoldUnitTesting ({
|
|
|
195
231
|
}, framework, coverage]);
|
|
196
232
|
}
|
|
197
233
|
|
|
234
|
+
async function applyEnhancers ({
|
|
235
|
+
results,
|
|
236
|
+
enhancers = {},
|
|
237
|
+
projectRoot
|
|
238
|
+
}) {
|
|
239
|
+
cliMessages.info('Applying Enhancers');
|
|
240
|
+
return Object.values(enhancers).reduce(async (acc, enhancer) => {
|
|
241
|
+
if (await enhancer.test({
|
|
242
|
+
projectRoot
|
|
243
|
+
})) {
|
|
244
|
+
const previousResults = await acc;
|
|
245
|
+
return deepmerge__default["default"](previousResults, await enhancer.lift({
|
|
246
|
+
results: previousResults,
|
|
247
|
+
projectRoot
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return acc;
|
|
252
|
+
}, results);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
async function test$1({
|
|
256
|
+
projectRoot
|
|
257
|
+
}) {
|
|
258
|
+
const {
|
|
259
|
+
engines
|
|
260
|
+
} = JSON.parse(await fs.promises.readFile(`${projectRoot}/package.json`, 'utf8'));
|
|
261
|
+
return !!(engines !== null && engines !== void 0 && engines.node);
|
|
262
|
+
}
|
|
263
|
+
async function lift$1({
|
|
264
|
+
projectRoot
|
|
265
|
+
}) {
|
|
266
|
+
const {
|
|
267
|
+
name
|
|
268
|
+
} = JSON.parse(await fs.promises.readFile(`${projectRoot}/package.json`, 'utf8'));
|
|
269
|
+
return {
|
|
270
|
+
devDependencies: ['ls-engines'],
|
|
271
|
+
scripts: {
|
|
272
|
+
'lint:engines': 'ls-engines'
|
|
273
|
+
},
|
|
274
|
+
badges: {
|
|
275
|
+
consumer: {
|
|
276
|
+
node: {
|
|
277
|
+
img: `https://img.shields.io/node/v/${name}?logo=node.js`,
|
|
278
|
+
text: 'node'
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
var enginesEnhancer = /*#__PURE__*/Object.freeze({
|
|
286
|
+
__proto__: null,
|
|
287
|
+
test: test$1,
|
|
288
|
+
lift: lift$1
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
function enhanceHuskyEnhancer(packageManager) {
|
|
292
|
+
return {
|
|
293
|
+
test: husky.test,
|
|
294
|
+
lift: ({
|
|
295
|
+
projectRoot,
|
|
296
|
+
results
|
|
297
|
+
}) => husky.lift({
|
|
298
|
+
projectRoot,
|
|
299
|
+
results,
|
|
300
|
+
packageManager
|
|
301
|
+
})
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
async function liftPackage ({
|
|
306
|
+
projectRoot,
|
|
307
|
+
scripts,
|
|
308
|
+
tags,
|
|
309
|
+
dependencies,
|
|
310
|
+
devDependencies,
|
|
311
|
+
packageManager
|
|
312
|
+
}) {
|
|
313
|
+
if (scripts || tags) {
|
|
314
|
+
cliMessages.info('Updating `package.json`', {
|
|
315
|
+
level: 'secondary'
|
|
316
|
+
});
|
|
317
|
+
const pathToPackageJson = `${projectRoot}/package.json`;
|
|
318
|
+
const existingPackageJsonContents = JSON.parse(await fs.promises.readFile(pathToPackageJson, 'utf8'));
|
|
319
|
+
await fs.promises.writeFile(pathToPackageJson, JSON.stringify(_objectSpread2(_objectSpread2({}, existingPackageJsonContents), {}, {
|
|
320
|
+
scripts: _objectSpread2(_objectSpread2({}, existingPackageJsonContents.scripts), scripts)
|
|
321
|
+
}, tags && {
|
|
322
|
+
keywords: existingPackageJsonContents.keywords ? [...existingPackageJsonContents.keywords, ...tags] : tags
|
|
323
|
+
}), null, 2));
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
cliMessages.info('Installing dependencies');
|
|
327
|
+
await javascriptCore.installDependencies(dependencies || [], javascriptCore.PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
328
|
+
await javascriptCore.installDependencies([...(devDependencies || [])], javascriptCore.DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
async function resolvePackageManager ({
|
|
332
|
+
projectRoot,
|
|
333
|
+
packageManager
|
|
334
|
+
}) {
|
|
335
|
+
if (packageManager) return packageManager;
|
|
336
|
+
|
|
337
|
+
if (await core.fileExists(`${projectRoot}/package-lock.json`)) {
|
|
338
|
+
return javascriptCore.packageManagers.NPM;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (await core.fileExists(`${projectRoot}/yarn.lock`)) {
|
|
342
|
+
return javascriptCore.packageManagers.YARN;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
throw new Error('Package-manager could not be determined');
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
async function lift ({
|
|
349
|
+
projectRoot,
|
|
350
|
+
results
|
|
351
|
+
}) {
|
|
352
|
+
cliMessages.info('Lifting JavaScript-specific details');
|
|
353
|
+
const {
|
|
354
|
+
scripts,
|
|
355
|
+
tags,
|
|
356
|
+
eslintConfigs,
|
|
357
|
+
dependencies,
|
|
358
|
+
devDependencies,
|
|
359
|
+
packageManager: manager
|
|
360
|
+
} = results;
|
|
361
|
+
const packageManager = await resolvePackageManager({
|
|
362
|
+
projectRoot,
|
|
363
|
+
packageManager: manager
|
|
364
|
+
});
|
|
365
|
+
const eslintResults = await eslint.lift({
|
|
366
|
+
projectRoot,
|
|
367
|
+
configs: eslintConfigs
|
|
368
|
+
});
|
|
369
|
+
const enhancerResults = await applyEnhancers({
|
|
370
|
+
results,
|
|
371
|
+
enhancers: [enhanceHuskyEnhancer(packageManager), enginesEnhancer, coveragePlugin],
|
|
372
|
+
projectRoot
|
|
373
|
+
});
|
|
374
|
+
await liftPackage(deepmerge__default["default"].all([{
|
|
375
|
+
projectRoot,
|
|
376
|
+
scripts,
|
|
377
|
+
tags,
|
|
378
|
+
dependencies,
|
|
379
|
+
devDependencies,
|
|
380
|
+
packageManager
|
|
381
|
+
}, enhancerResults, eslintResults]));
|
|
382
|
+
return enhancerResults;
|
|
383
|
+
}
|
|
384
|
+
|
|
198
385
|
function validate(options) {
|
|
199
386
|
const schema = joi__namespace.object().required().keys({
|
|
200
387
|
projectRoot: joi__namespace.string().required(),
|
|
@@ -1477,7 +1664,7 @@ async function scaffolder (options) {
|
|
|
1477
1664
|
scripts: mergedContributions.scripts,
|
|
1478
1665
|
pathWithinParent
|
|
1479
1666
|
});
|
|
1480
|
-
const liftResults = await
|
|
1667
|
+
const liftResults = await lift({
|
|
1481
1668
|
results: deepmerge__default["default"]({
|
|
1482
1669
|
devDependencies: ['npm-run-all'],
|
|
1483
1670
|
packageManager
|
|
@@ -1501,9 +1688,17 @@ async function scaffolder (options) {
|
|
|
1501
1688
|
};
|
|
1502
1689
|
}
|
|
1503
1690
|
|
|
1691
|
+
async function test ({
|
|
1692
|
+
projectRoot
|
|
1693
|
+
}) {
|
|
1694
|
+
return core.fileExists(`${projectRoot}/.nvmrc`);
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1504
1697
|
const questionNames = _objectSpread2(_objectSpread2({}, languageScaffolderPrompts.questionNames), questionNames$1);
|
|
1505
1698
|
|
|
1699
|
+
exports.lift = lift;
|
|
1506
1700
|
exports.questionNames = questionNames;
|
|
1507
1701
|
exports.scaffold = scaffolder;
|
|
1508
1702
|
exports.scaffoldUnitTesting = scaffoldUnitTesting;
|
|
1703
|
+
exports.test = test;
|
|
1509
1704
|
//# sourceMappingURL=index.cjs.js.map
|