@form8ion/javascript 2.0.1 → 3.0.0

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.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, dialects, projectTypes, packageManagers } from '@form8ion/javascript-core';
4
- import { scaffold as scaffold$1 } from '@form8ion/codecov';
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
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 { warn, info } from '@travi/cli-messages';
10
- import { lift } from '@form8ion/lift-javascript';
11
- import { scaffold as scaffold$5 } from '@form8ion/commit-convention';
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$2 } from '@form8ion/rollup';
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
- if (enumerableOnly) {
33
- symbols = symbols.filter(function (sym) {
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] != null ? arguments[i] : {};
47
-
48
- if (i % 2) {
49
- ownKeys(Object(source), true).forEach(function (key) {
50
- _defineProperty(target, key, source[key]);
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$1({
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}.svg`,
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$2({
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$2({
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$3({
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
- }), scaffold$4({
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 scaffold(options) {
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$5({
1576
+ }), scaffold$4({
1429
1577
  projectRoot,
1430
1578
  projectType,
1431
1579
  configs,
@@ -1470,7 +1618,13 @@ async function scaffold(options) {
1470
1618
  };
1471
1619
  }
1472
1620
 
1621
+ async function test ({
1622
+ projectRoot
1623
+ }) {
1624
+ return fileExists(`${projectRoot}/.nvmrc`);
1625
+ }
1626
+
1473
1627
  const questionNames = _objectSpread2(_objectSpread2({}, questionNames$2), questionNames$1);
1474
1628
 
1475
- export { questionNames, scaffold, scaffoldUnitTesting };
1629
+ export { lift, questionNames, scaffolder as scaffold, scaffoldUnitTesting, test };
1476
1630
  //# sourceMappingURL=index.es.js.map