@loopback/cli 4.1.0 → 4.1.3

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.
@@ -8,7 +8,6 @@ const BaseGenerator = require('../../lib/base-generator');
8
8
  const {updateFileHeaders} = require('./header');
9
9
  const {spdxLicenseList, updateLicense} = require('./license');
10
10
  const g = require('../../lib/globalize');
11
- const _ = require('lodash');
12
11
  const chalk = require('chalk');
13
12
  const autocomplete = require('inquirer-autocomplete-prompt');
14
13
 
@@ -77,19 +76,19 @@ module.exports = class CopyrightGenerator extends BaseGenerator {
77
76
 
78
77
  async promptOwnerAndLicense() {
79
78
  const pkgFile = this.destinationPath('package.json');
80
- const pkg = this.fs.readJSON(this.destinationPath('package.json'));
81
- if (pkg == null) {
79
+ if (!this.existsDestination('package.json')) {
82
80
  this.exit(`${pkgFile} does not exist.`);
83
81
  return;
84
82
  }
85
- this.packageJson = pkg;
86
- let author = _.get(pkg, 'author');
83
+ let author = this.packageJson.get('author');
87
84
  if (typeof author === 'object') {
88
85
  author = author.name;
89
86
  }
90
87
  const owner =
91
- this.options.copyrightOwner || _.get(pkg, 'copyright.owner', author);
92
- let license = this.options.license || _.get(pkg, 'license');
88
+ this.options.copyrightOwner ||
89
+ this.packageJson.get('copyright.owner') ||
90
+ author;
91
+ let license = this.options.license || this.packageJson.get('license');
93
92
  const licenses = [...this.licenseList];
94
93
  if (license != null) {
95
94
  // find the matching license by id and move it to the front of the list
@@ -86,13 +86,12 @@ async function updateLicense(projectRoot, pkg, options) {
86
86
  if (typeof licenseId === 'object') {
87
87
  licenseId = licenseId.id;
88
88
  }
89
- pkg.license = licenseId;
90
- pkg['copyright.owner'] = options.copyrightOwner;
91
- await fs.writeJSON(path.join(projectRoot, 'package.json'), pkg);
89
+ pkg.set('license', licenseId);
90
+ pkg.set('copyright.owner', options.copyrightOwner);
92
91
  await fs.write(
93
92
  path.join(projectRoot, 'LICENSE'),
94
93
  renderLicense({
95
- name: pkg.name,
94
+ name: pkg.get('name'),
96
95
  owner: options.copyrightOwner,
97
96
  license: options.license,
98
97
  years: await getYears(projectRoot),
@@ -26,7 +26,7 @@ which exports this provider with a binding key of `extension-starter.timer`. You
26
26
  can learn more about components in the
27
27
  [related resources section](#related-resources).
28
28
 
29
- This provider makes availble to your application a timer function which given a
29
+ This provider makes available to your application a timer function which given a
30
30
  start time _(given as an array [seconds, nanoseconds])_ can give you a total
31
31
  time elapsed since the start in milliseconds. The timer can also start timing if
32
32
  no start time is given. This is used by LogComponent to allow a user to time a
@@ -58,7 +58,7 @@ import {ExtensionStarterBindings} from 'HelloExtensions';
58
58
  const key = ExtensionStarterBindings.LOG_ACTION;
59
59
  ```
60
60
 
61
- LogProvider gives us a seuqence action and a `startTimer` function. In order to
61
+ LogProvider gives us a sequence action and a `startTimer` function. In order to
62
62
  use the sequence action, you must define your own sequence as shown below.
63
63
 
64
64
  **Example: Sequence**
@@ -5,6 +5,7 @@
5
5
 
6
6
  'use strict';
7
7
 
8
+ const _ = require('lodash');
8
9
  const Generator = require('yeoman-generator');
9
10
  const chalk = require('chalk');
10
11
  const {StatusConflicter, readTextFromStdin} = require('./utils');
@@ -15,6 +16,8 @@ const updateIndex = require('./update-index');
15
16
  const {checkLoopBackProject} = require('./version-helper');
16
17
  const g = require('./globalize');
17
18
 
19
+ _.extend(Generator.prototype, require('yeoman-generator/lib/actions/install'));
20
+
18
21
  const supportedPackageManagers = ['npm', 'yarn'];
19
22
 
20
23
  debug('Is stdin interactive (isTTY)?', process.stdin.isTTY);
@@ -47,10 +50,9 @@ module.exports = class BaseGenerator extends Generator {
47
50
  constructor(args, opts) {
48
51
  super(args, opts);
49
52
  debug('Initializing generator', this.constructor.name);
50
- this.conflicter = new StatusConflicter(
51
- this.env.adapter,
52
- this.options.force,
53
- );
53
+ this.conflicter = new StatusConflicter(this.env.adapter, {
54
+ force: this.options.force,
55
+ });
54
56
  this._setupGenerator();
55
57
  }
56
58
 
@@ -479,14 +481,15 @@ module.exports = class BaseGenerator extends Generator {
479
481
 
480
482
  // Check all files being generated to ensure they succeeded
481
483
  _isGenerationSuccessful() {
482
- const generationStatus = !!Object.entries(
483
- this.conflicter.generationStatus,
484
- ).find(([key, val]) => {
485
- // If a file was modified, update the indexes and say stuff about it
486
- return val !== 'skip' && val !== 'identical';
487
- });
488
- debug(`Generation status: ${generationStatus}`);
489
- return generationStatus;
484
+ // const generationStatus = !!Object.entries(
485
+ // this.conflicter.generationStatus,
486
+ // ).find(([key, val]) => {
487
+ // // If a file was modified, update the indexes and say stuff about it
488
+ // return val !== 'skip' && val !== 'identical';
489
+ // });
490
+ // debug(`Generation status: ${generationStatus}`);
491
+ // return generationStatus;
492
+ return true; // FixMe: Conflicter does not work
490
493
  }
491
494
 
492
495
  async _updateIndexFile(dir, file) {
package/lib/debug.js CHANGED
@@ -12,5 +12,5 @@ const debug = require('debug');
12
12
  * @param {String=} scope The scope to use for the debug statement.
13
13
  */
14
14
  module.exports = function (scope) {
15
- return debug(`loopback:cli${scope ? `:${scope}` : ''}`);
15
+ return debug('loopback:cli').extend(scope);
16
16
  };
@@ -96,7 +96,7 @@ module.exports = class ProjectGenerator extends BaseGenerator {
96
96
  * from files that have it during project generation.
97
97
  */
98
98
  _setupRenameTransformer() {
99
- this.registerTransformStream(utils.renameEJS());
99
+ this.queueTransformStream(utils.renameEJS());
100
100
  }
101
101
 
102
102
  async setOptions() {
package/lib/utils.js CHANGED
@@ -23,7 +23,7 @@ const toVarName = require('change-case').camelCase;
23
23
  const pluralize = require('pluralize');
24
24
  const urlSlug = require('url-slug');
25
25
  const validate = require('validate-npm-package-name');
26
- const Conflicter = require('yeoman-generator/lib/util/conflicter');
26
+ const Conflicter = require('yeoman-environment/conflicter');
27
27
  const connectors = require('./connectors.json');
28
28
  const tsquery = require('./ast-helper');
29
29
  const stringifyObject = require('stringify-object');
@@ -300,8 +300,8 @@ exports.validateUrlSlug = function (name) {
300
300
  * Extends conflicter so that it keeps track of conflict status
301
301
  */
302
302
  exports.StatusConflicter = class StatusConflicter extends Conflicter {
303
- constructor(adapter, force) {
304
- super(adapter, force);
303
+ constructor(adapter, opts) {
304
+ super(adapter, opts);
305
305
  this.generationStatus = {}; // keeps track of file conflict history
306
306
  }
307
307
 
@@ -587,7 +587,7 @@ exports.getInterceptorFileName = function (interceptorName) {
587
587
  *
588
588
  * Returns the connector property for the datasource file
589
589
  * @param {string} datasourcesDir path for sources
590
- * @param {string} dataSourceClass class name for the datasoure
590
+ * @param {string} dataSourceClass class name for the datasource
591
591
  */
592
592
  exports.getDataSourceConnectorName = function (
593
593
  datasourcesDir,
@@ -606,7 +606,7 @@ exports.getDataSourceConnectorName = function (
606
606
  * connectorType supplied for the given connector name
607
607
  * @param {string} connectorType single or a comma separated string array
608
608
  * @param {string} datasourcesDir path for sources
609
- * @param {string} dataSourceClass class name for the datasoure
609
+ * @param {string} dataSourceClass class name for the datasource
610
610
  */
611
611
  exports.isConnectorOfType = function (
612
612
  connectorType,
@@ -688,7 +688,7 @@ function readDataSourceConfigFromJSON(datasourcesDir, dataSourceClass) {
688
688
  *
689
689
  * returns the name property inside the datasource json file
690
690
  * @param {string} datasourcesDir path for sources
691
- * @param {string} dataSourceClass class name for the datasoure
691
+ * @param {string} dataSourceClass class name for the datasource
692
692
  */
693
693
  exports.getDataSourceName = function (datasourcesDir, dataSourceClass) {
694
694
  if (!dataSourceClass) {
@@ -35,7 +35,6 @@ function printVersions(log = console.log) {
35
35
  */
36
36
  async function checkDependencies(generator) {
37
37
  const pkg = generator.fs.readJSON(generator.destinationPath('package.json'));
38
- generator.packageJson = pkg;
39
38
 
40
39
  const isUpdate = generator.command === 'update';
41
40
  const pkgDeps = pkg
@@ -131,7 +130,7 @@ async function checkDependencies(generator) {
131
130
  return;
132
131
  }
133
132
 
134
- const originalCliVersion = generator.config.get('update') || '<unknown>';
133
+ const originalCliVersion = generator.config.get('version') || '<unknown>';
135
134
  generator.log(
136
135
  chalk.red(
137
136
  g.f(
@@ -169,7 +168,7 @@ async function checkDependencies(generator) {
169
168
  */
170
169
  function updateDependencies(generator) {
171
170
  const pkg =
172
- generator.packageJson ||
171
+ generator.packageJson.getAll() ||
173
172
  generator.fs.readJSON(generator.destinationPath('package.json'));
174
173
  const depUpdates = [];
175
174
  for (const d in templateDeps) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loopback/cli",
3
3
  "description": "Yeoman generator for LoopBack 4",
4
- "version": "4.1.0",
4
+ "version": "4.1.3",
5
5
  "keywords": [
6
6
  "LoopBack",
7
7
  "CLI",
@@ -39,9 +39,9 @@
39
39
  ".yo-rc.json"
40
40
  ],
41
41
  "dependencies": {
42
- "@lerna/project": "^5.1.1",
43
- "@openapi-contrib/openapi-schema-to-json-schema": "^3.1.2",
44
- "@phenomnomnominal/tsquery": "^4.2.0",
42
+ "@lerna/project": "^5.4.3",
43
+ "@openapi-contrib/openapi-schema-to-json-schema": "^3.2.0",
44
+ "@phenomnomnominal/tsquery": "^5.0.0",
45
45
  "camelcase-keys": "^7.0.2",
46
46
  "chalk": "^4.1.2",
47
47
  "change-case": "^4.1.2",
@@ -56,12 +56,12 @@
56
56
  "minimist": "^1.2.6",
57
57
  "mkdirp": "^1.0.4",
58
58
  "natural-compare": "^1.4.0",
59
- "pacote": "^13.6.0",
59
+ "pacote": "^13.6.2",
60
60
  "pluralize": "^8.0.0",
61
61
  "regenerate": "^1.4.2",
62
62
  "semver": "^7.3.7",
63
63
  "slash": "^3.0.0",
64
- "spdx-license-list": "^6.5.0",
64
+ "spdx-license-list": "^6.6.0",
65
65
  "stringify-object": "^3.3.0",
66
66
  "strong-globalize": "^6.0.5",
67
67
  "swagger-parser": "^10.0.3",
@@ -70,129 +70,131 @@
70
70
  "terminal-link": "^2.1.1",
71
71
  "tildify": "^2.0.0",
72
72
  "ts-morph": "^12.2.0",
73
- "typescript": "~4.7.3",
73
+ "typescript": "~4.7.4",
74
74
  "unicode-10.0.0": "^0.7.5",
75
75
  "untildify": "^4.0.0",
76
76
  "update-notifier": "^5.1.0",
77
77
  "url-slug": "^3.0.4",
78
78
  "validate-npm-package-name": "^4.0.0",
79
- "write-file-atomic": "^4.0.1",
80
- "yeoman-environment": "^2.10.3",
81
- "yeoman-generator": "^4.13.0"
79
+ "write-file-atomic": "^4.0.2",
80
+ "yeoman-environment": "^3.10.0",
81
+ "yeoman-generator": "^5.7.0"
82
82
  },
83
83
  "devDependencies": {
84
- "@loopback/build": "^9.0.1",
85
- "@loopback/eslint-config": "^13.0.1",
86
- "@loopback/testlab": "^5.0.1",
84
+ "@loopback/build": "^9.0.3",
85
+ "@loopback/eslint-config": "^13.0.3",
86
+ "@loopback/testlab": "^5.0.3",
87
87
  "@types/ejs": "^3.1.1",
88
88
  "@types/fs-extra": "^9.0.13",
89
- "@types/minimatch": "^3.0.5",
90
- "@types/node": "^14.18.21",
89
+ "@types/minimatch": "^5.1.0",
90
+ "@types/node": "^14.18.26",
91
+ "@types/yeoman-environment": "^2.10.8",
92
+ "@types/yeoman-generator": "^5.2.11",
91
93
  "loopback": "^3.28.0",
92
94
  "loopback-datasource-juggler": "^4.27.1",
93
95
  "mem-fs": "^2.2.1",
94
- "mem-fs-editor": "^9.4.0",
96
+ "mem-fs-editor": "^9.5.0",
95
97
  "mock-stdin": "^1.0.0",
96
98
  "rimraf": "^3.0.2",
97
- "sinon": "^11.1.2",
99
+ "sinon": "^14.0.0",
98
100
  "strong-globalize-cli": "7.1.0",
99
101
  "yeoman-assert": "^3.1.1",
100
- "yeoman-test": "^4.0.2"
102
+ "yeoman-test": "^6.3.0"
101
103
  },
102
104
  "config": {
103
105
  "templateDependencies": {
104
106
  "tslib": "^2.0.0",
105
107
  "@types/mocha": "^9.1.1",
106
- "@types/node": "^14.18.21",
108
+ "@types/node": "^14.18.26",
107
109
  "cross-spawn": "^7.0.3",
108
110
  "debug": "^4.3.4",
109
111
  "fs-extra": "^10.1.0",
110
112
  "mocha": "^10.0.0",
111
113
  "nyc": "^15.1.0",
112
- "prettier": "^2.6.2",
114
+ "prettier": "^2.7.1",
113
115
  "rimraf": "^3.0.2",
114
116
  "source-map-support": "^0.5.21",
115
- "typescript": "~4.7.3",
116
- "@loopback/authentication": "^9.0.1",
117
- "@loopback/boot": "^5.0.1",
118
- "@loopback/build": "^9.0.1",
119
- "@loopback/cli": "^4.1.0",
120
- "@loopback/context": "^5.0.1",
121
- "@loopback/core": "^4.0.1",
122
- "@loopback/metadata": "^5.0.1",
123
- "@loopback/openapi-spec-builder": "^5.0.1",
124
- "@loopback/openapi-v3": "^8.0.1",
125
- "@loopback/repository-json-schema": "^6.0.1",
126
- "@loopback/repository": "^5.0.1",
127
- "@loopback/rest": "^12.0.1",
128
- "@loopback/testlab": "^5.0.1",
129
- "@loopback/docs": "^5.1.0",
117
+ "typescript": "~4.7.4",
118
+ "@loopback/authentication": "^9.0.3",
119
+ "@loopback/boot": "^5.0.3",
120
+ "@loopback/build": "^9.0.3",
121
+ "@loopback/cli": "^4.1.3",
122
+ "@loopback/context": "^5.0.3",
123
+ "@loopback/core": "^4.0.3",
124
+ "@loopback/metadata": "^5.0.3",
125
+ "@loopback/openapi-spec-builder": "^5.0.3",
126
+ "@loopback/openapi-v3": "^8.0.3",
127
+ "@loopback/repository-json-schema": "^6.0.3",
128
+ "@loopback/repository": "^5.0.3",
129
+ "@loopback/rest": "^12.0.3",
130
+ "@loopback/testlab": "^5.0.3",
131
+ "@loopback/docs": "^5.1.2",
130
132
  "glob": "^8.0.3",
131
- "@loopback/example-hello-world": "^5.0.1",
132
- "@loopback/example-log-extension": "^5.0.1",
133
- "@loopback/example-rpc-server": "^5.0.1",
134
- "@loopback/example-todo": "^6.0.1",
135
- "@loopback/example-soap-calculator": "^5.0.1",
136
- "@loopback/service-proxy": "^5.0.1",
137
- "@loopback/http-caching-proxy": "^4.0.1",
138
- "@loopback/http-server": "^4.0.1",
139
- "@loopback/example-todo-list": "^6.0.1",
133
+ "@loopback/example-hello-world": "^5.0.3",
134
+ "@loopback/example-log-extension": "^5.0.3",
135
+ "@loopback/example-rpc-server": "^5.0.3",
136
+ "@loopback/example-todo": "^6.0.3",
137
+ "@loopback/example-soap-calculator": "^5.0.3",
138
+ "@loopback/service-proxy": "^5.0.3",
139
+ "@loopback/http-caching-proxy": "^4.0.3",
140
+ "@loopback/http-server": "^4.0.3",
141
+ "@loopback/example-todo-list": "^6.0.3",
140
142
  "@loopback/dist-util": "^0.4.0",
141
- "@loopback/rest-explorer": "^5.0.1",
142
- "@loopback/eslint-config": "^13.0.1",
143
+ "@loopback/rest-explorer": "^5.0.3",
144
+ "@loopback/eslint-config": "^13.0.3",
143
145
  "express-composition": "^1.1.0",
144
- "@loopback/example-express-composition": "^5.0.1",
145
- "@loopback/example-greeter-extension": "^5.0.1",
146
- "@loopback/booter-lb3app": "^4.0.1",
147
- "@loopback/example-lb3-application": "^5.0.1",
148
- "eslint": "^8.17.0",
149
- "eslint-plugin-mocha": "^10.0.5",
150
- "@loopback/example-greeting-app": "^5.0.1",
151
- "@loopback/example-context": "^5.0.1",
152
- "@typescript-eslint/eslint-plugin": "^5.27.1",
153
- "@typescript-eslint/parser": "^5.27.1",
154
- "eslint-plugin-eslint-plugin": "^4.2.0",
146
+ "@loopback/example-express-composition": "^5.0.3",
147
+ "@loopback/example-greeter-extension": "^5.0.3",
148
+ "@loopback/booter-lb3app": "^4.0.3",
149
+ "@loopback/example-lb3-application": "^5.0.3",
150
+ "eslint": "^8.22.0",
151
+ "eslint-plugin-mocha": "^10.1.0",
152
+ "@loopback/example-greeting-app": "^5.0.3",
153
+ "@loopback/example-context": "^5.0.3",
154
+ "@typescript-eslint/eslint-plugin": "^5.35.1",
155
+ "@typescript-eslint/parser": "^5.35.1",
156
+ "eslint-plugin-eslint-plugin": "^5.0.6",
155
157
  "eslint-config-prettier": "^8.5.0",
156
- "@loopback/repository-tests": "^0.21.1",
157
- "@loopback/health": "^0.11.1",
158
- "@loopback/authorization": "^0.12.1",
159
- "@loopback/rest-crud": "^0.15.0",
160
- "@loopback/security": "^0.8.1",
161
- "@loopback/authentication-passport": "^5.0.1",
162
- "@loopback/example-metrics-prometheus": "^0.10.1",
163
- "@loopback/metrics": "^0.11.1",
164
- "@loopback/model-api-builder": "^4.0.1",
165
- "@loopback/logging": "^0.9.1",
166
- "@loopback/example-access-control-migration": "^5.0.1",
167
- "@loopback/example-file-transfer": "^4.0.1",
168
- "@loopback/example-rest-crud": "^4.0.1",
169
- "@loopback/apiconnect": "^0.10.1",
170
- "@loopback/example-validation-app": "^4.0.1",
171
- "@loopback/cron": "^0.9.1",
172
- "@loopback/example-multi-tenancy": "^0.13.1",
173
- "@loopback/example-passport-login": "^4.0.1",
174
- "@loopback/authentication-jwt": "^0.12.1",
175
- "@loopback/context-explorer": "^0.8.1",
176
- "@loopback/express": "^5.0.1",
158
+ "@loopback/repository-tests": "^0.21.3",
159
+ "@loopback/health": "^0.11.3",
160
+ "@loopback/authorization": "^0.12.3",
161
+ "@loopback/rest-crud": "^0.15.2",
162
+ "@loopback/security": "^0.8.3",
163
+ "@loopback/authentication-passport": "^5.0.3",
164
+ "@loopback/example-metrics-prometheus": "^0.10.3",
165
+ "@loopback/metrics": "^0.11.3",
166
+ "@loopback/model-api-builder": "^4.0.3",
167
+ "@loopback/logging": "^0.9.3",
168
+ "@loopback/example-access-control-migration": "^5.0.3",
169
+ "@loopback/example-file-transfer": "^4.0.3",
170
+ "@loopback/example-rest-crud": "^4.0.3",
171
+ "@loopback/apiconnect": "^0.10.3",
172
+ "@loopback/example-validation-app": "^4.0.3",
173
+ "@loopback/cron": "^0.9.3",
174
+ "@loopback/example-multi-tenancy": "^0.13.3",
175
+ "@loopback/example-passport-login": "^4.0.3",
176
+ "@loopback/authentication-jwt": "^0.12.3",
177
+ "@loopback/context-explorer": "^0.8.3",
178
+ "@loopback/express": "^5.0.3",
177
179
  "@types/js-yaml": "^3.12.4",
178
180
  "js-yaml": "^3.13.1",
179
- "@loopback/example-todo-jwt": "^4.0.1",
180
- "@loopback/mock-oauth2-provider": "^0.6.1",
181
+ "@loopback/example-todo-jwt": "^4.0.3",
182
+ "@loopback/mock-oauth2-provider": "^0.6.3",
181
183
  "lodash": "^4.17.21",
182
- "@loopback/pooling": "^0.8.1",
183
- "@loopback/typeorm": "^0.7.1",
184
- "@loopback/example-graphql": "^0.7.1",
185
- "@loopback/graphql": "^0.8.1",
186
- "@loopback/filter": "^3.0.1",
187
- "@loopback/rest-msgpack": "^0.8.1",
188
- "@loopback/example-binding-resolution": "^0.7.1",
189
- "@loopback/example-webpack": "^0.8.1",
190
- "@loopback/example-socketio": "^0.6.1",
191
- "@loopback/socketio": "^0.6.1",
192
- "@loopback/monorepo": "^0.5.1",
193
- "@loopback/tsdocs": "^4.0.1",
194
- "@loopback/example-references-many": "^6.0.1"
184
+ "@loopback/pooling": "^0.8.3",
185
+ "@loopback/typeorm": "^0.7.3",
186
+ "@loopback/example-graphql": "^0.7.3",
187
+ "@loopback/graphql": "^0.8.3",
188
+ "@loopback/filter": "^3.0.3",
189
+ "@loopback/rest-msgpack": "^0.8.3",
190
+ "@loopback/example-binding-resolution": "^0.7.3",
191
+ "@loopback/example-webpack": "^0.8.3",
192
+ "@loopback/example-socketio": "^0.6.3",
193
+ "@loopback/socketio": "^0.6.3",
194
+ "@loopback/monorepo": "^0.5.3",
195
+ "@loopback/tsdocs": "^4.0.3",
196
+ "@loopback/example-references-many": "^6.0.3"
195
197
  }
196
198
  },
197
- "gitHead": "ccf7863d0639de966d6c6129b4aa94ba1dce2c33"
199
+ "gitHead": "296d9a9577fd058d1a2b2386087686cefa65a7a9"
198
200
  }