@form8ion/javascript 2.1.0 → 3.0.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 +164 -5
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.es.js +164 -7
- package/lib/index.es.js.map +1 -1
- package/package.json +5 -6
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
|
@@ -11,7 +11,9 @@ var joi = require('joi');
|
|
|
11
11
|
var inquirer = require('inquirer');
|
|
12
12
|
var overridablePrompts = require('@form8ion/overridable-prompts');
|
|
13
13
|
var cliMessages = require('@travi/cli-messages');
|
|
14
|
-
var
|
|
14
|
+
var eslint = require('@form8ion/eslint');
|
|
15
|
+
var core = require('@form8ion/core');
|
|
16
|
+
var husky = require('@form8ion/husky');
|
|
15
17
|
var commitConvention = require('@form8ion/commit-convention');
|
|
16
18
|
var hoek = require('@hapi/hoek');
|
|
17
19
|
var execa = require('execa');
|
|
@@ -24,8 +26,6 @@ var camelcase = require('camelcase');
|
|
|
24
26
|
var makeDir = require('make-dir');
|
|
25
27
|
var touch = require('touch');
|
|
26
28
|
var path = require('path');
|
|
27
|
-
var husky = require('@form8ion/husky');
|
|
28
|
-
var eslint = require('@form8ion/eslint');
|
|
29
29
|
|
|
30
30
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
31
31
|
|
|
@@ -195,6 +195,157 @@ async function scaffoldUnitTesting ({
|
|
|
195
195
|
}, framework, coverage]);
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
+
async function applyEnhancers ({
|
|
199
|
+
results,
|
|
200
|
+
enhancers = {},
|
|
201
|
+
projectRoot
|
|
202
|
+
}) {
|
|
203
|
+
cliMessages.info('Applying Enhancers');
|
|
204
|
+
return Object.values(enhancers).reduce(async (acc, enhancer) => {
|
|
205
|
+
if (await enhancer.test({
|
|
206
|
+
projectRoot
|
|
207
|
+
})) {
|
|
208
|
+
const previousResults = await acc;
|
|
209
|
+
return deepmerge__default["default"](previousResults, await enhancer.lift({
|
|
210
|
+
results: previousResults,
|
|
211
|
+
projectRoot
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return acc;
|
|
216
|
+
}, results);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async function test$1({
|
|
220
|
+
projectRoot
|
|
221
|
+
}) {
|
|
222
|
+
const {
|
|
223
|
+
engines
|
|
224
|
+
} = JSON.parse(await fs.promises.readFile(`${projectRoot}/package.json`, 'utf8'));
|
|
225
|
+
return !!(engines !== null && engines !== void 0 && engines.node);
|
|
226
|
+
}
|
|
227
|
+
async function lift$1({
|
|
228
|
+
projectRoot
|
|
229
|
+
}) {
|
|
230
|
+
const {
|
|
231
|
+
name
|
|
232
|
+
} = JSON.parse(await fs.promises.readFile(`${projectRoot}/package.json`, 'utf8'));
|
|
233
|
+
return {
|
|
234
|
+
devDependencies: ['ls-engines'],
|
|
235
|
+
scripts: {
|
|
236
|
+
'lint:engines': 'ls-engines'
|
|
237
|
+
},
|
|
238
|
+
badges: {
|
|
239
|
+
consumer: {
|
|
240
|
+
node: {
|
|
241
|
+
img: `https://img.shields.io/node/v/${name}?logo=node.js`,
|
|
242
|
+
text: 'node'
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
var enginesEnhancer = /*#__PURE__*/Object.freeze({
|
|
250
|
+
__proto__: null,
|
|
251
|
+
test: test$1,
|
|
252
|
+
lift: lift$1
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
async function liftPackage ({
|
|
256
|
+
projectRoot,
|
|
257
|
+
scripts,
|
|
258
|
+
tags,
|
|
259
|
+
dependencies,
|
|
260
|
+
devDependencies,
|
|
261
|
+
packageManager
|
|
262
|
+
}) {
|
|
263
|
+
if (scripts || tags) {
|
|
264
|
+
cliMessages.info('Updating `package.json`', {
|
|
265
|
+
level: 'secondary'
|
|
266
|
+
});
|
|
267
|
+
const pathToPackageJson = `${projectRoot}/package.json`;
|
|
268
|
+
const existingPackageJsonContents = JSON.parse(await fs.promises.readFile(pathToPackageJson, 'utf8'));
|
|
269
|
+
await fs.promises.writeFile(pathToPackageJson, JSON.stringify(_objectSpread2(_objectSpread2({}, existingPackageJsonContents), {}, {
|
|
270
|
+
scripts: _objectSpread2(_objectSpread2({}, existingPackageJsonContents.scripts), scripts)
|
|
271
|
+
}, tags && {
|
|
272
|
+
keywords: existingPackageJsonContents.keywords ? [...existingPackageJsonContents.keywords, ...tags] : tags
|
|
273
|
+
}), null, 2));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
cliMessages.info('Installing dependencies');
|
|
277
|
+
await javascriptCore.installDependencies(dependencies || [], javascriptCore.PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
278
|
+
await javascriptCore.installDependencies([...(devDependencies || [])], javascriptCore.DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
async function resolvePackageManager ({
|
|
282
|
+
projectRoot,
|
|
283
|
+
packageManager
|
|
284
|
+
}) {
|
|
285
|
+
if (packageManager) return packageManager;
|
|
286
|
+
|
|
287
|
+
if (await core.fileExists(`${projectRoot}/package-lock.json`)) {
|
|
288
|
+
return javascriptCore.packageManagers.NPM;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (await core.fileExists(`${projectRoot}/yarn.lock`)) {
|
|
292
|
+
return javascriptCore.packageManagers.YARN;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
throw new Error('Package-manager could not be determined');
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function enhanceHuskyEnhancer(packageManager) {
|
|
299
|
+
return {
|
|
300
|
+
test: husky.test,
|
|
301
|
+
lift: ({
|
|
302
|
+
projectRoot,
|
|
303
|
+
results
|
|
304
|
+
}) => husky.lift({
|
|
305
|
+
projectRoot,
|
|
306
|
+
results,
|
|
307
|
+
packageManager
|
|
308
|
+
})
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
async function lift ({
|
|
313
|
+
projectRoot,
|
|
314
|
+
results
|
|
315
|
+
}) {
|
|
316
|
+
cliMessages.info('Lifting JavaScript-specific details');
|
|
317
|
+
const {
|
|
318
|
+
scripts,
|
|
319
|
+
tags,
|
|
320
|
+
eslintConfigs,
|
|
321
|
+
dependencies,
|
|
322
|
+
devDependencies,
|
|
323
|
+
packageManager: manager
|
|
324
|
+
} = results;
|
|
325
|
+
const packageManager = await resolvePackageManager({
|
|
326
|
+
projectRoot,
|
|
327
|
+
packageManager: manager
|
|
328
|
+
});
|
|
329
|
+
const eslintResults = await eslint.lift({
|
|
330
|
+
projectRoot,
|
|
331
|
+
configs: eslintConfigs
|
|
332
|
+
});
|
|
333
|
+
const enhancerResults = await applyEnhancers({
|
|
334
|
+
results,
|
|
335
|
+
enhancers: [enhanceHuskyEnhancer(packageManager), enginesEnhancer],
|
|
336
|
+
projectRoot
|
|
337
|
+
});
|
|
338
|
+
await liftPackage(deepmerge__default["default"].all([{
|
|
339
|
+
projectRoot,
|
|
340
|
+
scripts,
|
|
341
|
+
tags,
|
|
342
|
+
dependencies,
|
|
343
|
+
devDependencies,
|
|
344
|
+
packageManager
|
|
345
|
+
}, enhancerResults, eslintResults]));
|
|
346
|
+
return enhancerResults;
|
|
347
|
+
}
|
|
348
|
+
|
|
198
349
|
function validate(options) {
|
|
199
350
|
const schema = joi__namespace.object().required().keys({
|
|
200
351
|
projectRoot: joi__namespace.string().required(),
|
|
@@ -816,7 +967,7 @@ function defineBadges (packageName, visibility) {
|
|
|
816
967
|
return {
|
|
817
968
|
consumer: _objectSpread2({}, 'Public' === visibility && {
|
|
818
969
|
npm: {
|
|
819
|
-
img: `https://img.shields.io/npm/v/${packageName}
|
|
970
|
+
img: `https://img.shields.io/npm/v/${packageName}?logo=npm`,
|
|
820
971
|
text: 'npm',
|
|
821
972
|
link: `https://www.npmjs.com/package/${packageName}`
|
|
822
973
|
}
|
|
@@ -1477,7 +1628,7 @@ async function scaffolder (options) {
|
|
|
1477
1628
|
scripts: mergedContributions.scripts,
|
|
1478
1629
|
pathWithinParent
|
|
1479
1630
|
});
|
|
1480
|
-
const liftResults = await
|
|
1631
|
+
const liftResults = await lift({
|
|
1481
1632
|
results: deepmerge__default["default"]({
|
|
1482
1633
|
devDependencies: ['npm-run-all'],
|
|
1483
1634
|
packageManager
|
|
@@ -1501,9 +1652,17 @@ async function scaffolder (options) {
|
|
|
1501
1652
|
};
|
|
1502
1653
|
}
|
|
1503
1654
|
|
|
1655
|
+
async function test ({
|
|
1656
|
+
projectRoot
|
|
1657
|
+
}) {
|
|
1658
|
+
return core.fileExists(`${projectRoot}/.nvmrc`);
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1504
1661
|
const questionNames = _objectSpread2(_objectSpread2({}, languageScaffolderPrompts.questionNames), questionNames$1);
|
|
1505
1662
|
|
|
1663
|
+
exports.lift = lift;
|
|
1506
1664
|
exports.questionNames = questionNames;
|
|
1507
1665
|
exports.scaffold = scaffolder;
|
|
1508
1666
|
exports.scaffoldUnitTesting = scaffoldUnitTesting;
|
|
1667
|
+
exports.test = test;
|
|
1509
1668
|
//# sourceMappingURL=index.cjs.js.map
|