@form8ion/javascript 2.2.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 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 liftJavascript = require('@form8ion/lift-javascript');
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(),
@@ -1477,7 +1628,7 @@ async function scaffolder (options) {
1477
1628
  scripts: mergedContributions.scripts,
1478
1629
  pathWithinParent
1479
1630
  });
1480
- const liftResults = await liftJavascript.lift({
1631
+ const liftResults = await lift({
1481
1632
  results: deepmerge__default["default"]({
1482
1633
  devDependencies: ['npm-run-all'],
1483
1634
  packageManager
@@ -1501,9 +1652,23 @@ async function scaffolder (options) {
1501
1652
  };
1502
1653
  }
1503
1654
 
1655
+ async function test ({
1656
+ projectRoot
1657
+ }) {
1658
+ try {
1659
+ const stats = await fs.promises.stat(`${projectRoot}/.nvmrc`);
1660
+ return stats.isFile();
1661
+ } catch (e) {
1662
+ if ('ENOENT' === e.code) return false;
1663
+ throw e;
1664
+ }
1665
+ }
1666
+
1504
1667
  const questionNames = _objectSpread2(_objectSpread2({}, languageScaffolderPrompts.questionNames), questionNames$1);
1505
1668
 
1669
+ exports.lift = lift;
1506
1670
  exports.questionNames = questionNames;
1507
1671
  exports.scaffold = scaffolder;
1508
1672
  exports.scaffoldUnitTesting = scaffoldUnitTesting;
1673
+ exports.test = test;
1509
1674
  //# sourceMappingURL=index.cjs.js.map