@form8ion/javascript 15.8.3 → 16.0.0-beta.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 +2 -2
- package/lib/index.js +66 -58
- package/lib/index.js.map +1 -1
- package/package.json +17 -17
- package/src/code-style/lifter.js +2 -2
- package/src/dependencies/installer.js +5 -5
- package/src/dependencies/installer.test.js +8 -22
- package/src/dependencies/processor.js +10 -8
- package/src/dependencies/processor.test.js +31 -18
- package/src/dependencies/remover.js +2 -3
- package/src/dependencies/remover.test.js +4 -2
- package/src/lifter.js +8 -5
- package/src/lifter.test.js +12 -11
- package/src/node-version/scaffolder.js +4 -5
- package/src/node-version/scaffolder.test.js +5 -4
- package/src/node-version/tasks.js +4 -6
- package/src/node-version/tasks.test.js +5 -8
- package/src/options/schemas.js +2 -1
- package/src/options/schemas.test.js +11 -5
- package/src/package/lifter.js +3 -4
- package/src/package/lifter.test.js +8 -4
- package/src/package/scaffolder.js +2 -3
- package/src/package/scaffolder.test.js +3 -1
- package/src/project-type/application/scaffolder.js +2 -3
- package/src/project-type/application/scaffolder.test.js +3 -5
- package/src/project-type/monorepo/scaffolder.js +2 -3
- package/src/project-type/monorepo/scaffolder.test.js +3 -6
- package/src/project-type/package/scaffolder.js +2 -3
- package/src/project-type/package/scaffolder.test.js +6 -5
- package/src/project-type/publishable/access-level.js +1 -1
- package/src/project-type/publishable/access-level.test.js +5 -3
- package/src/project-type/scaffolder.js +4 -4
- package/src/project-type/scaffolder.test.js +15 -16
- package/src/prompts/questions.js +3 -3
- package/src/prompts/questions.test.js +6 -5
- package/src/scaffolder.js +7 -8
- package/src/scaffolder.test.js +6 -5
- package/src/tester.js +2 -4
- package/src/tester.test.js +5 -8
package/README.md
CHANGED
|
@@ -175,7 +175,7 @@ $ npm test
|
|
|
175
175
|
|
|
176
176
|
[renovate-link]: https://renovatebot.com
|
|
177
177
|
|
|
178
|
-
[renovate-badge]: https://img.shields.io/badge/renovate-enabled-brightgreen.svg?logo=
|
|
178
|
+
[renovate-badge]: https://img.shields.io/badge/renovate-enabled-brightgreen.svg?logo=renovate
|
|
179
179
|
|
|
180
180
|
[github-actions-ci-link]: https://github.com/form8ion/javascript/actions?query=workflow%3A%22Node.js+CI%22+branch%3Amaster
|
|
181
181
|
|
|
@@ -197,6 +197,6 @@ $ npm test
|
|
|
197
197
|
|
|
198
198
|
[coverage-link]: https://codecov.io/github/form8ion/javascript
|
|
199
199
|
|
|
200
|
-
[coverage-badge]: https://img.shields.io/codecov/c/github/form8ion/javascript?logo=codecov
|
|
200
|
+
[coverage-badge]: https://img.shields.io/codecov/c/github/form8ion/javascript/master?logo=codecov
|
|
201
201
|
|
|
202
202
|
[slsa-badge]: https://slsa.dev/images/gh-badge-level2.svg
|
package/lib/index.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { questionNames as questionNames$2, questions } from '@travi/language-scaffolder-prompts';
|
|
2
2
|
import deepmerge from 'deepmerge';
|
|
3
|
-
import { warn, info, error } from '@travi/cli-messages';
|
|
4
3
|
import { scaffoldChoice, dialects as dialects$1, projectTypes as projectTypes$1, packageManagers as packageManagers$1, writePackageJson, PROD_DEPENDENCY_TYPE, DEV_DEPENDENCY_TYPE, mergeIntoExistingPackageJson } from '@form8ion/javascript-core';
|
|
5
4
|
import * as commitConventionPlugin from '@form8ion/commit-convention';
|
|
6
5
|
import { scaffold as scaffold$5 } from '@form8ion/commit-convention';
|
|
7
6
|
import joi from 'joi';
|
|
8
|
-
import { fileExists, directoryExists, optionsSchemas, validateOptions, fileTypes, loadConfigFile, writeConfigFile, applyEnhancers } from '@form8ion/core';
|
|
7
|
+
import { fileExists, directoryExists, optionsSchemas, validateOptions, visibilityOptions, fileTypes, loadConfigFile, writeConfigFile, applyEnhancers } from '@form8ion/core';
|
|
9
8
|
import { prompt as prompt$1 } from '@form8ion/overridable-prompts';
|
|
10
9
|
import { execa } from 'execa';
|
|
11
10
|
import npmConf from 'npm-conf';
|
|
@@ -145,7 +144,7 @@ const nameBasedConfigSchema = joi.object({
|
|
|
145
144
|
|
|
146
145
|
const registriesSchema = joi.object().pattern(joi.string(), joi.string().uri()).default({});
|
|
147
146
|
|
|
148
|
-
const visibilitySchema = joi.string().valid(
|
|
147
|
+
const visibilitySchema = joi.string().valid(...Object.keys(visibilityOptions)).required();
|
|
149
148
|
|
|
150
149
|
const projectNameSchema = joi.string().regex(/^@\w*\//, {invert: true}).required();
|
|
151
150
|
|
|
@@ -270,7 +269,8 @@ async function prompt(
|
|
|
270
269
|
vcs,
|
|
271
270
|
decisions,
|
|
272
271
|
configs,
|
|
273
|
-
pathWithinParent
|
|
272
|
+
pathWithinParent,
|
|
273
|
+
{logger}
|
|
274
274
|
) {
|
|
275
275
|
const npmConf$1 = npmConf();
|
|
276
276
|
|
|
@@ -279,7 +279,7 @@ async function prompt(
|
|
|
279
279
|
maybeLoggedInNpmUsername = (await execa('npm', ['whoami'])).stdout;
|
|
280
280
|
} catch (failedExecutionResult) {
|
|
281
281
|
if (!decisions[questionNames$1.SCOPE]) {
|
|
282
|
-
warn('No logged in user found with `npm whoami`. Login with `npm login` '
|
|
282
|
+
logger.warn('No logged in user found with `npm whoami`. Login with `npm login` '
|
|
283
283
|
+ 'to use your npm account name as the package scope default.');
|
|
284
284
|
}
|
|
285
285
|
}
|
|
@@ -657,8 +657,8 @@ $ ${packageManager} test
|
|
|
657
657
|
};
|
|
658
658
|
}
|
|
659
659
|
|
|
660
|
-
async function determineLatestVersionOf(nodeVersionCategory) {
|
|
661
|
-
info('Determining version of node', {level: 'secondary'});
|
|
660
|
+
async function determineLatestVersionOf(nodeVersionCategory, {logger}) {
|
|
661
|
+
logger.info('Determining version of node', {level: 'secondary'});
|
|
662
662
|
|
|
663
663
|
const {stdout: nvmLsOutput} = await execa(
|
|
664
664
|
`. ~/.nvm/nvm.sh && nvm ls-remote${('LTS' === nodeVersionCategory) ? ' --lts' : ''}`,
|
|
@@ -671,25 +671,25 @@ async function determineLatestVersionOf(nodeVersionCategory) {
|
|
|
671
671
|
return lsLine.match(/(v[0-9]+)\.[0-9]+\.[0-9]+/)[1];
|
|
672
672
|
}
|
|
673
673
|
|
|
674
|
-
function install(nodeVersionCategory) {
|
|
675
|
-
info(`Installing ${nodeVersionCategory} version of node using nvm`, {level: 'secondary'});
|
|
674
|
+
function install(nodeVersionCategory, {logger}) {
|
|
675
|
+
logger.info(`Installing ${nodeVersionCategory} version of node using nvm`, {level: 'secondary'});
|
|
676
676
|
|
|
677
677
|
const subprocess = execa('. ~/.nvm/nvm.sh && nvm install', {shell: true});
|
|
678
678
|
subprocess.stdout.pipe(process.stdout);
|
|
679
679
|
return subprocess;
|
|
680
680
|
}
|
|
681
681
|
|
|
682
|
-
async function scaffoldNodeVersion({projectRoot, nodeVersionCategory}) {
|
|
682
|
+
async function scaffoldNodeVersion({projectRoot, nodeVersionCategory}, {logger}) {
|
|
683
683
|
if (!nodeVersionCategory) return undefined;
|
|
684
684
|
|
|
685
685
|
const lowerCaseCategory = nodeVersionCategory.toLowerCase();
|
|
686
|
-
info(`Configuring ${lowerCaseCategory} version of node`);
|
|
686
|
+
logger.info(`Configuring ${lowerCaseCategory} version of node`);
|
|
687
687
|
|
|
688
|
-
const version = await determineLatestVersionOf(nodeVersionCategory);
|
|
688
|
+
const version = await determineLatestVersionOf(nodeVersionCategory, {logger});
|
|
689
689
|
|
|
690
690
|
await promises.writeFile(`${projectRoot}/.nvmrc`, version);
|
|
691
691
|
|
|
692
|
-
await install(nodeVersionCategory);
|
|
692
|
+
await install(nodeVersionCategory, {logger});
|
|
693
693
|
|
|
694
694
|
return version;
|
|
695
695
|
}
|
|
@@ -741,8 +741,8 @@ async function scaffoldPackage({
|
|
|
741
741
|
license,
|
|
742
742
|
author,
|
|
743
743
|
description
|
|
744
|
-
}) {
|
|
745
|
-
info('Configuring package.json');
|
|
744
|
+
}, {logger}) {
|
|
745
|
+
logger.info('Configuring package.json');
|
|
746
746
|
|
|
747
747
|
const packageName = determinePackageName(projectName, scope);
|
|
748
748
|
|
|
@@ -845,10 +845,11 @@ async function installDependencies(
|
|
|
845
845
|
dependencies,
|
|
846
846
|
dependenciesType,
|
|
847
847
|
projectRoot,
|
|
848
|
-
packageManager
|
|
848
|
+
packageManager,
|
|
849
|
+
{logger}
|
|
849
850
|
) {
|
|
850
851
|
if (dependencies.length) {
|
|
851
|
-
info(`Installing ${dependenciesType} dependencies`, {level: 'secondary'});
|
|
852
|
+
logger.info(`Installing ${dependenciesType} dependencies`, {level: 'secondary'});
|
|
852
853
|
|
|
853
854
|
await execa(
|
|
854
855
|
`. ~/.nvm/nvm.sh && nvm use && ${packageManager} ${
|
|
@@ -858,19 +859,22 @@ async function installDependencies(
|
|
|
858
859
|
}`,
|
|
859
860
|
{shell: true, cwd: projectRoot}
|
|
860
861
|
);
|
|
861
|
-
} else warn(`No ${dependenciesType} dependencies to install`);
|
|
862
|
+
} else logger.warn(`No ${dependenciesType} dependencies to install`);
|
|
862
863
|
}
|
|
863
864
|
|
|
864
|
-
async function removeDependencies({packageManager, dependencies}) {
|
|
865
|
+
async function removeDependencies({packageManager, dependencies}, {logger}) {
|
|
865
866
|
if (dependencies.length) {
|
|
866
|
-
info('Removing dependencies dependencies', {level: 'secondary'});
|
|
867
|
+
logger.info('Removing dependencies dependencies', {level: 'secondary'});
|
|
867
868
|
|
|
868
869
|
await execa(packageManager, ['remove', ...dependencies]);
|
|
869
870
|
}
|
|
870
871
|
}
|
|
871
872
|
|
|
872
|
-
async function processDependencies(
|
|
873
|
-
|
|
873
|
+
async function processDependencies(
|
|
874
|
+
{dependencies = {}, devDependencies, projectRoot, packageManager},
|
|
875
|
+
{logger}
|
|
876
|
+
) {
|
|
877
|
+
logger.info('Processing dependencies');
|
|
874
878
|
|
|
875
879
|
if (Array.isArray(devDependencies)) {
|
|
876
880
|
throw new Error(
|
|
@@ -885,12 +889,12 @@ async function processDependencies({dependencies = {}, devDependencies, projectR
|
|
|
885
889
|
const {javascript: {production = [], development = [], remove: dependenciesToRemove = []} = {}} = dependencies;
|
|
886
890
|
|
|
887
891
|
try {
|
|
888
|
-
await installDependencies(production, PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
889
|
-
await installDependencies(development, DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
|
|
890
|
-
await removeDependencies({packageManager, dependencies: dependenciesToRemove});
|
|
892
|
+
await installDependencies(production, PROD_DEPENDENCY_TYPE, projectRoot, packageManager, {logger});
|
|
893
|
+
await installDependencies(development, DEV_DEPENDENCY_TYPE, projectRoot, packageManager, {logger});
|
|
894
|
+
await removeDependencies({packageManager, dependencies: dependenciesToRemove}, {logger});
|
|
891
895
|
} catch (e) {
|
|
892
|
-
error('Failed to update dependencies');
|
|
893
|
-
error(e, {level: 'secondary'});
|
|
896
|
+
logger.error('Failed to update dependencies');
|
|
897
|
+
logger.error(e, {level: 'secondary'});
|
|
894
898
|
}
|
|
895
899
|
}
|
|
896
900
|
|
|
@@ -982,8 +986,8 @@ async function liftPackageJson({
|
|
|
982
986
|
packageManager,
|
|
983
987
|
vcs,
|
|
984
988
|
pathWithinParent
|
|
985
|
-
}) {
|
|
986
|
-
info('Updating `package.json`', {level: 'secondary'});
|
|
989
|
+
}, {logger}) {
|
|
990
|
+
logger.info('Updating `package.json`', {level: 'secondary'});
|
|
987
991
|
|
|
988
992
|
const existingPackageJsonContents = JSON.parse(await promises.readFile(`${projectRoot}/package.json`, 'utf-8'));
|
|
989
993
|
const {scripts: liftedScripts, dependencies: scriptDependencies} = liftScripts({
|
|
@@ -1008,11 +1012,11 @@ async function liftPackageJson({
|
|
|
1008
1012
|
devDependencies,
|
|
1009
1013
|
projectRoot,
|
|
1010
1014
|
packageManager
|
|
1011
|
-
});
|
|
1015
|
+
}, {logger});
|
|
1012
1016
|
}
|
|
1013
1017
|
|
|
1014
1018
|
function mapProjectVisibility({projectVisibility}) {
|
|
1015
|
-
return '
|
|
1019
|
+
return 'OSS' === projectVisibility ? 'public' : 'restricted';
|
|
1016
1020
|
}
|
|
1017
1021
|
|
|
1018
1022
|
function isScope(firstPart) {
|
|
@@ -1220,8 +1224,8 @@ async function scaffoldPackageProjectType({
|
|
|
1220
1224
|
dialect,
|
|
1221
1225
|
provideExample,
|
|
1222
1226
|
publishRegistry
|
|
1223
|
-
}) {
|
|
1224
|
-
info('Scaffolding Package Details');
|
|
1227
|
+
}, {logger}) {
|
|
1228
|
+
logger.info('Scaffolding Package Details');
|
|
1225
1229
|
|
|
1226
1230
|
const packageAccessLevel = mapProjectVisibility({projectVisibility: visibility});
|
|
1227
1231
|
const [detailsForBuild, publishableResults] = await Promise.all([
|
|
@@ -1289,15 +1293,15 @@ function liftPackage({projectRoot, packageDetails, configs}) {
|
|
|
1289
1293
|
}
|
|
1290
1294
|
|
|
1291
1295
|
async function projectIsPackage({
|
|
1292
|
-
packageDetails: {exports
|
|
1296
|
+
packageDetails: {exports, publishConfig, bin, private: projectMarkedPrivate}
|
|
1293
1297
|
}) {
|
|
1294
|
-
return !projectMarkedPrivate && (!!exports
|
|
1298
|
+
return !projectMarkedPrivate && (!!exports || (!!publishConfig && !bin));
|
|
1295
1299
|
}
|
|
1296
1300
|
|
|
1297
1301
|
const defaultBuildDirectory$1 = 'public';
|
|
1298
1302
|
|
|
1299
|
-
async function scaffoldApplication({projectRoot}) {
|
|
1300
|
-
info('Scaffolding Application Details');
|
|
1303
|
+
async function scaffoldApplication({projectRoot}, {logger}) {
|
|
1304
|
+
logger.info('Scaffolding Application Details');
|
|
1301
1305
|
|
|
1302
1306
|
await mergeIntoExistingPackageJson({projectRoot, config: {private: true}});
|
|
1303
1307
|
|
|
@@ -1320,8 +1324,8 @@ function projectIsApplication({packageDetails}) {
|
|
|
1320
1324
|
return !!packageDetails.private;
|
|
1321
1325
|
}
|
|
1322
1326
|
|
|
1323
|
-
async function scaffoldMonorepo({projectRoot}) {
|
|
1324
|
-
info('Scaffolding Monorepo Details');
|
|
1327
|
+
async function scaffoldMonorepo({projectRoot}, {logger}) {
|
|
1328
|
+
logger.info('Scaffolding Monorepo Details');
|
|
1325
1329
|
|
|
1326
1330
|
await mergeIntoExistingPackageJson({projectRoot, config: {private: true}});
|
|
1327
1331
|
|
|
@@ -1400,7 +1404,7 @@ async function scaffoldProjectType({
|
|
|
1400
1404
|
dialect,
|
|
1401
1405
|
provideExample,
|
|
1402
1406
|
publishRegistry
|
|
1403
|
-
}) {
|
|
1407
|
+
}, {logger}) {
|
|
1404
1408
|
switch (projectType) {
|
|
1405
1409
|
case projectTypes$1.PACKAGE:
|
|
1406
1410
|
return scaffoldPackageProjectType({
|
|
@@ -1415,9 +1419,9 @@ async function scaffoldProjectType({
|
|
|
1415
1419
|
dialect,
|
|
1416
1420
|
provideExample,
|
|
1417
1421
|
publishRegistry
|
|
1418
|
-
});
|
|
1422
|
+
}, {logger});
|
|
1419
1423
|
case projectTypes$1.APPLICATION:
|
|
1420
|
-
return scaffoldApplication({projectRoot});
|
|
1424
|
+
return scaffoldApplication({projectRoot}, {logger});
|
|
1421
1425
|
case projectTypes$1.CLI:
|
|
1422
1426
|
return scaffoldCli({
|
|
1423
1427
|
visibility,
|
|
@@ -1428,7 +1432,7 @@ async function scaffoldProjectType({
|
|
|
1428
1432
|
packageBundlers
|
|
1429
1433
|
});
|
|
1430
1434
|
case projectTypes$1.MONOREPO:
|
|
1431
|
-
return scaffoldMonorepo({projectRoot});
|
|
1435
|
+
return scaffoldMonorepo({projectRoot}, {logger});
|
|
1432
1436
|
case 'Other':
|
|
1433
1437
|
return {};
|
|
1434
1438
|
default:
|
|
@@ -1685,8 +1689,8 @@ async function scaffoldCodeStyle({
|
|
|
1685
1689
|
].filter(Boolean)));
|
|
1686
1690
|
}
|
|
1687
1691
|
|
|
1688
|
-
function liftCodeStyle(options) {
|
|
1689
|
-
return applyEnhancers({options, enhancers: [eslintPlugin]});
|
|
1692
|
+
function liftCodeStyle(options, dependencies) {
|
|
1693
|
+
return applyEnhancers({options, enhancers: [eslintPlugin], dependencies});
|
|
1690
1694
|
}
|
|
1691
1695
|
|
|
1692
1696
|
function codeStyleConfigured(options) {
|
|
@@ -1700,8 +1704,8 @@ var codeStylePlugin = /*#__PURE__*/Object.freeze({
|
|
|
1700
1704
|
test: codeStyleConfigured
|
|
1701
1705
|
});
|
|
1702
1706
|
|
|
1703
|
-
async function scaffoldJavascript(options) {
|
|
1704
|
-
info('Initializing JavaScript project');
|
|
1707
|
+
async function scaffoldJavascript(options, {logger}) {
|
|
1708
|
+
logger.info('Initializing JavaScript project');
|
|
1705
1709
|
|
|
1706
1710
|
const {
|
|
1707
1711
|
projectRoot,
|
|
@@ -1737,9 +1741,9 @@ async function scaffoldJavascript(options) {
|
|
|
1737
1741
|
provideExample,
|
|
1738
1742
|
packageManager,
|
|
1739
1743
|
dialect
|
|
1740
|
-
} = await prompt(ciServices, hosts, visibility, vcs, decisions, configs, pathWithinParent);
|
|
1744
|
+
} = await prompt(ciServices, hosts, visibility, vcs, decisions, configs, pathWithinParent, {logger});
|
|
1741
1745
|
|
|
1742
|
-
info('Writing project files', {level: 'secondary'});
|
|
1746
|
+
logger.info('Writing project files', {level: 'secondary'});
|
|
1743
1747
|
|
|
1744
1748
|
const {packageName} = await scaffoldPackage({
|
|
1745
1749
|
projectRoot,
|
|
@@ -1749,7 +1753,7 @@ async function scaffoldJavascript(options) {
|
|
|
1749
1753
|
license,
|
|
1750
1754
|
author,
|
|
1751
1755
|
description
|
|
1752
|
-
});
|
|
1756
|
+
}, {logger});
|
|
1753
1757
|
const projectTypeResults = await scaffoldProjectType({
|
|
1754
1758
|
projectType,
|
|
1755
1759
|
projectRoot,
|
|
@@ -1763,7 +1767,7 @@ async function scaffoldJavascript(options) {
|
|
|
1763
1767
|
dialect,
|
|
1764
1768
|
provideExample,
|
|
1765
1769
|
publishRegistry: configs.registries.publish
|
|
1766
|
-
});
|
|
1770
|
+
}, {logger});
|
|
1767
1771
|
const verificationResults = await scaffoldVerification({
|
|
1768
1772
|
projectRoot,
|
|
1769
1773
|
dialect,
|
|
@@ -1777,7 +1781,7 @@ async function scaffoldJavascript(options) {
|
|
|
1777
1781
|
pathWithinParent
|
|
1778
1782
|
});
|
|
1779
1783
|
const [nodeVersion, npmResults, dialectResults, codeStyleResults] = await Promise.all([
|
|
1780
|
-
scaffoldNodeVersion({projectRoot, nodeVersionCategory}),
|
|
1784
|
+
scaffoldNodeVersion({projectRoot, nodeVersionCategory}, {logger}),
|
|
1781
1785
|
scaffoldNpmConfiguration({projectType, projectRoot}),
|
|
1782
1786
|
scaffoldDialect({
|
|
1783
1787
|
dialect,
|
|
@@ -1913,8 +1917,8 @@ async function liftJavaScript({
|
|
|
1913
1917
|
pathWithinParent,
|
|
1914
1918
|
enhancers = {},
|
|
1915
1919
|
configs = {}
|
|
1916
|
-
}) {
|
|
1917
|
-
info('Lifting JavaScript-specific details');
|
|
1920
|
+
}, dependencies) {
|
|
1921
|
+
dependencies.logger.info('Lifting JavaScript-specific details');
|
|
1918
1922
|
|
|
1919
1923
|
const [packageManager, packageContents] = await Promise.all([
|
|
1920
1924
|
resolveCurrentPackageManager({projectRoot, packageManager: results.packageManager}),
|
|
@@ -1936,15 +1940,19 @@ async function liftJavaScript({
|
|
|
1936
1940
|
packageManagers,
|
|
1937
1941
|
registriesPlugin
|
|
1938
1942
|
},
|
|
1939
|
-
options: {packageManager, projectRoot, vcs, packageDetails: JSON.parse(packageContents), configs}
|
|
1943
|
+
options: {packageManager, projectRoot, vcs, packageDetails: JSON.parse(packageContents), configs},
|
|
1944
|
+
dependencies
|
|
1940
1945
|
});
|
|
1941
1946
|
|
|
1942
|
-
await liftPackageJson(
|
|
1947
|
+
await liftPackageJson(
|
|
1948
|
+
deepmerge.all([{projectRoot, packageManager, vcs, pathWithinParent}, enhancerResults]),
|
|
1949
|
+
dependencies
|
|
1950
|
+
);
|
|
1943
1951
|
|
|
1944
1952
|
return enhancerResults;
|
|
1945
1953
|
}
|
|
1946
1954
|
|
|
1947
|
-
async function projectUsesJavaScript({projectRoot}) {
|
|
1955
|
+
async function projectUsesJavaScript({projectRoot}, {logger}) {
|
|
1948
1956
|
const [nvmFound, jsPackageManagerFound] = await Promise.all([
|
|
1949
1957
|
nodeVersionMangerInUse({projectRoot}),
|
|
1950
1958
|
packageManagerInUse({projectRoot})
|
|
@@ -1952,7 +1960,7 @@ async function projectUsesJavaScript({projectRoot}) {
|
|
|
1952
1960
|
|
|
1953
1961
|
const jsProjectFound = nvmFound || jsPackageManagerFound;
|
|
1954
1962
|
|
|
1955
|
-
if (jsProjectFound) info('JavaScript Project Detected');
|
|
1963
|
+
if (jsProjectFound) logger.info('JavaScript Project Detected');
|
|
1956
1964
|
|
|
1957
1965
|
return jsProjectFound;
|
|
1958
1966
|
}
|